注: メソッド名は動詞で始めろとか、そういう一般的なところはリーダブルコードその他に任せることにします。
というか、リーダブルコードでも「名前に情報を詰め込む」って言う話で言及されているんだけど、ちょっと想定ケースを絞って考えてみたいと思いますよ。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者:Dustin Boswell,Trevor Foucher
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
一般的なサービス開発だと、ユーザーさんに見せる名前とデータの本質がそこまで離れないので悩む余地も少ないように思うのですが、何がどう転ぶか分からないゲーム開発では気を遣って考えないと後になってしんどいよねーって最近よく思うので、どんなことを気にして名前をつけているかを簡単に整理しようと思います。 と思ったけど、まとめてみたら割と随筆っぽくなってしまいました。 ……まぁ、気を使って考えても、また別の要因で頭を抱えることがあるんですけどね。
さて、説明にあたりさすがに個人ブログでガチ担当案件の事例を持ってくるわけに行かないので、有名どころの設計をなんとなく想像しつつ例にとってみようと思います。当然中の人じゃないので、開発経緯なんかわからないしそもそもそういう設計になってない可能性の方が高いのでその辺ご了承ください。ちなみに勝手にデータを覗くのは大体のゲームで規約違反のはずなので、以下は完全にオープンな情報からの妄想です。念のため。
あと英語が拙いのも許してください…
モチーフに引っ張られてはいけない
…けどさじ加減も大事よ、と言う話を、3つのゲーム(というかIPというか)から考えてみたいと思います。ほとんどこの話。
例1: スプラトゥーン(の新規開発のとき)
大人も子供もみんな大好きスプラトゥーン。プレイヤーキャラクターがイカになるまで、紆余曲折あったのはご存知でしょうか。 www.nintendo.co.jp
この事例でとてもよく分かるのは、「外側のモチーフなんか結構コロコロ変わる」ということ。(都度修正対応するデザイナーさんほんとお疲れ様です…)
で、このとき最初に操作キャラクターを管理するクラス名にTofu
なんてつけてて、後でそれを直すコストを取れない、とかなってたら最終的に地獄なんですよ。動いてるのはイカなのにTofu
ってわけわかんねーですよ。これでさらに途中の「ウサギ」ありきの変数名とかあったらもうしっちゃかめっちゃかです。*1
じゃあ具体的にどーすんだって言うと、この場合は皆様ご存知のとおり「イカ=操作キャラクター」なので、Player
とかPlayerCharacter
とかつけるのが一番素直でしょう。ただここでヒト(攻撃)形態をhumanMode
、イカ(隠れる)形態をsquidMode
とか書いてあるとわりと台無しで、これはそれぞれattackMode
、hideMode
としたいところ。
まぁ、スプラトゥーンも今や立派なIPなので、今後「イカ」は「イカ」でいいかもしれないですね。
例2: 艦これの派生ゲームを作るとしたら…?
そしてそうやって一度出来上がったIPから派生する案件における重要オブジェクトってそうそう変わらないよね、と言うお話です。
艦これの場合、「艦娘」はどこまで行っても「艦娘」であり、いくらミリタリー繋がりがあっても「戦車娘」には絶対ならないですよね。それ艦これじゃなくてガルパン(GIRLS as PANZER)*2や。だからもう艦娘を表すオブジェクトにFleetGirl
とかつけちゃってもそこまで大きく困ったりしないわけです。まぁでも艦これの世界では「艦=艦娘」なので、単純にFleet
の方がスマートかな。
というわけで確かにはじめにIPありきだと根本的な部分についてブレる余地はほとんどないのですが、それでも細かい部分、例えば開発初期に「コイン」をモチーフにしていたアイテムが、気づいたら「クリスタル」的なものになっていたり、さらに「アメ」になっていたりする、みたいなのはよくある話だったりします。
そのオブジェクトが表す本質を捉えないと、変更に強い名前をつけるのは難しいです。
例3: 戦車道大作戦の「生徒」ってなんだろう
というわけで最後のお題はガルパンのスマホゲーム、「戦車道大作戦」から。
アニメに登場したキャラクターを乗員として、好きな組み合わせで好きな戦車に乗せてチームが作れる戦車シミュレーションゲームです。
私の趣味丸出しなのは否定しませんが、説明にちょうどいい例題がありました。
このゲーム、アニメのキャラクターをガチャで引く「生徒ガチャ」というものがあります。
このガチャで獲得できる「生徒」のオブジェクトに、あなたなら実装上どんな名前をつけますか?公式サイトのゲーム紹介を見ながら考えてみてください。
ちなみに、私ならユーザーさんに直接見える「生徒」の訳であるStudent
ではなくCrew
(乗員)とすると思います。それはなぜか。
- ガチャで獲得できる「生徒」の役割の本質は戦車の「乗員」である
- (IP知識が無いとこの判断は難しいのですが)コラボキャラを差し引いても、将来的な可能性としてガチャ実装対象となるキャラクターに、立場的に「生徒」ではないキャラクターが含まれる可能性がある*3
とまぁ、いつもこんな感じに近いことを考えてプログラム上の名前を決めています。
長くなってしまったので、続きは後編へ…
(2020.10.31追記)
10月16日(金)15時より、西住流 家元『西住 しほ』と、島田流 家元『島田 千代』が登場する生徒ガチャを開催します!
— 【公式】ガールズ&パンツァー 戦車道大作戦! (@garupan_app) 2020年10月16日
▼開催期間
10月16日(金)15:00〜10月30日(金)14:59
▼開催内容https://t.co/1qzVEocdHT#garupan_app pic.twitter.com/iWaxPN049g
(ドヤ顔)