Web開発
The Twelve-Factor App
The Twelve-Factor App (12factor.net)
要約
The Twelve-Factor Appは、SaaS(Software-as-a-Service)アプリケーションを構築するための方法論です。この方法論は、宣言的な設定、OSとのクリーンな契約、クラウドプラットフォームへの適合性、開発と本番環境の類似性、そしてスケーラビリティを重視します。言語やバックエンドサービスに依存せず、現代的なクラウドネイティブなアプリケーション開発におけるベストプラクティスを提供します。
全文翻訳
はじめに
現代において、ソフトウェアは一般的にサービスとして提供されます。これはWebアプリケーション、またはソフトウェアアズアサービスと呼ばれます。Twelve-Factor Appは、以下のようなソフトウェアアズアサービスアプリケーションを構築するための方法論です。
* セットアップの自動化のために宣言的な形式を使用し、プロジェクトに参加する新しい開発者の時間とコストを最小限に抑えること。
* 基盤となるオペレーティングシステムとのクリーンな契約を持ち、実行環境間での移植性を最大限に提供すること。
* サーバーやシステム管理の必要性をなくし、最新のクラウドプラットフォームへのデプロイに適していること。
* 開発と本番環境の間の乖離を最小限に抑え、最大限のアジリティのために継続的なデプロイメントを可能にすること。
* ツール、アーキテクチャ、または開発プラクティスに大きな変更を加えることなくスケールアップできること。
Twelve-Factorの方法論は、任意のプログラミング言語で書かれたアプリケーション、および任意のバックエンドサービス(データベース、キュー、メモリキャッシュなど)の組み合わせを使用するアプリケーションに適用できます。
背景
このドキュメントの貢献者は、数百のアプリケーションの開発とデプロイに直接関与し、Herokuプラットフォームでの作業を通じて、間接的に数十万ものアプリケーションの開発、運用、スケーリングを目撃してきました。このドキュメントは、実際のさまざまなソフトウェアアズアサービスアプリケーションに関する私たちの経験と観察をすべて統合したものです。これは、アプリケーション開発における理想的なプラクティスへの三角測量であり、アプリケーションの経時的な有機的な成長のダイナミクス、アプリケーションのコードベースに取り組む開発者間のコラボレーションのダイナミクス、そしてソフトウェアの劣化コストの回避に特に注意を払っています。
私たちの動機は、現代のアプリケーション開発におけるいくつかのシステム的な問題に対する意識を高め、それらの問題を議論するための共通の語彙を提供し、関連する用語とともにそれらの問題に対する広範な概念的解決策のセットを提供することです。
この形式は、Martin Fowlerの著書『Patterns of Enterprise Application Architecture』と『Refactoring』に触発されています。
誰がこのドキュメントを読むべきか?
サービスとして実行されるアプリケーションを構築するすべての開発者。
そのようなアプリケーションをデプロイまたは管理するOpsエンジニア。
Twelve Factors
I. コードベース
リビジョン管理で追跡される単一のコードベース、多数のデプロイ
II. 依存関係
依存関係を明示的に宣言し、分離する
III. 設定ストア
環境に設定を格納する
IV. バックエンドサービス
バックエンドサービスをアタッチされたリソースとして扱う
V. ビルド、リリース、実行
ビルドと実行のステージを厳密に分離する
VI. プロセス
アプリケーションを1つ以上のステートレスプロセスとして実行する
VII. ポートバインディング
ポートバインディングを通じてサービスをエクスポートする
VIII. 並行性
プロセスモデルを通じてスケールアウトする
IX. disposability(使い捨て性)
高速な起動と正常なシャットダウンで堅牢性を最大化する
X. 開発/本番パリティ
開発、ステージング、本番環境を可能な限り類似させる
XI. ログ
ログをイベントストリームとして扱う
XII. 管理プロセス
管理/メンテナンスタスクを一度限りのプロセスとして実行する