PHP to Go の機運
● ないものは作ろう!
○ 同じものを欲している人が他にもいるかもしれない
○ というか自分がいますぐ欲しい
● PHP to Go の方針
○ 100% 完璧な変換はできなくていい、というか無理。
○ 職人による手作業を加えることで 愛あるコード Go way, パフォーマンスなどの要素を入れる
○ 変換した Go っぽいコードと元のコードを並べて見ることができれば
コードの意図も汲んで手で修正も容易のはず
Version.1 of PHP to Go
● Before
○ 一番最初は全部手作業で、解読してコピペの繰り返してた
○ 1つあたり 20-40分 くらい。
● After
○ 文字列置換していく実装は 3-4 時間 程度
○ 変換しつつバグ修正しつつドメイン特化していった
○ 最終的には 1つあたり 5-10分 で移植完了
● “そこそこな数ある” うちの 50-60クラスくらいは PHP to Go で楽した
Slide 17
Slide 17 text
Version.1 of PHP to Go
※イメージ図です
[ PHP ]
Slide 18
Slide 18 text
Version.1 of PHP to Go
※イメージ図です
[ Go ]
Slide 19
Slide 19 text
Version.1 of PHP to Go
● メルカリなドメイン知識に紐づく記述だらけなので公開できない
○ 世の中の使いたい人ゴメン
● @morikuni < それ mercari.go #4 で話してくださいよ!
● 圧倒的汎用化のチャンス!!
Slide 20
Slide 20 text
Version.2 of PHP to Go
● 冷静に nikic/php-parser の実装を見てみると…
● AST 自体に PHP の書き方が入っているわけではない(そりゃそうだ)
● AST を整形するための Pretty Printer が PHP コードを作っている
● そこをオーバーライドしたら良いのでは?
Slide 21
Slide 21 text
Version.2 of PHP to Go
● できた
● https://github.com/sters/phptogo
○ 各 AST ノードの成形時に対して、フックを仕込めるようにした
○ ドメイン知識っぽいところはそれぞれで実装しよう!!
○ というか基礎的な構文くらいしか対応していない
○ 各関数は各自で
Slide 22
Slide 22 text
Version.2 of PHP to Go
[ PHP ] [ Go ]
Slide 23
Slide 23 text
Version.X of PHP to Go
● PHP じゃなくて、ワンバイナリでシュッとやりたい…
● PHP to Go written by Go with converted "PHP to Go written by PHP"
○ 要はセルフホスティング。
○ でも nikic/php-parser 他依存ライブラリもあるし …、ちょっとパワーかかり過ぎでは!!
● https://github.com/stephens2424/php
○ Go で書かれた PHP パーサを見つけた(今週の話)
○ 「トランスパイルしたいよな!」みたいなことも言っている模様
○ その流れに合流していくとよさそう
○ そもそも需要高さはわからない(このリポジトリで over 400 stars なのでそこそこ…?)