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

CakePHP2でもPhpStormがコード補完してくれるようにした話 / cakephp2-ide-helper

CakePHP2でもPhpStormがコード補完してくれるようにした話 / cakephp2-ide-helper

CakePHP2ではほとんどコード補完が働きません。
今回はlaravel-ide-helperのアプローチを参考に、CakePHP2でもコード補完されるようにした話をします。

https://packagist.org/packages/nazonohito51/cakephp2-ide-helper

Satoshi Kawashima

September 21, 2019
Tweet

More Decks by Satoshi Kawashima

Other Decks in Technology

Transcript

  1. © - BASE, Inc. laravel-ide-helperとは • PhpStormが補完できないLaravelのあれやそれや を補完できるようにしてくれる君 • FacadeとかModelのプロパティやら

    • 対象のリポジトリを解析してPhpStorm向けのメタ データを書いたファイルを作ったり、PHPDocを追記 したりして実現している
  2. © - BASE, Inc. CakePHP のディレクトリ構造 ※࣮ߦ࣌ʹطఆͷมߋ͢Δ͜ͱ΋ग़དྷ·͕͢ɺͦͷ৔߹ϥΠϒϥϦʹਖ਼͍͠Ҿ਺Λ౉͞ͳ͍ͱਖ਼ৗͳղੳ͸Ͱ͖·ͤΜ repos root /app

    /Model /Plugin SomeModel .php /SomePlugin SomeModel .php /Model SomeModel .php SomeModel .php ここに置いてあるクラスの名前を全部 glob()とかで取得する ここに置いてあるクラスの名前を全部 glob()とかで取得する Plugin配下のModelは、どのPluginに 所属しているかも解析する
  3. © - BASE, Inc. .phpstorm.meta.phpの作り⽅ • リポジトリルートに .phpstorm.meta.php という 名前のファイルを作る

    • (実はリポジトリルート以外に置いても⼤丈夫) • (もっと⾔うと.phpstorm.meta.phpというディレクトリを作ってその下に置くでも可)
  4. © - BASE, Inc. 1. 全てのBehaviorを捕まえる ※࣮ߦ࣌ʹطఆͷมߋ͢Δ͜ͱ΋ग़དྷ·͕͢ɺͦͷ৔߹ϥΠϒϥϦʹਖ਼͍͠Ҿ਺Λ౉͞ͳ͍ͱਖ਼ৗͳղੳ͸Ͱ͖·ͤΜ repos root /app

    /Behavior /Plugin SomeBehavior .php /SomePlugin SomeBehavior .php /Behavior SomeBehavior .php SomeBehavior .php ここに置いてあるクラスの名前を全部 glob()とかで取得する ここに置いてあるクラスの名前を全部 glob()とかで取得する /Model /Model
  5. © - BASE, Inc. . Behaviorを模したクラスを作る • 同じメソッドを持っているだけではだめ • Behaviorのメソッドの呼び出し時は第1引数を⾶

    ばして、第2引数以降のみを渡す • 第1引数はフレームワークが代わりに⼊⼒する =第1引数を取り除いた状態のフェイクのクラスを作る
  6. © - BASE, Inc. 第1引数を除いたメソッドを持つクラスを作る • php-parserを使うと楽にできる • PHPコードをパースするライブラリ •

    PHPコードをAST(Abstract Syntax Tree)に変換 できる • ASTからPHPコードに戻すことも出来る
  7. © - BASE, Inc. php-parserで第1引数が除去されたBehaviorを作る Class_ ClassMethod Param Param ClassMethod

    Param Param ※最終的には⾊々あって少しだけ違うアプローチになりましたが、だいたいこんな感じの実装でやってます