121-java-object-oriented-design について
121-java-object-oriented-design は、焦点を絞ったオブジェクト指向設計の指針に基づき、Java コードをレビュー・リファクタリングするスキルです。SOLID、クラス設計、オブジェクト生成、メソッド、コードスメルを扱い、変更前後のコンパイル確認を求めます。
主な機能
- 01オブジェクト指向設計上の課題を分類
- 02対象を絞った設計資料を選択
- 03原則、クラス、コードスメルを網羅
- 04動作を維持する段階的なリファクタリング
- 05コンパイルと全体検証を必須化
活用シーン
- 01Java コードの設計上の問題をレビュー
- 02動作を維持してコードスメルを改善
- 03クラス、メソッド、オブジェクト生成の設計改善
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jabrena/ plinth --skill 121-java-object-oriented-designインストール後、Claude Code で/121-java-object-oriented-designを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/121-java-object-oriented-design-oop-concepts.md121-java-object-oriented-design-code-smells.md121-java-object-oriented-design-methods.md121-java-object-oriented-design-enums-annotations.md121-java-object-oriented-design-exceptions.md121-java-object-oriented-design-object-creation.md121-java-object-oriented-design-classes-interfaces.md121-java-object-oriented-design-principles.md詳細
Java のオブジェクト指向設計ガイドライン
リクエストと影響を受けるコードを評価したうえで選定した、焦点を絞ったオブジェクト指向設計のリファレンスを使用して、Java コードをレビューおよび改善します。
このスキルで扱う内容
- 基本的な設計原則(SOLID、DRY、YAGNI)
- クラスとインターフェースの設計:継承よりコンポジション、不変性、アクセス範囲の最小化、アクセサーメソッド
- OOP の中核概念:カプセル化、継承、ポリモーフィズム
- オブジェクト生成パターン:静的ファクトリメソッド、Builder、Singleton、依存性注入、不要なオブジェクトの回避
- OOD のコードの不吉な臭い:God Class、Feature Envy、Inappropriate Intimacy、Refused Bequest、Shotgun Surgery、Data Clumps
- メソッド設計:パラメーター検証、防御的コピー、慎重なシグネチャー設計、null より空のコレクション、Optional の使用
- 例外処理:チェック例外と実行時例外、標準例外、失敗を捉えるメッセージ、例外の握りつぶし禁止
範囲: まず該当する OOD の懸念事項を分類し、その懸念事項に必要な焦点を絞ったリファレンスだけを読み込みます。リファクタリングが複数の懸念事項にまたがる場合は、複数のリファレンスを読み込みます。
制約
OOD の変更を適用する前に、プロジェクトがコンパイルできることを確認してください。コンパイルに失敗した場合は、直ちに中止し、解決するまで先に進まないでください。改善を適用した後は、完全な検証を実行してください。
- 必須: 変更を適用する前に、
./mvnw compileまたはmvn compileを実行する - 安全性: コンパイルに失敗した場合は、直ちに中止し、先に進まない — コンパイル失敗は作業を阻止する条件です
- 検証: 改善を適用した後、
./mvnw clean verifyまたはmvn clean verifyを実行する - 段階的な情報開示: リファレンスを読む前に該当する OOD の懸念事項を分類し、その懸念事項に対応するリファレンスだけを読む
- 複数の懸念事項にまたがる変更: リクエストまたは診断されたコードの問題が複数の懸念事項にまたがる場合に限り、焦点を絞った複数のリファレンスを読む
- 動作の維持: 観察可能なビジネス動作を変えずに、焦点を絞った段階的なリファクタリングを適用する
- 段階的な安全性: 重要なリファクタリングごとにコンパイルし、検証でリグレッションが見つかった場合に変更を容易に取り消せるようにする
- 依存関係の安全性: リファクタリングによってインポート、依存関係、クラス間の関係、確立された契約が壊れないことを確認する
- 関連スキル: 専門的な型設計にはスキル 122、専門的な例外処理にはスキル 126 を使用してください。これらのトピックがより広範な OOD レビューの一部である場合に限り、重複するスキル 121 のリファレンスを使用してください
- エッジケース: リクエストの範囲が曖昧な場合は、変更を適用する前に中止し、確認の質問をしてください
- エッジケース: 必要な入力、ファイル、ツールが不足している場合は、不足しているものを報告し、セットアップ手順を案内して作業を進めるか確認してください
このスキルを使用する場面
- オブジェクト指向設計の観点から Java コードをレビューする
- オブジェクト指向設計の観点から Java コードをリファクタリングする
- オブジェクト指向設計の観点から Java コードを改善する
- Java コードにおける OOP 概念の誤用を修正する
- Java コードの不吉な臭いを特定して解消する
- Java コードのオブジェクト生成パターンを改善する
- Java コードのメソッド設計を改善する
- Java コードの例外処理を改善する
ワークフロー
- OOD の変更前にプロジェクトをコンパイルする
./mvnw compile または mvn compile を実行し、コンパイルに失敗した場合は直ちに中止します。
- コードを評価し、OOD の懸念事項を分類する
実装ガイダンスを読む前に、依頼内容と影響を受ける Java コードを分析します。関連する問題を、次の懸念事項の 1 つ以上に分類します。
- 基本原則:SOLID、DRY、または YAGNI への違反。
- 中核的な OOP 概念:カプセル化、継承、またはポリモーフィズムの誤用。
- コードの臭い:God Class、Feature Envy、Inappropriate Intimacy、Refused Bequest、Shotgun Surgery、または Data Clumps。
- オブジェクトの生成:ファクトリー、ビルダー、シングルトン、依存性注入、または不要なオブジェクト生成。
- クラスとインターフェース:アクセス可能性、public フィールド、可変性、コンポジション、または継承の設計。
- enum とアノテーション:int 定数、序数、ビットフィールド、序数によるインデックス指定、または
@Overrideの不足。 - メソッド:パラメーター検証、防御的コピー、シグネチャー、null コレクション、または
Optional。 - 例外:より広範な OOD レビューの一部となる例外契約。
依頼が型設計に特化したものであれば、スキル 122 を使用します。例外処理に特化したものであれば、スキル 126 を使用します。
- 該当する OOD リファレンスのみを読む
分類した懸念事項を、該当するリファレンスに対応付けます。
- SOLID、DRY、または YAGNI については、
references/121-java-object-oriented-design-principles.mdを読みます。 - カプセル化、継承、またはポリモーフィズムについては、
references/121-java-object-oriented-design-oop-concepts.mdを読みます。 - オブジェクト指向のコードの臭いについては、
references/121-java-object-oriented-design-code-smells.mdを読みます。 - ファクトリー、ビルダー、シングルトン、依存性注入、または不要なオブジェクトについては、
references/121-java-object-oriented-design-object-creation.mdを読みます。 - クラスとインターフェースの境界、アクセス可能性、可変性、コンポジション、または継承の設計については、
references/121-java-object-oriented-design-classes-interfaces.mdを読みます。 - enum、序数、ビットフィールド、enum の検索、または
@Overrideについては、references/121-java-object-oriented-design-enums-annotations.mdを読みます。 - メソッド契約、検証、防御的コピー、シグネチャー、コレクションの返却、または
Optionalについては、references/121-java-object-oriented-design-methods.mdを読みます。 - より広範な OOD レビューにおける例外契約については、
references/121-java-object-oriented-design-exceptions.mdを読みます。
複数の懸念事項にまたがるリファクタリングでは、必要なリファレンスをすべて読みます。ただし、無関係なリファレンスは読みません。
- 焦点を絞ったリファクタリングを適用する
影響度(CRITICAL、MAINTAINABILITY、FLEXIBILITY、または CODE_QUALITY)に基づいて所見に優先順位を付けます。観測可能な動作を維持しながら、診断した懸念事項それぞれに最適な、最小限のリファクタリングを適用します。
- クラスまたはメソッドを抽出し、責務を明確にします。
- 拡張性、インターフェース分離、依存性逆転のために、抽象化を導入または改善します。
- 置換可能性を保つように継承階層を修正するか、継承をコンポジションに置き換えます。
- Feature Envy を解消し、カプセル化を改善するために、振る舞いを適切な場所に移します。
- Data Clumps には、まとまりのある値オブジェクトまたはパラメーターオブジェクトを導入します。
- 外部に公開された状態を隠し、不要な結合を減らします。
変更は段階的に適用し、重要なリファクタリングのたびにコンパイルします。
- 完全なビルドで検証する
改善を適用した後、./mvnw clean verify または mvn clean verify を実行します。
- 適用した OOD の改善を報告する
影響度と懸念事項ごとに所見を報告します。使用したリファレンス、適用したリファクタリング、保守性・柔軟性・テスト容易性の向上、動作を維持した証拠、最終的なコンパイルおよびテスト結果を含めます。
参考資料
詳しいガイダンス、例、制約については、以下を参照してください。
- references/121-java-object-oriented-design-principles.md
- references/121-java-object-oriented-design-oop-concepts.md
- references/121-java-object-oriented-design-code-smells.md
- references/121-java-object-oriented-design-object-creation.md
- references/121-java-object-oriented-design-classes-interfaces.md
- references/121-java-object-oriented-design-enums-annotations.md
- references/121-java-object-oriented-design-methods.md
- references/121-java-object-oriented-design-exceptions.md