checkstyle - tat-tea/sample GitHub Wiki

# 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**: 特定のコメントが近くにある場合にチェックを無視する。