docker があれば、PHPソースコードからクラス図を自動生成できる
php-class-diagram と PlantUML を含むイメージを、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)の部分をカレントディレクトリのフルパスに置きかえてください。
- 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" |
オプションとして --enable-class-properties --enable-class-methods
を追加することでプロパティとメソッドの情報を含む、いわゆる普通のクラス図を出力することができます。
ディレクトリに格納された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" |
パッケージ間の依存関係を可視化します。use によるクラス参照を分析してパッケージ単位での依存の矢印を表示しています。 意図しない矢印が存在していたら、プログラムの修正が必要であることがわかります。
デバッグ
上の例などでオプションを変更して実行しようとした際に、思うように画像生成ができていない場合や、エラーになる場合は、 php-class-diagramの出力が、正しいPlantUMLのスクリプトになっているかを確認してください。パイプ以降を削って実行します。
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のインストールも要らない) ちょっとコマンドが長いですが、仕事のプロジェクトでも継続的なプログラム設計の改善に使ってみてください。
1件のピンバック
PHPのソースコードからクラス図をリバースエンジニアリングする php-class-diagram 【概要】 | 週記くらい