12因子アプリケーション:現代の実践とLeapcellのガイド
The Twelve-Factor Appは、堅牢でスケーラブル、かつ保守可能な最新のWebアプリケーションを構築するための方法論であり、もともとはHerokuの開発者によって提唱されました。これは、特にクラウドネイティブ時代において、アプリケーション開発と運用における共通の問題を解決するための制度的なフレームワークを提供します。
これらの12の要素に従うことで、開発者は継続的なデプロイ、高い移植性、スムーズなスケーリングに最適化されたアプリケーションを作成できます。
Leapcellは、12因子アプリケーションプラットフォームとして設計されています。12因子Methodologyに従うことで、Leapcellの機能を活用して、アプリケーションをより効率的に構築 およびデプロイできます。
このドキュメントは、古典的な12の要素を基に構築されており、Leapcellプラットフォーム上の現代的な解釈とベストプラクティスを補足しています。
12の要素の現代的な解釈とLeapcellの実践
I. 1つのサービスのコードベース
リビジョン管理で追跡される1つのコードベース、多数のデプロイ。
アプリケーションのすべてのコードは、Gitのようなバージョン管理システムを使用して、単一のリポジトリに保存する必要があります。複数のデプロイメント環境(例:開発、本番)が存在する可能性がありますが、それらはすべて同じコードベースから派生する必要があります。
Leapcellのデプロイメントモデルは、基本的にこの原則に基づいています。Gitのコミット履歴の明確さを高め、プロジェクト管理と理解を大幅に簡素化する「リポジトリごとに1つのサービス」というベストプラクティスを提唱しています。
II. マニフェストファイルで依存関係を宣言する
マニフェストファイルで依存関係を明示的に宣言します。
すべての依存関係は、マニフェストファイル(例:package.json
、requirements.txt
)を介して明示的に宣言し、適切な分離ツールで管理する必要があります。
正確な依存関係の管理は、サービスの移植性を確保するために重要です。ビルドプロセスが複雑な場合(例:
apt-get
を介したシステムパッケージと、pip
を介した言語固有のライブラリの両方が必要な場合)、ビルドステップを統合し、一貫した環境を保証するために、build.sh
スクリプトを作成することを強くお勧めします。
III. 環境を構成として
構成を環境に保存します。
構成(例:データベースのURL、APIキー)をコードから厳密に分離し、環境変数を介して注入します。
最新のベストプラクティスは、ローカル開発に
.env
ファイルを使用することです。Leapcellプラットフォームでは、構成された環境変数がランタイム環境に自動的に注入されるため、アプリケーションはシームレスにアクセスでき、ローカル から本番へのスムーズな移行が保証されます。
IV. バッキングサービス
バッキングサービスをアタッチされたリソースとして扱います。
アプリがネットワーク経由で使用するすべてのサービス(データベースやキャッシュなど)は、構成に保存されているURLまたは資格情報を介してアタッチされたプラグ可能なリソースとして扱う必要があります。
Leapcellのサーバーレスサービスは、
/tmp
ディレクトリを除く読み取り専用のファイルシステムを備えており、この哲学を具現化しています。この設計により、状態の外部化が強制され、インフラストラクチャの高速で動的なスケジューリングが可能になり、コンピューティングリソースが最大限の速度でプロビジョニングされるようになります。さらに、Leapcellは、状態の永続化の負担を効果的に軽減するために、可用性の高いPostgreSQL、Redis、およびオブジェクトストレージサービスを提供します。
V. ビルド、リリース、実行
ビルド、リリース、および実行ステージを厳密に分離します。
この分離により、リリースが不変になり、簡単にロールバックでき るようになります。最新のCI/CDパイプラインは、このプロセスを自動化し、迅速で信頼性の高いデプロイを可能にします。
Leapcellは、本番ブランチ(例:
main
)と開発ブランチを明確に区別することを推奨しています。本番ブランチへの新しいコミットごとに、Leapcellは自動的に新しいビルドとリリースをトリガーし、最新のコードを本番環境にデプロイし、CI/CDワークフローを完全に採用します。
VI. ステートレスプロセス
アプリを1つ以上のステートレスプロセスとして実行します。
アプリケーションは、「共有なし」のステートレスプロセスとして実行する必要があります。永続化する必要のあるデータは、ステートフルなバッキングサービスに保存する必要があります。
この原則は、迅速な水平スケーリングを実現し、状態を失うことなくいつでもプロセスを開始または停止できるようにするために重要です。Leapcellのサーバーレスサービスは、この点を考慮して設計されており、ステートレスプロセスのシームレスなスケーリングと管理が可能です。