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
個人サービスを最速でPHPからGoにリプレイスするためにやったこと・やらなかったこと / Re...
Search
itosho
December 15, 2018
Programming
2.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
個人サービスを最速でPHPからGoにリプレイスするためにやったこと・やらなかったこと / Replace from PHP to Go in Indie Development
PHPカンファレンス2018の発表資料です
itosho
December 15, 2018
More Decks by itosho
See All by itosho
【2025年版】インターネットサービスの育て方 / How to Grow and Scale Internet Services 2025
itosho
0
280
Windsurf Rulesでどう自分のクローンをつくるか / How can I make a clone of myself in Windsurf Rules
itosho
0
150
Text EditorとしてのWindsurf / Windsurf as a Text Editor
itosho
0
380
【2024年版】インターネットサービスの育て方 / How to Grow and Scale Internet Services
itosho
0
130
打線組という個人サービスを Goで開発している話 / Indie Service Development by Go
itosho
1
210
Components Reconsidered
itosho
1
2.4k
打線組を支える技術 / The Technology Behind Dasengumi
itosho
0
79
組織をスケールさせるためのTech Vision / Connehito Tech Vision for Growing Our Team
itosho
2
720
生きのびるためのインディー開発 / Indie Development to Survive
itosho
0
73
Other Decks in Programming
See All in Programming
一人だけ、Kiroが静止する日
hideg
0
120
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
290
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
250
Java 27新機能 / Java 27 new features
kishida
2
150
setup-vp GitLab対応の裏側
naokihaba
0
110
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
2k
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
7.5k
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
260
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
730
Security issues being discussed on Web Platforms
petamoriken
0
980
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
150
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
3.4k
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Automating Front-end Workflow
addyosmani
1369
210k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.1k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
340
Between Models and Reality
mayunak
4
460
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
760
Into the Great Unknown - MozCon
thekraken
41
2.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
The Limits of Empathy - UXLibs8
cassininazir
1
680
Being A Developer After 40
akosma
91
590k
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