SmartHR Tech Blog

SmartHR 開発者ブログ

誕生。自作ゲーム機「NGT2」、自作ゲーム「JINJI ROUMU SURVIVOR」 —— 筐体設計からRubyでの実装まで

こんにちは!SmartHRで基本機能の開発をしているNGT(ながた)です。

先日、第12回SmartHR LT大会が開催されましたが、年に一度の特別編「自由研究発表会」ということで大変盛り上がりました。 今回は、そのLT大会で私が発表した自作ゲーム機&自作ゲームを紹介します!

完成した自作ゲーム機とゲーム

作成した自作ゲーム機・自作ゲームをそれぞれ紹介します。

自作ゲーム機の紹介

今回制作したのは、Raspberry Pi Zero 2 Wを元にした携帯ゲーム機「NGT2」です。

作成したゲーム機の本体。本体の右側に3つのボタン、中央にディスプレイ、左側にスティックがある。青みがかった本体にNGT2と書かれている。
作成したゲーム機

私(NGT)自身をNGT1として、第2世代の意味を込めてNGT2と命名しました(実際にはSwitch2にあやかった形です)。

3Dプリンターで作成した筐体にバッテリーが組み込まれており、携帯ゲーム機として動作します。

自作ゲームの紹介

ゲーム機上で動作するゲームはRubyで開発しました。 SmartHRのプロダクトにちなみ、青いヤギのキャラクターが書類を倒していく「JINJI ROUMU SURVIVOR」というゲームです。

作成したゲーム「JINJI ROUMU SURVIVOR」のタイトル画面。
作成したゲームのタイトル画面

作成したゲームの画面。中央に青いヤギがおり、書類のオバケと戦っている。
作成したゲームの画面

Ruby 2Dライブラリーを使用し、Rubyだけで作成しました!

自作ゲーム機と自作ゲームができるまで

自作ゲーム機・自作ゲームを作ると思い至った経緯から紹介します。

RubyKaigiに参加した

大きなきっかけは、2025年のRubyKaigiに参加したことでした。 私はフロントエンドエンジニアで、SmartHRに入社するまではそこまでRubyには触れてきていませんでした。 SmartHRに入社してからRubyに触れる機会が増え、「せっかくなら...」と思いRubyKaigiに参加してみましたが、LTのセッションやブースの展示を通して、Rubyを使ったものづくりにとても興味が出ました。

昔遊んでいたゲーム機の修理にハマった

また、ニンテンドー3DSやPlayStation Vitaといったゲーム機の修理にも最近ハマっていました。 青春時代を共に過ごしたゲーム機がレトロゲーム機になりつつあることに一抹の寂しさを覚えますが、 修理用のパーツを入手し、末長く遊べるように修理を実施していました。 携帯ゲーム機っていいものですよね。

ゲーム機、作れるのでは?

修理用パーツを通販で購入する際、ディスプレイやバッテリーなどのRaspberry Pi用の電子工作パーツの存在を知りました。 「これらのパーツを組み合わせることで、高度な電子工作の知識がなくても比較的簡単にゲーム機が作れるかもしれない」と思っていました。

さらに同時期、SmartHRのLT大会が「自由研究発表会」として開催されることを知りました。 これはチャンスとばかりに、ゲーム機を作ることを目指しました。

必要なモノを調達する

ボタンやスティックなどの操作系統、ディスプレイ、バッテリーと充電管理があれば携帯ゲーム機が作れると考えました。 パーツリストが固まったところで、いよいよ調達開始です。

主要なコンポーネントとして、Raspberry Pi Zero 2 W、1.3インチディスプレイとスティック・ボタンを搭載したHAT(Hardware Attached on Top)基板、18650バッテリーと充電管理モジュールを購入しました。 さらに、3Dプリンター(Ender V3 KE)も購入しました。 3Dプリンターを除くと、およそ1万円程度で必要なパーツは揃えることができました。

3Dプリンターで筐体を作る

ハードウェアの組み立て自体は、既製品のモジュールを使用したため意外とあっさり完了しました。しかし、筐体設計とゲーム開発は一から始める必要がありました。 筐体設計では、モデリングと3Dプリントを繰り返しました。少しのズレでもうまくはまらなかったりするため、調整してはプリントを何度も何度も繰り返しました。

Rubyでゲームを作る

3Dプリントと並行してRuby 2Dでゲーム開発を進め、キャラクターの動作、当たり判定、スコアシステムなど、基本的なアクションゲームの要素を実装していきました。 小学生の頃、HSP(Hot Soup Processor)というプログラミング初心者向けの言語でゲーム作りをしていた経験がありますが、Ruby 2Dでのゲーム作りはそのときの感覚に非常に近いと感じました。サクサク書けるのでとても楽しいです。

ゲーム内で利用するドット絵も合間で作成していきました。

完成!

約1ヶ月の制作期間を経て、自作ゲーム機と自作ゲームが完成しました!

自作ゲーム機「NGT2」で動く自作ゲーム「JINJI ROUMU SURVIVOR」のタイトル画面。
「JINJI ROUMU SURVIVOR」のタイトル画面

自作ゲーム機上で自作ゲームを動かし、両手の親指で操作している。
自作ゲーム機上で自作ゲームを動かす様子

開発を振り返って

このプロジェクトを通じて、予想以上にサクサクとゲーム機・ゲームを作ることができました。 特に驚いたのは、Rubyでのゲーム開発が思った以上に快適だったことです。普段の開発で慣れ親しんだRubyの構文で、ゲームを作るのは新鮮な体験でした。

LT大会では、実際にゲーム機を手に取って遊んでもらい、「本当に動くんですね!」「Rubyでこんなことができるとは知りませんでした」といった反応をいただけて嬉しかったです。 今後はもっと大きな筐体を作ったり、イベントブースで来場者に遊んでもらえるような展示用ゲーム機の制作にも挑戦してみたいと考えています。

普段とは違う分野でRubyを活用することで、ものづくりの楽しさを再発見できたのが最大の収穫でした。RubyKaigi最高!

We Are Hiring!

SmartHR では一緒に働く仲間を募集中です! 少しでも興味を持っていただけたら、カジュアル面談でざっくばらんにお話ししましょう!

hello-world.smarthr.co.jp