■ The Twelve-Factor App とは?
クラウドアプリケーション開発・運用のための方法論(ベストプラクティス)* 米ヘロク(Heroku)の創設者の一人であるアダム・ウィギンス氏が作成 * Heroku上でクラウドアプリケーションを開発・運用する際に培ってきたノウハウから、 12要素(Twelve factor)を抽出したもの
■ The Twelve Factors / 12要素
[01] Codebase / コードベース [02] Dependencies / 依存関係 [03] Config / 設定 [04] Backing services / バックエンドサービス [05] Build, release, run / ビルド、リリース、実行 [06] Processes / プロセス [07] Port binding / ポートバインディング [08] Concurrency / 並行性 [09] Disposability / 廃棄容易性 [10] Dev/prod parity / 開発/本番一致 [11] Logs / ログ [12] Admin processes / 管理プロセス
■ 詳細
[01] コードベース
バージョン管理されている1つのコードベースと複数のデプロイ* コードをバージョン管理システム(ex. git, subversion)で管理する * コードベースとアプリケーションは、常に1対1https://12factor.net/ja/codebase
http://itpro.nikkeibp.co.jp/atcl/column/14/110900092/110900003/?itp_leaf_index
[02] 依存関係
依存関係を明示的に宣言し分離するhttps://12factor.net/ja/dependencies
http://itpro.nikkeibp.co.jp/atcl/column/14/110900092/110900004/?itp_leaf_index
[03] 設定
設定を環境変数に格納するhttps://12factor.net/ja/config
http://itpro.nikkeibp.co.jp/atcl/column/14/110900092/111700006/
[04] バックエンドサービス(連携サービス)
バックエンドサービスをアタッチされたリソースとして扱うhttps://12factor.net/ja/backing-services
http://itpro.nikkeibp.co.jp/atcl/column/14/110900092/111700007/?itp_leaf_index
[05] ビルド、リリース、実行
ビルド、リリース、実行の3つのステージを厳密に分離するhttps://12factor.net/ja/build-release-run
[07] ポートバインディング
ポートバインディングを通してサービスを公開するhttps://12factor.net/ja/port-binding
http://itpro.nikkeibp.co.jp/atcl/column/14/110900092/111700009/
[08] 並行性
プロセスモデルによってスケールアウトするhttps://12factor.net/ja/concurrency
[09] 廃棄容易性
高速な起動とグレースフルシャットダウンで堅牢性を最大化する* 即座に起動・終了できること * 「クラッシュオンリー設計」 => トラブルがあった際に、アプリケーションプロセス自体をクラッシュさせ、 再起動によってリカバーするという考え方(そのためにも「即座に起動・終了」が必要)https://12factor.net/ja/disposability
http://itpro.nikkeibp.co.jp/atcl/column/14/110900092/111700010/?itp_leaf_index
[10] 開発/本番一致
開発、ステージング、本番環境をできるだけ一致させた状態を保つhttps://12factor.net/ja/dev-prod-parity
http://itpro.nikkeibp.co.jp/atcl/column/14/110900092/110900002/
[11] ログ
ログをイベントストリームとして扱うhttps://12factor.net/ja/logs
[12] 管理プロセス
管理タスクを1回限りのプロセスとして実行するhttps://12factor.net/ja/admin-processes