SlideShare a Scribd company logo
Submit Search
Upload
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
Report
Share
gree_tech
gree_tech
Follow
•
0 likes
•
2,868 views
1
of
26
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
•
0 likes
•
2,868 views
Report
Share
Download Now
Download to read offline
Engineering
GREE Tech Conference 2021 で発表された資料です。 https://techcon.gree.jp/2021/session/Session-2
Read more
gree_tech
gree_tech
Follow
Recommended
エンジニアの個人ブランディングと技術組織 by
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
23.3K views
•
40 slides
オーバーエンジニアリングって何? #devsumi #devsumiA by
オーバーエンジニアリングって何? #devsumi #devsumiA
Ore Product
5K views
•
69 slides
イベント・ソーシングを知る by
イベント・ソーシングを知る
Shuhei Fujita
30.9K views
•
33 slides
分散トレーシング技術について(Open tracingやjaeger) by
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
23.3K views
•
25 slides
シリコンバレーの「何が」凄いのか by
シリコンバレーの「何が」凄いのか
Atsushi Nakada
183.9K views
•
77 slides
開発速度が速い #とは(LayerX社内資料) by
開発速度が速い #とは(LayerX社内資料)
mosa siru
61.4K views
•
18 slides
More Related Content
What's hot
フロー効率性とリソース効率性について #xpjug by
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
106.1K views
•
62 slides
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive by
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
122.2K views
•
99 slides
マイクロにしすぎた結果がこれだよ! by
マイクロにしすぎた結果がこれだよ!
mosa siru
132.6K views
•
32 slides
それはYAGNIか? それとも思考停止か? by
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
29.3K views
•
41 slides
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料) by
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
3.8K views
•
68 slides
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ by
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
54.7K views
•
243 slides
What's hot
(20)
フロー効率性とリソース効率性について #xpjug by Itsuki Kuroda
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
•
106.1K views
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive by Tokoroten Nakayama
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
•
122.2K views
マイクロにしすぎた結果がこれだよ! by mosa siru
マイクロにしすぎた結果がこれだよ!
mosa siru
•
132.6K views
それはYAGNIか? それとも思考停止か? by Yoshitaka Kawashima
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
•
29.3K views
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料) by NTT DATA Technology & Innovation
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
•
3.8K views
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ by Yoshiki Hayama
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
•
54.7K views
ユーザーストーリー駆動開発で行こう。 by toshihiro ichitani
ユーザーストーリー駆動開発で行こう。
toshihiro ichitani
•
120.9K views
Tier Ⅳ Tech Meetup #2 - 自動運転を作るのはCloudシステムの集合体?? 活用技術を大解剖 - by Tier_IV
Tier Ⅳ Tech Meetup #2 - 自動運転を作るのはCloudシステムの集合体?? 活用技術を大解剖 -
Tier_IV
•
11.6K views
DockerコンテナでGitを使う by Kazuhiro Suga
DockerコンテナでGitを使う
Kazuhiro Suga
•
18.8K views
イミュータブルデータモデル(入門編) by Yoshitaka Kawashima
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
•
185.8K views
3分でわかるAzureでのService Principal by Toru Makabe
3分でわかるAzureでのService Principal
Toru Makabe
•
30.5K views
本当は恐ろしい分散システムの話 by Kumazaki Hiroki
本当は恐ろしい分散システムの話
Kumazaki Hiroki
•
686K views
IT系エンジニアのためのプレゼンテーション入門 by Masahito Zembutsu
IT系エンジニアのためのプレゼンテーション入門
Masahito Zembutsu
•
289.8K views
Test Yourself - テストを書くと何がどう変わるか by Takuto Wada
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
•
38.3K views
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~ by Masahito Zembutsu
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Masahito Zembutsu
•
60.9K views
私にとってのテスト by Takuto Wada
私にとってのテスト
Takuto Wada
•
16.8K views
サービス開発における フロントエンド・ドメイン駆動設計の実践 by TakefumiYoshii
サービス開発における フロントエンド・ドメイン駆動設計の実践
TakefumiYoshii
•
41.4K views
テスト文字列に「うんこ」と入れるな by Kentaro Matsui
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
•
177.9K views
コンテナの作り方「Dockerは裏方で何をしているのか?」 by Masahito Zembutsu
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
•
30.8K views
組織にテストを書く文化を根付かせる戦略と戦術 by Takuto Wada
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
•
76.4K views
Similar to コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
マイクロサービス時代の生存戦略 with HashiCorp by
マイクロサービス時代の生存戦略 with HashiCorp
Masahito Zembutsu
5.8K views
•
121 slides
今、最もイケてるPHPフレームワークLaravel4 by
今、最もイケてるPHPフレームワークLaravel4
アシアル株式会社
12.8K views
•
38 slides
Python におけるドメイン駆動設計(戦術面)の勘どころ by
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
17.4K views
•
33 slides
技術選択とアーキテクトの役割 by
技術選択とアーキテクトの役割
Toru Yamaguchi
42K views
•
90 slides
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力 by
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
6.6K views
•
98 slides
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例 by
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Shigeru UCHIYAMA
2K views
•
118 slides
Similar to コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
(20)
マイクロサービス時代の生存戦略 with HashiCorp by Masahito Zembutsu
マイクロサービス時代の生存戦略 with HashiCorp
Masahito Zembutsu
•
5.8K views
今、最もイケてるPHPフレームワークLaravel4 by アシアル株式会社
今、最もイケてるPHPフレームワークLaravel4
アシアル株式会社
•
12.8K views
Python におけるドメイン駆動設計(戦術面)の勘どころ by Junya Hayashi
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
•
17.4K views
技術選択とアーキテクトの役割 by Toru Yamaguchi
技術選択とアーキテクトの役割
Toru Yamaguchi
•
42K views
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力 by ThinReports
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
ThinReports
•
6.6K views
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例 by Shigeru UCHIYAMA
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Shigeru UCHIYAMA
•
2K views
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか? by Developers Summit
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Developers Summit
•
1.5K views
Lithium Labo #1 by Yusuke Ando
Lithium Labo #1
Yusuke Ando
•
2K views
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D by Toshiyuki Ienaga
Next2Dで始めるゲーム開発 - Game Development Starting with Next2D
Toshiyuki Ienaga
•
85 views
数千人が利用する楽天Redmineの過去と未来 - The past and future of Rakuten Redmine that is the... by Dai FUJIHARA
数千人が利用する楽天Redmineの過去と未来 - The past and future of Rakuten Redmine that is the...
Dai FUJIHARA
•
17.3K views
数千人が利用する楽天Redmineの過去と未来 by Rakuten Group, Inc.
数千人が利用する楽天Redmineの過去と未来
Rakuten Group, Inc.
•
3.4K views
mbedではじめる組み込みHaskellプログラミング by Kiwamu Okabe
mbedではじめる組み込みHaskellプログラミング
Kiwamu Okabe
•
4K views
Smart Tennis Lesson Serverless Design by Ryuji TAKEHARA
Smart Tennis Lesson Serverless Design
Ryuji TAKEHARA
•
1.3K views
OSC福岡 20111203 by Hiroshi Bunya
OSC福岡 20111203
Hiroshi Bunya
•
2.9K views
ゼロからのプログラミングRails講座 Codeanywhere版 by DIVE INTO CODE Corp.
ゼロからのプログラミングRails講座 Codeanywhere版
DIVE INTO CODE Corp.
•
10.7K views
ゲームのインフラをAwsで実戦tips全て見せます by infinite_loop
ゲームのインフラをAwsで実戦tips全て見せます
infinite_loop
•
6.1K views
【学習メモ#1st】12ステップで作る組込みOS自作入門 by sandai
【学習メモ#1st】12ステップで作る組込みOS自作入門
sandai
•
10K views
デブサミ2013【15-D-4】Opsから挑むDevOps by Developers Summit
デブサミ2013【15-D-4】Opsから挑むDevOps
Developers Summit
•
2.8K views
CodeIgniterによるPhwittr by kenjis
CodeIgniterによるPhwittr
kenjis
•
9.3K views
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか? by Takashi Sogabe
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Takashi Sogabe
•
5K views
More from gree_tech
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜 by
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
gree_tech
725 views
•
36 slides
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介 by
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
gree_tech
229 views
•
13 slides
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表 by
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
gree_tech
1K views
•
18 slides
アプリ起動時間高速化 ~推測するな、計測せよ~ by
アプリ起動時間高速化 ~推測するな、計測せよ~
gree_tech
1.9K views
•
84 slides
長寿なゲーム事業におけるアプリビルドの効率化 by
長寿なゲーム事業におけるアプリビルドの効率化
gree_tech
347 views
•
116 slides
Cloud Spanner をより便利にする運用支援ツールの紹介 by
Cloud Spanner をより便利にする運用支援ツールの紹介
gree_tech
683 views
•
31 slides
More from gree_tech
(20)
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜 by gree_tech
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
gree_tech
•
725 views
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介 by gree_tech
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
gree_tech
•
229 views
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表 by gree_tech
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
gree_tech
•
1K views
アプリ起動時間高速化 ~推測するな、計測せよ~ by gree_tech
アプリ起動時間高速化 ~推測するな、計測せよ~
gree_tech
•
1.9K views
長寿なゲーム事業におけるアプリビルドの効率化 by gree_tech
長寿なゲーム事業におけるアプリビルドの効率化
gree_tech
•
347 views
Cloud Spanner をより便利にする運用支援ツールの紹介 by gree_tech
Cloud Spanner をより便利にする運用支援ツールの紹介
gree_tech
•
683 views
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介 by gree_tech
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
gree_tech
•
596 views
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について by gree_tech
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
gree_tech
•
626 views
海外展開と負荷試験 by gree_tech
海外展開と負荷試験
gree_tech
•
593 views
翻訳QAでのテスト自動化の取り組み by gree_tech
翻訳QAでのテスト自動化の取り組み
gree_tech
•
305 views
組み込み開発のテストとゲーム開発のテストの違い by gree_tech
組み込み開発のテストとゲーム開発のテストの違い
gree_tech
•
573 views
サーバーフレームワークに潜んでる脆弱性検知ツール紹介 by gree_tech
サーバーフレームワークに潜んでる脆弱性検知ツール紹介
gree_tech
•
209 views
データエンジニアとアナリストチーム兼務になった件について by gree_tech
データエンジニアとアナリストチーム兼務になった件について
gree_tech
•
308 views
シェアドサービスとしてのデータテクノロジー by gree_tech
シェアドサービスとしてのデータテクノロジー
gree_tech
•
432 views
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて- by gree_tech
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
gree_tech
•
1K views
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話 by gree_tech
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
gree_tech
•
1.1K views
比較サイトの検索改善(SPA から SSR に変換) by gree_tech
比較サイトの検索改善(SPA から SSR に変換)
gree_tech
•
693 views
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜 by gree_tech
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
gree_tech
•
396 views
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮) by gree_tech
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
gree_tech
•
751 views
基調講演 -グリーが目指すエンジニアのあり方、チームのあり方- by gree_tech
基調講演 -グリーが目指すエンジニアのあり方、チームのあり方-
gree_tech
•
445 views
Recently uploaded
onewedge_companyguide1 by
onewedge_companyguide1
ONEWEDGE1
7 views
•
22 slides
how query cost affects search behavior translated in JP by
how query cost affects search behavior translated in JP
Tobioka Ken
9 views
•
16 slides
システム概要.pdf by
システム概要.pdf
Taira Shimizu
36 views
•
1 slide
SSH超入門 by
SSH超入門
Toru Miyahara
207 views
•
21 slides
Najah Matsuo Self Introduction by
Najah Matsuo Self Introduction
NajahMatsuo
7 views
•
29 slides
robotics42.pptx by
robotics42.pptx
Natsutani Minoru
188 views
•
18 slides
Recently uploaded
(10)
onewedge_companyguide1 by ONEWEDGE1
onewedge_companyguide1
ONEWEDGE1
•
7 views
how query cost affects search behavior translated in JP by Tobioka Ken
how query cost affects search behavior translated in JP
Tobioka Ken
•
9 views
システム概要.pdf by Taira Shimizu
システム概要.pdf
Taira Shimizu
•
36 views
SSH超入門 by Toru Miyahara
SSH超入門
Toru Miyahara
•
207 views
Najah Matsuo Self Introduction by NajahMatsuo
Najah Matsuo Self Introduction
NajahMatsuo
•
7 views
robotics42.pptx by Natsutani Minoru
robotics42.pptx
Natsutani Minoru
•
188 views
lt.pptx by tomochamarika
lt.pptx
tomochamarika
•
69 views
図解で理解するvetKD by ryoo toku
図解で理解するvetKD
ryoo toku
•
85 views
3Dプリンタでロボット作るよ#1_黎明編 by Yoshihiro Shibata
3Dプリンタでロボット作るよ#1_黎明編
Yoshihiro Shibata
•
20 views
AIで始めるRustプログラミング #SolDevHub by K Kinzal
AIで始めるRustプログラミング #SolDevHub
K Kinzal
•
21 views
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
1.
コードの自動修正によって実現する 機能開発を止めないフレームワーク移行 グリーライフスタイル株式会社 木村洋太
2.
木村洋太 ● 所属 ○ グリーライフスタイル株式会社
/ プロダクト開発部 / メディア開発グ ループ / エンジニアリングチーム ● 経歴 ○ 2020年 グリーライフスタイル株式会社 入社 ○ 主に「LIMIA」のサーバー・インフラ開発 自己紹介 2 2
3.
LIMIAを知っていますか? ⓘ Start presenting
to display the poll results on this slide.
4.
お手軽で、すぐ真似できるのに、ちゃんと暮らしやすい。 LIMIAは家事の工夫が大集合するライフスタイルメディアです。 お手軽工夫で家事上手 LIMIAの紹介
5.
● 移行前 ○ フレームワーク ■
FuelPHP ○ 言語 ■ PHP7.0 ○ インフラ ■ EC2 ● 移行後 ○ フレームワーク ■ Laravel ○ 言語 ■ PHP7.4 ○ インフラ ■ ECS Fargate 5 フレームワーク移行プロジェクト https://aws.amazon.com/jp/architecture/icons/
6.
6 移行プロジェクトのスケジュール ● 機能開発を止めずに移行して欲しいという要望 ● 移行にかけられる工数は限られていた ○
並行開発期間が長そうな見込みだった 方針 検討 コード自動修正ルールの作成 QA・バグ修正 インフラ検証 1月 2月 7月 9月 11月 実際の移行スケジュール 社内管理ツール リリース カナリヤ リリース開始 0.5人 1人 2人
7.
7 なぜ自動修正に踏み切ったか? ● 軽量なFuelPHP =>
機能の多いLaravelへの移行 ○ DB (Query Builder), Controllerあたりを置き換えれば良さそう ○ View周りはテンプレートエンジンを置き換えるだけで良さそう ● 手動修正の厳しさ ○ 50万行超えのコードベース ○ 人や時間が足りない ○ 機能開発を並行で行いたいが…… ■ 移行元と移行後のコードの両方を変更する必要がある ■ 移行後のコードに変更を加えるとconflictが起こり得る ■ 機能開発を止めるしかないが、止めた場合は半年近く機能開発が進まないこと が見込まれた
8.
8 Rector (rectorphp/rector) ● 自動リファクタリング・マイグレーションツール ○
DeadCode, EarlyReturn... などのリファクタリングルール ○ PHPバージョンのupgrade, downgrade ● 特徴 ○ nikic/php-ast をベースに抽象構文木(AST)を編集 ○ 型情報をPHPStanから取得できる ○ テストが書きやすい ○ 開発が活発
9.
9 フレームワーク移行におけるコードの修正例 ● Query Builderの置き換え ○
where('col', 'in', $b) => whereIn($a, $b) ○ where('col', '=', $subQuery) => whereSub('col', $subQuery) ○ DB::select_array(['id', 'name']) => DB::select('id', 'name') ● Controllerの置き換え ○ Input, Request, Responseなどを対応するメソッドに置き換え ○ Controllerをpsr-4準拠にrename ○ psr-4のnamespaceに合わせたディレクトリへ移動
10.
10 Rectorの変換例: EarlyReturn ChangeNestedIfsToEarlyReturnRector public function
hoge($value) { if ($value % 2 === 0) { if ($value % 3 === 0) { return 'yes'; } } return 'no'; } public function hoge($value) if ($value % 2 !== 0) { return 'no'; } if ($value % 3 === 0) { return yes; } return 'no'; }
11.
11 抽象構文木 (Abstract Syntax
Tree: AST) https://github.com/nikic/PHP-Parser <?php $var = "Hello World!"; Stmt_Expression expr Expression_Assign var, expr Expression_Variable name: var Scalar_String value: Hello World! expr var expr
12.
12 Rectorの処理(抽象構文木の編集) public function getNodeTypes():
array { return [String_::class]; } public function refactor($node): ?Node { if ($node->value === "Hello World!") { $node->value = "Hello GREE Tech Conf!"; return $node; } return null; } Scalar_String value: Hello GREE Tech Conf! Stmt_Expression expr Expression_Assign var, expr Expression_Variable name: var expr var Scalar_String value: Hello World! Scalar_String value: Hello World!
13.
13 Rectorの処理(抽象構文木からコードの構築) Scalar_String value: Hello GREE
Tech Conf! <?php $var = "Hello GREE Tech Conf!"; Stmt_Expression expr Expression_Assign var, expr Expression_Variable name: var expr var
14.
14 実際のコード自動修正の例 FuelPHP ¥DB::select_array(['id', 'name'])->from('user'); Laravel ¥DB::table('user')->select('id', 'name')
15.
15 実際のRectorルール: select fromをtable
select ¥DB::select_array(['id', 'name'])->from('user'); ¥DB::table('user')->select_array(['id', 'name']); select fromをtable selectに変更
16.
16 実際のRectorルール: select_arrayをselect ¥DB::table('user')->select('id', 'name'); ¥DB::select_array(['id',
'name'])->from('user'); ¥DB::table('user')->select_array(['id', 'name']); select fromをtable selectに変更 select_arrayの引数を展開
17.
作成したRectorのルール数 ⓘ Start presenting
to display the poll results on this slide.
18.
18 答え
19.
19 なぜ自動修正に踏み切ったか?(再掲) ● 軽量なFuelPHP =>
機能の多いLaravelへの移行 ○ DB (Query Builder), Controllerあたりを置き換えれば良さそう ○ View周りはテンプレートエンジンを置き換えるだけで良さそう ● 手動修正の厳しさ ○ 50万行超えのコードベース ○ 人や時間が足りない ○ 機能開発を並行で行いたいが…… ■ 移行元と移行後のコードの両方を変更する必要がある ■ 移行後のコードに変更を加えるとconflictが起こり得る ■ 機能開発を止めるしかないが、止めた場合は半年近く機能開発が進まないこと が見込まれた
20.
20 コードの自動修正による機能開発と移行の並行開発 開発ブランチ ○ 機能開発、バグ修正 ○ PHP7.0
=> 7.4に伴うコード修正 移行用ブランチ ○ Rectorのルールの作成 ○ Laravel関連ファイルの追加 今まで通りのフローで QA・リリース CIによる 自動修正 移行環境でのテスト アプリケーションのコードは 移行用ブランチでは編集しない
21.
21 どれくらい自動修正で移行できたか ● PHPファイルは2000ファイルくらい ● 変更量 ●
手動で移行したファイル(〜10ファイル) ○ 認証周り ○ ルーティング ○ Formatter, AgentなどFuelPHPにしかない機能
22.
22 コードの自動修正をやる上で…… ● テスト ○ あるととても良い ○
LIMIAではテストはあまり動いていなかった ● Rectorルールのテスト ○ ルールによる変換をある程度保証できる ○ Rectorはbreaking changeが多いので結構役に立った ● 静的解析ツール ○ PHPStanの導入 ■ 一番役にたった ■ 機能開発の方のバグも検出してくれた
23.
23 自動修正で苦労したこと ● どうしても自動修正が難しそうなコード ○ めちゃくちゃ複雑なQuery
Builder ○ 仕様からよくわからないコード 元のコード側をRectorで変換できるリファクタリングした そもそもいらないコードが多かったので消しまくった(約10万行) ● ツール側のバグ ○ 正しそうなのに動かないと思ったらバージョンを変えると動いたり ○ RectorのCacheが壊れている OSSなんだから自分で直す!!
24.
24 自動修正による移行まとめ ● 良かったこと ○ 物量に対抗できる ○
ヒューマンエラーを減らせる ○ 新規追加されたファイルも自動で移行される ○ 機能開発とconflictすることがない ● 悪かったこと ○ Laravelの機能をフルに使えない ○ 抽象構文木の深い知識などが必要で属人化しやすい
25.
25 移行プロジェクトを終えて ● 自動修正を決断して良かった ● Rectorというツールに出会えて良かった ○
PHP7.4 => PHP8.0でも活躍しそう! ○ リファクタリングツールとしてCIに入れたい ● インフラの移行も楽しかった ○ VPC Traffic Mirroringによる負荷テスト ○ EC2とFargateでのカナリヤリリースを行うための工夫 ○ CI/CDも大幅に改善 ○ エンジニアブログ書きたいと思っています……
26.
26