Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
システムリニューアルをやってみた/tried-system-renewal
Search
swat
November 30, 2019
Programming
0
250
システムリニューアルをやってみた/tried-system-renewal
swat
November 30, 2019
Tweet
Share
Other Decks in Programming
See All in Programming
統一感のある Go コードを生成 AI の力で手にいれる
otakakot
0
3k
Gleamという選択肢
comamoca
6
750
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
770
無関心の谷
kanayannet
0
180
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
1
850
エンジニア向け採用ピッチ資料
inusan
0
140
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
220
来たるべき 8.0 に備えて React 19 新機能と React Router 固有機能の取捨選択とすり合わせを考える
oukayuka
2
830
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
150
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
550
GraphRAGの仕組みまるわかり
tosuri13
7
460
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
130
Featured
See All Featured
Designing Experiences People Love
moore
142
24k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Automating Front-end Workflow
addyosmani
1370
200k
How to train your dragon (web standard)
notwaldorf
92
6.1k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
20
1.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
How STYLIGHT went responsive
nonsquared
100
5.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Making Projects Easy
brettharned
116
6.3k
Transcript
システムリニューアルをやってみた 株式会社ウェイブ 渡邉 晋 2019/11/30 C-4 #devboostC 1
会社紹介 株式会社ウェイブ 2010 年設⽴ 現在 約100 名(開発エンジニア15 名) 電⼦コミック出版を軸に多⽅⾯に事業を展開 アニメ、スマホゲーム等々
2
プロフィール 現職に2014 年新卒⼊社 メインはRails 、AWS を使ったWeb 開発 Unity でiOS 、Android
向けのアプリ開発も経験 現在は新規サービスを担当中 3
今⽇話すこと システムリニューアルのプロジェクトリーダーをやった話 すごくうまくいったという話じゃない 当時考えたこと、今振り返って思うこと、リニューアルを通して 得たものをお伝えできればと思っています *ソフトウェアアーキテクチャの詳細な技術や図などのお話は出てき ません 4
⽬次 1. リニューアルを任された不安 2. アーキテクチャの検討 3. ⻑引くリニューアル 4. 振り返って思うこと 5.
まとめ 5
⽬次 1. リニューアルを任された不安 2. アーキテクチャの検討 3. ⻑引くリニューアル 4. 振り返って思うこと 5.
まとめ 6
サービス紹介 ComicFesta https://comic.iowl.jp/ 電⼦コミック配信サイト Web アプリ ⾃社オリジナル作品が読める 決済⽅法 クレジットカード 携帯料⾦合算
7
当時の ComicFesta の状況 2017 年5 ⽉時点 リリースからの年数 : 6 年⽬
開発チーム:3 名 ネットワーク構成 :アプリ1 台、DB1 台 負荷の増加には スケールアップで対応 8
抱えていた問題 ライブラリのバージョンが古く、最新の機能が使えない ドキュメントが無くブラックボックスな機能 テストが無い 環境に依存した不具合 スペック上限までスケールアップしていた ⇛ システムリニューアルしよう! 9
当時の⾃分のスキル ちょうどプロジェクトが終了して空いていた渡邉に⽩⽻の⽮が⽴つ ⼩規模プロジェクトをいくつか経験 ⼩さめ(2core8GB )のアプリサーバー1 台で済む程度の規模 ⼤体のプロジェクトが単発で作って終わり 経験した開発チームは多くて3 名 O/R
マッパーしか使ったことがなく、SQL 書けない システムリニューアルって何をすればいいの... ? 10
不安 最初はリニューアルプロジェクトを1⼈で進めていく 既存の開発チームは進めている機能開発が終了次第合流する予定 経験のないプロジェクト規模に不安を覚える ひたすら本や他社事例を読んだり、他メンバーの助⾔を受けながら リニューアルに必要そうな知識をつけていく アーキテクチャ設計 テーブル設計 アジャイル etc
11
ある本に出会う レガシーソフトウェア改善ガイド クリス・バーチャル 著 吉川邦夫 訳 おすすめ リニューアルを考えている⼈はぜひ読んで ほしい この本でリニューアルをするための道筋が
⾒えた 12
リニューアルへの道筋 1. サービス全体のアーキテクチャを決める 2. リニューアルの進め⽅を決める 3. リニューアル後のためにワークフローと基盤を改善する 13
⽬次 1. リニューアルを任された不安 2. アーキテクチャの検討 3. ⻑引くリニューアル 4. 振り返って思うこと 5.
まとめ 14
サービスのアーキテクチャを考える 今回のリニューアルではモノリシックな形を⽬指す マイクロサービスなどのサービスの分割も検討するが辞める 学習コストと経験不⾜によるリリース時の予期せぬ不具合を懸念 不安材料は減らす 後々のサービスの分割を⾒据えて、整理されたモノリシックな形の リニューアルを⽬指す 15
リリースの⽅法を考える ⼀気にリライトしてリリースするビッグバンリリースを選択する まだ今の規模感ならビッグバンリリースで⼗分と判断 段階的なリプレイスの場合に考慮しなければならないDB の データの同期などを無視できる だが、実際はそんな⽢くなかった... 16
インフラストラクチャを考える Docker を使う 12FactorApp を参考に環境を構築 https://12factor.net/ja/ 本番、ステージングをできるだけ⼀緒の実⾏環境にする Docker のデプロイ先にはECS を選択する
当時、Kubernetes より国内の使⽤実績があったECS を選択した オートスケーリングにも対応させる AWS のマネージドサービスをフルで使う CloudFormation 、RDS 、ElastiCache 、CloudWatch 、etc 17
開発環境を考える できるだけ⾃動化する 開発環境は1 コマンドで⽴ち上がるようにする ⾃動テストの導⼊ CI/CD の導⼊ DB のスキーマ情報からカラムに対してコメントを書き込める表を ⾃動で⽣成するスクリプトを⾃作
ER 図もライブラリを使って⾃動出⼒ 18
⽬次 1. リニューアルを任された不安 2. アーキテクチャの検討 3. ⻑引くリニューアル 4. 振り返って思うこと 5.
まとめ 19
期間を⾒積もる 開発着⼿時は期間限定メンバーも含めて5 ⼈で開発できることに! ⾒積もりは3 ヶ⽉ぐらいを想定 参考にできるコードはあるので、うまくリライトしながら実装 できれば0 から作るよりはコストは軽そう(と考えた) だが、この⾒積もりが⽢かった... そして2017
年7 ⽉、開発が始まる 20
⻑引くリニューアル 開発開始して4 ヶ⽉が経過したが進捗は5 割 既存のコードには、歴史的背景から対応した特例コードがたくさん ドキュメントが無い中で、そのコードを無視してリライトして良 いのか調べながら実装するのは思ったよりコストが掛かった... この間は機能開発が進まず、ユーザーに価値を届けられていない ビジネス的にまずい状態 21
計画を⾒直す 必要な機能の優先度を洗い直し、リリース予定⽇を再設定 ⼗分なリファクタリングができないままの旧コードを もってきたりして、スピードを早める 技術的負債は後で回収するという計画 22
無事にリリース 最終的には7 ヶ⽉の開発期間でリリース 技術的負債を許容しないそのままのペースで進めていたら9 ヶ⽉ はかかっていたかも...( 当初⾒積もりの約3 倍) リリース時⼤きな不具合はなく、無事稼働することができた リリース後はリニューアルで⽌まっていた新機能開発を優先的に
進めていった 23
⽬次 1. リニューアルを任された不安 2. アーキテクチャの検討 3. ⻑引くリニューアル 4. 振り返って思うこと 5.
まとめ 24
良かったところ テスト の導⼊やデバッグを⼿厚く⾏ったので、⼤きな不具合なく リリースができた 定量的に⾒られていないが、開発スピードが上がった(と思う) ドキュメント整備と⾃動化で開発が楽になった 企画のメンバーに開発が速くなったと お褒めの⾔葉を頂いた 25
良かったところ リニューアルを通して、⻑く開発していける 変更に強いアーキテクチャの設計を学ぶことができた 作りっぱなしで良かった今までとは違う視点 適切なコンポーネントの分割 依存関係の管理 ワークフローと基盤の改善 26
良くなかったところ ビッグバンリリースを簡単に選択したこと リライトのコスト⾒積もりが⽢かった... 開発が⻑引いてしまった時を考慮して、段階的なリプレイスの 検討をもっとしておくべきだった 27
良くなかったところ 計画の⾒直しが遅かった リリースを早めるため、技術的負債を残すことを選択せざるを 得なかった 今でもまだ回収できていないところがある ⾒積もり⽤の期間を最初の1 ヶ⽉ぐらいとって、その間の開発の 進み具合をみてからじっくりリリース計画を練っていけばよかっ たかも 28
⽬次 1. リニューアルを任された不安 2. アーキテクチャの検討 3. ⻑引くリニューアル 4. 振り返って思うこと 5.
まとめ 29
まとめ システムリニューアルやってよかった 変更に強いアーキテクチャの設計を学んだ ビッグバンリリースで良いのかはよく考えよう 不測の⾃体が起きたときのリスクが⼤きい 最初の⾒積もりの3 倍は膨れる(*個⼈の感想です) 計画の⾒直しはお早めに 技術的負債は残り続ける 30