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.
    PHPで簡単コード生成!
    同じようなコードをたくさん書くなら
    コード生成しチャイナ!
    2021/03/28 PHPerKaigi /LT
    M&Aクラウド つざき
    1

    View Slide

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

    View Slide

  3. Copyright © M&A Cloud All rights reserved.
    3
    事業売却と資金調達で次のステージへ

    業界初の買い手の顔が見えるM&Aプラットフォーム


    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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




    付録:実際のコード生成コード

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide