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

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 は事前開始コマンドなし。ビルド中または手動で実行可能。