![small cards uml class diagram card EN small 3 2](https://images.ctfassets.net/w6r2i5d8q73s/1UInEWtEyv49FPjQRuTSjH/2afd8e56d22e45ccb409f1890a8e99cd/small_cards_uml_class_diagram_card_EN_small_3_2.png?fm=webp&q=75)
UMLクラス図とは? 書き方や作成のコツを 例を使ってわかり やすく解説
![small cards uml class diagram card EN small 3 2](https://images.ctfassets.net/w6r2i5d8q73s/1UInEWtEyv49FPjQRuTSjH/2afd8e56d22e45ccb409f1890a8e99cd/small_cards_uml_class_diagram_card_EN_small_3_2.png?fm=webp&q=75)
クラス図とはUML(Unified Modeling Language:統一モデリング言語)の一種であり、 設計しているシステムの中にどのようなクラスが存在するのかや、クラスとクラスの間に どんな関係があるのかを可視化するために使用される図です。
クラス図を作成することで、プログラム内の変数の過不足や、 変数が所属するクラスの 妥当性を検討することができるので、システム設計に必要な構成要素を洗い出すことに 役立つ図です。
この記事では、そんなクラス図についてや書き方、使用される記号・矢印を例を使って ご紹介しています。
記事の最後にはクラス図の作成や自動生成に役立つツールやテンプレートについても ご紹介しているので、ぜひご確認ください。
それでは、クラス図について見ていきましょう。
クラス図とは?
上記でも少しご紹介したように、クラス図とはUML(Unified Modeling Language: 統一モデリング言語)の一種です。
ここでいう「クラス」とは、オブジェクト指向における「クラス」(プログラミングで つくるオブジェクトの設計図)のことであり、基本的に、UMLでは以下の3つの構造を 使ってクラスを表します。
上段:クラス名
中段:属性
下段:操作
上記の階層を使うことで、クラスの構造や各要素を簡単に可視化することができ、 クラス間の関係も見やすくなります。
▼ 関連ページ UML とは?知っておきたい情報をまるっと解説
クラス図を作成するメリット
システム設計においてのコーディングの前にクラス図を作成することで、今から設計する システムにどのような構造やどんな要素が必要なのかを洗い出しやすくなり、効率的に 作業が進められるようになります。
また、UML特有のコミュニケーションツールとしてのメリットもあるので、プロジェクト メンバーやクライアントとの情報共有にも役立つ図です。
以下でクラス図を作成するメリットをより詳しく見ていきましょう。
開発したいシステムをわかりやすいビジュアルを使って可視化できる
クラス図を作成することにより、わかりやすいビジュアルを使って開発したいシステムの 構造を可視化することができます。
高度なシステムを開発しようとしていていても、すべての要素が視覚的に把握できれば システムの全体像を理解しやすくなり、見落としている要素や改善すべき点もすぐに 特定できます。
また、部門横断的なプロジェクトでは、システム設計に対する経験や知識を持っていない 人も参加するため、クラス図を使ってシステムの構造を説明することで、情報が頭で 消化しやすくなります。
クラス図をもとに別のUML図の詳細が掘り下げやすくなる
UMLには「シーケンス図」や「アクティビティ図」「コミュニケーション図」など さまざまな図が存在します。
他のUML図と比較してクラス図はシンプルな構造を持っているので、この図で 洗い出した要素もとにデータベース設計用のUML図やシステムの処理の流れの確認用 UML図などが作成できます。
▼ 関連ページ シーケンス図とは?書き方のポイントや構成要素・記号を例を使って解説
プロジェクトメンバーやクライアントとの認識共有に役立つ
クラス図を作成することでプロジェクトメンバーやクライアントと同じ目線で 開発プロジェクトを進められるようになります。
部門横断的なプロジェクトではさまざな知識や経験を持った人が参加するため、技術者の 先入観だけでプロジェクトを進めてしまった場合に、認識のズレが発生しやすくなります。
このようなケースでは、仕様変更が発生したり、前のプロセスに戻ったり、複数の修正が 合ったりなど、コストの浪費につながります。
しかし、クラス図を作成することで、認識を合わせながらプロジェクトメンバーや クライアントと開発プロジェクトを進められるようになり、より各関係者の要件にあった システム開発を実現できます。
クラス図の書き方
上記の内容からクラス図についてよく理解していただけたと思います。
ここからは、実際のクラス図の作成方法について見ていきましょう。
Step 1:システム設計に必要なクラスや構成要素を洗い出す
まず、システム設計に必要なクラスや構成要素を洗い出して「上段:クラス名」 「中段:属性」「下段:操作」に割り振っていきます。
ここでは、要素を整理することが重要になります。
例えば上段では「類似するクラスが同じ役割を持っていないか」や「関連し合っている クラスは開発したいシステムの要件に合っているか」などを整理しながらクラス図を 作成することが
中段にはシステムの処理プロセスにおいて、参照すべき属性を記載していきます。
ここでは、属性名の右側にデータ型・初期値を書いておきます。
下段には、各クラスで実行する操作(メソッド)名や引数を記載します。
ここで言うメソッドとは「そのクラスで使用可能な関数」のことを指し、「操作名」として 記入する場合には、技術的な知識がない人でも理解できるように、日本語で具体的に 書くこともあります。
このステップの時点でプロジェクトに関連する人たちと情報共有をしておくことで、 無駄なコストを浪費せず、プロジェクトをスムーズに進められることができるようになります。
Step 2:アクセス範囲を見るための「可視性」を記入する
「可視性」とはシステムにアクセスできる範囲を表現するために記入される情報であり、 特定の属性・操作(メソッド)について「どのクラスからアクセスできるか」を表します。
クラス図で可視性を表現する場合、要素名や操作の左側に記号で可視性が記入されます。
また、クラス図には以下の4種類の可視性が使用されます。
「+」・・・すべてのクラスからアクセス可能(public)
「-」・・・自クラスのみアクセス可能(private)
「#」・・・自クラスと親子関係クラス限定でアクセス可能(protected)
「~」・・・同一パッケージ内のクラスからアクセス可能(package)
Step 3:クラス間の関係を表す
次にクラス間の関係を記入していきます。クラス間の関係は線で表され、主に以下の 4種類の関係をクラス図に記入できます。
関連(Association): 二つのクラスが何らかの関連を持つことを示します。 ただの線で表され、必要に応じて矢印を付けて関連の方向を示すことができます。
集約(Aggregation): 「全体」と「部分」の関係を表し、空のダイヤモンド(◇) で「全体」の側のクラスに接続します。
合成(Composition): 集約よりも強い「全体」と「部分」の関係を示し、 塗りつぶしたダイヤモンド(◆)で「全体」の側のクラスに接続します。
継承(Inheritance)または一般化(Generalization): 一つのクラス(サブクラス) が別のクラス(スーパークラス)の属性や操作を継承する関係を示します。 線の先端に空の三角形の矢印(△)を使用して、サブクラスからスーパークラスに向けます。
Step 4:必要に応じて他の要素も追加する
クラス図ではインターフェースや依存関係などの要素も追加できます。
以下で各要素について説明します。。
インターフェイス: インターフェイスは「<<interface>>」というステレオタイプで 示され、クラスと同じように三部分に分かれた矩形で表されますが、通常、操作のみを 含みます。
依存(Dependency): あるクラスが別のクラスに依存するが、強い関連はない場合に 使われ、破線で表されます。
Step 5:プロジェクトメンバー・クライアントとクラス図を共有する
クラス図が完成したら、忘れずにプロジェクトメンバー・クライアントと図を共有する ようにしましょう。
ミーティングの前にクラス図をあらかじめ他の人と共有しておくことで、より多くの フィードバックが集められたり、処理フローについて他の人がより理解した上で システム開発を開始できます。
Step 6:検証と修正
作成したクラス図がシステムやユーザーの要件を満たしているか確認し、必要に応じて 修正しましょう。
クラス図作成の例
ここでは「図書管理システム」の一部を例にクラス図の作成方法について見ていきましょう。
Book(書籍)クラス:属性には「title : String」「author : String」貸し出し 操作には「borrow() : void」「return() : void」を記入します。
Member クラス: 属性には「name : String」「email : String」操作には 「register() : void」「unregister() : void」を記入します。
Loan クラス: 属性には「dueDate : Date」操作には「extendDueDate(newDate : Date) : void」を記入します。
例から見るクラス間の関係
関連:Member クラスと Loan クラスは関連があります。これは「Member」が 一つ以上の「Loan」を持つことができることを示しており、Member クラスと Loan クラスの間に線を引いて、「1..*」(一人の会員が複数の貸出情報を持つことが できる)というマルチプリシティ(多重度)を示します。
集約:Library クラスと Book クラスの間に集約関係がある場合、「Library」が 「Book」の全体であることを示すために、Library側に空のダイヤモンドをつけて 「Book」クラスへの線を引きます。
継承:AudioBook クラスが Book クラスから継承されている場合、AudioBook
から Book へ線を引き、その線の先端に空の三角形を配置して、AudioBook が Book の特殊な形態であることを示します。
クラス図を作成する時に注意したいポイント
頭の中のイメージだけでクラス図を作成した場合、他の人から理解されずらかったり、 効率的にクラス図の作成が進まなかったりしてしまいます。
そうならないためにも、以下の点に注意してクラス図を作成しましょう。
クラスをグルーピングする
機能や役割の関係性が強いクラスを四角や丸を使って近い場所でグルーピングし、 グループごとに名前を付けましょう。
そうすることで、よりスッキリとした見た目でクラスどうしを線でつなげることができます。
クラスや構成要素を洗い出すステップからこのグルーピングをやっておくと、その後の 作図作業もスムーズに進むことでしょう。
線の書き方は上から下、左から右に
クラス図は処理の流れを時系列で書くとよりわかりやすく作成できます。
はじめに処理が発生する場所を上もしくは左からスタートし、同じ方向に向かって その後に発生する処理プロセスをクラス図の中に記入していきます。
線や矢印を記入するときも、「上から下・左から右」「線を交差させない」「基本クラスは上部・具象クラスは下部に配置」というルールに従って記入していくことで、誰でも理解しやすい図が作成できます。
オンラインツールも使ってクラス図の作成を効率化
ネット上にはクラス図の作成に役立つツールが多く提供されています。
これらのツールを使うことで、図の作成の効率化ではなく、情報の一元管理やプロジェクトメンバー・クライアントとのクラス図の共有もスムーズに行うことができます。
まとめ
クラス図は、オブジェクト指向のソフトウェア開発で使われるUML(Unified Modeling Language:統一モデリング言語)の一種で、システムのクラス、それらの属性、 操作(メソッド)、およびクラス間の関係を表現することに使用されます。
この図を作成することでシステム設計に必要な要素をすべて洗い出せるだけではなく、 開発チームやクライアントと同じ目線でプロジェクトを進めていけるようになります。
クラス図はUMLの中でもシンプルな図ですが、構成要素に対する理解や注意点を 押さえながら作成しないと、あまり効果がなく、他のUML図と併用して使いたい場合は、 スタート地点となる図なので、しっかりと記事でご紹介した内容を押さえておきましょう。
クラス図の作成には Miro がおすすめ
![](https://images.ctfassets.net/w6r2i5d8q73s/4FqnbdsGICuT5RLqLQ9X9S/f671209af8216954377f87c97b74dc98/diagramming_uml_diagram_hero_image_EN_standard_4_3.png?fm=webp&q=75)
オンラインワークスペースである Miro では便利な作図ツールや自動ダイアグラム 作成機能、AI 作図機能、UMLシェイプパックなどのツールを使ってクラス図の作成を 効率的に進められます。
チームやクライアントと離れた場所で業務をしていても、多彩な共有機能を備えた オンラインスペースを通していつでもリアルタイムで図を編集・共有可能です。
Miro を使ってチームでのクラス図の作成を実現しましょう。
以下のリンクから製品ページをご覧いただけます。
◆ Miro の作図ツール ◆ Miro のUML図作成ツール ◆ Miro のUMLクラス図作成ツール ◆ Miro のUMLクラス図テンプレート ◆ Miro の作図テンプレート ◆ Miro のPlantUML作成アプリ