awesome-copilot/instructions/java.instructions_ja.md

6.3 KiB
Raw Blame History

description applyTo
Javaベースアプリケーション構築のガイドライン **/*.java

Java開発

全般指針

  • 最初に、静的解析ツールSonarQube、PMD、Checkstyleをプロジェクトセットアップに統合したいかユーザーに確認する。 統合する場合は、ツール選択と設定についてのガイダンスを提供する。
  • ユーザーが静的解析ツールを辞退するか、それらなしで進めたい場合は、以下で説明するベストプラクティス、バグパターン、コードスメル防止ガイドラインの実装を続ける。
  • 技術的負債を蓄積するのではなく、開発中にコードスメルを積極的に対処する。
  • 特定された問題をリファクタリングする際は、可読性、保守性、パフォーマンスに焦点を当てる。
  • IDE / コードエディターが報告する警告と提案を使用して、開発の早い段階で一般的なパターンを捉える。

ベストプラクティス

  • Records: 主にデータを格納することを意図したクラスDTO、イミュータブルなデータ構造については、従来のクラスの代わりにJava Recordsを使用すべき
  • パターンマッチング: instanceofswitch式でパターンマッチングを活用して、条件ロジックと型キャストを簡略化する。
  • 型推論: 可読性を向上させるためにローカル変数宣言ではvarを使用するが、式の右辺から型が明確に分かる場合にのみ使用する。
  • イミュータビリティ: イミュータブルなオブジェクトを優先する。可能な場合はクラスとフィールドをfinalにする。固定データにはList.of()/Map.of()のコレクションを使用する。イミュータブルなリストを作成するにはStream.toList()を使用する。
  • StreamとLambda: コレクション処理にはStreams APIとラムダ式を使用する。メソッド参照を活用するstream.map(Foo::toBar))。
  • null処理: nullを返したり受け入れたりすることを避ける。値が存在しない可能性がある場合はOptional<T>を使用し、equals()requireNonNull()などのObjectsユーティリティメソッドを使用する。

命名規則

  • GoogleのJavaスタイルガイドに従う
    • クラスとインターフェース名にはUpperCamelCase
    • メソッドと変数名にはlowerCamelCase
    • 定数にはUPPER_SNAKE_CASE
    • パッケージ名にはlowercase
  • クラスには名詞(UserService)、メソッドには動詞(getUserById)を使用する。
  • 略語とハンガリアン記法を避ける。

バグパターン

ルールID 説明 例 / 注意事項
S2095 リソースはクローズすべき ストリーム、ファイル、ソケットなどを扱う際はtry-with-resourcesを使用する。
S1698 オブジェクトは==ではなく.equals()で比較すべき StringやボックスドPrimitiveで特に重要。
S1905 冗長なキャストは削除すべき 不要または安全でないキャストをクリーンアップする。
S3518 条件は常にtrueまたはfalseに評価されるべきではない 無限ループまたは決して変更されないif条件に注意。
S108 到達不可能なコードは削除すべき returnthrowなどの後のコードはクリーンアップする必要がある。

コードスメル

ルールID 説明 例 / 注意事項
S107 メソッドはパラメーターが多すぎるべきではない ヘルパークラスにリファクタリングするか、ビルダーパターンを使用する。
S121 重複したコードブロックは削除すべき ロジックを共有メソッドに統合する。
S138 メソッドは長すぎるべきではない 複雑なロジックをより小さくテスト可能な単位に分割する。
S3776 認知複雑度は削減すべき ネストしたロジックを簡略化し、メソッドを抽出し、深いifツリーを避ける。
S1192 文字列リテラルは重複すべきではない 定数またはenumで置き換える。
S1854 未使用の代入は削除すべき デッドな変数を避ける—削除またはリファクタリングする。
S109 マジックナンバーは定数で置き換えるべき 可読性と保守性を向上させる。
S1188 catchブロックは空にすべきではない 常に例外を意味のある形でログまたは処理する。

ビルドと検証

  • コードを追加または変更した後、プロジェクトが正常にビルドし続けることを確認する。
  • プロジェクトがMavenを使用している場合は、mvn clean installを実行する。
  • プロジェクトがGradleを使用している場合は、./gradlew buildWindowsではgradlew.bat build)を実行する。
  • ビルドの一部として全てのテストが合格することを確認する。