Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHPerKaigi 2021 LT PHPで簡単コード生成! 同じようなコードをたくさん書くなら コード生成しチャイナ!

PHPerKaigi 2021 LT PHPで簡単コード生成! 同じようなコードをたくさん書くなら コード生成しチャイナ!

PHPerKaigi 2021 LT PHPで簡単コード生成! 同じようなコードをたくさん書くなら コード生成しチャイナ!

y-tsuzaki

March 28, 2021
Tweet

More Decks by y-tsuzaki

Other Decks in Technology

Transcript

  1. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! 株式会社 M&Aクラウド つざき 2 820zacky
  2. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! コード生成できたら嬉しい例 • DBにテーブルを追加したら自動で CRUD操作する画面一式を自動で作る • API定義から実装・テストまで自動で作る • エンティティからリポジトリを自動で作る 8
  3. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! 10 手法① ASTを作成・加工してコードに書き出す (AST=抽象構文木:コードを解析し木構造に分解したもの) ASTを加工 コードに変換 書き出し
  4. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! 11 むずかしそう!
  5. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! 12 手法② コードを文字列として加工して出力 書き出し テンプレート コード片
  6. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! 13 これならできそう!
  7. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! テンプレートファイル 15 コード片を挿入したいところに適当な文字列を入れておく
  8. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! コード生成するコード 16
  9. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! コード生成のメリット • 元データに変更があった時、再度コード生成を実行するだけで対応できる • PHPやフレームワークの構文が変わったとしても一気に書き換えられる • 生成されたコードはケアレスミスがない 18
  10. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! コード生成のデメリット • 手動で書いた方が早いケースもある • コード生成するコード自体が汚くなりがち ◦ 何をやってるのかわかりづらい ◦ チームメンバーで導入するかどうか相談した方がいいかも 20
  11. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! たとえばこんなコード 23 ある「対象物」に対してある「アクション」が許可されているか問い合わせたいケース
  12. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! よくないところ 24 • “books”をリネームしたいけど他に”books”使ってるところどこ? ◦ grepするしかなくてつらい • スペルミス ◦ ランタイムに死ぬ ◦ 文字列なので動かしてみるまで間違いに気づけない • 他にどんなバリエーションがあるんだっけ? ◦ コード補完されないのでドキュメントやコメントを読むしかない
  13. Copyright © M&A Cloud All rights reserved. こんなふうにコードを書きたい 26 •

    コード補完ができる ◦ Booksに対するアクションってRead以外なにあるっけ? というケースも補完されるので迷わない • しかし、権限の「対象物」や「アクション」ごとにコードをたくさん書かなくてはいけない・・・ • コード自動生成したい!
  14. Copyright © M&A Cloud All rights reserved. 30 ①テンプレート読み込み→ ②コード片作成

    → ③テンプレートに挿入→④書き出し ① ② ③ ④ 付録:実際のコード生成コード
  15. Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT

    PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! まとめ • コードをたくさん書く必要があるときはコード生成というアプローチもあり ます • 文字列連結でお手軽にコード生成できます 33