unity初心者に聞いてほしいクラス設計の沼にハマったお話

f:id:yayoicoffee:20190513010316j:plain



こんにちは。やよいです。本当に久々の更新ですね…

なんでこんなにも更新していなかったかというとですね、タイトルにもある通りクラス設計の沼にガッツリハマってました。約一か月くらい。笑

何とか這いずり出ることができたので今回はクラス設計とは何なのかという話からとても役に立った記事や書籍を紹介していきたいと思います。ある程度知識のある方はそちらからご覧ください。では

 

 

 

始まり

始まりは約一か月前のことです。当時私は初めてオリジナルアプリを完成させたことで非常に喜んでおりました。モチベーションも高かったと思います。でいろいろ遊んでみるとやっぱり機能追加をしたくなっちゃうんですよね。で、実際にとりかかろうとしたところ…

クラス同士ががちがちに組みあわさって変えられねええ!!

という事態が発生したわけですよ。もう1つ買えたらほかのスクリプトも変えなきゃ出し、ああこっちもこうしなきゃ…みたいな。そこで私はどうやればきれいに書けるんだろうっと思いネットの海を彷徨いだしました。するとこんな言葉を見つけたのです。

『クラス設計をしっかりすると改修が楽になるよ!チーム開発するならここら辺の知識は必須だよ!』

ん?クラス設計ってなんだ?そんなの参考書には書いてなかったぞ?って当時の私はなりました。ちなみにクラス設計とはこんな意味です。

クラス設計とは、設計書などに記載されている要件からクラス候補を抜き出し、クラスの属性と操作を決めて、クラス間の関連性を設計することを指します。

出展:https://thinkit.co.jp/article/13112

つまり行き当たりばったりでいくんじゃなくて地図を書いてから進もうぜ!みたいなことです。

ネットの海に潜る

私はこの知識をもとに再びネットの海に潜ります。するとこんなスライドを見つけました。

 

www.slideshare.net

 

こちらはとりすーぷさんという方のunityとクラス設計のスライドです。この方はqiitaなどで記事をいろいろと書いてくださっているのですがどれも本当に素晴らしいものばかりで非常にためになっています!

またこのスライドで得たことは要約するとこんな感じです。①クラス設計のメリットとは②クラス設計に必要な前提知識③クラス設計に役立つアセットについて

 

①③は実際に読んでもらったほうがわかりやすいと思うので②から説明していきたいと思います。

クラス設計に必要な前提知識

  • クラス図の読み方
  • SOLID原則
  • デザインパターン

クラス図に関してはこちらの記事の説明がわかりやすかったので参考にしてください。

【一通り理解しよう】UMLのクラス図の描き方を解説 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

 

次はSOLID原則です。SOLID原則とは開発をする際の指針のようなものです。それぞれ頭文字をとっており

  1. S SRP 単一責任の原則
  2. O OCP 解放閉鎖の原則
  3. L  LSP リスコフの置換原則
  4. I   ISP インターフェース分離の原則
  5. D DIP 依存性逆転の原則

という名前があります。こちらもとりすーぷさんのスライドで詳しく解説されています。

最後はデザインパターンです。デザインパターンとはクラス設計における定石みたいなもので全部全部23パターンあり、こういう場合はこうするといいよね。というベストプラクティスです。こちらのサイトで解説されています。

デザインパターン | TECHSCORE(テックスコア)

中間

ふぅ。長かったですね…ちなみにまだ半分です笑 もう情報量が多すぎるんですよ!なんかここが初心者脱出の第一関門なのかなって感じました。unityのために勉強していたはずがunityを全く触ってないんですよ!なので私はここからずるずるとモチベーションが下がっていきます。

本を買ってみる

私はもともと体系的に学びたくてunityを本で学んでた人なんですが、C#でもクラス設計の本あるんじゃね?と思って探してみたんですけど全然ないんですよね。初心者向けの本は多くても中級者向けの本が一気に少なくなるあたりからこの業界の闇が垣間見えたような気がします。唯一それっぽい本を見つけたので早速買ってみることにしました。それがこちら「実戦で役立つ c#プログラミングのイディオム/定石&パターン」です。

https://www.amazon.co.jp/o/ASIN/4774187585/gihyojp-22

 

この本がですね、私に希望の光を見せると同時に深淵なる闇を見せつけてきやがったんですよ。というのもですね、結論からいうと非常にためになりました。間違いなく買ってよかった本だと思います。しかしこの本によってですね、『自分が何を知らないか』がわかってしまったんですよ。その多さったるや、もう…自分はいったいいつになったらunityを触れるんだって感じです。ちなみにこの本はオブジェクト指向の基礎からLINQ、良いコードを書くための指針なんかが書かれていてやって損はないと思います。デザインパターンのうちふたつのTemplate Method パターンとStrategy パターンが学べたのもよかったです。ただし挫折注意です!豆腐メンタルの方は1日の摂取容量を正しくお守りください。

 

またまたネットの海に潜る

何がわからないのか分かった私はまたまたネットの海に潜ります。今度は酸素ボンベ付きで。そこでは私は実に様々な知識と出会いました。クリーンアーキテクチャだったりMVPパターン、UniRxやZenjectという設計に非常に便利なアセットなど。ここで得た知識のもととなる記事はリンク先を最後に貼っておくので興味があればぜひ。

何とか這い上がる

ここまで来てやっと、よしunityで実践をしてみようという段階になれました。本当は逐一unityで実践していくのが良いんでしょうけど、自分はここまで知らないとそもそもクラス設計をどうやるのかがわからなかったので後悔はないです。

非常に長かったですね。ここまでお付き合いいただき本当にありがとうございました!これからはunityでバンバンアプリを作っていこうと思います!

間違っているところや訂正が必要な部分はご指摘いただけると幸いです。
それでは最後に参考になった記事へのリンク先を張って終わろうと思います。

 

追記(2020/5/23)

デザインパターンに関してこの本がとても良かったので紹介しておきます。 

Javaで書かれてますが、C#分かるなら全然読めます。

 

増補改訂版Java言語で学ぶデザインパターン入門

増補改訂版Java言語で学ぶデザインパターン入門

  • 作者:結城 浩
  • 発売日: 2004/06/19
  • メディア: 大型本
 

この本の各デザインパターンをUnityで実装し直したのでよろしければどうぞ。

github.com

 

 

 

 

参考にした記事

[Unity] Unity1週間ゲームジャム (ぎりぎり) でCAFU (Clean Architecture For Unity) v2 を使って実装してみた - Qiita

UniRx入門 その1 - Qiita

Unityで学ぶMVPパターン ~ UniRxを使って体力Barを作成する ~ - Qiita

Unityでよく使うデザインパターン - KAYAC engineers' blog

【Unity】31種類のデザインパターンの実装サンプル「Design Patterns Written in Unity3D」紹介 - コガネブログ