🌸 はじめに ── 社内発案型研修って?
弊社には「社内発案型研修」という制度があります。社員が「こんなことを学びたい」「こんなことに挑戦してみたい」と自ら提案し、会社がそれをバックアップしてくれる仕組みです。
今回私が選んだテーマは、「生成AI(Claude Code)を使ってブラウザで動くゲームを作る」でした。最近AIツールが話題になっていたこともあり、「実際に使ってみないとわからない」という気持ちと「何か形になるものを作りたい」という気持ちが重なり、このテーマを提案しました。
生成AI
Claude Code
JavaScript
GitHub
Supabase
💬 コンセプト設計
先輩からのアドバイスをもとに、ゴールを3ステップで設定しました。
- ローカルで動くゲームを作る(HTML / CSS / JavaScript 1ファイル)
- Claude Code(生成AI)をフル活用する
- 最後はWebに公開して誰でも遊べるようにする
「タイピング練習になるやつが業務に役立ちそうだし、バスケみたいにシュートする感じだと楽しそうじゃない?」という雑談から「タイピングバスケ」というコンセプトが誕生。ゲームの過程をホームページのブログにまとめることも決まりました。
🏀 ゲーム仕様
Stage 1「ウォームアップ」
IT用語15単語(バグ・ログ・サーバーなど)。1かな打つごとに1球シュート。ゴール固定。命中率92%以上でクリア。
Stage 2「中級チャレンジ」
IT用語15単語(プログラム・アジャイル・デプロイなど)。2かな打つごとに1球シュート。ゴールが左右移動。7ゴール達成でクリア。
Stage 3「エキスパート」
長めのIT用語20単語(クラウドコンピューティングなど)。3かな打つごとに1球シュート。ゴールがランダム移動。5ゴール達成でクリア。
🤖 Claude Codeとの格闘記録(四苦八苦)
① IME予測変換が邪魔すぎる問題
日本語入力でOSの変換候補が勝手に出てきてゲームが止まる問題が発生。
【解決策】keydownイベントをキャプチャフェーズで横取りし、自前のローマ字→ひらがな変換テーブルを実装することでIMEを完全バイパス。
② ボールがゴールに届かない問題
ウィンドウの高さによってボールが手前に落ちてしまう問題。
【解決策】「飛行時間ベースの軌道計算」を採用。ゴールまでのフレーム数から重力加速度を逆算して初速を決定する方式に変更。
③ 「ピュ」「ティ」「ショ」が打てない問題
「ぴゅ」などの複合かなが「ぴ」と「ゅ」に分断されてマッチ失敗していた。
【解決策】splitReading関数を実装。小書き仮名は前の文字とセットで1ユニットとして扱うよう改修。
④ 表示はカタカナなのに入力を受け付けない問題
内部処理のひらがなと表示のカタカナが不一致を起こしていた。
【解決策】内部処理をひらがなで統一し、displayUnit関数でUnicodeコード差(+0x60)を利用してカタカナ表示に変換。
⑤〜⑧ 公開後に発覚したバグ群
- 無効ローマ字入力でゲームが詰まる → isValidBuf()関数でバッファ検証を強化
- ステージクリア時にフリーズ → showResult()を全面書き直し
- 長音符(ー)が入力できない → キーボードの「-」キーに割り当て
- 「ちゃ」が1パターンしか打てない → 「tya」など代替ローマ字を追加
📈 バージョン進化の記録
v1:基本タイピングゲーム(ひらがなのみ)
v2:IMEバイパス実装
v3:飛行時間ベースの物理演算を実装
v4:splitReading実装・カタカナ対応
v5:displayUnitでカタカナ表示対応
v6(現在):ミスしたらボール不発・ノーミスボーナス・ステージリトライ実装
📊 Supabaseによるスコア記録とダッシュボード
ゲーム公開後、「クリアした記録を残したい」という欲求からSupabase(クラウドDB)との連携を実装。プレイヤーランキング・ステージ別クリア率・命中率統計などを表示するdashboard.htmlも作成・公開しました。
CDNの読み込み方式(ESM vs UMD)の違いで「エラーは出ないのに動かない」という問題も経験。UMDビルドへの明示変更で解決しました。
💡 やってみてわかったこと
- AIは「優秀なペアプログラマー」:曖昧な説明では解決しない。「どの単語で」「どのタイミングで」「どんな現象が起きるか」を具体的に伝えることが重要。
- バージョン管理(Git)は必須:「あの動いてたバージョンに戻したい」という場面が何度もあり、コミットしておいたおかげで安心して実験できた。
- 「四苦八苦」こそが学び:IMEの仕組み、ローマ字変換、物理演算、Unicodeの文字コード……うまくいかない時間が長かった分、知識が身についた。
- AIに対して「うまく話す力」が重要:問題を整理して言語化する力がコーディング以上に鍛えられた。