DockerTweet面倒いの抜きでPhanを使ってみるあけましておめでとうございます!サーバーサイドやってます金城(@o0h)です。年末年始は毎年恒例の「ヘルシング全巻読み直し」をしていました。Kindle版この商品を含むブログを見る弊社ではPhanを用いた静的解析を行っております。今回は、「多分、これが最も1番の最速さでPhanを試す方法になるんじゃないかな?」というお話をいたします。ついて(ハマった点)stubについてまとめお役立ちリンク概要これは「静的解析したいけど環境作るの面倒くさい(そもそもphp7じゃない!)」という時のお供(になると思います)。「Phanの実行に必要なもの全部入り」になっているイメージを使って、使い捨て感覚で静的解析を実行できるようになりました。Cloudflare社が公開してくれているDockerイメージがそれを可能たらしめてくれているわけですが、こちらは本家のwikiからも言及されているものとなります。*2そういう点では十分に信頼できるのかな?と思っています。既存の「実際にアプリケーションコードが動作するPHP環境」とは違う「クリーンな状態(に近い)のPHP環境」になるため、少しハマった点もありました。この記事では、「利用方法」にあわせて「実際にCakePHPアプリケーションを解析するときに用意したもの・ハマった点」を取り上げたいと思います。こんな二通りのやり方があるかな?という気がしています。セクションに説明がある内容です。アウトプットする」という形で実行されます。「コマンドにくっつけられたオプションは、そのまま透過的に渡される」という形です。簡単に利用できるようにして配布するチームメンバーのローカル環境を問わず「すぐに叩けるよう、共通化しておきたい」といったときはdocker-compose.ymlなどを用いて、コードと一緒にgit管理してしまうのも良いかと思います。すれば呼び出し可能です。この場合はPhanに渡すオプションが固定になるので、必要に応じてphanコンテナに任意のコマンドを渡してrunする形で利用すると良いと思います。何をしてくれるんだい、という部分ですね。「commandをどう書けばいいのかな?」については、こちらを参考にしておりました。"$@"を実行しているというシンプルなものですね。透過的にオプションを渡すという、ごくごく単純な処理しか要らなくなるわけです。利用法については、これで終わりです。諸々の設定を投げ込んでおくと、読みに行ってくれます。*3こんな感じで動くのではないでしょうか。/opt/phan/src/Phan/AST/ContextNode.php:1261あまり詳細な情報が出力されていなかったので、直接その付近のコードをいじりつつ眺めてみたら、どうもCake本体のコードが引っかかっているようです。「\PDO::PARAM_BOOLへの参照があるけど、そんなクラスないよ!」みたいな内容でした。?とおもってphp7-pdoをインストールしてみました。php7-pdoすると挙動が変わります。ここで、「そういえば普段使っているのはDockerfileでゴニョゴニョしていたっけ〜」と思い出したわけです。いうことで、Phanには「スタブ」という仕組みがあります。Wiki要するに、「クラスやプロパティやメソッドが定義されていれば良い」というゴールを設定できるのです。以下の手順で使います。設定するというステップで利用できます。stubは、単純に「PHPのクラスを定義してphpdocコメントをつける」と言うものになり、新たにDSLなどを覚える必要はありません。$hoge;}みたいなものです。!PHPのスタンダードなものについては、JetBrains社が配布しているものをそのまま利用することができます(Apache2ライセンス)github.comこれはPHPStormを利用している方にはおなじみの、「標準クラス上で⌘+bを押したら開くアレ」になります。今回は、こちらからPDO.phpを始めとしたいくつかのスタブを喰わせることで、無事に完走することができました。まとめ静的解析は「くらだないミスをなくし」たり、IDEを利用している身においては「普段のコーディングのストレスを軽減する」という効果もあると感じています。PHPだと「やり始めるまでの腰が重い」のも事実でしょう。これに対して、「使い捨てDockerイメージ」みたいなものは非常にインパクトが大きいと思います!正に巨人の肩に乗る感じですね。Wiki本家!*1:この記事を書き始めてから見つけたのですが、まさに「コマンドを使う」感覚でPhanを丸ごと実行できる!!というユーザー体験だと思います。用いたデプロイフローの改善こんにちは。本日はコ...2019-10-14CakePHP3用のMaster/Replica接続管理プラグインをOSS化しましたCakePHP3用のmaster/replica接続切り替え機構を、プラグインと...2019-06-17CodeBuildを使ったECSへのコンテナデプロイこんにちは。インフラエンジニアの永井(shnagai)です。(2)書いたメンバーid:taxa_programid:katsutomu0124id:sasashuuuid:NahomiTakahashiid:toc8id:yoshitaka465id:yanamuraid:ryoutakaya3623id:azuki_mihomihoid:takflifeid:nagaisid:aboy_perryid:laugh_kid:connehito-mkashiwagiid:tommy_kwid:itosho525id:su-kun1899id:ohayoukenchanid:satoshieid:plane25id:connehitoid:fortkleお問い合わせコネヒト株式会社Wantedly引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。