ruby-refactor について
ruby-refactorは、コミュニティが管理するRubyアプリケーションのリファクタリングガイドです。優先度付きのルールにより、開発者やコーディングエージェントの構造改善、条件分岐の簡素化、Rubyらしい記述を支援します。
主な機能
- 018カテゴリにわたる優先度付き45ルール
- 02構造分解と条件分岐の簡素化
- 03結合度と依存関係に関する指針
- 04Rubyの慣用表現と値オブジェクト
- 05Ruby 3.xの新しいパターン
活用シーン
- 01長いメソッドやクラスのリファクタリング
- 02入れ子の条件分岐の簡素化
- 03コンポーネント間の結合度の低減
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill ruby-refactorインストール後、Claude Code で/ruby-refactorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdmetadata.jsonREADME.mdassets/templates/_template.mdreferences/_sections.mdcond-consolidate-duplicates.mdcond-decompose-conditional.mdcond-guard-clauses.mdcond-null-object.mdcond-pattern-matching.mdcond-replace-with-polymorphism.mdcouple-avoid-class-methods-domain.mdcouple-composition-over-inheritance.mdcouple-dependency-injection.mdcouple-feature-envy.mdcouple-law-of-demeter.mdcouple-tell-dont-ask.mddata-define-immutable.mddata-encapsulate-collection.mddata-replace-data-clump.mddata-separate-query-command.mddata-value-object.mdidiom-block-yield.mdidiom-duck-typing.mdidiom-implicit-return.mdidiom-keyword-arguments.mdidiom-predicate-methods.mdidiom-prefer-enumerable.mdidiom-respond-to-missing.mdmodern-deconstruct-keys.md詳細
コミュニティによる Ruby リファクタリングのベストプラクティス
コミュニティがメンテナンスする、Ruby アプリケーション向けの包括的なリファクタリングガイドです。影響度順に優先順位付けされた 8 カテゴリ、45 個のルールを収録し、自動リファクタリングとコード生成を支援します。
適用するタイミング
以下の場合に、このガイドラインを参照してください。
- Ruby コードをリファクタリングして、複雑さを減らし、設計を改善する場合
- 大きな単位からメソッド、クラス、または値オブジェクトを抽出する場合
- 複雑な条件式や深いネストを簡素化する場合
- クラスやモジュール間の結合度を下げる場合
- 慣用的な Ruby のパターンや最新の Ruby 3.x の機能を取り入れる場合
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | 構造と分解 | CRITICAL | struct- |
| 2 | 条件式の簡素化 | CRITICAL | cond- |
| 3 | 結合度と依存関係 | HIGH | couple- |
| 4 | Ruby の慣用表現 | HIGH | idiom- |
| 5 | データと値オブジェクト | MEDIUM-HIGH | data- |
| 6 | デザインパターン | MEDIUM | pattern- |
| 7 | 最新の Ruby 3.x | MEDIUM | modern- |
| 8 | 命名と可読性 | LOW-MEDIUM | name- |
クイックリファレンス
1. 構造と分解(CRITICAL)
struct-extract-method- 長いメソッドを役割に特化した単位に抽出するstruct-extract-class- 単一責任を担うクラスを抽出するstruct-parameter-object- 引数が多いシグネチャにパラメーターオブジェクトを導入するstruct-compose-method- 同じ抽象度のメソッドを組み立てるstruct-replace-method-with-object- 複雑なメソッドをメソッドオブジェクトに置き換えるstruct-single-responsibility- クラスごとに変更理由を 1 つにするstruct-flatten-deep-nesting- 早期抽出によって深いネストを解消する
2. 条件式の簡素化(CRITICAL)
cond-guard-clauses- ネストした条件式をガード節に置き換えるcond-decompose-conditional- 複雑な真偽値式を名前付き述語に抽出するcond-replace-with-polymorphism- case/when をポリモーフィズムに置き換えるcond-null-object- nil チェックを Null Object に置き換えるcond-pattern-matching- 構造的な条件にパターンマッチングを使うcond-consolidate-duplicates- 重複する条件式の断片をまとめる
3. 結合度と依存関係(HIGH)
couple-law-of-demeter- 委譲を使ってデメテルの法則を適用するcouple-feature-envy- メソッドを移動してフィーチャー・エンヴィーを解消するcouple-dependency-injection- コンストラクターのデフォルト値を使って依存関係を注入するcouple-composition-over-inheritance- Mixin を合成されたオブジェクトに置き換えるcouple-tell-dont-ask- オブジェクトに状態を問い合わせず、何をするか伝えるcouple-avoid-class-methods-domain- ドメインロジックでクラスメソッドを避ける
4. Ruby のイディオム(高)
idiom-prefer-enumerable- アキュムレーターを使った each より map/select/reject を使うidiom-keyword-arguments- 明確さのためにキーワード引数を使うidiom-duck-typing- 型チェックには is_a? より respond_to? を使うidiom-predicate-methods- 真偽値を返すメソッド名には ? を付けるidiom-respond-to-missing- method_missing と respond_to_missing? は必ず組み合わせるidiom-block-yield- 単純なブロックには block.call より yield を使うidiom-implicit-return- 最後の式では明示的な return を省略する
5. データと値オブジェクト(中〜高)
data-value-object- プリミティブ型への執着を値オブジェクトで置き換えるdata-define-immutable- 不変の値オブジェクトには Data.define を使うdata-encapsulate-collection- コレクションをドメインメソッドの背後にカプセル化するdata-replace-data-clump- データの塊をグループ化したオブジェクトで置き換えるdata-separate-query-command- クエリメソッドとコマンドメソッドを分離する
6. デザインパターン(中)
pattern-strategy- アルゴリズムのバリエーションをストラテジーオブジェクトに切り出すpattern-factory- オブジェクト生成を抽象化するためにファクトリーメソッドを使うpattern-template-method- テンプレートメソッドでアルゴリズムの骨格を定義するpattern-decorator- デコレーターでオブジェクトをラップし、振る舞いを追加するpattern-null-object-protocol- 完全なプロトコルを備えたヌルオブジェクトを実装する
7. モダンな Ruby 3.x(中)
modern-pattern-matching- 構造的パターンマッチングには case/in を使うmodern-deconstruct-keys- カスタムのパターンマッチング用に deconstruct_keys を実装するmodern-endless-methods- 単純なメソッドにはエンドレスメソッド定義を使うmodern-hash-pattern-guard- ガード節とパターンマッチングを組み合わせるmodern-rightward-assignment- パイプライン式には右辺代入を使う
8. 命名と可読性(低〜中)
name-intention-revealing- 意図が伝わる名前を使うname-consistent-vocabulary- コードベース全体で概念ごとに一つの単語を使うname-avoid-abbreviations- 一般的な略語を除き、名前は省略せずに書くname-rename-to-remove-comments- コメントが不要になるように名前を変更する
使い方
詳しい説明とコード例については、個々のリファレンスファイルを参照してください。
- セクションの定義 - カテゴリー構成と影響レベル
- ルールのテンプレート - 新しいルールを追加するためのテンプレート
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応