はじめに
初心者のうちは、「とりあえず動くものを作る」ことで頭がいっぱいになりがちだと思います。
自分も今は実務経験が1年ほどなのでまだまだ初心者ですが、
この1年で「右も左も分からない全くの初心者」からは抜け出せた気がしています。
この1年で学んだことは色々ありますが、
特にアーキテクチャを意識しはじめてから、実務の中でもコツが掴めてきた気がします。
そこで今回は「アーキテクチャを意識しながら開発すると楽だよ~」ということについて、
「そもそもアーキテクチャって何なの?」というところから書いてみます。
そもそもアーキテクチャとは?
アーキテクチャとは、
システム全体の構造や設計、ある視座に基づいて体系的に分類する仕方
のことです。
一言でアーキテクチャといっても、色々なアーキテクチャがあります。
視点によって捉え方も様々であるためです。
この説明をと聞くとなんだか難しそうに聞こえますが、
アーキテクチャとは要するに 「分類ごっこのルール」 です。
分かりづらいと思うので、簡単な例で示します。
突然ですが、以下の4つを考えてみてください。
①リンゴ
②バナナ
③キリン
④タコ
これらを色々なアーキテクチャで分類してみましょう。
1.動物-植物アーキテクチャ
①のリンゴと②のバナナは同じ「植物」に分類されます。
③のキリンと④のタコは同じ「動物」に分類されます。
2.色アーキテクチャ
①のリンゴと④のタコは同じ「赤」に分類されます。
②のバナナと③のキリンは同じ「黄色」に分類されます。
3.食べられる-食べられないアーキテクチャ
①のリンゴ、②のバナナ、④のタコは同じ「食べられるもの」に分類されます。
③のキリンは「食べられないもの」に分類されます。
このように、一見バラバラなモノ同士でも、
「動物か植物か」「色」「食べられるかどうか」
といった 分類のルール(=アーキテクチャ) によって、様々なまとまりが作られる。
アーキテクチャを意識すると何が楽?
①全体像が把握できる
アーキテクチャに基づいて考えると漏れがないので(=MECE)、全体像を把握しやすくなります。
全体像が把握できると、以下のようなメリットがあります。
・自分が全体のどこの箇所に関する作業をしているのかが分かる
・作業の中で考慮すべき事項と考慮しなくてよい事項が明確になる
・どの箇所にどのような変更を入れるのが適切なのかの見当がつく
また何よりも、全体的な対応指針が立てやすくなるので、安心感があります。
②どの分野の知識が欠けているのかが分かる
システム全体やソフトウェア全体をアーキクチャに基づいて考えたとき、
「自分がメインで担当しているのはどこに分類されるのか?」
を把握できると、自ずと自分に欠けている知識領域が炙り出されます。
欠けている知識領域は座学で埋めてもいいですし、
参画プロジェクトを変えたり、転職したりして実務を積みながら埋めていくのもありだと思います。
また、実務上で知らない知識が出てきても、
それがアーキテクチャに基づいてどの分類に属するのかを把握できれば、
「これは自分の専門領域に関わるから深く勉強しておこう」
「これは専門外だから軽く概要だけ知っておこう」
など、臨機応変に効果的な対策を取ることができます。
おわりに
自分は開発エンジニアなのでソフトウェアアーキテクチャの例になりますが、
・三層アーキテクチャ(基本のソフトウェアアーキテクチャ)
・レイヤードアーキテクチャ(三層アーキテクチャをさらに細かく分類したもの)
をあたり意識すると、とても設計・開発がやりやすくなりました。
例えば新しくクラスを作成するときも、
「このクラスの役割は○○アーキテクチャだと△△に分類されるから、責務はここまで」
という風に、設計や実装の指針を立てやすいためです。
自分が今携わっているシステムでは、規約で明確なアーキテクチャが定まっていないため、アーキテクチャを意識しはじめるまでにとても時間がかかりました(笑)
コードレビューを受けても、
「なんでこの処理はこのクラスに書いちゃダメなんだろう?」
というモヤモヤが残り、その場は修正して乗り切れたとしても、次で上手くできる自信がなかったです。
この記事をきっかけに、アーキテクチャを意識することの楽さに早く気づいていただけたら幸いです。