背景
現在Amazon Q developerを利用してチーム開発しているのですが、どのようにしたらもっと開発効率が上がるかなと思い、ドキュメントを読み返しながら考えてみました。
実施すべきこと
-
.amazonq/rulesを設定する - プロジェクト内容をコンテキストにまとめ共通化(memory-bank)する
これをやるだけで、だいぶ変わるなと思いました。
rulesを設定する
コーディングルールの設定
ルールの読み込み
ルールディレクトリの設定は以下のように実施する。
- ~/.aws/amazonq/prompts/: ユーザーのホームディレクトリ(個人用プロンプト)
- [workspace_root]/.amazonq/rules/: 各プロジェクトのワークスペースルート(プロジェクト共有ルール)
基本的にはGithub等で管理するので、リポジトリアップできるように、リポジトリごとにルールディレクトリを作成する。それによって、以下のような効果が得られると考えています。
- プロジェクト固有: 各プロジェクトで異なるコーディング規約を適用可能
- チーム共有: Gitでバージョン管理してチーム全体で共有
- 自動適用: 手動でルールを指定する必要なし
ルール定義
定義方法は、ルールディレクトリの直下にプロジェクト内のコーディング規約・設計ルールを記載するだけです。
例:
*.amazonq/rules/python-rules.mdという ルールファイル作成
## Python固有ルール
- f-stringを優先的に使用する
- リスト内包表記を積極的に使用する
- `if __name__ == "__main__":` を使用する
## 禁止事項
- `eval()` の使用禁止
- `exec()` の使用禁止
- グローバル変数の多用禁止
プロジェクト内容をコンテキストにまとめ共通化(memory-bank)
プロジェクト固有情報をコンテキストとして、生成実行時に自動的に利用できるようになります。
- 技術スタック
- SLA
- プロジェクトの利用目的
Amazon Q Developerのドキュメントには、.amazonq/rules/memory-bonk配下に以下のようなファイルを生成するようと記載されているので、それに沿った形で作成しておくようにする。
product.md – プロジェクトとその機能の概要。
structure.md – プロジェクトのアーキテクチャ、フォルダの編成、主要コンポーネント。
tech.md – テクノロジースタック、フレームワーク、依存関係、コーディング標準。
guidelines.md – プロジェクトの開発標準とパターン。
検証実施
- メモリバンクに記載した内容
- AWS上でALB/S3の静的なWebサイトを構成
- AWS CDKを使用
-
.amazonq/rules/typescripts.md(コーディングルール)
# CDK TypeScript開発ルール
## TypeScript要件
- strictモードを有効にする
- interfaceを優先的に使用する
- 戻り値の型を明示的に指定する
- any型の使用禁止
## CDK構成ルール
- Stackは環境ごとに分離する
- 再利用可能なConstructを作成する
- プロパティはinterfaceで型定義する
- すべてのリソースにタグを付与する
## 実装パターン
- 環境固有の設定は外部から注入する
- リソース間の依存関係を明確にする
- エラーハンドリングを適切に実装する
検証結果
- 可読性・流用性の高いコードが自動的に生成された
- チーム内のコーディングルールが反映されている
- 問題のあるルールはアップデート・修正をすること。それを生成AIで既存コードに反映することで、簡単にコードのアップデートが可能
生成結果
コードが構造化され、それぞれのスタックが分離され、固有値は外部から注入する形が取られている形で生成できた。
↓生成されたディレクトリ情報
├── bin/
│ └── s3webpoc.ts # エントリーポイント
├── lib/
│ ├── stacks/
│ │ └── s3-web-stack.ts # メインスタック
│ ├── constructs/
│ │ ├── vpc-construct.ts # VPC設定
│ │ ├── alb-construct.ts # ALB設定
│ │ └── s3-construct.ts # S3設定
│ └── interfaces/
│ └── stack-props.ts # 型定義
(補足)ルールなしでコード生成
ルールを使わずに生成するとやはりCDKの標準的なディレクトリ構造で生成された。
├── bin/
│ └── s3webpoc2.ts # エントリーポイント
├── lib/
│ └── s3web-stack.ts # スタック(VPC、S3、ALB全て含む)
参考資料