クイック エンジニアリングブログ

株式会社クイック Web事業企画開発本部のエンジニアリングチームが運営する技術ブログです。

簡単に書けるクラス図

こんにちは、みっきーです。

最近、初めてまともにクラス図を書き始めました。
仕組みや設計の理解が容易に行え、説明時にも活用できることに感動!
今回はこの感動を伝えたいので、感想とともにどのように書き進めたか書きたいと思います。

この記事の対象

クラス図を書いてみたい方
書こうと意気込んだけど書き進めることに挫折した方

※クラス図自体の細かい書き方は記載していません。

書き進めた手順

  1. テンプレートを作る
  2. クラスを書き出す

1. テンプレートをつくる

書き方をまるっと暗記することから始めるのはめんどくさいので、書き方を貼り付けました。 プログラム上でよく使われているもの、記載に必要なもののみ書き出しています。 クラス図の配置場所に迷うこともあったので、レイヤーが分かれるように背景も作りました。

f:id:aimstogeek:20210611105746p:plain
テンプレート

これで準備完了です!

2. クラスを書き出す

書き始める前にアラームを30分にセットします。 プログラムを読み始めると気になって寄り道しがちなので、そんな余裕は無くす作戦です!

ここからは一心不乱に読んでは書いてを繰り返します。 書き方がわからなくなっても検索せず、テンプレートをチラ見してコピーします。 ネットの海に乗り出さないようにする作戦です!

肝心の書き方ですが、最初は改修したい機能のリクエストを受け付ける(IN/OUTをしてそうな)クラスを見つけて書き出しました。

見つけたクラスが以下のような内容だったとして…

use App\Http\Controllers\XXXController;
use App\Http\Requests\UserSearchRequest;
use App\Services\UserSearchService;
use Symfony\Component\HttpFoundation\JsonResponse;

/**
 * Class UserSearchController
 * @package App\Http\Controllers
 */
class UserSearchController extends XXXController
{
    /**
     * @var UserSearchService
     */
    private $userSearchService;

    /**
     * UserController constructor.
     * @param UserSearchService $userSearchService
     */
    public function __construct(UserSearchService $userSearchService)
    {
        $this->userSearchService = $userSearchService;
    }

    /**
     * @param UserSearchRequest $request
     * @return JsonResponse
     */
    public function search(UserSearchRequest $request): JsonResponse
    {
        $validate = $request->validated();
        $options = [$validate->xxx];

        return $this->renderJson($this->quickSearchService->search($options));
    }
}

こんな感じにぺたり…

f:id:aimstogeek:20210611115337p:plain
呼び出されているクラスを書き出す

2番目にそのクラスが呼び出しているクラスを書きます。 全て書き出すのは大変なので、必要そうなものだけ書き出していきます。

f:id:aimstogeek:20210611120126p:plain
呼び出されているクラスを書き出す

3番目にクラスの関係を矢印でつなげていきます。

f:id:aimstogeek:20210611115422p:plain
矢印でつなげる

最後にメソッドやプロパティを書き込みます。このときも必要そうなもののみ書きます。 どこで何を使っているか分かれば良いので、型や引数などは省略したりしてます。

f:id:aimstogeek:20210611115447p:plain
メソッドを書き込む

以上がクラス図の一連の書き方です。あとは繰り返すだけです。
書き込みが足りなく感じるかもしれませんが、最低限書きだせば把握や整理は行えるのでこれで十分です。
簡単ですね!

ここから先は、作ったクラス図をベースに新しい機能を追加するもよし。
この図を見ながらリファクタ方針を決めるもよし。
複数人での開発時は、プログラムを読まずに仕組みの共有や実装範囲を決められるので便利ですね!

クラス図を書こうと思ったきっかけ

大きく3つあります。

1つは参画プロジェクトが変わったことです。
私にとって未知のプログラムの仕組みを1から理解する必要がありました。
複雑かつ規模が大きいため、読み進めても脳が疲労するだけで把握できませんでした。
とほほ…

2つめは開発効率を上げる必要があったことです。
鈍化する原因がクラス設計にありそうだと踏んだTLの号令で、いい感じに整理しながら進めることになりました。
未知のプログラムを!いい感じに!リファクタ…!
これは把握しなきゃ進められないですね٩( ᐛ )و

3つめは複数人での開発だったためです。
「ここをこうリファクタしたいんだよね」ってプログラムベースで伝えていくのはとっても大変。 どういう仕組みになっているのか双方理解した状態で行わなければなりません。 いちいちプログラムを追い直す必要があったりします。

この3つがきっかけなのですが、デグレ回避や事前にコンフリクトをキャッチできるので、無駄な作業やモチベーション低下を防ぐのにも役立ちました。
クラス図に手を伸ばすきっかけをくれたPJに感謝。

まとめ

クラス図を書くことによる恩恵はとても大きいです。
「書いたことない」が理由で書かないのはもったいないです。 1度書くと、2回目からは抵抗なく書き進められますよ!
ぜひ、試してみてください。

今までクラス図を書いてなかったのかとツッコミをもらいそうだな。笑
いつから書き始めてもよいのだ。


\\『真のユーザーファーストでマーケットを創造する』仲間を募集中です!! //

919.jp