※この記事は広島大学 HiCoder & ゲーム制作同好会GSD Advent Calendar 2024の23日目の記事です※
はじめに
はじめまして!3年生プログラマーのヤーノという者です!
気づけば2024年も終わりですね。なんだか学年が上がるにつれて1年終わるのが早くなっているように感じます。ジャネーの法則恐るべし
ジャネーの法則
Wikipedia「ジャネの法則」
簡単に言えば、生涯のある時期における時間の心理的長さは年齢に反比例すると主張したものである[2][3]。例えば、60歳の人間にとって1年の長さは人生の60分の1であるが、6歳の人間にとっては6分の1であり、主観的に感じる年月の長さは歳をとるほど短くなる(時間が早く過ぎると感じる)
さて、僕は今年、サークルメンバーとの共同開発でGSD GamesLuncher2(ゲームランチャー2) というアプリをつくりました。本記事ではアプリの紹介と、完成するまでの経緯について話していこうと思います。
ゲームランチャーって?
我々GSDでは、毎年7月ごろに開催されるゆかたまつりと、11月ごろに開催される大学祭でメンバーが制作したゲームを出展し、来場するお客さんに遊んでもらっています。そこではメンバーのパソコンを教室に並べてそれを使ってお客さんがゲームをします。
ゲームランチャーとは、そこで出展されるたくさんのゲームをひとつに集めて、ルール確認やプレイができるようにしたアプリです。さらにアプリ内からゲームをアップロード&インストールすることだってできちゃいます。アップロードしたゲームをメンバーがパソコンにインストールすると、ゲームファイルをアプリ上から起動できるので、お客さんはどの端末を使ってもこのアプリひとつですべてのゲームを遊べるわけですね。
制作するにあたって
もともとゲームランチャーは、「2」とナンバリングされているように、先輩方が開発された初代が存在します。ゲームランチャー自体が生まれた経緯については、初代ゲームランチャーを作った話の記事があるのでこちらを読んでみてくださいね。
後輩たちが引き継いでいけるようにしていきたいと2の開発メンバーを募集されていたので、これに志願しました。 というのも、曲がりなりにもこのサークルでプログラマーとして活動してきて、せっかくプログラマーならなにかサークルのためになることに活かしたいな~とぼんやり思っていたので、この機に挑戦してみようと思い立った次第です。
そんなこんなで開発がはじまりましたが、そこでははじめて経験することばかりでした。
TypeScript?React ? Electron??…と、どれもなにそれおいしいの状態からのスタートだったので、先輩に聞いたり調べたり手探りで仕様を理解しながら開発を進めていきました。
開発ではChatGPTも大いに役に立ってくれました。それはもうめちゃくちゃに頼りました。
こうしたAIの登場によって、未経験の技術に手をだす敷居が下がっていろいろなことに挑戦しやすくなったのはうれしいです。(実際、ChatGPTがなかったら挑戦に踏み切れていなかったかもしれません)
開発がはじまったのは4月ごろでした。ゆかたまつりまでには最低限の機能を実装して本番運用する予定だったので、だいたい2か月ほどで完成させる必要がありました。いろいろな部分で詰まりながらも、開発用環境でゲームのアップロード&起動できるところまでこぎつけたので、本番にもなんとか間に合うかな…?と思っていましたが…
敗北のゆかたまつり
ときはすすんでゆかたまつり前日。ゲームランチャー2の状態がどうなっているかというと、、、
完 成 し て い な い
開発用のサーバーでは動くのに本番用のサーバーで動かなかったり、ゲームのサムネイル画像を表示できない…といった大きな問題が発生していました。メンバー総出で徹夜して戦っていましたが、結局当日朝には間に合わず撃沈…。この日に運用することは叶いませんでした。
サークルのためにと思って作りはじめたのに、逆に迷惑をかけてしまう結果になってしまってこの日はとても悔しかったです。スケジュール管理の甘さや、実装する優先順位の見積もりの甘さを痛感することとなりました…。
余談ですが、弊学のゆかたまつり・大学祭では毎回レッドブルが無料で配られています。
筆者はあまりエナドリを飲む方ではないのですが、この日だけはそれはもう身体中に染みわたりました。今までなんでレッドブル?とか思っていましたが、祭り前日に徹夜かました学生のためだったんだなと確信しました。
大学祭でいざリベンジ
ゆかたまつりではスケジュール管理がギリギリだったことを反省して、大学祭では1週間前に完成させてテストもすることを目標に作業をすすめていきました。
そして大学祭1週間とちょっと前、本番の環境でも動作すること、すべてのメンバーの端末上でも問題なく使えることが確認でき、ついに今度こそ完成させることができました!やったね!!!ひゃっほーい!
最後まで格闘してくれたバックエンドプログラマー、本当にありがとう
大学祭は2日間ありましたが、両日とも特に大きな不具合が起こることもなく、GSD GamesLauncher2は無事役目を全うすることができました!お客さんからの感想からも、ゲームを楽しんでもらえたことがうかがえます。ゲームランチャーがお客さんのゲーム体験をすこしでも良くすることができていたなら幸いです。
サークルメンバーやOBの方々からもお褒めの言葉をたくさんいただきました。
やはりこういう瞬間はいままでの苦労が報われた気がして幸せですね。開発者冥利に尽きます。
おわりに
今回の開発では、初めてのことばかりだったので不安もありました。しかし、先輩の手厚いサポートやメンバーの頑張りのおかげで、最終的に運用まで実現できたのでよかったです。先輩には感謝しかないですし、メンバーもありがとうございました。
僕は主にフロントエンド(ページ遷移やボタンの配置など、ユーザーに見える部分のこと)を担当しましたが、UI系は成果が目に見えてわかるので、開発しててとても楽しかったです。いちばん苦労したところは、バックエンド(サーバーやデータベースなど、ユーザーには見えない裏方の部分のこと)とゲーム情報を受け渡しする部分ですかね。あるソースファイルにあるデータを別のファイルに渡してその先でもさらに別のファイルに渡す…みたいなことが多くて何度も脳みそが破裂しかけたのを覚えています。
今後の展望として、完成には至りましたが、書いたコードの意味を理解してないところとかたくさんあるので、まずはちゃんと後輩に引き継いでいけるようにコードの理解や修正をしていかなければいけないですね。また、初期構想で考えていたものの実装までいっていない機能もあるので、今後の開発でさらにGamesLauncher2を進化させていきたいです。乞うご期待!
制作者コメント
やぎせ(バックエンド)
未経験から始めたバックエンド開発ですが、TypeScript、SQLから学ぶ必要があったので形になるまでエグい時間を費やしました。先輩やChatGPTのおかげでなんとかなったのが幸いです。技術革新に感謝ですね。
メンバーの皆さんもお疲れ様でした。
ツールとしていいものができたと思います。後輩もゲーム作りに専念できるでしょう。
こんな思いを後の世代にさせてはいけない!!!!!!!!クソ!!!!!!!!!!!!
ぬー(バックエンド)
結構初期の時のバックエンド開発してて、アンケートとかの設計考えるのが難しかった!ゲームのアップロードのAPI開発がかなり苦戦して印象に残ってる!
風呂敷(サウンド, デザイン)
今回は音楽だけでなく、UIやアニメーション、更にはプログラミング等色々挑戦できて良い体験になりました!ありがとう
ttr(初代GL開発, プロジェクトマネージャー)
皆で協力し、デザインからフロントエンド、バックエンド、イラスト、サウンドまで作り上げたのは素晴らしい成果です。特に、TypeScriptの経験がなかった中で諦めずに完成させたのは本当にすごい。うまくサポートできなかった点もあったかもしれませんが、それもいい経験になりました。最初は一人で開発を始めたこのプロジェクトがここまで大きくなり、皆で作り上げたことに感謝しています。今後後輩たちが自由に改良を重ねてくれることを期待しています。
kenty(初代GL開発)
ランチャーはゲーム試遊会における不便を解消し、サークルで作られたゲームの魅力をより沢山の人に届けるために作られました。
旧バージョンは上級生の私たちが中心となって開発し、当時も多くの価値を届けることに成功しました。しかし一方で(主に私の設計のせいで)新機能の追加が難しい、何もしなくても自然発生するバグ、そして後継にどのように継いでいくかという問題を抱えていました。
そのため、いっそ後輩主導で1から作り直してもらおうというアイディアが生まれ、ゲームランチャー2の開発を募集することになりました。最初は興味のある人が集まってくれるかどうか心配していたのですが、結果として完成にこぎ着けることが出来たこと、とても感謝しています!
ランチャー含め、ソフトウェアは作って終わりではないので、色んな人の意見を取り入れつつ、自分たちも開発の楽しさや成長を感じてもらいながら、ランチャーの開発に携わってほしいです。そしてさらに欲を言えば、ランチャーに留まらず、誰も思いつかないようなすごいツールを新しく作ってみてほしいです。