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
2.8k
0
Share
個人サービスを最速で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
210
Windsurf Rulesでどう自分のクローンをつくるか / How can I make a clone of myself in Windsurf Rules
itosho
0
130
Text EditorとしてのWindsurf / Windsurf as a Text Editor
itosho
0
320
【2024年版】インターネットサービスの育て方 / How to Grow and Scale Internet Services
itosho
0
110
打線組という個人サービスを Goで開発している話 / Indie Service Development by Go
itosho
1
200
Components Reconsidered
itosho
1
2.4k
打線組を支える技術 / The Technology Behind Dasengumi
itosho
0
68
組織をスケールさせるためのTech Vision / Connehito Tech Vision for Growing Our Team
itosho
2
700
生きのびるためのインディー開発 / Indie Development to Survive
itosho
0
62
Other Decks in Programming
See All in Programming
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
500
プロパティの順序で型推論が壊れる!? TypeScript6.0の修正からContext-Sensitivityの仕組みを追う
bicstone
2
1.3k
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
190
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
290
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
140
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.5k
ふつうのFeature Flag実践入門
irof
7
3.6k
ビジネスモデルから紐解く、AI+型駆動開発
hirokiomote
2
5.2k
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
Oxlintのカスタムルールの現況
syumai
5
1k
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
110
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
140
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
390
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Mobile First: as difficult as doing things right
swwweet
225
10k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
How to Ace a Technical Interview
jacobian
281
24k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
190
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
590
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
250
Designing for Timeless Needs
cassininazir
1
250
How to make the Groovebox
asonas
2
2.2k
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