【とぅえるぶふぁくたーあっぷ】

Twelve-Factor App とは?

💡 クラウド時代のアプリ設計「12の掟」
📌 このページのポイント
Twelve-Factor Appの12原則 I コードベース II 依存関係 III 設定 IV バックサービス V ビルド/リリース/実行 VI プロセス VII ポートバインディング VIII 並行性 IX 廃棄容易性 X 開発/本番一致 XI ログ XII 管理プロセス 開発 設定 デプロイ 実行 運用 クラウドネイティブアプリのためのベストプラクティス集
Twelve-Factor Appはクラウド時代のアプリ開発で守るべき12の原則をまとめたもの
ひよこ ひよこ

Twelve-Factorって何のための12個なの?

ペンギン先生 ペンギン先生

クラウド上で動くWebアプリを「こう作れば運用しやすいよ」という12の原則だよ。コードベース、依存関係、設定、バックエンドサービス、ビルド・リリース・実行、プロセス、ポートバインディング、並行性、廃棄容易性、開発/本番一致、ログ、管理プロセスの12個。

ひよこ ひよこ

全部覚えなきゃダメ?

ペンギン先生 ペンギン先生

全部を暗記する必要はないけど、特に重要なのは「設定を環境変数で管理する」「プロセスをステートレスにする」「依存関係を明示する」の3つ。この3つを守るだけでもクラウド対応のアプリにぐっと近づくよ。

ひよこ ひよこ

設定を環境変数にするって何がいいの?

ペンギン先生 ペンギン先生

DBの接続先やAPIキーをコードに書くと、本番・ステージング・開発で切り替えるたびにコードを変更しないといけない。環境変数にすれば同じコードのまま環境ごとに設定を変えられる。しかもAPIキーGitにコミットしてしまう事故も防げる。

ひよこ ひよこ

おもしろい!ステートレスなプロセスって何?

ペンギン先生 ペンギン先生

アプリのプロセスがリクエスト間で状態を持たないこと。セッション情報やアップロードファイルをプロセスのメモリやローカルディスクに保存しない。代わりにRedisやS3のような外部ストアに保存する。こうするとプロセスをいつでも再起動・スケールできる。

ひよこ ひよこ

コンテナとの関係はあるの?

ペンギン先生 ペンギン先生

非常に相性がいい。Twelve-Factorの原則を守ったアプリはそのままコンテナ化しやすい。ステートレスだからコンテナを増減できるし、環境変数で設定するからコンテナのenv指定と一致する。ログを標準出力に流すのもコンテナのログ収集と合う。

ひよこ ひよこ

2011年の原則って古くない?今でも使えるの?

ペンギン先生 ペンギン先生

基本的な考え方は今でも有効だけど、確かに時代の変化はあるね。2011年当時はコンテナKubernetesが普及する前だったから、サービスメッシュCI/CDパイプラインInfrastructure as Codeといった概念はカバーされていない。そこでBeyond the Twelve-Factor Appとして「テレメトリ」「セキュリティ」「APIファースト」などを追加した拡張版も提唱されている。原典を理解した上で、現代のプラクティスも取り入れるのがベストだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
Twelve-Factor Appって出てきたら「クラウド向けアプリを作るための12個のベストプラクティス集」と思えればだいたいOK!
📖 おまけ:英語の意味
「Twelve-Factor App」 = 12の要素で構成されたアプリ
💬 Heroku共同創業者のAdam Wiggins が2011年に発表。PaaSでの運用経験から導き出されたベストプラクティス集
← 用語集にもどる