Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

PHP_UML

phpソースからXMIファイルを作成するパッケージが提案されたようです。


A reverse engineering package that scans PHP files and directories, and delivers an UML/XMI representation of the classes and packages found.

The XMI generated can then be imported into your favourite UML modeling tool.

javadocライクなコメントを拾って、XMIを生成してるようで、PHP5.3から導入される(ハズの)名前空間も対応しているみたいです。
で、先日CodeReposに突っ込んだCommand_PharCLIのソースを使って、早速試してみました。sourceforge.netからダウンロード。。。のはずが、うまくダウンロードできなかったのでsvnからcheckoutしました。

$ svn co https://phpuml.svn.sourceforge.net/svnroot/phpuml/trunk

XMIを生成するスクリプトは次の通り。

<?php
error_reporting(E_ALL);
require_once 'XMI.php';
$xmi = new PHP_XMI(1, 'utf-8');
$xmi->parseDirectory('./src/');
$xmi->saveXMI('PHAR_CLI.xmi');

実行後、生成されたXMIファイルは次のような感じになりました。

<?xml version="1.0" encoding="utf-8"?><XMI xmi.version="1.2" xmlns:UML="org.omg.xmi.namespace.UML">
<XMI.header>
  <XMI.documentation>
    <XMI.exporter>PEAR::PHP_XMI</XMI.exporter>
  </XMI.documentation>
  <XMI.metamodel XMI.name="UML" XMI.version="1.2" />
</XMI.header>
<XMI.content>
<UML:Model name="default" xmi.id="a0babc13d39b62136e57c082134e7344"  visibility="public" isAbstract="false" 
    isSpecification="false" isRoot="false" isLeaf="false" >
  <UML:Namespace.ownedElement><UML:Package xmi.id="5c80ede1ab171d92a6b452528fb21cff" name="Command_PharCLI"><UML:Namespace.ownedElement>
    <UML:Class name="Command_PharCLI_Parser_Option" xmi.id="591f6cbe442cebbeb90aa51727809d69" visibility="package" 
    isAbstract="false"><UML:Classifier.feature>
  <UML:Attribute name="$config" xmi.id="47ab007addbc64b6d74315197c287537"  visibility="private" ownerScope="instance" ></UML:Attribute>

で、これをUMLツールとかに読ませるわけですが、Sparx Systemsから出ているEnterprise Architect(プロフェッショナル版)というツールに読み込ませ、クラス図に配置してみました(Rose高すぎ)。

ほう。ちゃんと出てますね。
まあ、ツールによってはphpソースからリバースエンジニアリングできたりしちゃいますが、XMIに対応したツールであればどれでもOKなので、わざわざ高価なツールを用意する必要がないのは良いかも。