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のファイルに差分があるかを(astを使って)調べる君
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
hideki kinjyo
PRO
November 29, 2023
Programming
0
1.4k
PHPのファイルに差分があるかを(astを使って)調べる君
第157回 PHP勉強会@東京での発表資料です。
https://daisuki.nichiyoubi.land/entry/2023/08/15/235930
をベースにしたLTをしてきました
hideki kinjyo
PRO
November 29, 2023
Tweet
Share
More Decks by hideki kinjyo
See All by hideki kinjyo
#phperbiglt のLT
o0h
PRO
0
58
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
210
symfony/mcp-bundleで、既存アプリケーションもお手軽にMCPサーバー化
o0h
PRO
1
93
組織もソフトウェアも難しく考えない、もっとシンプルな考え方で設計する #phpconfuk
o0h
PRO
10
5.4k
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
660
Composerの依存解決 #phpstudy
o0h
PRO
0
160
「影響が少ない」を自分の目でみてみる
o0h
PRO
4
2.3k
PHPによる"非"構造化プログラミング入門 -本当に熱いスパゲティコードを求めて- #phperkaigi
o0h
PRO
0
1.8k
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
23
5.4k
Other Decks in Programming
See All in Programming
CSC307 Lecture 10
javiergs
PRO
1
660
AtCoder Conference 2025
shindannin
0
1.1k
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
dchart: charts from deck markup
ajstarks
3
990
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
650
Lambda のコードストレージ容量に気をつけましょう
tattwan718
0
140
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
310
【卒業研究】会話ログ分析によるユーザーごとの関心に応じた話題提案手法
momok47
0
200
要求定義・仕様記述・設計・検証の手引き - 理論から学ぶ明確で統一された成果物定義
orgachem
PRO
1
160
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
Architectural Extensions
denyspoltorak
0
290
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
250
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
290
[SF Ruby Conf 2025] Rails X
palkan
1
760
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
180
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
130
How GitHub (no longer) Works
holman
316
140k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Skip the Path - Find Your Career Trail
mkilby
0
57
Amusing Abliteration
ianozsvald
0
100
Transcript
PHPのファイルに差分 が あるかを (astを使って)調 べ る君 ୈ157ճ PHPษڧձˏ౦ژ Hideki Kinjyo
GitHub: o0h / Twitter: @o0h_
自己紹介 • 金城秀樹 / きんじょうひでき • GitHub:@o0h / Twitter:@o0h_ •
好きなFWはCakePHP • アイコンは 美味しい鮭親子丼の写真です
PHPは進化してますね
コーディング規約だって、変わっていく
None
大体どの会社にも1人はいる人 「うちのPJにも コーディング規約入れましょうよ」
vendor/bin/phpcs、そして─ とっても落ち着く景色(やったね!)
でも、 今やECSやPHP-CS-Fixerがありますもんで。 「過去のコードをきれいにする」も、 省エネで出来ちゃう。
???「修正してみました!レビューお願いします!」
このPRを「アリ」にする話
機械に「OK」って言われたら、 我々は従うことが出来る
元ネタ モノタロウさんのブログで見かけて、ずっと気になっていました https://tech-blog.monotaro.com/entry/2018/09/26/142451
ASTからPHPの世界を見上げる • いわば「品詞」「文法」の変更だけを見ることが出来る • この世界では、インデントや()の省略は「差分がない」 • AST的な変化がない = プログラムも変わってないよね?
スクリプトを 「木」構造に
見た目は違うコードも 同じ構造として 解釈される
dumpを取ってみている例 (とっても簡単!)
これを使って、PRを送る時に 「AST的な差分」を示せたら良いのでは?
先達も既にいる https://zenn.dev/snowcait/articles/30f44683fed179
作った https://daisuki.nichiyoubi.land/entry/2023/08/15/235930
こんなものを作りました • nikic/php-parser を使って • Gitのコミットハッシュを2つ指定して、差分を検出 • コミットとかブランチとかタグとか • PHPファイルのdiffがあったら、ASTのhashを取って比較
• 変更のある無しを出力
仕組み • `git diff` で差分の発生したファイルを取得 • `git show` で、比較元・比較先のコミットでのファイル 全体(ソースコード)を取得
• 取得したソースからASTを生成 <= モノタロウさんの方法ママ • 生成したASTをmd5でハッシュ化 <= モノタロウさんの方法ママ • ハッシュを比較
こんなdiffに・・
こんな結果を出せる 「ast-changed」だけ見ればOK
こういうのは差分扱い
こういうのを無視できる • 予約語の大文字/小文字 • スペースやタブ、改行 • 「ヒアドキュメント中の行頭スペース」とかを認識でき るのが、git ignore whitespaceとの違い(嬉)
• 省略可能な括弧の有無
今後やりたい • コードはOSSとしてGitHubに晒したい • GitHub Actionsで、PRに対して動かせるようにしたい
まとめ • 安心してクソデカPRを投げられるぞ • 理性的で説明可能な根拠を持って、 レビュアーフレンドリーなPRを投げましょう! • いろんな便利なものを使って(テストとか静的解析とか)、
ウキウキPHPライフを!
おしまい! お付き合いいただき ありがとうございました!!