6.3 KiB
6.3 KiB
| description | applyTo |
|---|---|
| Javaベースアプリケーション構築のガイドライン | **/*.java |
Java開発
全般指針
- 最初に、静的解析ツール(SonarQube、PMD、Checkstyle)をプロジェクトセットアップに統合したいかユーザーに確認する。 統合する場合は、ツール選択と設定についてのガイダンスを提供する。
- ユーザーが静的解析ツールを辞退するか、それらなしで進めたい場合は、以下で説明するベストプラクティス、バグパターン、コードスメル防止ガイドラインの実装を続ける。
- 技術的負債を蓄積するのではなく、開発中にコードスメルを積極的に対処する。
- 特定された問題をリファクタリングする際は、可読性、保守性、パフォーマンスに焦点を当てる。
- IDE / コードエディターが報告する警告と提案を使用して、開発の早い段階で一般的なパターンを捉える。
ベストプラクティス
- Records: 主にデータを格納することを意図したクラス(例:DTO、イミュータブルなデータ構造)については、従来のクラスの代わりにJava Recordsを使用すべき。
- パターンマッチング:
instanceofとswitch式でパターンマッチングを活用して、条件ロジックと型キャストを簡略化する。 - 型推論: 可読性を向上させるためにローカル変数宣言では
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 |
到達不可能なコードは削除すべき | return、throwなどの後のコードはクリーンアップする必要がある。 |
コードスメル
| ルールID | 説明 | 例 / 注意事項 |
|---|---|---|
S107 |
メソッドはパラメーターが多すぎるべきではない | ヘルパークラスにリファクタリングするか、ビルダーパターンを使用する。 |
S121 |
重複したコードブロックは削除すべき | ロジックを共有メソッドに統合する。 |
S138 |
メソッドは長すぎるべきではない | 複雑なロジックをより小さくテスト可能な単位に分割する。 |
S3776 |
認知複雑度は削減すべき | ネストしたロジックを簡略化し、メソッドを抽出し、深いifツリーを避ける。 |
S1192 |
文字列リテラルは重複すべきではない | 定数またはenumで置き換える。 |
S1854 |
未使用の代入は削除すべき | デッドな変数を避ける—削除またはリファクタリングする。 |
S109 |
マジックナンバーは定数で置き換えるべき | 可読性と保守性を向上させる。 |
S1188 |
catchブロックは空にすべきではない | 常に例外を意味のある形でログまたは処理する。 |
ビルドと検証
- コードを追加または変更した後、プロジェクトが正常にビルドし続けることを確認する。
- プロジェクトがMavenを使用している場合は、
mvn clean installを実行する。 - プロジェクトがGradleを使用している場合は、
./gradlew build(Windowsではgradlew.bat build)を実行する。 - ビルドの一部として全てのテストが合格することを確認する。