システムプロンプトの設計
開発において設計思想や手法など社内で統一して、1つのシステムプロンプトを作成することができそうです。
システムプロンプトは「.github/instructions」で以下のように管理しています。
- core.instructions.md
- ts.instructions.md
- ts.tanstack-router.instructions.md
弊社の推奨ルール
- 設計思想を1つに統一する
- 言語とライブラリでシステムプロンプトを分けて再利用する
設計思想
Claudeは時間をかけて大量のコードを読み書きが出来る上に人間より安価なので、時間と費用に関しては考える必要がありません。将来性や拡張性に関しても、その段階において作り直していけば良いので考慮しません。
以下の2点は重視します。
- 安全性において、一貫性を持ち安全なコードを書くこと
- 複雑さにおいて、可能な限り単純で冗長で分かりやすいコードを書くこと
これらは「.github/instructions/core.instructions.md」に定義しています。
# Development Rules
Follow the KISS principle.
- Safety > Convenience: Prioritize bug prevention above all
- Readability > Performance: Prioritize ease of understanding
# Dialogue Rules
- Always ask questions one at a time
- Keep responses concise
- Always confirm if inferences are correct
安全性
安全性を落として効率を取るような状況は簡易的なソフトウェアを作るような用途に良いですが、AIは人間より高速に開発することが出来るので、安全性を落とす利点は殆どありません。
型定義もバリデーション、テストを可能な限り定義することでエラーを発生させることができます。これは推論や調査を減らすことができ開発速度が上がります。
複雑さ
過度に抽象化したりコードを短く保つ必要はありません。学習量が多くAIが最も読みやすいコードを重要視します。
設計と手法と規約
開発ではSOLID原則やドメイン駆動設計など様々な原則や手法が存在しますが、オブジェクト指向と関数型プログラミングなど、異なるパラダイムを混在させるとAIが混乱します。
例えば「SOLID原則」では、オブジェクト指向プログラミングを推奨することはないので、以下の2つは含めません。
- リスコフの置換原則(Liskov substitution principle)
- インターフェース分離の原則 (interface segregation principle)
これらは言語やフレームワークごとに異なるので、以下のように分けて必要に応じて取り入れるようにしています。
- ts.instructions.md
- ts.tanstack-router.instructions.md
参考
https://github.com/anthropics/prompt-eng-interactive-tutorial