エンジニアリング憲法
概要
エンジニアリングプラクティスの移植可能な憲章。焦点を絞ったスキルに分解されています。このスキルはインデックスです:不変の原則を宣言し、タスクに適した特定のスキルへと導きます。完全な推論は references/engineering-constitution.md に記述されており、この SKILL.md とバンドルされているため、スキルがインストールされている場所ならどこにでも一緒に移動します。
核となる考え方: ソフトウェアエンジニアリングとは、時間をかけて統合されたプログラミングである。 最初のデプロイではなく、長期にわたって運用されるシステム(運用、安全な変更、障害時の復旧)を最適化します。
8つの不変の原則
- 理解してから構築する。 承認された設計なしにコードは書かない。
- すべての決定を、その根拠と却下した選択肢とともに記録する。
- テストはコントロールであり、形式的なものではない。そして、振る舞いの変更はテストファーストである。 失敗するテストは情報であり、決して編集してはならない。構造的な変更は、代わりに既存のスイートが編集されずにパスすることによってゲートされる。
- YAGNI(必要になるまでやるな)、容赦なく。
- 繰り返し可能なことは自動化する。
- ソフトウェアエンジニアリングとは、時間をかけて統合されたプログラミングである。
- 強制されないルールは提案に過ぎない。 ルールはツールにバインドするか、レビューアの判断としてラベル付けする。
- ユーザーの明示的な指示は、このドキュメントよりも優先される。 優先順位:ユーザー → 憲法 → ツールのデフォルト。
どのスキルが必要ですか?
Tier 1 — 普遍的(すべてのプロジェクトに適用):
| あなたのタスク | スキル |
|---|---|
| 機能の開始、アイデアを仕様/計画に変換 | designing-before-building |
| 決定が行われたので、それを文書化(ADR、インデックス、先送りされたアイデア) | recording-decisions |
| コミット、メッセージ作成、自動リリース | conventional-commits-and-releases |
| テストの作成/変更、権限/ロールルール、リファクタリングでテストが失敗 | tests-as-a-control |
| コードの作成/リファクタリング、変更の構造化、DRYの決定 | change-hygiene-and-code-craft |
| UI、コンポーネント、スタイリング、アクセシビリティの構築 | interface-craft-and-accessibility |
| CI、プッシュ前フック、タスクランナー、マージゲート | merge-gates-and-automation |
| ロギング、メトリクス、トレーシング、ヘルスチェック、SLO、アラート | observability-and-slos |
| 信頼できない入力、シークレット、認証、依存関係、脅威モデリング | defense-in-depth-security |
| ホットパス、ページネーション、N+1、リストエンドポイント、公開インターフェース | performance-and-scale |
| デプロイ、ロールバック、インシデント/ポストモーテムの計画 | resilience-and-deploy-safety |
Tier 2 — スタック固有(ツール/トピックが存在する場合のみ読み込む):
| あなたのタスク | スキル |
|---|---|
| PostgreSQL、PostGraphile、RLS、SQLファイル、アプリ→GraphQL→DBのパス | postgres-postgraphile-rls-and-sql |
| UIとテストで共有されるGraphQLクエリ、ルート/スキーマコントラクトテスト | graphql-contract-testing |
| 存続しなければならないデータを伴うスキーマ変更 — マイグレーション、バックフィル | zero-downtime-migrations |
| Kubernetes/AKSへのデプロイ、クラウドシークレット、プログレッシブロールアウト、PRごとの環境 | cloud-delivery-aks |
新しいプロジェクトへのこれらのスキルの適用方法
- Tier 1 はそのまま持ち運べます。 上記の線より上のすべてのスキルは、ウェブアプリ、パイプライン、CLI、ライブラリなど、あらゆるプロジェクトに適用されます。
- Tier 2 は交換可能です。 スタックが異なる場合、Tier 2 のスキルはトリガーされず(その説明はスタック固有です)、同等のものに置き換えます。それらが実装する原則(単一のデータパス、最終的な強制は低いレベルで、コントラクトのシーム、元に戻せるデプロイ)は引き続き有効です。
- ライフサイクルに応じてスケールします。 ローンチ前またはローカル専用のプロジェクトでは、ゼロダウンタイムマイグレーション、カナリアリリース、正式なインシデントプロセスを今ルールを書き、トリガー時に有効化として適用します。プロジェクトのモードは最初の決定レコードに記述します。
レッドフラグ
コードを書いたり、コミットしたり、デプロイしたり、テストを変更しようとしているときに、上記の関連スキルを参照していない場合は、停止して最初にそれを読み込んでください。憲法はデフォルトの習慣をオーバーライドします(原則7)。習慣こそが、憲法が修正しようとしているものなのです。