TL

Twelve-Factor App

クラウド上で動かしやすいアプリを作るための12の設計原則です。設定は環境変数へ、プロセスはステートレスに、ログはストリームに、といった指針をまとめています。

中級12-Factorクラウドアプリ設計ステートレス最終更新: 2026-06-06
TL;DR要点だけ先に
  • 1.Twelve-Factor App は SaaS / クラウド向けアプリの設計指針12項目。言語やフレームワークに依存しない。
  • 2.核は「設定はコードから分離して環境変数へ」「プロセスはステートレスで使い捨て」「ログは標準出力へ流すだけ」。
  • 3.守るほど移植性・スケーラビリティ・自動化のしやすさが上がり、コンテナや CI/CD と素直に噛み合う。

Twelve-Factor App とは

Twelve-Factor App は、Heroku の開発者が2011年にまとめた、クラウド(SaaS)で動かしやすいアプリの設計原則12項目です。特定の言語やフレームワークの話ではなく、「どう作っておくと、スケールしやすく・移植しやすく・自動化しやすいか」という 共通の作法 を整理したものです。

背景にあるのは、アプリを 使い捨てできるプロセス として扱うという発想です。サーバを大事に育てる(ペット)のではなく、いつでも壊して作り直せる(家畜)状態にしておく。この考え方は、後のコンテナ(/devops/container-vs-vm/)やイミュータブルインフラ(/devops/immutable-infra/)と一直線につながります。

12の原則(概要)

12項目は次の通りです。1つずつ覚えるより、「設定・状態・ログ・プロセスをどう扱うか」 という塊で捉えると実務に効きます。

  1. コードベース:1アプリ=1リポジトリ。同じコードを複数環境にデプロイする。
  2. 依存関係:使うライブラリを明示的に宣言し、システム任せにしない。
  3. 設定:環境ごとに変わる値(DB 接続先・鍵)はコードから分離し 環境変数 へ。
  4. バックエンドサービス:DB やキューは 付け替え可能なリソース として URL 等で接続する。
  5. ビルド・リリース・実行:3段階を厳密に分離する(後述)。
  6. プロセス:アプリは ステートレス な1つ以上のプロセスとして実行する。
  7. ポートバインディング:自分でポートを開いて待ち受け、自己完結する。
  8. 並行性:プロセスを 増やして スケールアウトする(垂直増強に頼らない)。
  9. 廃棄容易性:起動は速く、停止は穏やかに。いつ落ちても良いように作る。
  10. 開発/本番一致:開発・ステージング・本番の差を 小さく 保つ。
  11. ログ:ログは イベントストリーム として標準出力へ流すだけにする。
  12. 管理プロセス:DB マイグレーション等は 同じ環境 でワンオフ実行する。

設定は環境変数へ(Factor 3)

最も実務インパクトが大きいのが 「設定とコードの分離」 です。DB のパスワードや API キー、接続先ホストといった 環境ごとに変わる値 をコードに書き込むと、環境を増やすたびに分岐が増え、秘密情報がリポジトリに漏れます。

Twelve-Factor では、これらを 環境変数 として外から注入します。

# コードには書かず、環境から渡す
export DATABASE_URL="postgres://user:pass@db.internal:5432/app"
export LOG_LEVEL="info"

こうしておくと、同じビルド成果物のまま dev / staging / prod を切り替えられます。

「分離できているか」の判定法

判定はシンプルです。「いまこのソースを丸ごと公開しても、秘密が漏れないか?」。漏れるなら設定がコードに混ざっています。設定は環境変数や外部のシークレットストアへ追い出しましょう。

ビルド・リリース・実行の分離(Factor 5)

デプロイを 3つの段階に厳密に分ける のも要点です。

段階何をするか可変性
ビルド (Build)コードを依存ごと実行可能な成果物へ変換コードのバージョンで決まる
リリース (Release)ビルド成果物 + その環境の設定 を結合一意のリリース ID を付ける
実行 (Run)リリースをプロセスとして起動起動するだけ・変更しない

ポイントは 実行段階でコードや設定を書き換えない こと。各リリースに一意の ID を振れば、問題時に「1つ前のリリースに戻す」だけでロールバックできます。これは CI/CD(/devops/ci-cd/)の考え方そのものです。

ステートレスとログ(Factor 6・11)

ステートレス(Factor 6) とは、プロセスが 自分の中に状態を貯めない こと。セッションやアップロードファイルをプロセスのメモリやローカルディスクに置くと、そのプロセスが落ちたり、別インスタンスに振り分けられたりした瞬間に壊れます。状態は DB やキャッシュ、オブジェクトストレージなど 外部のバックエンドサービス に預けます。

これができていると、プロセスを増やすだけで水平スケール でき、いつ落としても作り直せます(廃棄容易性)。

ログ(Factor 11) は、アプリ側でファイルに書いたりローテーションしたりせず、標準出力にイベントを流すだけ にします。集約・保存・検索は実行環境(コンテナ基盤やログ基盤)に任せる、という分業です。

ローカルディスクは「消えてもよい一時領域」と考える

コンテナや使い捨てインスタンスでは、ローカルに書いたファイルは再起動で消えます。アップロード画像をローカル保存して配信、のような設計は破綻しがち。永続化が要るものは最初から外部ストレージへ。

現代との関係

Twelve-Factor は10年以上前の指針ですが、いま読むと 「コンテナで動かすための前提条件」 に見えます。設定を環境変数で渡し、ステートレスで、ログを標準出力に流すアプリは、そのまま Kubernetes 等に載せやすいからです。

一方で、当時は想定が薄かった領域(オブザーバビリティ の徹底、サービス間通信の制御、ビルドの再現性など)を補う「15-Factor」的な拡張も提唱されています。12項目を土台にしつつ、足りない観点を足す のが現実的な使い方です。

まとめ

  • Twelve-Factor は クラウドで動かしやすいアプリの設計作法 をまとめた12原則。
  • 実務の要は 設定は環境変数へ/プロセスはステートレス/ログは標準出力へ
  • ビルド・リリース・実行を分離 すれば、環境差の吸収とロールバックが楽になる。
  • コンテナ・CI/CD と素直に噛み合うため、クラウドネイティブの共通言語 として今も有効。

DevOps/インフラ Article

Twelve-Factor Appを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

12-Factor

比較で見る軸

難易度: intermediate / カテゴリ: DevOps/インフラ / タグ数: 4

導入後に効く点

核は「設定はコードから分離して環境変数へ」「プロセスはステートレスで使い捨て」「ログは標準出力へ流すだけ」。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
DevOps/インフラ
タグ数
4

判断チェックリスト

  • 自社の用途が「12-Factor / クラウド」に近いか確認する。
  • 強みである「Twelve-Factor App は SaaS / クラウド向けアプリの設計指針12項目。言語やフレームワークに依存しない。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

12-Factorクラウドアプリ設計ステートレス12-Factorクラウドアプリ設計ステートレス
参考: 公式情報