The Twelve-Factor App ~ クラウドアプリケーション開発・運用のための方法論 ~

■ 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対1
https://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

[06] プロセス

アプリケーションを1つもしくは複数のステートレスなプロセスとして実行する


https://12factor.net/ja/processes


[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