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
個人サービスを最速でPHPからGoにリプレイスするためにやったこと・やらなかったこと / Re...
Search
itosho
December 15, 2018
Programming
0
2.6k
個人サービスを最速でPHPからGoにリプレイスするためにやったこと・やらなかったこと / Replace from PHP to Go in Indie Development
PHPカンファレンス2018の発表資料です
itosho
December 15, 2018
Tweet
Share
More Decks by itosho
See All by itosho
Windsurf Rulesでどう自分のクローンをつくるか / How can I make a clone of myself in Windsurf Rules
itosho
0
98
Text EditorとしてのWindsurf / Windsurf as a Text Editor
itosho
0
92
インターネットサービスの育て方 / How to Grow and Scale Internet Services
itosho
0
94
打線組という個人サービスを Goで開発している話 / Indie Service Development by Go
itosho
1
180
Components Reconsidered
itosho
1
2.3k
打線組を支える技術 / The Technology Behind Dasengumi
itosho
0
53
組織をスケールさせるためのTech Vision / Connehito Tech Vision for Growing Our Team
itosho
2
660
生きのびるためのインディー開発 / Indie Development to Survive
itosho
0
49
Gopher道場アフターストーリー / Gopher Dojo After Story
itosho
0
150
Other Decks in Programming
See All in Programming
Go言語はstack overflowの夢を見るか?
logica0419
0
670
Amazon ECS Managed Instances が リリースされた!キャッチアップしよう!! / Let's catch up Amazon ECS Managed Instances
cocoeyes02
0
120
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
380
Temporal Knowledge Graphで作る! 時間変化するナレッジを扱うAI Agentの世界
po3rin
5
1.1k
Google Opalで使える37のライブラリ
mickey_kubo
3
180
SidekiqでAIに商品説明を生成させてみた
akinko_0915
0
110
フロントエンド開発のためのブラウザ組み込みAI入門
masashi
7
3.6k
contribution to astral-sh/uv
shunsock
0
570
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
440
CSC305 Lecture 12
javiergs
PRO
0
250
O Que É e Como Funciona o PHP-FPM?
marcelgsantos
0
240
ネストしたdata classの面倒な更新にさようなら!Lensを作って理解するArrowのOpticsの世界
shiita0903
1
180
Featured
See All Featured
Music & Morning Musume
bryan
46
6.9k
Practical Orchestrator
shlominoach
190
11k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.3k
Bash Introduction
62gerente
615
210k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
The Invisible Side of Design
smashingmag
302
51k
Automating Front-end Workflow
addyosmani
1371
200k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
Six Lessons from altMBA
skipperchong
29
4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Become a Pro
speakerdeck
PRO
29
5.6k
Transcript
個人サービスを最速で PHPからGoにリプレイスするために やったこと・やらなかったこと PHP Conference 2018 @itosho 1
▪ 君の名は? 伊藤 翔 @itosho コネヒト株式会社所属 絶賛エンジニア募集中! Supership株式会社から出向中 PHPer兼マネージャー
インディー開発が趣味です ※インディー開発=個人でアプリやwebサービスをつくること 詳細は https://itosho.github.io をみてみてください! 3
今日はその中の一つを 「最速」でPHPからGoに リプレイスした時のお話 4
▪ 免責事項 ・PHP下げ↓Go上げ↑ではありません!(どっちも好き) ・Goの話というよりもリプレイスの話がメイン
▪ 免責事項 ・PHP下げ↓Go上げ↑ではありません!(どっちも好き) ・そもそも今日はGoの話というよりもリプレイスの話 ちなみに一番好きな言語はRubyです(小声)
▪ リプレイス対象システム ・スマートフォンアプリ向けAPIサーバー ・規模: RESTベースのWebAPIが17本 ・技術スタック: PHP7系, CakePHP3系, MySQL, NGINX
何故「最速」でやる必要があるのか? 8
インディー開発の最大の敵 9
飽きる 10
取捨選択が必要 11
やらなかったこと 12
やらなかったことその① I/Fの抜本的な変更 13
▪ 誘惑に負けない ・せっかくだから!と色々やりたくなってしまう ・GoだとgRPC, GAEなどなど ・今回は言語のリプレイスのみにフォーカス
やらなかったことその② 単体テスト 15
▪ テストは大事 ・当時Goのテストの知識があまりなかった ・飽きが来るスピード > 単体テストを書くコスト ・単体テスト以外で品質を担保する
やったこと 17
やったことその① E2Eテスト 18
▪ やっぱりテストは大事 ・E2E用のスクリプトを作成 ・基本的に既存のAPIと同じだったらOK ・新旧のシステムを同時に起動(ポート別)して、 それぞれに対して同じリクエストを送る テスト スクリプト Go API
PHP API JSON JSON レスポンス比較! 同じリクエスト
やったことその② 段階リリース 20
▪ 漸進的に前進していく ・1本APIが出来たらすぐリリースする ・NGINXを利用してリバースプロキシ先を振り分け ・少しずつでも本番環境で稼働させると最後まで頑張れる NGINX PHP API’s Go API’s
/users/xxx /users/yyy /contents/xxx /contents/yyy
やったことその③ 郷に従う 22
▪ さっきI/Fを変更しないと言ったがあれは嘘だ ・旧システムの面影が残ってると今後負債になる可能性 ・新システムの郷(Go)に従うことが大切 ・具体的にはDBのデフォルトのカラム名である、 created / modified を created_at
/ updated_at に変更
結果 24
▪ 最速でリプレイス出来たかもしれない ・3ヶ月弱(ほぼ週末のみ)でリプレイス完了 ・大きな不具合はなし(軽微な不具合: 1件) ・レスポンスタイムが平均120msから平均90msに!
▪ 最速でリプレイス出来たかもしれない ・3ヶ月弱(ほぼ週末のみ)でリプレイス完了 ・大きな不具合はなし(軽微な不具合: 1件) ・レスポンスタイムが平均120msから平均90msに! 拍手が欲しいです
まとめ 27
▪ 2秒で分かるやったこと・やらなかったこと やったこと ①E2Eテスト ②段階リリース ③郷に従う やらなかったこと ①I/Fの抜本的な変更 ②単体テスト
▪ インディー開発 × リプレイス作業 = 学び∞ ・取捨選択のセンスが磨ける ・普段の業務でも役に立つ(世にリプレイス案件は多い) ・手段を目的に出来る(学びたい技術を好きに使える) ・1つシステムをつくれば無限にリプレイス出来る!
皆さんもインディー開発しましょう! 30
31