Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Copyright © M&A Cloud All rights reserved. 3 事業売却と資金調達で次のステージへ
 業界初の買い手の顔が見えるM&Aプラットフォーム


Slide 4

Slide 4 text

Copyright © M&A Cloud All rights reserved. 本題

Slide 5

Slide 5 text

Copyright © M&A Cloud All rights reserved. そもそも どんなときにコード生成したいか?

Slide 6

Slide 6 text

Copyright © M&A Cloud All rights reserved. 同じようなコードを たくさん書く必要があるとき

Slide 7

Slide 7 text

Copyright © M&A Cloud All rights reserved. 具体的には?

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Copyright © M&A Cloud All rights reserved. コード生成の手法

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Copyright © M&A Cloud All rights reserved. 手法② 簡単コード生成のやりかた

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Copyright © M&A Cloud All rights reserved. コード生成のメリット

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Copyright © M&A Cloud All rights reserved. コード生成のデメリット

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

Copyright © M&A Cloud All rights reserved. 実務でやった例を紹介

Slide 22

Slide 22 text

Copyright © M&A Cloud All rights reserved. 実務でやった例を紹介 発表では割愛します 🥺 よければスライドをご覧ください

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Copyright © M&A Cloud All rights reserved. こんなふうにコードを書きたい 25

Slide 26

Slide 26 text

Copyright © M&A Cloud All rights reserved. こんなふうにコードを書きたい 26 ● コード補完ができる ○ Booksに対するアクションってRead以外なにあるっけ? というケースも補完されるので迷わない ● しかし、権限の「対象物」や「アクション」ごとにコードをたくさん書かなくてはいけない・・・ ● コード自動生成したい!

Slide 27

Slide 27 text

Copyright © M&A Cloud All rights reserved. 付録:実際のコード生成コード(抜粋)

Slide 28

Slide 28 text

Copyright © M&A Cloud All rights reserved. 付録:実際のコード生成コード 28 Classのテンプレート

Slide 29

Slide 29 text

Copyright © M&A Cloud All rights reserved. 29 Methodのテンプレート 付録:実際のコード生成コード

Slide 30

Slide 30 text

Copyright © M&A Cloud All rights reserved. 30 ①テンプレート読み込み→ ②コード片作成 → ③テンプレートに挿入→④書き出し ① ② ③ ④ 付録:実際のコード生成コード

Slide 31

Slide 31 text

Copyright © M&A Cloud All rights reserved. 31 メソッドを作るコード 付録:実際のコード生成コード

Slide 32

Slide 32 text

Copyright © M&A Cloud All rights reserved. まとめ

Slide 33

Slide 33 text

Copyright © M&A Cloud All rights reserved. PHPerKaigi 2021 LT PHPで簡単コード生成!同じようなコードをたくさん書くならコード生成しチャイナ! まとめ ● コードをたくさん書く必要があるときはコード生成というアプローチもあり ます ● 文字列連結でお手軽にコード生成できます 33

Slide 34

Slide 34 text

Copyright © M&A Cloud All rights reserved. ご視聴 ありがとうございました