メインコンテンツへスキップ

12-Factor アプリ:最新のプラクティスと Leapcell ガイド

The Twelve-Factor App は、堅牢でスケーラブル、かつ保守しやすい最新のウェブアプリケーションを構築するための方法論で、もともとは Heroku の開発者によって提唱されました。クラウドネイティブ時代におけるアプリ開発・運用の共通課題を解決するための体系的フレームワークを提供します。

12 の要素に従うことで、開発者は継続的デプロイ、高い移植性、スムーズなスケーリングに最適化されたアプリケーションを作成できます。

ヒント

Leapcell は 12-Factor App の原則に基づいて設計されています。これらの原則に従うことで、Leapcell の機能を活用し、アプリケーションをより効率的に構築・デプロイできます。

このドキュメントは、古典的な 12 の要素を基に、Leapcell プラットフォーム上での現代的な解釈とベストプラクティスを補足するものです。


12-Factor の現代的解釈と Leapcell のプラクティス​

TL;DR​

#Factor概要Leapcell プラクティス
ICodebase for One Service1 つのアプリにつき 1 リポジトリ、複数デプロイ1 リポジトリにつき 1 サービス; Git 履歴を明確化
IIDeclare Dependencies依存関係を明示的に宣言マニフェストファイル使用 + 必要に応じて build.sh でビルド統一
IIIEnv as Config設定はコードから分離し環境変数で注入ローカルは .env 使用; プラットフォームが自動で環境変数注入
IVBacking Services外部サービスはプラガブルリソースとして扱う/tmp 書き込み可サーバーレスサービス; PostgreSQL, Redis, オブジェクトストレージ提供
VBuild, Release, Runビルド・リリース・実行を分離本番ブランチでビルド・リリース自動トリガー; CI/CD ワークフロー
VIStateless Processesプロセスはステートレスであるべきステートレス設計により水平スケーリングが可能
VIIPort Bindingポートにバインドしてサービスを提供設定されたポートに外部トラフィックをルーティング
VIIIConcurrencyプロセスを追加してスケールトラフィックに応じてサーバーレスインスタンス自動スケーリング
IXDisposability高速起動・優雅なシャットダウン応答なしプロセスは SIGKILL 送信; アプリでクリーンアップ可能
XDev/prod Parity開発・ステージング・本番をできる限り一致同一コードベース; ブランチ + env.local で環境別設定
XILogsログはイベントストリームとして扱う集中ログ管理; stdout にイベントストリーム出力
XIIAdmin 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 は事前開始コマンドなし。ビルド中または手動で実行可能。