ゲーム開発で考えるクリーンアーキテクチャの使いどころ
Photo by Kouji Tsuru on Unsplash
運営中のアプリやゲームでは、「1か所だけ直したつもりが、別の場所まで壊れる」ということがあります。
画面の表示を少し変えただけなのに、入力処理や保存処理に影響が出る。エフェクトを直しただけのはずなのに、当たり判定やダメージ計算までおかしくなる。
こうした怖さを一度でも経験すると、設計をきれいに分けることの意味が見えやすくなります。
クリーンアーキテクチャは、見た目の整った設計図を作るためだけの考え方ではありません。仕様変更や修正対応のたびに、触る範囲が広がりすぎる状態を減らすための考え方です。
変更の影響範囲を小さくする考え方
クリーンアーキテクチャには細かな定義や流派があります。ただ、実務で最初に押さえたいのは、「アプリの中心に何を置くか」と「外側の都合をどこまで内側に入れないか」です。
かなり大づかみに見ると、中心にあるのはアプリのコアロジックです。そのまわりに、UI、データベース、外部API、フレームワークなどがあります。図では円のように描かれることが多く、中心に近いほどアプリの本質的な処理、外側に行くほど画面や保存先、通信先のような変更されやすい要素になります。
ここで見たいのは、依存の向きです。外側の都合がそのまま内側に入り込むと、UIの変更やDBの変更が、アプリのルールまで巻き込みやすくなります。逆に、中心のコアロジックが外側の事情に引っぱられにくい形になっていると、変更時に見る範囲を絞りやすくなります。
設計が混ざると、修正の確認範囲が広がる
ゲーム開発で考えると分かりやすいです。見た目のエフェクトを調整しただけで、当たり判定やダメージ計算までおかしくなる設計は、修正のたびに確認範囲が広がります。
本来であれば、描画の調整は描画の範囲で確認したいところです。入力処理、ゲームルール、状態管理、ダメージ計算、保存処理まで毎回見直す必要が出ると、修正そのものよりも確認作業の負担が大きくなります。
もちろん、すべてを完全に分離すればよいわけではありません。小さな開発で細かく分けすぎると、ファイルやクラスを追うだけで時間がかかります。設計の形を守ることが目的になると、かえって作業しにくくなることもあります。
それでも、どこからどこまでが画面の都合で、どこからがゲームルールなのか。どの処理がDBや外部APIに依存していて、どの処理はアプリ内の判断として閉じているのか。
この境界が見えるだけで、レビューや調査の進め方はかなり変わります。
ゲーム開発では「境界」が確認作業を楽にする
ゲームでは、画面に見える変化と内部の処理が連続して見えます。
ボタンを押す。キャラクターが動く。エフェクトが出る。HPが減る。ログが残る。サーバーに送信される。
プレイヤーから見ると一連の体験ですが、開発側ではそれぞれ別の責務として見たほうが確認しやすいケースがあります。
描画は描画として確認する。
入力は入力として確認する。
ゲームルールはゲームルールとして確認する。
保存や通信は、保存先や通信先の都合を分けて確認する。
こうした分け方ができていると、「今回はこの外側の処理だけを見ればよい」と判断しやすくなります。
反対に、画面、入力、ルール、通信が強く結びついていると、小さな修正でも「念のため全部確認しよう」となりやすいです。これは安全側の判断ではありますが、毎回それを続けると、修正速度もレビューの負担も重くなります。
小さい開発ではやりすぎにも注意する
クリーンアーキテクチャは便利な考え方ですが、どの開発にも同じ形で入れればよいものではありません。
短期間で作る小さなツールや、仕様がほとんど変わらない機能に対して、最初から層を細かく分けすぎると、実装の見通しが悪くなることがあります。
見るべきなのは、設計の名前ではなく、変更時に何が困るかです。
UIを変えるたびにロジックまで壊れるのか。DBを変えるとテストが広範囲に落ちるのか。外部APIの仕様変更が、そのまま画面やゲームルールに広がっていないか。
こうした困りごとが出ているなら、クリーンアーキテクチャの考え方は判断材料になります。
逆に、まだ小さく閉じていて、変更範囲も十分に追えるなら、無理に形だけを合わせる必要はありません。
確認しやすい設計にするための見るべき点
クリーンアーキテクチャを使うかどうか以前に、変更の影響範囲を閉じ込める発想は持っておくと助かります。
急な修正が入ったとき、どこを見ればよいか分かるだけで、作業の不安はかなり減ります。
確認するときは、次のような点を見ると判断しやすくなります。
・UIの変更が、コアロジックに直接影響していないか
・DBや外部APIの都合が、ゲームルールや業務ルールに入り込んでいないか
・描画、入力、状態管理、ルール計算の境界が追える形になっているか
・テストで確認したい処理が、画面や通信に強く依存しすぎていないか
・修正時に「今回見る範囲」を説明できる状態になっているか
設計は、きれいに見せるためだけに分けるものではありません。
あとで変更が入ったときに、どこを見ればよいか分かる。どこまで確認すればよいか判断しやすくなる。
その状態を作るための考え方として、クリーンアーキテクチャはかなり実務に近いテーマだと思います。
おわりに
X(旧Twitter)やBlueskyを中心に日々発信しております。
是非他のSNSもご覧いただけますと幸甚でございます。
https://x.com/itchie_tatsumi
https://bsky.app/profile/itchie-tatsumi.bsky.social
https://www.facebook.com/ichino.souta
また、辰巳電子工業SS事業部では、エンジニアが安心して長く働ける環境づくりに取り組んでおります。「今の経験で応募できるか知りたい」「案件やキャリア支援について聞いてみたい」という方は、是非カジュアル面談からお気軽にご相談願います。