12-factor appを読んだ。良かった。自分メモ。Java視点。
The Twelve-Factor App (日本語訳)
I. コードベース
バージョン管理されている1つのコードベースと複数のデプロイ
ざっくり書くと
- 1つのアプリケーションに1つのリポジトリ。
- 同じコードを共有するなら、ライブラリとして管理してMavenで組み込む。
- 環境によってjar/warを変更しないで済むようにする。
ふむ。リポジトリについては、1サービスで1リポジトリでもいいのかなって思ったりもしてるのだけど、だめかな?そのほうがプルリクエストが楽そうだし。もうちょい考えたいな。Maven&Gitチカラ上げよう。
II. 依存関係
依存関係を明示的に宣言し分離する
Mavenで管理しておけば良さそう。jarに限らず全部管理しておくのは良いよね。Javaの外側はどうするんだろう?Dockerとかかなぁ?
III. 設定
設定を環境変数に格納する
ここんところ、どうやって管理したらいいんだろうかなーって悩み中。Spring Cloud Configあたりにヒントがありそうなんだけどな。
IV. バックエンドサービス
バックエンドサービスをアタッチされたリソースとして扱う
これは、今じゃ、PaaS使ってたら普通ね。
V. ビルド、リリース、実行
ビルド、リリース、実行の3つのステージを厳密に分離する
これもJavaだと普通かな。
VI. プロセス
アプリケーションを1つもしくは複数のステートレスなプロセスとして実行する
これもPaaS使ってたら自然とそうなるね。
VIII. 並行性
プロセスモデルによってスケールアウトする
Webはそうかなって思うんだけど、バッチプロセスとかメッセージングとかのあたりをどうしたらいいんだろうかなぁって思ったりしてる。
IX. 廃棄容易性
高速な起動とグレースフルシャットダウンで堅牢性を最大化する
Springの起動が高速かどうかは置いといて「突然の死に対して堅牢 であるべき」というのはよくチーム内で話をするすね。
X. 開発/本番一致
開発、ステージング、本番環境をできるだけ一致させた状態を保つ
これも最近だとVagrantとかで以前よりは楽に揃えられるね。Dockerを上手に使いたいな。
XI. ログ
ログをイベントストリームとして扱う
これもPaaS使ってたら普通かな。
XII. 管理プロセス
管理タスクを1回限りのプロセスとして実行する
これは、そうありたい。
まとめ
- Mavenでのアプリケーションの管理について考えたい
- アプリケーションの設定とその管理について考えたい
- バッチやメッセージングについてうまい管理方法を考えたい
- Dockerをうまく使って開発環境・本番環境の構築をうまくやりたい
そんなとこかな。たまに自分の位置を確認するために読みなおそう。