12-factor-app について
12-factor-app は、SaaS サービスを開発・運用する人向けのクラウドネイティブ設計ガイドです。コードベースや設定からスケーリング、本番運用まで、影響度順にルールをまとめています。
主な機能
- 0112 分野にわたる 51 のルール
- 02影響度に基づく優先順位
- 03依存関係と設定の指針
- 04ビルド・リリース・実行の実践
- 05スケーリング、ログ、管理タスク
活用シーン
- 01バックエンドサービスや API の設計
- 02アプリケーションのコンテナ化準備
- 03CI/CD と環境設定の構築
- 04デプロイや環境の問題の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill 12-factor-appインストール後、Claude Code で/12-factor-appを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdadmin-one-off-processes.mdadmin-repl-access.mdadmin-same-environment.mdbuild-artifact-per-commit.mdbuild-complexity-in-build.mdbuild-immutable-releases.mdbuild-no-runtime-changes.mdbuild-separate-stages.mdcode-deploys-not-branches.mdcode-one-app-one-repo.mdcode-shared-as-libraries.mdcode-single-codebase.mdconfig-never-commit-secrets.mdconfig-no-env-groups.mdconfig-separate-from-code.mdconfig-use-env-vars.mdconfig-validate-on-startup.mddep-deterministic-builds.mddep-explicit-declaration.mddep-isolate-execution.mddep-no-system-tools.mddisp-crash-only.mddisp-disposable-processes.mddisp-fast-startup.mddisp-graceful-shutdown.mddisp-idempotent-operations.md詳細
クラウドネイティブアプリケーションのベストプラクティス(コミュニティ版)
移植性、スケーラビリティ、保守性に優れた、最新のサービスとしてのソフトウェアアプリケーションを構築するための包括的な手法です。コードベースの管理から本番環境での運用まで、アプリケーションのライフサイクル全体を網羅する12カテゴリ、51のルールが含まれています。
適用する場面
以下のような場合に、これらのガイドラインを参照してください。
- 新しいバックエンドサービスや API を設計するとき
- Kubernetes や Docker 向けにアプリケーションをコンテナ化するとき
- CI/CD パイプラインを設定するとき
- 環境間で設定を管理するとき
- ロギングやモニタリングを実装するとき
- アプリケーションのスケーリング戦略を計画するとき
- デプロイや環境の問題をデバッグするとき
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス |
|---|---|---|---|
| 1 | コードベースとバージョン管理 | CRITICAL | code- |
| 2 | 依存関係 | CRITICAL | dep- |
| 3 | 設定 | CRITICAL | config- |
| 4 | バッキングサービス | HIGH | svc- |
| 5 | ビルド、リリース、実行 | HIGH | build- |
| 6 | プロセスと状態 | HIGH | proc- |
| 7 | 並行処理とスケーリング | HIGH | scale- |
| 8 | 使い捨て可能性 | HIGH | disp- |
| 9 | ポートバインディング | MEDIUM | port- |
| 10 | 開発環境と本番環境の同等性 | MEDIUM | parity- |
| 11 | ロギング | MEDIUM | log- |
| 12 | 管理プロセス | MEDIUM | admin- |
クイックリファレンス
1. コードベースとバージョン管理(CRITICAL)
code-single-codebase- バージョン管理下で、アプリケーションごとに1つのコードベースを維持するcode-one-app-one-repo- コードベースとアプリケーションを1対1で対応させるcode-deploys-not-branches- 環境を表すにはブランチではなくデプロイを使用するcode-shared-as-libraries- 共有コードを依存関係マネージャーで管理するライブラリに切り分ける
2. 依存関係(CRITICAL)
dep-explicit-declaration- すべての依存関係をマニフェストファイルで明示的に宣言するdep-isolate-execution- システムパッケージが混入しないように、依存関係を分離するdep-no-system-tools- システムツールが暗黙的に利用できることを前提にしないdep-deterministic-builds- 依存関係を決定論的に解決するためにロックファイルを使用する
3. 設定(CRITICAL)
config-separate-from-code- 設定をコードから厳密に分離するconfig-use-env-vars- 設定を環境変数に保存するconfig-no-env-groups- 環境変数を環境ごとのグループではなく、細かな制御項目として扱うconfig-validate-on-startup- アプリケーションの起動時に必須の設定を検証するconfig-never-commit-secrets- シークレットや認証情報をバージョン管理にコミットしない
4. バッキングサービス(HIGH)
svc-as-attached-resources- バッキングサービスを接続されたリソースとして扱うsvc-connection-strings- すべてのバッキングサービスを、設定内の接続 URL を介して参照するsvc-no-local-vs-remote- ローカルサービスとサードパーティサービスを区別しないsvc-detach-attach-without-code- コードを変更せずにサービスを切り離したり接続したりできるように設計する
5. ビルド、リリース、実行(高)
build-separate-stages- ビルド、リリース、実行の各段階を厳密に分離しますbuild-immutable-releases- 一意の識別子を持つ不変のリリースを作成しますbuild-no-runtime-changes- 実行時にコードを変更しないでください。変更には新しいリリースが必要ですbuild-complexity-in-build- 複雑な処理をビルド段階に集約し、実行段階は最小限に保ちますbuild-artifact-per-commit- コミットごとに1つのビルド成果物を生成し、どこでも同じ成果物をデプロイします
6. プロセスと状態(高)
proc-stateless-processes- アプリケーションをステートレスなプロセスとして実行しますproc-no-sticky-sessions- スティッキーセッションは使用せず、セッションデータはバックエンドサービスに保存しますproc-no-local-filesystem- リクエスト間でローカルファイルシステムが保持されることを前提にしないでくださいproc-compile-at-build- アセットのコンパイルとバンドルは実行時ではなく、ビルド時に行いますproc-share-nothing- プロセス同士が何も共有しないように設計します
7. 並行処理とスケーリング(高)
scale-process-model- 複数のプロセスタイプを持つプロセスモデルを通じてスケールアウトしますscale-process-types- ワークロードを適切なプロセスタイプに割り当てますscale-no-daemonize- デーモン化や PID ファイルへの書き込みは行わず、プロセスマネージャーに任せますscale-horizontal-not-vertical- 垂直スケーリングよりも水平スケーリングを前提に設計しますscale-process-formation- プロセス構成を宣言型設定として定義します
8. 使い捨て可能性(高)
disp-disposable-processes- プロセスはいつでも開始または停止できる使い捨て可能なものとして設計しますdisp-fast-startup- 迅速なスケーリングと復旧を可能にするため、起動時間を最小限に抑えますdisp-graceful-shutdown- SIGTERM を受けた際に、グレースフルシャットダウンを実装しますdisp-crash-only- 突然の停止から復旧する、クラッシュのみを想定したソフトウェアとして設計しますdisp-idempotent-operations- 障害後に安全に再試行できるよう、操作を冪等にします
9. ポートバインディング(中)
port-self-contained- サーバーを組み込んで、アプリケーションを完全に自己完結させますport-export-via-binding- PORT 環境変数を使用したポートバインディングでサービスを公開しますport-any-protocol- HTTP に限らず、ポートバインディングを使って任意のプロトコルを公開します
10. 開発環境と本番環境の一致(中)
parity-minimize-gaps- 開発環境と本番環境の差異を最小限に抑えますparity-same-backing-services- すべての環境で同じ種類とバージョンのバックエンドサービスを使用しますparity-deploy-frequently- 時間差を最小限に抑えるため、頻繁にデプロイしますparity-developers-deploy- 担当者間の差異を最小限に抑えるため、開発者もデプロイに参加させます
11. ロギング(中)
log-event-streams- ログはファイルではなくイベントストリームとして扱いますlog-no-routing- アプリケーション内でログをルーティングまたは保存しないでくださいlog-structured-format- 機械可読なイベントストリームには構造化ロギングを使用しますlog-unbuffered-stdout- リアルタイムストリーミングのため、バッファリングせずにログを標準出力へ書き込みます
12. 管理プロセス(中)
admin-one-off-processes- 管理タスクは特別なスクリプトではなく、単発のプロセスとして実行しますadmin-same-environment- 同じコードベースと設定を使用して、リリースに対して管理プロセスを実行しますadmin-repl-access- デバッグとデータ検査のために REPL アクセスを提供します
使用方法
詳しい説明とコード例については、各リファレンスファイルをお読みください。
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応