# Javaコーディング規約 - Checkstyle設定
このドキュメントは、[Google Java Style Guide](https://google.github.io/styleguide/javaguide.html)に基づいたCheckstyleの設定を元に作成されています。
## 一般設定
- **文字セット**: UTF-8
- **ファイル拡張子**: java, properties, xml
- **重大度**: warning
## チェック項目
### ホワイトスペース
- **タブ文字**:
- 使用禁止 (`FileTabCharacter`).
- 各行にチェックされます (`eachLine` = true).
- **行の長さ**:
- 一行の最大長は100文字 (`LineLength`).
- 特定のパターン(パッケージ宣言、インポート、リンクなど)は無視されます (`ignorePattern`).
### 命名規則
- **パッケージ名**:
- 小文字のみを使用 (`PackageName`).
- 正規表現: `^[a-z]+(\.[a-z][a-z0-9]*)*$`
- **クラス名**:
- パスカルケースを使用 (`TypeName`).
- トークン: CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF, RECORD_DEF
- **メンバ名**:
- キャメルケースを使用 (`MemberName`).
- 正規表現: `^[a-z][a-z0-9][a-zA-Z0-9]*$`
- **パラメータ名**:
- キャメルケースを使用 (`ParameterName`).
- 正規表現: `^[a-z]([a-z0-9][a-zA-Z0-9]*)?$`
- **ローカル変数名**:
- キャメルケースを使用 (`LocalVariableName`).
- 正規表現: `^[a-z]([a-z0-9][a-zA-Z0-9]*)?$`
### ブレースとインデント
- **左カーリーブレース**:
- 常に新しい行に開始します (`LeftCurly`).
- トークン: ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF, INTERFACE_DEF, LAMBDA, LITERAL_CASE, LITERAL_CATCH, LITERAL_DEFAULT, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, METHOD_DEF, OBJBLOCK, STATIC_INIT, RECORD_DEF, COMPACT_CTOR_DEF
- **右カーリーブレース**:
- `try`, `catch`, `finally`, `if`, `else`文では同じ行に配置 (`RightCurly`).
- トークン: LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_DO
- **インデント**:
- 基本的なオフセットは2スペース (`Indentation`).
- `braceAdjustment`, `caseIndent`, `throwsIndent`, `lineWrappingIndentation`, `arrayInitIndent` の設定もあり。
### その他のスタイル
- **スターインポート**: 使用しない (`AvoidStarImport`).
- **一行あたりのステートメント数**: 一行に一つのステートメント (`OneStatementPerLine`).
- **配列の型スタイル**: 配列の宣言で`[]`は型の後に配置 (`ArrayTypeStyle`).
### Javadoc
- **Javadocの位置**: 不適切な位置にあるJavadocは許可されていません (`InvalidJavadocPosition`).
- **メソッドJavadoc**:
- `public`メソッドにJavadocが必要 (`MissingJavadocMethod`).
- スコープ: public
- トークン: METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF, COMPACT_CTOR_DEF
- **型Javadoc**:
- `protected`スコープの型にJavadocが必要 (`MissingJavadocType`).
- トークン: CLASS_DEF, INTERFACE_DEF, ENUM_DEF, RECORD_DEF, ANNOTATION_DEF
- 除外スコープ: none
### インポート
- **カスタムインポート順序**:
- インポートはアルファベット順に並べられる (`CustomImportOrder`).
- グループ間で改行を入れる (`separateLineBetweenGroups` = true).
- ルール: STATIC###THIRD_PARTY_PACKAGE
### コメント
- **コメントのインデント**:
- コメントは関連するコードと同じインデントになる (`CommentsIndentation`).
- トークン: SINGLE_LINE_COMMENT, BLOCK_COMMENT_BEGIN
### その他
- **メソッド名**:
- キャメルケースを使用 (`MethodName`).
- 正規表現: `^[a-z][a-z0-9]\w*$`
- **空のブロック**:
- 空のキャッチブロックは、例外変数名が `expected` の場合のみ許可される (`EmptyCatchBlock`).
- **一行Javadoc**:
- 一行のJavadocコメントが許可される (`SingleLineJavadoc`).
## フィルター
- **SuppressWarningsFilter**: 特定の警告を無視するためのフィルター。
- **SuppressionFilter**: XMLファイルを使用して特定のチェックを無視する。
- **SuppressionXpathFilter**: XPath表現を使用して特定のチェックを無視する。
- **SuppressionCommentFilter**: 特定のコメント形式を使用してチェックを無視する。
- **SuppressWithNearbyCommentFilter**: 特定のコメントが近くにある場合にチェックを無視する。