概要
- Twelve-Factor App は現代の SaaS開発 のための手法
- 宣言的設定 や 環境依存性の分離 などが特徴
- クラウド対応 や 継続的デプロイ を容易にする設計思想
- 言語やサービスに依存しない 汎用的なガイドライン
- Heroku の経験を基にした ベストプラクティス の集大成
Twelve-Factor Appとは
- 現代の Webアプリケーション や SaaS 向け開発手法
- 新規開発者の参加コスト最小化 を目的とした 宣言的フォーマット の利用
- OSとの契約の明確化 により、 実行環境間の移植性 を最大化
- クラウドプラットフォーム へのデプロイ適性の確保
- サーバー管理不要 かつ システム管理の省力化 を実現
- 開発環境と本番環境の差異最小化 による 継続的デリバリー の推進
- ツールやアーキテクチャの大幅な変更なし でのスケーラビリティ確保
- 言語やバックエンドサービス (データベース、キュー、メモリキャッシュ等)に依存しない適用性
背景と目的
- Heroku を通じて 数多くのアプリの開発・運用・スケーリング に携わった知見
- ソフトウェアの有機的成長 や 開発者間コラボレーション に着目
- ソフトウェアの劣化防止 を意識した設計
- 現代アプリ開発の問題提起 と 共通語彙の提供
- 問題解決のための広範な概念的アプローチ と 用語の提案
- Martin Fowler の著書を参考にした構成
対象読者
- サービスとして稼働するアプリケーション を開発する 全ての開発者
- そのアプリケーションを デプロイ または 管理 する Opsエンジニア
Twelve-Factorの原則
- I. コードベース :1つのリビジョン管理されたコードベース、複数のデプロイ
- II. 依存関係 :依存関係を明示的に宣言・分離
- III. 設定 :設定情報は環境変数に保存
- IV. バッキングサービス :外部サービスはアタッチされたリソースとして扱う
- V. ビルド・リリース・実行 :ビルドと実行の段階を厳密に分離
- VI. プロセス :アプリは1つ以上のステートレスプロセスとして実行
- VII. ポートバインディング :サービスはポートバインディングで公開
- VIII. 並行性 :プロセスモデルによるスケールアウト
- IX. 廃棄性 :高速な起動と優雅なシャットダウンで堅牢性最大化
- X. 開発/本番パリティ :開発・ステージング・本番環境の差異を最小化
- XI. ログ :ログはイベントストリームとして扱う
- XII. 管理プロセス :管理タスクはワンオフプロセスとして実行