Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Twelve-Factor Appで読み解く、モダンなアプリの理想とレガシーなアプリの現実 / Rakus Meetup Tokyo 5 Twelve Factor App

Twelve-Factor Appで読み解く、モダンなアプリの理想とレガシーなアプリの現実 / Rakus Meetup Tokyo 5 Twelve Factor App

Rakus Meetup Tokyo #5 「SaaSを支える開発原則」の登壇資料です。
https://rakus.connpass.com/event/178046/

rs_tukki

June 24, 2020
Tweet

More Decks by rs_tukki

Other Decks in Programming

Transcript

  1. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    ©2020 RAKUS Co., Ltd.
    Twelve-Factor Appで読み解く、
    モダンなアプリの理想と
    レガシーなアプリの現実
    開発統括部 第三開発部
    楽楽精算開発2課
    矢須 健太

    View full-size slide

  2. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    自己紹介
    • 矢須 健太 (25)
    • 楽楽精算の開発を担当
    • @rs_tukki
    • Main : Java(Spring Boot, Seasar2) / Swift / Kotlin
    • Sub : PHP / Python / C#
    • Like : 野球観戦 / 旅行 / 読書

    View full-size slide

  3. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    楽楽精算

    View full-size slide

  4. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    楽楽精算
    • 交通費・出張費・経費・交際費など、お金にまつわる全ての処理を一元管理できるクラウドシステムです。
    • 2009年リリース / 導入社数6,000社突破!

    View full-size slide

  5. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    ©2020 RAKUS Co., Ltd.
    Twelve-Factor App

    View full-size slide

  6. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    Twelve-Factor App
    • 今回初めて聞いたという人
    • 言葉だけは聞いたことがある人
    • 内容を説明できる人

    View full-size slide

  7. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    Twelve-Factor App
    • 今回初めて聞いたという人
    • 言葉だけは聞いたことがある人
    • 内容を説明できる人

    View full-size slide

  8. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    Twelve-Factor App
    • 今回初めて聞いたという人
    • 言葉だけは聞いたことがある人
    • 内容を説明できる人

    View full-size slide

  9. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    Twelve-Factor App
    • クラウド上で動くアプリケーション(=SaaS)が守るべき
    原則を12個にまとめた方法論
    • 提唱されたのは2012年

    View full-size slide

  10. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    楽楽精算
    • 交通費・出張費・経費・交際費など、お金にまつわる全ての処理を一元管理できるクラウドシステムです。
    • 2009年リリース / 導入社数6,000社突破!

    View full-size slide

  11. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    レガシーなアプリとモダンな方法論
    • 楽楽精算はTwelve-Factor Appより古い
    • 今回のお話
    1. Twelve Factor-Appから何点か抜粋して
    2. 楽楽精算の開発と比較することで
    3. レガシーなアプリをモダンに改善する道を探っていく!

    View full-size slide

  12. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    Twelve-Factor App
    • 今回説明する内容
    • III. 設定
    • X. 開発/本番一致
    • V. ビルド、リリース、実行
    • VIII. 並行性

    View full-size slide

  13. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    Twelve-Factor App
    • 今回説明する内容
    • III. 設定
    • X. 開発/本番一致
    • V. ビルド、リリース、実行
    • VIII. 並行性

    View full-size slide

  14. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    III. 設定
    • 原則:アプリの設定値は環境変数に格納せよ!
    • 設定値をコード内部に含めるのはNG
    • コードは今すぐにでもオープンソース化できる状態であるべき
    • 外部ファイルを読み取る方式もNG
    • 言語やフレームワークに依存したファイル形式になる
    • 環境ごとに異なる設定ファイルが散乱し、管理が煩雑になる

    View full-size slide

  15. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    III. 設定
    • 楽楽精算では
    開発用リポジトリ リリース用リポジトリ
    ローカル用の
    設定ファイル
    テスト用の
    設定ファイル
    本番用の
    設定ファイル

    View full-size slide

  16. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    III. 設定
    • よくある話
    • ローカルでは動いたのにテスト機上では動かない…
    ローカル用の
    設定ファイル
    テスト用の
    設定ファイル

    View full-size slide

  17. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    III. 設定
    • よくある話
    • ローカルでは動いたのにテスト機上では動かない…
    ローカル用の
    設定ファイル
    ⇒記入済
    テスト用の
    設定ファイル
    ⇒未記入

    View full-size slide

  18. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    III. 設定
    • あるかもしれない話
    • 本番リリースでも同じことが起きる…?
    開発用リポジトリ リリース用リポジトリ
    ローカル用の
    設定ファイル
    ⇒記入済
    テスト用の
    設定ファイル
    ⇒記入済
    本番用の
    設定ファイル
    ⇒未記入…?

    View full-size slide

  19. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    III. 設定
    • 何故書き忘れるのか?
    • 設定ファイルに書く→この設定を全環境で使えるのでは?
    • 他環境用のファイルも直さなければという意識が薄くなる
    • 環境変数なら
    • 各環境に直接登録される値
    • 環境ごとに値を登録するという意識が強まり回避しやすい

    View full-size slide

  20. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    Twelve-Factor App
    • 今回説明する内容
    • III. 設定
    • X. 開発/本番一致
    • V. ビルド、リリース、実行
    • VIII. 並行性

    View full-size slide

  21. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    X. 開発/本番一致
    • 原則:開発・本番各環境で3つのギャップを最小にせよ!
    • 時間のギャップ
    • 開発⇒本番デプロイを数時間で実現
    • 人材のギャップ
    • 開発した人が運用も行う
    • ツールのギャップ
    • 開発と本番で同じツールを使う

    View full-size slide

  22. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    X. 開発/本番一致
    • 楽楽精算では/時間のギャップ
    • メジャーリリースは基本年4回
    バージョン/月 4月 5月 6月 7月 8月 9月 10月 11月 12月 1月 2月 3月
    バージョン1
    バージョン2
    バージョン3
    バージョン4
    設計~開発
    テスト
    リリース準備
    リリース
    リリース
    リリース
    リリース
    リリース準備
    テスト
    設計~開発
    リリース準備
    テスト
    リリース準備
    設計~開発

    View full-size slide

  23. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    X. 開発/本番一致
    • 楽楽精算では/時間のギャップ
    • メジャーリリースは基本年4回
    バージョン/月 4月 5月 6月 7月 8月 9月 10月 11月 12月 1月 2月 3月
    バージョン1
    バージョン2
    バージョン3
    バージョン4
    設計~開発
    テスト
    リリース準備
    リリース
    リリース
    リリース
    リリース
    リリース準備
    テスト
    設計~開発
    リリース準備
    テスト
    リリース準備
    設計~開発
    実装からリリースまで
    半年超えることも…

    View full-size slide

  24. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    X. 開発/本番一致
    • 楽楽精算では/人材のギャップ
    • 開発担当のチームとリリース担当のチームが分かれている
    • 原則に則っていないが、分かれていること自体は問題ではない
    開発チームと
    リリースチームが分離

    View full-size slide

  25. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    X. 開発/本番一致
    • 本当の問題点
    • 開発担当「○○な環境が欲しいんですが何を渡せばいいですか?」
    • リリース担当「○○が欲しいけど開発側の手順は分からないよ?」
    • お互いがお互いの業務に無関心なために起こる弊害
    お互いの意思疎通が
    上手くいっていない

    View full-size slide

  26. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    X. 開発/本番一致
    • 楽楽精算では/ツールのギャップ
    • 使用しているツールはほとんど一致している
    • テスト環境では動いたのに本番環境では動かない、というケース
    が少ない
    ツール/環境 ローカル環境 テスト環境 本番環境
    OS Windows CentOS CentOS
    アプリケーションサーバ Tomcat Tomcat Tomcat
    Webサーバ Apache(Tomcat内蔵) Apache Apache
    データベース PostgreSQL PostgreSQL PostgreSQL

    View full-size slide

  27. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    Twelve-Factor App
    • 今回説明する内容
    • III. 設定
    • X. 開発/本番一致
    • V. ビルド、リリース、実行
    • VIII. 並行性

    View full-size slide

  28. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    V. ビルド、リリース、実行
    • 原則:3つのプロセスは明確に区別せよ!
    • 実行中のコードを直接変更してはいけない
    • ≒コードを変更する場合はリリース自体をやり直すべきである
    • 別環境へリリースするたびにビルドしてはいけない
    • ≒全ての環境で同じコードを使うべきである
    • 実行のたびにリリース作業をやり直してはいけない
    • ≒再起動だけ行う場合は同じ成果物を使いまわす

    View full-size slide

  29. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    V. ビルド、リリース、実行
    • 楽楽精算では…
    開発の完了したコード
    をビルドしてリリース
    担当に受け渡す

    View full-size slide

  30. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    V. ビルド、リリース、実行
    • 楽楽精算では…
    リリース担当はビルド
    されたアプリを
    各サーバに配置する

    View full-size slide

  31. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    V. ビルド、リリース、実行
    • 楽楽精算では…
    各サーバ上で配置
    されたアプリを起動

    View full-size slide

  32. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    V. ビルド、リリース、実行
    • 楽楽精算では…
    開発担当が勝手に
    ビルドを変更できない
    (ビルドと実行の
    分離)
    全環境に対して同じ
    ビルドでリリースする
    (ビルドとリリースの
    分離)
    再起動は必要なサーバ
    で行うだけ
    (実行とリリースの
    分離)

    View full-size slide

  33. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    Twelve-Factor App
    • 今回説明する内容
    • III. 設定
    • X. 開発/本番一致
    • V. ビルド、リリース、実行
    • VIII. 並行性

    View full-size slide

  34. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    VIII. 並行性
    • 原則:インスタンス数の増加によって負荷に対応せよ!
    • サーバそのもののスペック増強だと仮想マシンの再起動が必要
    • ⇒ユーザが使えない時間が発生してしまう
    • プロセスが1つのみなのでそれが落ちたらもう対応不可
    • プロセスを水平分割し、負荷によって処理を振り分けるべき
    • 例:ロードバランサ
    • プロセスが複数あれば1つが落ちても別のプロセスで処理を継続できる

    View full-size slide

  35. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    VIII. 並行性
    • 楽楽精算では…
    • ロードバランサ×ユーザ別の複数環境
    ・・・
    LB LB LB

    View full-size slide

  36. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    VIII. 並行性
    • 楽楽精算では…
    • ロードバランサ×ユーザ別の複数環境
    ・・・
    LB LB LB
    ユーザごとに環境を
    分割して負荷分散
    ロードバランサで
    処理を振り分けて
    負荷分散

    View full-size slide

  37. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    VIII. 並行性
    • おまけ
    • リリースを分割してリスクを減らせる場合もある
    ・・・
    LB LB LB
    1回目リリース 2回目リリース

    View full-size slide

  38. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    まとめ
    • Twelve-Factor Appと楽楽精算の比較を行った
    • 実現できていない点は実際に運用上苦労しているところ
    • 今から改善できそうなところも多い
    • 大事なことは「何故それをすべきなのか?」を考えること
    • 基本的に「こうするべき」としか書かれていない
    • 各アプリの特性や目指す形を考えた上で採用するか決める
    • そもそも今でも役立つとはいえ8年前の話

    View full-size slide

  39. #RAKUSMeetup
    ©2020 RAKUS Co., Ltd.
    ご清聴ありがとうございました。
    • 参考
    • The Twelve-Factor App (日本語訳)
    • https://12factor.net/ja/
    • とにかく分かりづらいTwelve-Factor Appの解説を試みる
    • https://www.slideshare.net/masatoshitada7/twelvefactor-app
    • Javaでやってみる The Twelve Factor App JJUG-CCC 2014 Fall 講演資料
    • https://www.slideshare.net/nabedge/java-the-twelve-factor-app

    View full-size slide