Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Twelve-Factor Appで読み解く、モダンなアプリの理想とレガシーなアプリの現実 /...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
rs_tukki
June 24, 2020
Programming
2.5k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
More Decks by rs_tukki
See All by rs_tukki
設計初心者のための「伝わる」フロー図 / How to draw a communicative flow diagram for beginners
rs_tukki
1
890
はじめてのTypeScript × はじめてのChrome拡張 / frontend_lt typescript and chrome-extension
rs_tukki
0
1.1k
Other Decks in Programming
See All in Programming
Unity6 URPによる海底をテーマにしたVJシステムの解説 | Unity Shader 完全に理解した 勉強会
gam0022
0
370
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
250
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
430
The Rails Doctrine Decade
koic
2
590
すこし踏み込む CancellationToken
htkym
2
1.7k
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
270
Event is what happens
moro
2
850
JIS keyboard support in Omarchy
lef237
0
120
カツオ、ご期待ください
suneo3476
0
190
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
0
1.5k
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
The Pragmatic Product Professional
lauravandoore
37
7.5k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
340
Faster Mobile Websites
deanohume
310
32k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
410
Music & Morning Musume
bryan
48
7.4k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
The agentic SEO stack - context over prompts
schlessera
0
970
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
Building AI with AI
inesmontani
PRO
1
1.3k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Building Applications with DynamoDB
mza
96
7.2k
Transcript
#RAKUSMeetup ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. Twelve-Factor
Appで読み解く、 モダンなアプリの理想と レガシーなアプリの現実 開発統括部 第三開発部 楽楽精算開発2課 矢須 健太
#RAKUSMeetup ©2020 RAKUS Co., Ltd. 自己紹介 • 矢須 健太 (25)
• 楽楽精算の開発を担当 • @rs_tukki • Main : Java(Spring Boot, Seasar2) / Swift / Kotlin • Sub : PHP / Python / C# • Like : 野球観戦 / 旅行 / 読書
#RAKUSMeetup ©2020 RAKUS Co., Ltd. 楽楽精算
#RAKUSMeetup ©2020 RAKUS Co., Ltd. 楽楽精算 • 交通費・出張費・経費・交際費など、お金にまつわる全ての処理を一元管理できるクラウドシステムです。 • 2009年リリース
/ 導入社数6,000社突破!
#RAKUSMeetup ©2020 RAKUS Co., Ltd. ©2020 RAKUS Co., Ltd. Twelve-Factor
App
#RAKUSMeetup ©2020 RAKUS Co., Ltd. Twelve-Factor App • 今回初めて聞いたという人 •
言葉だけは聞いたことがある人 • 内容を説明できる人
#RAKUSMeetup ©2020 RAKUS Co., Ltd. Twelve-Factor App • 今回初めて聞いたという人 •
言葉だけは聞いたことがある人 • 内容を説明できる人
#RAKUSMeetup ©2020 RAKUS Co., Ltd. Twelve-Factor App • 今回初めて聞いたという人 •
言葉だけは聞いたことがある人 • 内容を説明できる人
#RAKUSMeetup ©2020 RAKUS Co., Ltd. Twelve-Factor App • クラウド上で動くアプリケーション(=SaaS)が守るべき 原則を12個にまとめた方法論
• 提唱されたのは2012年
#RAKUSMeetup ©2020 RAKUS Co., Ltd. 楽楽精算 • 交通費・出張費・経費・交際費など、お金にまつわる全ての処理を一元管理できるクラウドシステムです。 • 2009年リリース
/ 導入社数6,000社突破!
#RAKUSMeetup ©2020 RAKUS Co., Ltd. レガシーなアプリとモダンな方法論 • 楽楽精算はTwelve-Factor Appより古い •
今回のお話 1. Twelve Factor-Appから何点か抜粋して 2. 楽楽精算の開発と比較することで 3. レガシーなアプリをモダンに改善する道を探っていく!
#RAKUSMeetup ©2020 RAKUS Co., Ltd. Twelve-Factor App • 今回説明する内容 •
III. 設定 • X. 開発/本番一致 • V. ビルド、リリース、実行 • VIII. 並行性
#RAKUSMeetup ©2020 RAKUS Co., Ltd. Twelve-Factor App • 今回説明する内容 •
III. 設定 • X. 開発/本番一致 • V. ビルド、リリース、実行 • VIII. 並行性
#RAKUSMeetup ©2020 RAKUS Co., Ltd. III. 設定 • 原則:アプリの設定値は環境変数に格納せよ! •
設定値をコード内部に含めるのはNG • コードは今すぐにでもオープンソース化できる状態であるべき • 外部ファイルを読み取る方式もNG • 言語やフレームワークに依存したファイル形式になる • 環境ごとに異なる設定ファイルが散乱し、管理が煩雑になる
#RAKUSMeetup ©2020 RAKUS Co., Ltd. III. 設定 • 楽楽精算では 開発用リポジトリ
リリース用リポジトリ ローカル用の 設定ファイル テスト用の 設定ファイル 本番用の 設定ファイル
#RAKUSMeetup ©2020 RAKUS Co., Ltd. III. 設定 • よくある話 •
ローカルでは動いたのにテスト機上では動かない… ローカル用の 設定ファイル テスト用の 設定ファイル
#RAKUSMeetup ©2020 RAKUS Co., Ltd. III. 設定 • よくある話 •
ローカルでは動いたのにテスト機上では動かない… ローカル用の 設定ファイル ⇒記入済 テスト用の 設定ファイル ⇒未記入
#RAKUSMeetup ©2020 RAKUS Co., Ltd. III. 設定 • あるかもしれない話 •
本番リリースでも同じことが起きる…? 開発用リポジトリ リリース用リポジトリ ローカル用の 設定ファイル ⇒記入済 テスト用の 設定ファイル ⇒記入済 本番用の 設定ファイル ⇒未記入…?
#RAKUSMeetup ©2020 RAKUS Co., Ltd. III. 設定 • 何故書き忘れるのか? •
設定ファイルに書く→この設定を全環境で使えるのでは? • 他環境用のファイルも直さなければという意識が薄くなる • 環境変数なら • 各環境に直接登録される値 • 環境ごとに値を登録するという意識が強まり回避しやすい
#RAKUSMeetup ©2020 RAKUS Co., Ltd. Twelve-Factor App • 今回説明する内容 •
III. 設定 • X. 開発/本番一致 • V. ビルド、リリース、実行 • VIII. 並行性
#RAKUSMeetup ©2020 RAKUS Co., Ltd. X. 開発/本番一致 • 原則:開発・本番各環境で3つのギャップを最小にせよ! •
時間のギャップ • 開発⇒本番デプロイを数時間で実現 • 人材のギャップ • 開発した人が運用も行う • ツールのギャップ • 開発と本番で同じツールを使う
#RAKUSMeetup ©2020 RAKUS Co., Ltd. X. 開発/本番一致 • 楽楽精算では/時間のギャップ •
メジャーリリースは基本年4回 バージョン/月 4月 5月 6月 7月 8月 9月 10月 11月 12月 1月 2月 3月 バージョン1 バージョン2 バージョン3 バージョン4 設計~開発 テスト リリース準備 リリース リリース リリース リリース リリース準備 テスト 設計~開発 リリース準備 テスト リリース準備 設計~開発
#RAKUSMeetup ©2020 RAKUS Co., Ltd. X. 開発/本番一致 • 楽楽精算では/時間のギャップ •
メジャーリリースは基本年4回 バージョン/月 4月 5月 6月 7月 8月 9月 10月 11月 12月 1月 2月 3月 バージョン1 バージョン2 バージョン3 バージョン4 設計~開発 テスト リリース準備 リリース リリース リリース リリース リリース準備 テスト 設計~開発 リリース準備 テスト リリース準備 設計~開発 実装からリリースまで 半年超えることも…
#RAKUSMeetup ©2020 RAKUS Co., Ltd. X. 開発/本番一致 • 楽楽精算では/人材のギャップ •
開発担当のチームとリリース担当のチームが分かれている • 原則に則っていないが、分かれていること自体は問題ではない 開発チームと リリースチームが分離
#RAKUSMeetup ©2020 RAKUS Co., Ltd. X. 開発/本番一致 • 本当の問題点 •
開発担当「◦◦な環境が欲しいんですが何を渡せばいいですか?」 • リリース担当「◦◦が欲しいけど開発側の手順は分からないよ?」 • お互いがお互いの業務に無関心なために起こる弊害 お互いの意思疎通が 上手くいっていない
#RAKUSMeetup ©2020 RAKUS Co., Ltd. X. 開発/本番一致 • 楽楽精算では/ツールのギャップ •
使用しているツールはほとんど一致している • テスト環境では動いたのに本番環境では動かない、というケース が少ない ツール/環境 ローカル環境 テスト環境 本番環境 OS Windows CentOS CentOS アプリケーションサーバ Tomcat Tomcat Tomcat Webサーバ Apache(Tomcat内蔵) Apache Apache データベース PostgreSQL PostgreSQL PostgreSQL
#RAKUSMeetup ©2020 RAKUS Co., Ltd. Twelve-Factor App • 今回説明する内容 •
III. 設定 • X. 開発/本番一致 • V. ビルド、リリース、実行 • VIII. 並行性
#RAKUSMeetup ©2020 RAKUS Co., Ltd. V. ビルド、リリース、実行 • 原則:3つのプロセスは明確に区別せよ! •
実行中のコードを直接変更してはいけない • ≒コードを変更する場合はリリース自体をやり直すべきである • 別環境へリリースするたびにビルドしてはいけない • ≒全ての環境で同じコードを使うべきである • 実行のたびにリリース作業をやり直してはいけない • ≒再起動だけ行う場合は同じ成果物を使いまわす
#RAKUSMeetup ©2020 RAKUS Co., Ltd. V. ビルド、リリース、実行 • 楽楽精算では… 開発の完了したコード
をビルドしてリリース 担当に受け渡す
#RAKUSMeetup ©2020 RAKUS Co., Ltd. V. ビルド、リリース、実行 • 楽楽精算では… リリース担当はビルド
されたアプリを 各サーバに配置する
#RAKUSMeetup ©2020 RAKUS Co., Ltd. V. ビルド、リリース、実行 • 楽楽精算では… 各サーバ上で配置
されたアプリを起動
#RAKUSMeetup ©2020 RAKUS Co., Ltd. V. ビルド、リリース、実行 • 楽楽精算では… 開発担当が勝手に
ビルドを変更できない (ビルドと実行の 分離) 全環境に対して同じ ビルドでリリースする (ビルドとリリースの 分離) 再起動は必要なサーバ で行うだけ (実行とリリースの 分離)
#RAKUSMeetup ©2020 RAKUS Co., Ltd. Twelve-Factor App • 今回説明する内容 •
III. 設定 • X. 開発/本番一致 • V. ビルド、リリース、実行 • VIII. 並行性
#RAKUSMeetup ©2020 RAKUS Co., Ltd. VIII. 並行性 • 原則:インスタンス数の増加によって負荷に対応せよ! •
サーバそのもののスペック増強だと仮想マシンの再起動が必要 • ⇒ユーザが使えない時間が発生してしまう • プロセスが1つのみなのでそれが落ちたらもう対応不可 • プロセスを水平分割し、負荷によって処理を振り分けるべき • 例:ロードバランサ • プロセスが複数あれば1つが落ちても別のプロセスで処理を継続できる
#RAKUSMeetup ©2020 RAKUS Co., Ltd. VIII. 並行性 • 楽楽精算では… •
ロードバランサ×ユーザ別の複数環境 ・・・ LB LB LB
#RAKUSMeetup ©2020 RAKUS Co., Ltd. VIII. 並行性 • 楽楽精算では… •
ロードバランサ×ユーザ別の複数環境 ・・・ LB LB LB ユーザごとに環境を 分割して負荷分散 ロードバランサで 処理を振り分けて 負荷分散
#RAKUSMeetup ©2020 RAKUS Co., Ltd. VIII. 並行性 • おまけ •
リリースを分割してリスクを減らせる場合もある ・・・ LB LB LB 1回目リリース 2回目リリース
#RAKUSMeetup ©2020 RAKUS Co., Ltd. まとめ • Twelve-Factor Appと楽楽精算の比較を行った •
実現できていない点は実際に運用上苦労しているところ • 今から改善できそうなところも多い • 大事なことは「何故それをすべきなのか?」を考えること • 基本的に「こうするべき」としか書かれていない • 各アプリの特性や目指す形を考えた上で採用するか決める • そもそも今でも役立つとはいえ8年前の話
#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