TL;DR
SaaS や Web アプリケーションを作るための方法論。セットアップしやすく、環境を移しやすく、継続的にデプロイしてスケールできるアプリケーションを作るための 12 の原則をまとめている。
なぜ必要か
新しい開発者がプロジェクトに加わるときの時間とコスト、OS への依存による移植性の低さ、開発環境と本番環境の差による継続的デプロイの難しさといった問題を解く。Heroku 上で多くのアプリケーションを作り、運用してきた経験をもとに、Adam Wiggins らがまとめた。
仕組み
12 の要素は次のとおり。
- コードベース: バージョン管理される 1 つのコードベースと、複数のデプロイ
- 依存関係: 依存関係を明示的に宣言し、分離する
- 設定: 設定を環境変数に格納する
- バックエンドサービス: バックエンドサービスをアタッチされたリソースとして扱う
- ビルド、リリース、実行: ビルド、リリース、実行の 3 つのステージを厳密に分離する
- プロセス: アプリケーションを 1 つ以上のステートレスなプロセスとして実行する
- ポートバインディング: ポートバインディングを通してサービスを公開する
- 並行性: プロセスモデルによってスケールアウトする
- 廃棄容易性: 高速な起動とグレースフルシャットダウンで堅牢性を高める
- 開発/本番一致: 開発、ステージング、本番環境をできるだけ一致させる
- ログ: ログをイベントストリームとして扱う
- 管理プロセス: 管理タスクを 1 回限りのプロセスとして実行する