Posted at

12 Factor App - 開発/本番一致


開発、ステージング、本番環境をできるだけ一致させた状態を保つ



みなさん、意識できてますか?



でも一致させるって?



開発と本番の環境のギャップを小さく保つことで実現



ギャップ🤔



3つの領域でギャップが現れる



  • 時間のギャップ

  • 人材のギャップ

  • ツールのギャップ



一つずつ見ていきましょう



時間のギャップ


  • 開発したコードが本番に反映されるまで数日・数週間と時間がかかるギャップ



  • アプリケーションのコードはいろんな人がいじる。時間が経てば経つほどギャップが生まれる

  • レビュー待ちでマージまでに時間がかかり、その間加わった変更によってコンフリクトが発生することもある



時間のギャップが生まれると、余分な作業や考え事が増える。コードは時間が経つと腐る



人材のギャップ


  • 開発者本人以外の人がデプロイを行うギャップ



  • 開発した人以外は、そのコードに深く関わっていないので不具合があったときに気づけなかったりする

  • デプロイするコードに他の人のコミットが混ざっていると危ない



人材のギャップが生まれると、そのコードによってもたらされる挙動の正確なモニタリングができない



ツールのギャップ


  • 本番ではLinux、開発ではOSXのように、ミドルウェアやOSなど技術スタックにギャップがある



  • 想定外の挙動を起こすことがある

  • その挙動に遭遇しても、ツールが違うためローカルで再現できず対応できなかったりもする



ツールのギャップが生まれると、僅かな非互換性が顕在化したときに想定外の自体に陥る。問題発見に手間取ってしまう可能性が高まる



まとめると



  • 時間のギャップを小さくしよう


    • 開発者が書いたコードは数時間後、さらには数分後にはデプロイされるのが理想



  • 人材のギャップを小さくしよう


    • コードを書いた開発者はそのコードのデプロイに深く関わり、そのコードの本番環境での挙動をモニタリングする



  • ツールのギャップを小さくしよう


    • 開発環境と本番環境の技術スタックをできるだけ一致させた状態を保つ





これで継続的デプロイしやすい環境ができあがり、アプリケーションのライフサイクルのコストが長い目で抑えられることになります👏