今回は「The Tweleve-Factor App」について。 The 12Factor App と書かれたり、シンプルに 12Factor と言われたりもします。
The Tweleve-Factor App とは?
- Heroku社の中の人が書いた、SaaS(Software as a Service)を作り上げるための方法論をまとめたもの。
- その名の通り、12要素でまとめられている。
- 日本語版も日本語版が公開されている。
- クラウドアプリケーションのベストプラクティスや、マイクロサービスの話題の中で引き合いに出されることが多い。
どんな内容なの?
上記リンク先を見てもらえればよいが、それぞれ簡単にまとめる。
I. コードベース
バージョン管理されている1つのコードベースと複数のデプロイ
II. 依存関係
依存関係を明示的に宣言し分離する
III. 設定
設定を環境変数に格納する
IV. バックエンドサービス
バックエンドサービスをアタッチされたリソースとして扱う
V. ビルド、リリース、実行
ビルド、リリース、実行の3つのステージを厳密に分離する
VI. プロセス
アプリケーションを1つもしくは複数のステートレスなプロセスとして実行する
VII. ポートバインディング
ポートバインディングを通してサービスを公開する
VIII. 並行性
プロセスモデルによってスケールアウトする
IX. 廃棄容易性
高速な起動とグレースフルシャットダウンで堅牢性を最大化する
X. 開発/本番一致
開発、ステージング、本番環境をできるだけ一致させた状態を保つ
XI. ログ
ログをイベントストリームとして扱う
XII. 管理プロセス
管理タスクを1回限りのプロセスとして実行する
難しい内容か?
- 参照者のスキルレベルによっては、理解しづらい部分があるものと思われる。
- 以下のサイトなどを参考にしながら理解を進めるのがよい。
いつ作られたのか?
ソースコードはGitHub(heroku/12factor)で公開されている。
最初のコミットは2011年。
その後、公開されたのは2012年である。 既に数年経過しているが、いまだに参照は多いものと思われる。
ちょっと古くない・・・?
- 確かに、既に時代にそぐわないという指摘もある。
- Pivotal社により、15要素に再編されたものが作成されたものがある。
- 項目は以下のとおり。
- One codebase, one application(1つのコードベース、1つのアプリケーション)
- API first(APIファースト)
- Dependency management(依存関係管理)
- Design, build, release, and run(設計、構築、リリース、実行)
- Configuration, credentials, and code(構成、資格情報、およびコード)
- Logs(ログ)
- Disposability(廃棄可能性)
- Backing services(バッキングサービス)
- Environment parity(環境パリティ)
- Administrative processes(管理プロセス)
- Port binding(ポートバインディング)
- Stateless processes(ステートレスプロセス)
- Concurrency(並行性)
- Telemetry(テレメトリー)
- Authentication and authorization(認証と承認)