2019年 10月の投稿を表示しています

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 ディレクトリに作ってみたのでお試しどうぞ。

CREATE TABLE 文から Markdown のテーブル表記をつくる

ドキュメントにテーブルの説明を書くのがちょっと苦しかったので CREATE TABLE 文から Markdown のテーブル表記を作れるようにした。

GitHub - sters/createtable2Markdown

CREATE TABLE 文をパースできれば勝てるので別に MySQL 限定とかではない。特殊すぎる記載じゃなければ動くと思う。

GitHub - xwb1989/sqlparser: SQL Parser implemented in Go

これがすごくて、若干の挙動が怪しい不要な要素をスルーするようにしてるけれども、あとはパース結果を組み立てる以外なにもしてない。

標準入力で SQL な文字列を受け取って、標準出力で Markdown が出せるようにしているので、ダンプしたものをそのまま流したり、クリップボードを活用したり、コマンドラインでサクサク使うのにめちゃいい。
Readme にも書いたけどこういうことができる。

mysqldump -u database_user -p -d -n --compact database_name | createtable2Markdown