Skip to content

Commit 476c957

Browse files
authored
Merge pull request #8 from y-ok/fix/plugin-build-and-agents
Fix/plugin build and agents
2 parents c038ca6 + 7abcf9f commit 476c957

3 files changed

Lines changed: 170 additions & 180 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
target/
2+
.flattened-pom.xml
23

34
!.mvn/wrapper/maven-wrapper.jar
45
!**/src/main/**/target/

AGENTS.md

Lines changed: 153 additions & 180 deletions
Original file line numberDiff line numberDiff line change
@@ -1,182 +1,155 @@
11
# 背景
22

3-
これは、AIに対するルールファイルです。
4-
AIがコーディングを行う際に、このルールファイルを常に参照しています。
5-
6-
## AI駆動開発 共通ガイドライン
7-
8-
## 開発の基本理念
9-
10-
- 動くコードを書くだけでなく、品質・保守性・安全性を常に意識する
11-
- プロジェクトの段階(プロトタイプ、MVP、本番環境)に応じて適切なバランスを取る
12-
- 問題を見つけたら放置せず、必ず対処または明示的に記録する
13-
- ボーイスカウトルール:コードを見つけた時よりも良い状態で残す
14-
15-
## エラーハンドリングの原則
16-
17-
- 関連が薄く見えるエラーでも必ず解決する
18-
- エラーの抑制(try-catch で握りつぶす等)ではなく、根本原因を修正
19-
- 早期にエラーを検出し、明確なエラーメッセージを提供
20-
- エラーケースも必ずテストでカバーする
21-
- 外部APIやネットワーク通信は必ず失敗する可能性を考慮
22-
23-
## コード品質の基準
24-
25-
- DRY原則:重複を避け、単一の信頼できる情報源を維持
26-
- 意味のある変数名・関数名で意図を明確に伝える
27-
- プロジェクト全体で一貫したコーディングスタイルを維持
28-
- 小さな問題も放置せず、発見次第修正(Broken Windows理論)
29-
- コメントは「なぜ」を説明し、「何を」はコードで表現
30-
31-
## テスト規律
32-
33-
- テストをスキップせず、問題があれば修正する
34-
- 実装詳細ではなく振る舞いをテスト
35-
- テスト間の依存を避け、任意の順序で実行可能に
36-
- テストは高速で、常に同じ結果を返すように
37-
- カバレッジは指標であり、質の高いテストを重視
38-
39-
## 保守性とリファクタリング
40-
41-
- 機能追加と同時に既存コードの改善を検討
42-
- 大規模な変更は小さなステップに分割
43-
- 使用されていないコードは積極的に削除
44-
- 依存関係は定期的に更新(セキュリティと互換性のため)
45-
- 技術的負債は明示的にコメントやドキュメントに記録
46-
47-
## セキュリティの考え方
48-
49-
- APIキー、パスワード等は環境変数で管理(ハードコード禁止)
50-
- すべての外部入力を検証
51-
- 必要最小限の権限で動作(最小権限の原則)
52-
- 不要な依存関係を避ける
53-
- セキュリティ監査ツールを定期的に実行
54-
55-
## パフォーマンスの意識
56-
57-
- 推測ではなく計測に基づいて最適化
58-
- 初期段階から拡張性を考慮
59-
- 必要になるまでリソースの読み込みを遅延
60-
- キャッシュの有効期限と無効化戦略を明確に
61-
- N+1問題やオーバーフェッチを避ける
62-
63-
## 信頼性の確保
64-
65-
- タイムアウト処理を適切に設定
66-
- リトライ機構の実装(指数バックオフを考慮)
67-
- サーキットブレーカーパターンの活用
68-
- 一時的な障害に対する耐性を持たせる
69-
- 適切なログとメトリクスで可観測性を確保
70-
71-
## プロジェクトコンテキストの理解
72-
73-
- ビジネス要件と技術要件のバランスを取る
74-
- 現在のフェーズで本当に必要な品質レベルを判断
75-
- 時間制約がある場合でも、最低限の品質基準を維持
76-
- チーム全体の技術レベルに合わせた実装選択
77-
78-
## トレードオフの認識
79-
80-
- すべてを完璧にすることは不可能(銀の弾丸は存在しない)
81-
- 制約の中で最適なバランスを見つける
82-
- プロトタイプなら簡潔さを、本番なら堅牢性を優先
83-
- 妥協点とその理由を明確にドキュメント化
84-
85-
## Git運用の基本
86-
87-
- コンベンショナルコミット形式を使用(.gitmessage.txt参照)
88-
- コミットは原子的で、単一の変更に焦点を当てる
89-
- 明確で説明的なコミットメッセージを英語で記述
90-
- mainブランチへの直接コミットは避ける
91-
92-
## コードレビューの姿勢
93-
94-
- レビューコメントは建設的な改善提案として受け取る
95-
- 個人ではなくコードに焦点を当てる
96-
- 変更の理由と影響を明確に説明
97-
- フィードバックを学習機会として歓迎
98-
99-
## デバッグのベストプラクティス
100-
101-
- 問題を確実に再現できる手順を確立
102-
- 二分探索で問題の範囲を絞り込む
103-
- 最近の変更から調査を開始
104-
- デバッガー、プロファイラー等の適切なツールを活用
105-
- 調査結果と解決策を記録し、知識を共有
106-
107-
## 依存関係の管理
108-
109-
- 本当に必要な依存関係のみを追加
110-
- 新しい依存関係追加前にライセンス、サイズ、メンテナンス状況を確認
111-
- セキュリティパッチとバグ修正のため定期的に更新
112-
113-
## ドキュメントの基準
114-
115-
- READMEにプロジェクトの概要、セットアップ、使用方法を明確に記載
116-
- ドキュメントをコードと同期して更新
117-
- 実例を示すことを優先
118-
- 重要な設計判断はADR (Architecture Decision Records)で記録
119-
120-
## 継続的な改善
121-
122-
- 学んだことを次のプロジェクトに活かす
123-
- 定期的に振り返りを行い、プロセスを改善
124-
- 新しいツールや手法を適切に評価して取り入れる
125-
- チームや将来の開発者のために知識を文書化
126-
127-
### 禁止事項
128-
129-
- 許可なくファイル、フォルダを勝手に削除しないこと。
130-
- AGENTS.mdと同等の領域にあるファイル、フォルダのみアクセス可能とすること。
131-
- テストコードで `setAccessible` を使用しないこと。private メソッドのテストは不要。public API 経由でカバレッジ100%を達成すること。public API 経由でカバーできない場合はプロダクションコードの構造を見直すこと。
132-
133-
### コーディング規約
134-
135-
- YAGNI原則を準拠
136-
- Java11、Spring Boot 2.7.18に準拠
137-
- pom.xmlに定義したOSSライブラリを有効活用
138-
- 可読性が高くなるように、わかりづらい実装はコメントで補足
139-
- 三項演算子は使わない
140-
- 防御的な実装はしないこと。
141-
142-
### コミュニケーション/開発ルール
143-
144-
- 今後のやり取りは日本語で行うようにしてください。
145-
- ただし、プロジェクト内のコメント、JavaDoc、README、コミットメッセージ、PR説明などの成果物テキストは英語で統一すること。
146-
147-
### テスト・ビルドについて
148-
149-
- 新規に作成したクラス、改修を行なった場合は、単体テスト `mvn clean test` を実行し、検証してください。ただし、テスト内容に変更がない体裁修正は検証不要です。
150-
- テスト実行前に、変更内容を「ロジック変更 / 設定変更 / 体裁修正のみ」に分類して明示すること。
151-
- テスト実行前に、実行理由を1行で明示すること。理由が明示できない場合は実行しないこと。
152-
- 次のいずれかに該当する場合はテストを実行しないこと:「実行結果が変わらない変更」「テストコード変更なし」「体裁修正のみ」。
153-
- テスト/ビルドが失敗した場合は、原因特定し、テストが成功するまで処置をすること。
154-
- C0、C1カバレッジ100%となっていなかった場合、テストケースを追加してください。
155-
- `mvn clean test` を実行した作業は、完了報告時に C0/C1(INSTRUCTION/BRANCH)の実測値(% と covered/total)を必ず明記すること。未報告で完了扱いにしないこと。
156-
- 改修時は未使用のフィールド・ローカル変数・importを残さないこと。`The value of the field xxx is not used` を含む未使用警告を0件にしてから完了報告すること。
157-
- リリース作業時は、`pom.xml``<version>` とリリースタグを一致させること。タグ作成前に差分確認で `pom.xml` を必ず確認すること。
158-
- リリース作業時は、対象コミットの CI(`ci.yml`)が全ジョブ成功してからタグを作成すること。失敗中・実行中の状態でタグ作成しないこと。
159-
- リリース作業時は、C0/C1(INSTRUCTION/BRANCH)カバレッジ100%を `jacoco.xml` または CIログで確認し、未達ならリリースしないこと。
160-
- リリース作業時は、`main` への push 完了後に注釈付きタグを作成し、タグ push で `release.yml` を起動すること。
161-
- リリース完了条件は、`release.yml` 成功・GitHub Release 作成・想定 Assets 登録完了の3点を確認した状態とすること。
162-
- テストメソッド名称は、<メソッド名>_xxxケース_<検証内容>_<規格値> と書くこと。xxxは正常もしくは異常がはいる。また、規格値は「〜であること」と言葉を揃えること。
163-
- 「検証内容」は具体的な条件を動詞(〜する)で示し、「規格値」は名詞や結果を表す表現で「〜であること」で締める
164-
- 「規格値」で不自然な「〜する状態であること」を避け、可能な限り「〜が返る」「〜が設定される」「〜が再スローされる」などの結果を名詞化して表現すること
165-
- 検証内容には条件を簡潔に書き、可能であれば文末に「〜すること」を付けずに記載してください。補足が必要な場合はテスト内コメントで補足すること。
166-
- 追加、修正、削除をした場合、テスト実行による検証作業において、テスト失敗した場合、分析して、処置をすること。
167-
- JUnit5、mockitを使用すること。
168-
169-
### JavaDoc 記述ルール
170-
171-
- JavaDoc は全て `/** … */` 形式で記載し、private メソッドを含む全メソッドに簡潔な説明を追加してください(テストコードは対象外)。
172-
- 引数/戻り値には `@param``@return` を使い、該当要素の意味や条件を明記します(たとえば `@param request` には「評価対象の HTTP リクエスト」、`@return` には「判定条件が揃えば true」など)。
173-
- 仕様や判定基準を補足したい場合は本文に追記し、特定の例外や副作用があれば `@throws` も活用してください。
174-
175-
## 現状の問題点
176-
177-
かなり長いルールファイルになってしまっています。
178-
このままだと全体のコンテキストが長大になり、性能が低下してしまう可能性があります。
179-
180-
## 命令
181-
182-
元の内容を保持しつつも、内容を圧縮・整理してください。
3+
このファイルは、AI が本リポジトリで作業する際に常時参照するルールです。
4+
目的は、品質・保守性・安全性を維持しつつ、判断基準を短く一貫した形で示すことです。
5+
6+
## 基本方針
7+
8+
### 品質と設計
9+
10+
- 動作だけでなく、品質・保守性・安全性を常に考慮する。
11+
- 現在のフェーズ(プロトタイプ / MVP / 本番)に応じて、適切な品質水準を選ぶ。
12+
- 問題は放置せず、修正するか、少なくとも明示的に記録する。
13+
- ボーイスカウトルールに従い、触れた箇所はより良い状態で残す。
14+
- DRY を守り、単一の信頼できる情報源を維持する。
15+
- 命名は意図が伝わるものにし、スタイルはプロジェクト全体で統一する。
16+
- 小さな不整合も放置せず修正する。
17+
- コメントは「なぜ」を補足し、「何を」はコードで表現する。
18+
- 機能追加時は既存コードの改善も検討する。
19+
- 大きな変更は小さな段階に分ける。
20+
- 未使用コードは積極的に削除する。
21+
- 技術的負債はコメントやドキュメントで明示する。
22+
- YAGNI を守る。
23+
- 可読性を優先し、わかりづらい実装のみ簡潔に補足する。
24+
- 三項演算子は使わない。
25+
- 防御的な実装はしない。
26+
27+
### エラー処理と信頼性
28+
29+
- 関連が薄く見えるエラーも放置せず解決する。
30+
- 例外を握りつぶさず、根本原因を修正する。
31+
- エラーは早期検出し、明確なメッセージを出す。
32+
- エラーケースもテスト対象に含める。
33+
- 外部 API / ネットワークは失敗を前提に設計する。
34+
- タイムアウトを適切に設定する。
35+
- 必要に応じてリトライ(指数バックオフ含む)を検討する。
36+
- 必要に応じてサーキットブレーカーパターンを活用する。
37+
- 一時障害に耐えられる設計にする。
38+
- 適切なログとメトリクスで可観測性を確保する。
39+
40+
### テストと検証
41+
42+
- テストはスキップせず、問題があれば原因を特定して修正する。
43+
- 実装詳細ではなく振る舞いを検証する。
44+
- テスト間の依存をなくし、任意順で実行可能にする。
45+
- テストは高速かつ再現性を持たせる。
46+
- カバレッジは指標であり、質を優先する。
47+
- エラーやビルド失敗は成功するまで処置する。
48+
49+
### セキュリティ・性能・依存管理
50+
51+
- 秘密情報は環境変数で扱い、ハードコードしない。
52+
- すべての外部入力を検証する。
53+
- 最小権限で動作させる。
54+
- 不要な依存は追加しない。
55+
- 依存はライセンス、サイズ、保守状況を確認してから追加する。
56+
- 依存はセキュリティ修正・バグ修正のため定期更新する。
57+
- セキュリティ監査ツールは定期的に実行する。
58+
- 最適化は推測ではなく計測に基づいて行う。
59+
- 初期段階から拡張性を意識する。
60+
- 必要になるまでリソース読み込みを遅延させる。
61+
- キャッシュは期限と無効化戦略を明確にする。
62+
- N+1 やオーバーフェッチを避ける。
63+
64+
### 開発運用
65+
66+
- ビジネス要件と技術要件のバランスを取る。
67+
- 時間制約下でも最低限の品質基準は守る。
68+
- チームの技術レベルに合う実装を選ぶ。
69+
- すべてを完璧にはできない前提で、制約下の最適解を選ぶ。
70+
- プロトタイプでは簡潔さ、本番では堅牢性をより重視する。
71+
- 妥協点と理由は明文化する。
72+
- コンベンショナルコミットを使用する(`.gitmessage.txt` 参照)。
73+
- コミットは原子的にし、単一の変更に集中させる。
74+
- コミットメッセージは明確な英語で書く。
75+
- `main` へ直接コミットしない。
76+
- レビューはコードに対して行い、建設的提案として扱う。
77+
- 変更理由と影響を明確に説明する。
78+
- フィードバックは学習機会として扱う。
79+
- デバッグは再現手順確立、二分探索、最近の変更確認を基本とする。
80+
- 必要に応じてデバッガーやプロファイラーを使う。
81+
- 調査結果と解決策は記録し、再利用可能にする。
82+
- README には概要、セットアップ、利用方法を明確に書く。
83+
- ドキュメントはコード変更に追随させる。
84+
- 実例を優先する。
85+
- 重要な設計判断は ADR で記録する。
86+
- 学んだことは次の作業に活かし、定期的に改善する。
87+
- 新しいツールや手法は適切に評価して取り入れる。
88+
- チームや将来の開発者のために知識を文書化する。
89+
90+
## 禁止事項
91+
92+
- 許可なくファイルやフォルダを削除しない。
93+
- `AGENTS.md` と同等の領域にあるファイル / フォルダのみアクセス対象とする。
94+
- テストコードで `setAccessible` を使わない。
95+
- private メソッドを直接テストしない。public API 経由で C0 / C1 100% を目指す。
96+
- public API 経由でカバーできない場合は、プロダクションコードの構造を見直す。
97+
98+
## プロジェクト固有ルール
99+
100+
### コミュニケーション
101+
102+
- 対話は日本語で行う。
103+
- ただし、プロジェクト内のコメント、JavaDoc、README、コミットメッセージ、PR 説明などの成果物テキストは英語で統一する。
104+
105+
### 実装規約
106+
107+
- Java 11、Spring Boot 2.7.18 に準拠する。
108+
- `pom.xml` に定義済みの OSS ライブラリを活用する。
109+
- 改修時は未使用の field / local variable / import を残さない。
110+
- `The value of the field xxx is not used` を含む未使用警告は 0 件にして完了とする。
111+
112+
### テスト・ビルド
113+
114+
- 新規作成や改修を行った場合は、原則として `mvn clean test` を実行して検証する。
115+
- ただし、体裁修正のみ、テストコード変更なし、実行結果が変わらない変更は実行しない。
116+
- テスト実行前に、変更を「ロジック変更 / 設定変更 / 体裁修正のみ」に分類して明示する。
117+
- テスト実行前に、実行理由を 1 行で明示する。理由を明示できない場合は実行しない。
118+
- テスト / ビルドが失敗した場合は、原因を特定し、成功するまで処置する。
119+
- C0、C1 が 100% でない場合は、必要なテストケースを追加する。
120+
- `mvn clean test` を実行した作業は、完了報告時に C0 / C1(INSTRUCTION / BRANCH)の実測値(% と covered / total)を必ず記載する。
121+
- 実測値未記載のまま完了扱いにしない。
122+
- 追加 / 修正 / 削除を行った作業でテストが失敗した場合は、分析して処置する。
123+
- JUnit 5、mockit を使用する。
124+
125+
### テストメソッド命名
126+
127+
- テストメソッド名は `<メソッド名>_xxxケース_<検証内容>_<規格値>` とする。
128+
- `xxx` には `正常` または `異常` を入れる。
129+
- 規格値は必ず「〜であること」で統一する。
130+
- 検証内容は、具体条件を動詞(〜する)で簡潔に表現する。
131+
- 規格値は、名詞または結果表現で締める。
132+
- 「〜する状態であること」は避け、可能な限り「〜が返る」「〜が設定される」「〜が再スローされる」などを名詞化して表現する。
133+
- 検証内容は可能なら「〜すること」を付けずに記述し、補足が必要な場合はテスト内コメントで補う。
134+
135+
### リリース
136+
137+
- リリースタグは `pom.xml``<version>` と一致させる。
138+
- タグ作成前に差分確認で `pom.xml` を必ず確認する。
139+
- 対象コミットの CI(`ci.yml`)が全ジョブ成功してからタグを作成する。
140+
- CI が失敗中または実行中の状態ではタグを作成しない。
141+
- C0 / C1(INSTRUCTION / BRANCH)100% を `jacoco.xml` または CI ログで確認し、未達ならリリースしない。
142+
- `main` への push 完了後に注釈付きタグを作成し、そのタグ push で `release.yml` を起動する。
143+
- リリース完了条件は、`release.yml` 成功、GitHub Release 作成、想定 Assets 登録完了の 3 点確認とする。
144+
145+
### JavaDoc
146+
147+
- JavaDoc はすべて `/** ... */` 形式で記載する。
148+
- テストコードを除き、private メソッドを含む全メソッドに簡潔な説明を付ける。
149+
- 引数と戻り値には `@param` / `@return` を使い、意味や条件を具体的に記載する。
150+
- 仕様、判定基準、例外、副作用の補足が必要な場合は、本文や `@throws` を使って明記する。
151+
152+
## このファイルの改善方針
153+
154+
- 現状の問題は、ルールの総量が増え、コンテキスト負荷が高くなっていること。
155+
- そのため、今後も内容は維持しつつ、重複削減・章立て整理・表現統一を優先して更新する。

0 commit comments

Comments
 (0)