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)の部分をカレントディレクトリのフルパスに置きかえてください。

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

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

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

ディレクトリに格納された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 を追加することでプロパティとメソッドの情報を含む、いわゆる普通のクラス図を出力することができます。

画像は、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 を解析した結果

パッケージ間の依存関係を可視化します。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件のピンバック

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください