SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

PHPカンファレンス実行委員プレゼンツ PHPの最前線

健全なソフトウェア設計の第一歩! 既存のPHPソースコードからクラス図を自動生成しよう

PHPカンファレンス実行委員プレゼンツ PHPの最前線 第5回

PHPソースコードからクラス図を自動生成する

 それでは、実際にPHPのクラス群を分析し、クラス図を自動生成してみましょう。php-class-diagramとPlantUMLという2つのツールを使ってクラス図を自動生成します。

PlantUMLの概要

 PlantUMLは、テキスト形式のスクリプトを使用して、UMLだけでなく、さまざまな図を生成できるオープンソースツールです。シンプルな記法を用いることで、設計図を効率的に作成できる点が特徴です。クラス図、シーケンス図、アクティビティ図、状態遷移図、マインドマップなど多様な図の生成が可能です。デフォルトの出力形式はPNG画像ですが、用途に合わせてSVG(Scalable Vector Graphics)形式やテキスト形式等を選択することも可能です。

php-class-diagramの概要

 php-class-diagramは、PHPのソースコードが格納されたディレクトリを引数に指定し実行すると、ソースコードを解析し、標準出力にPlantUML形式のクラス図スクリプトを自動生成するツールです。このツールとPlantUMLを使うことにより、既存のコードベースを素早く可視化し、クラス構造の理解を深めることができます。

 php-class-diagramは、@irofさんの「コードをどまんなかに据えた設計アプローチ」というスライドに感銘を受けて、この設計アプローチをPHPでも実践したいと考え、筆者が2021年より開発しているものです。

インストール

 php-class-diagramの実行方法は、Composerでプロジェクトの開発環境にインストールする方法と、dockerイメージを使う方法があります。今回は、プロジェクトの設定に影響することのないdockerイメージを使った方法で、クラス図を作成してみます。Dockerがインストールされていない場合は、先にDockerのインストールを済ませておいてください。

クラス図の生成方法

 例として、以下のようにsrcディレクトリ配下にPHPのソースコードがあるものとします。

src
└── product
    ├── Name.php
    ├── Price.php
    └── Product.php

 各ファイルの内容は、以下のようになっているとします。

src/product/Product.php
<?php
namespace hoge\fuga\product;

/**
 * 製品
 */
class Product {
    public function __construct(
        private Name $name,
        private Price $price
    ) {
    }
}
src/product/Name.php
<?php
namespace hoge\fuga\product;

/**
 * 製品名
 */
class Name {
    public function __construct(private string $name) {
    }
}
src/product/Price.php
<?php
namespace hoge\fuga\product;

/**
 * 価格
 */
class Price {
    public function __construct(private int $price) {
    }
}

 どのファイルもとても単純なPHPのクラスが定義されています。このコードを対象に、以下のコマンドを実行してクラス図を生成します。

docker run --rm \
        -v $(pwd):/usr/src \
        smeghead7/php-class-diagram bash \
        -c 'php-class-diagram src | plantuml -pipe -tpng > class-diagram.png'

コマンドの説明

  • php-class-diagram src:php-class-diagramを使って、srcディレクトリ配下を対象に、PlantUMLのクラス図のスクリプトを生成します。
  • plantuml -pipe -tpng > class-diagram.png:php-class-diagramを使って出力したPlantUMLのクラス図のスクリプトをパイプ経由で受け取り、PlantUMLでPNG画像を出力し、class-diagram.pngにリダイレクトして保存します。

 実行が成功すると、カレントディレクトリに、class-diagram.pngというクラス図の画像が生成されます。

生成されたクラス図
生成されたクラス図

 生成されたクラス図では、ProductクラスがNameクラスとPriceクラスのプロパティを持ち、それぞれに依存していることが、点線の矢印で表されています。

 このように、PHPソースコードを静的に解析し、クラス間の依存関係を視覚化できます。

次のページ
現実的なライブラリのクラス図を生成する

関連リンク

この記事は参考になりましたか?

PHPカンファレンス実行委員プレゼンツ PHPの最前線連載記事一覧

もっと読む

この記事の著者

しめじ(smeghead)(シメジ)

 ソフトウェア設計に興味を持ちつつ、日々レガシーコードの改善を続けているプログラマーです。携わっている主なOSSプロジェクトは、php-class-diagramとphel-langです。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/20561 2024/12/09 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー