PHPerKaigi 2021 LT PHPで簡単コード生成! 同じようなコードをたくさん書くなら コード生成しチャイナ!
Copyright © M&A Cloud All rights reserved.PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!2021/03/28 PHPerKaigi /LTM&Aクラウド つざき1
View Slide
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!株式会社 M&Aクラウドつざき2820zacky
Copyright © M&A Cloud All rights reserved.3事業売却と資金調達で次のステージへ 業界初の買い手の顔が見えるM&Aプラットフォーム
Copyright © M&A Cloud All rights reserved.本題
Copyright © M&A Cloud All rights reserved.そもそもどんなときにコード生成したいか?
Copyright © M&A Cloud All rights reserved.同じようなコードをたくさん書く必要があるとき
Copyright © M&A Cloud All rights reserved.具体的には?
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!コード生成できたら嬉しい例● DBにテーブルを追加したら自動で CRUD操作する画面一式を自動で作る● API定義から実装・テストまで自動で作る● エンティティからリポジトリを自動で作る8
Copyright © M&A Cloud All rights reserved.コード生成の手法
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!10手法① ASTを作成・加工してコードに書き出す(AST=抽象構文木:コードを解析し木構造に分解したもの)ASTを加工コードに変換 書き出し
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!11むずかしそう!
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!12手法② コードを文字列として加工して出力書き出しテンプレートコード片
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!13これならできそう!
Copyright © M&A Cloud All rights reserved.手法②簡単コード生成のやりかた
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!テンプレートファイル15コード片を挿入したいところに適当な文字列を入れておく
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!コード生成するコード16
Copyright © M&A Cloud All rights reserved.コード生成のメリット
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!コード生成のメリット● 元データに変更があった時、再度コード生成を実行するだけで対応できる● PHPやフレームワークの構文が変わったとしても一気に書き換えられる● 生成されたコードはケアレスミスがない18
Copyright © M&A Cloud All rights reserved.コード生成のデメリット
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!コード生成のデメリット● 手動で書いた方が早いケースもある● コード生成するコード自体が汚くなりがち○ 何をやってるのかわかりづらい○ チームメンバーで導入するかどうか相談した方がいいかも20
Copyright © M&A Cloud All rights reserved.実務でやった例を紹介
Copyright © M&A Cloud All rights reserved.実務でやった例を紹介発表では割愛します 🥺よければスライドをご覧ください
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!たとえばこんなコード23ある「対象物」に対してある「アクション」が許可されているか問い合わせたいケース
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!よくないところ24● “books”をリネームしたいけど他に”books”使ってるところどこ?○ grepするしかなくてつらい● スペルミス○ ランタイムに死ぬ○ 文字列なので動かしてみるまで間違いに気づけない● 他にどんなバリエーションがあるんだっけ?○ コード補完されないのでドキュメントやコメントを読むしかない
Copyright © M&A Cloud All rights reserved.こんなふうにコードを書きたい25
Copyright © M&A Cloud All rights reserved.こんなふうにコードを書きたい26● コード補完ができる○ Booksに対するアクションってRead以外なにあるっけ?というケースも補完されるので迷わない● しかし、権限の「対象物」や「アクション」ごとにコードをたくさん書かなくてはいけない・・・● コード自動生成したい!
Copyright © M&A Cloud All rights reserved.付録:実際のコード生成コード(抜粋)
Copyright © M&A Cloud All rights reserved.付録:実際のコード生成コード28Classのテンプレート
Copyright © M&A Cloud All rights reserved. 29Methodのテンプレート付録:実際のコード生成コード
Copyright © M&A Cloud All rights reserved. 30①テンプレート読み込み→ ②コード片作成 → ③テンプレートに挿入→④書き出し①②③④付録:実際のコード生成コード
Copyright © M&A Cloud All rights reserved. 31メソッドを作るコード付録:実際のコード生成コード
Copyright © M&A Cloud All rights reserved.まとめ
Copyright © M&A Cloud All rights reserved.PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ!まとめ● コードをたくさん書く必要があるときはコード生成というアプローチもあります● 文字列連結でお手軽にコード生成できます33
Copyright © M&A Cloud All rights reserved.ご視聴ありがとうございました