docker があれば、PHPソースコードからクラス図を自動生成できる

php-class-diagramPlantUML を含むイメージを、DokerHub に上げました。

Docker Hub – smeghead7/php-class-diagram

dockerが使える環境であれば、1コマンドで、PHPのソースコードからリバースエンジニアリングしたクラス図を生成することができます。

ディレクトリに格納されたPHPソースコードのクラス図を生成する

解析対象のPHPファイルがあるディレクトリに移動して、下のコマンドを実行するだけです。

docker run --rm -it -v $(pwd):/usr/src -w /usr/src smeghead7/php-class-diagram bash -c "php-class-diagram php-source-directory | plantuml -pipe -tpng > class-diagram.png"

Windowsで実行する場合は、$(pwd)の部分をカレントディレクトリのフルパスに置きかえてください。

画像は、symfony/string を解析した結果

php-source-directory
解析対象のPHPディレクトリ
class-diagram.png
出力ファイル名

やっていることは、解析対象のPHPディレクトリを指定して php-class-diagram を実行し、出力されるPlantUMLのスクリプトをパイプで PlantUMLに渡して、出力ファイル名にリダイレクトして保存する、ということです。

ディレクトリに格納されたPHPソースコードのクラス図を生成する(プロパティ/メソッド情報含む)

php-class-diagram の動作を変えるには、bash -c “…..” の bashに渡しているコマンド部分を変更することで対応できます。

docker run --rm -it -v $(pwd):/usr/src -w /usr/src smeghead7/php-class-diagram bash -c "php-class-diagram --enable-class-properties --enable-class-methods php-source-directory | plantuml -pipe -tpng > class-dialog.png"

画像は、symfony/string を解析した結果

ディレクトリに格納されたPHPソースコードのパッケージ関連図を生成する

--package-diagram を指定すれば、パッケージ関連図を出力します。

docker run --rm -it -v $(pwd):/usr/src -w /usr/src smeghead7/php-class-diagram bash -c "php-class-diagram --package-diagram php-source-directory | plantuml -pipe -tpng > package-dialog.png"

画像は、symfony/string を解析した結果

デバッグ

エラーが出る場合は、php-class-diagramの出力を確認します。パイプ以降を削って実行します。

docker run --rm -it -v $(pwd):/usr/src -w /usr/src smeghead7/php-class-diagram bash -c "php-class-diagram php-source-directory"

まとめ

php-class-diagram は、ソースコードからPlantUMLのスクリプトを出力するだけのツールなので、出力したスクリプトを別途 PlantUMLコマンドまたはPlantUMLサーバを使ってクラス図に変換する必要があります。

今回DockerHubに上げた smeghead7/php-class-diagram を使えば、この作業を1つのdockerコンテナで行なえるようになるので、docker が使える環境なら 1コマンドでクラス図を生成できるようになりました。(composerを使ったphp-class-diagramのセットアップもPlantUMLのインストールも要らない) ちょっとコマンドが長いですが、仕事のプロジェクトでも継続的なプログラム設計の改善に組込みやすくなったと思います。

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.