PHPのクラスをたどって図で出すツール

あまり知らないクラスのコードを読んでいると、あっちのクラスにいったり、こっちのクラスに行ったり、コレ何だったっけ?、がたくさんでて大変。で、それを説明するのも大変。
というわけで、サクッと簡単にクラスの繋がり方を可視化するような何かを書いた。

GitHub - sters/php-class-graph

書いたはいいんだけど、あんまり考えずにえいやーで作ったのでこれ以上拡張出来ない感じになってしまった…
テストもちょっと書き方な〜〜〜となってしまったのでリファクタ余地は大いにあり…。

PHP のコードをパースするために nikic/PhpParser を使っている。
GitHub - nikic/PHP-Parser: A PHP parser written in PHP

それを使ってクラス呼び出しっぽいのを辿っている。このあたり。

php-class-graph/Visitor.php at master · sters/php-class-graph · GitHub

これで、あるクラスから、どのクラスを呼ぼうとしているかを記録。その記録を整理して図形データとして出力できるようになっている。

クラスっぽいのを辿る際に、クラス名からファイル名を解決するために、プロジェクトルートディレクトリを指定し、その composer autoloader を読み込んでいるのがひとつ工夫したポイント。このあたり。
php-class-graph/SourceList.php at master · sters/php-class-graph · GitHub

おしごとコードや自分のいくつかで試したけど、ちゃんとできてそう…?
たとえば sters/cakephp3-aws-s3-datasource: AWS S3 datasource in CakePHP3 でやるとこういう。いやでもどこからともなく親ノードが発生するのはちょっと違う気がするなあ…、間違ってそう…。

このまま使うと、開始地点から永遠に深ぼってしまうので、どこまで辿るのが指定したほうがいい vendor 下は無視するとか。といったのも example ディレクトリに作ってみたのでお試しどうぞ。

この記事はどうでしたか