12-Factor アプリ:最新のプラクティスと Leapcell ガイド
The Twelve-Factor App は、堅牢でスケーラブル、かつ保守しやすい最新のウェブアプリケーションを構築するための方法論で、もともとは Heroku の開発者によって提唱されました。クラウドネイティブ時代におけるアプリ開発・運用の共通課題を解決するための体系的フレームワークを提供します。
12 の要素に従うことで、開発者は継続的デプロイ、高い移植性、スムーズなスケーリングに最適化されたアプリケーションを作成できます。
Leapcell は 12-Factor App の原則に基づいて設計されています。これらの原則に従うことで、Leapcell の機能を活用し、アプリケーションをより効率的に構築・デプロイできます。
このドキュメントは、古典的な 12 の要素を基に、Leapcell プラットフォーム上での現代的な解釈とベストプラクティスを補足するものです。
12-Factor の現代的解釈と Leapcell のプラクティス
TL;DR
# | Factor | 概要 | Leapcell プラクティス |
---|---|---|---|
I | Codebase for One Service | 1 つのアプリにつき 1 リポジトリ、複数デプロイ | 1 リポジトリにつき 1 サービス; Git 履歴を明確化 |
II | Declare Dependencies | 依存関係を明示的に宣言 | マニフェストファイル使用 + 必要に応じて build.sh でビルド統一 |
III | Env as Config | 設定はコードから分離し環境変数で注入 | ローカルは .env 使用; プラットフォームが自動で環境変数注入 |
IV | Backing Services | 外部サービスはプラガブルリソースとして扱う | /tmp 書き込み可サーバーレスサービス; PostgreSQL, Redis, オブジェクトストレージ提供 |
V | Build, Release, Run | ビルド・リリース・実行を分離 | 本番ブランチでビルド・リリース自動トリガー; CI/CD ワークフロー |
VI | Stateless Processes | プロセスはステートレスであるべき | ステートレス設計により水平スケーリングが可能 |
VII | Port Binding | ポートにバインドしてサービスを提供 | 設定されたポートに外部トラフィックをルーティング |
VIII | Concurrency | プロセスを追加してスケール | トラフィックに応じてサーバーレスインスタンス自動スケーリング |
IX | Disposability | 高速起動・優雅なシャットダウン | 応答なしプロセスは SIGKILL 送信; アプリでクリーンアップ可能 |
X | Dev/prod Parity | 開発・ステージング・本番をできる限り一致 | 同一コードベース; ブランチ + env.local で環境別設定 |
XI | Logs | ログはイベントストリームとして扱う | 集中ログ管理; stdout にイベントストリーム出力 |
XII | Admin Processes | 管理タスクはワンオフで実行 | ビルド中または手動実行; 事前開始コマンドは提供なし |
I. Codebase for One Service
1 つのコードベースでリビジョン管理し、複数のデプロイを行う。
アプリケーションのコードは単一リポジトリで管理する必要があります。複数の環境があっても同一コードベースから派生する必要があります。
Leapcell のデプロイモデルはこの原則に基づきます。「リポジトリごとに 1 サービス」を推奨しており、Git 履歴の明確化とプロジェクト管理の簡素化が可能です。
II. Declare Dependencies in a Manifest File
マニフェストで依存関係を明示する。
依存関係はマニフェスト (package.json
, requirements.txt
) に明示的に宣言し、適切な分離ツールで管理します。
依存関係管理はサービス移植性のために重要です。複雑なビルドの場合は
build.sh
を作成して手順を統一することを推奨します。
III. Env as Config
設定は環境に格納する。
設定 (DB URL, API キーなど) はコードから 分離し、環境変数で注入します。
ローカル開発では
.env
を使用。Leapcell では設定済み環境変数が自動でランタイムに注入され、ローカルと本番の移行がスムーズです。
IV. Backing Services
バックエンドサービスはプラグ可能なリソースとして扱う。
ネットワーク経由で使用するサービスは URL や認証情報で接続します。
Leapcell のサーバーレスは
/tmp
除き読み取り専用 FS。状態の外部化により高速動的スケジューリングが可能。PostgreSQL、Redis、オブジェクトストレージも提供。
V. Build, Release, Run
ビルド・リリース・実行を分離する。
リリースは不変で、容易にロールバック可能。CI/CD で自動化。
本番ブランチにコミットでビルド・リリース自動トリガー。最新コードを本番にデプロイ。
VI. Stateless Processes
アプリはステートレスプロセスで実行する。
永続化が必要なデータはバックエンドサービスに保存。
ステートレス設計により水平スケーリングが容易。Leapcell サーバーレスはこれをサポート。
VII. Port Binding
ポートバインドでサービス提供。
プラットフォームは設定ポートに外部トラフィックをルーティング。
VIII. Concurrency
水平スケーリングで負荷に対応。
トラフィックに応じてサーバーレスインスタンス自動スケーリング。
IX. Disposability
高速起動と優雅な終了で堅牢性向上。
応答なしプロセスは SIGKILL。アプリは必要なクリーンアップを処理可能。
X. Dev/prod Parity
開発・ステージング・本番をできる限り一致させる。
同一コードベース、ブランチ +
env.local
で環境別設定。
XI. Logs
ログはイベントストリームとして扱う。
すべてのログは集中管理され、stdout に出力され分析可能。
XII. Admin Processes
管理タスクはワンオフで実行する。
Leapcell は事前開始コマンドなし。ビルド中または手動で実行可能。