Twelve-Factor Appとは

Twelve-Factor App(12要素アプリ)とは、WebアプリケーションやSaaS(Software as a Service)を構築する際の、12個の要素からなるベストプラクティスをまとめたものです。

近年、クラウドネイティブなアプリケーション開発が主流となる中で、アプリケーションの移植性、スケーラビリティ、保守性などが重要視されています。Twelve-Factor Appは、これらの要件を満たすための具体的な方法論として、2011年に提唱されました。

Twelve-Factor Appの12個の要素

1.コードベース

  • バージョン管理システム(Gitなど)で管理された、単一のコードベースを持つこと。
  • 複数の環境(開発、ステージング、本番など)で、同じコードベースを使用すること。

2.依存関係

  • アプリケーションに必要な依存関係を、明示的に宣言し、管理すること(Bundler(Ruby)、npm(Node.js)など)。
  • システム全体に影響を与えるような暗黙的な依存関係を避けること。

3.構成

  • 環境固有の設定(データベース接続情報、APIキーなど)を、コードから分離し、環境変数として管理すること。
  • コードを変更せずに、設定を変更できること。

4.バッキングサービス

  • データベース、メッセージキュー、キャッシュなどの外部サービスを、ネットワーク経由で接続する、アタッチされたリソースとして扱うこと。
  • ローカル環境と本番環境で、同じバッキングサービスを使用できること。

5.ビルド、リリース、実行

  • ビルド、リリース、実行の各段階を厳密に区別し、自動化すること。
  • 各段階で、変更履歴を追跡できること。

6.プロセス

  • アプリケーションを、ステートレスなプロセスとして実行すること。
  • 複数のプロセスを並行して実行できること。

7.ポートバインディング

  • アプリケーションを、ポート番号を介して外部に公開すること。
  • ポート番号は、環境によって変更できること。

8.並行性

  • アプリケーションを、複数のプロセスとしてスケールアウトできること。
  • プロセス数を増減させることで、スケーラビリティを確保できること。

9.廃棄可能性

  • プロセスが、いつでも安全に停止・再起動できること。
  • 障害発生時に、迅速に復旧できること。

10.開発/本番類似性

  • 開発環境、ステージング環境、本番環境を、できる限り類似した環境に保つこと。
  • 環境間の差異を最小限にすることで、問題発生時の対応を迅速化できること。

11.ログ

  • アプリケーションのログを、標準出力に出力すること。
  • ログ収集ツールで、ログを集約・分析できること。

12.管理プロセス

  • データベースの移行、キャッシュのクリアなど、管理タスクを、コードとして扱い、バージョン管理すること。
  • 管理タスクを、自動化できること。

Twelve-Factor Appのメリット

Twelve-Factor Appに準拠することで、以下のようなメリットが得られます。

  • 移植性: 様々な環境(クラウド、オンプレミスなど)で、容易に実行できる。
  • スケーラビリティ: 必要に応じて、容易にスケールアウトできる。
  • 保守性: 変更や障害対応が容易になる。
  • 開発効率: 開発プロセスが効率化される。

Twelve-Factor Appは、現代のWebアプリケーションやSaaSを構築する上で、非常に有用なガイドラインです。Twelve-Factor Appに準拠することで、高品質で、持続可能なアプリケーションを開発することができます。

関連用語

クラウドネイティブ | 今更聞けないIT用語集
バージョン管理 | 今更聞けないIT用語集New!!
リファクタリング

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。

iOS/Androidアプリ開発

既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。


リファクタリング

他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。