GeminiCLIにゲームと業務アプリを作らせた結果

AI

 GeminiCLIを使ってぷよぷよ風の落ち物ゲームと、部門毎のテンプレートを管理する業務ツールを作らせたところ、強みと欠点が見えてきました。作ったゲームは公開します。

ゲーム(ぽよぽよ)※操作にはキーボード必要です

環境

Windows 11 Home
GeminiCLI 0.17
( gemini-2.5-pro(無料枠利用))

ぷよぷよ風落ち物ゲームを作らせてみる

ゲームを作るまでにどのようなプロンプトを入力したのかと、Geminiの様子を記載します。
テトリスを作る記事が多い気がしているので、ぷよぷよにしました。

# GeminiCLIに対するプロンプト

# 最初のプロンプト
> C:\Users\{ユーザ名}\game_puyo にぷよぷよゲームを作って。html,css,javascriptを使って。

# Geminiの回答
まずはディレクトリの作成から始めます。
 :
 矢印キーの左右でぷよを移動、下でぷよを素早く落とすことができます。同じ色のぷよが4つ以上つながると消えます。
  今後の拡張として、以下のような機能を追加することもできます。
   * スコア表示
   * ゲームオーバー処理
   * ぷよの回転
   * 二人対戦モード

> この機能を追加して

これだけのプロンプトで出来上がったのが下の状態です。
ぷよの操作、落下、回転、4つ以上連結で消滅、連鎖、スコア計算は実装されています。
しかし、一番左列と左から二列目ににぷよがあるときに回転しないバグがありました。

途中経過1
# 修正指示プロンプトを入力します
>一番左の列と左から二番目の列にぷよがある時に回転できません。修正して

ご指摘ありがとうございます。承知いたしました。
  ぷよが壁際にあるときに回転がうまく機能しない問題を修正します。

# 次の修正プロンプト
> ぷよは、四角ではなく丸にしてほしい

ここで問題が発生。

CLIがいうことを聞いてくれない

いや、言っていないよそんなこと。
丸いぷよにしてほしいと頼んだだけなのに、対戦モードを実装されてしまいました。
勘違い実装とはいえ、関心しました。

# 修正プロンプト
> 対戦モードはいりません
 承知いたしました。対戦モードを削除し、一人用のぷよぷよゲームに戻します。
 
> ぷよは、四角ではなく丸で表示してほしい。
 はい、承知いたしました。ぷよを四角から丸に変更しますね。

> マスの表示数を縦12、横6に変更して。
 ゲームボードのサイズを、縦12マス、横6マスに変更します。

もう一度伝えたらわかってくれました。

そうそう、こんな感じです。
ぷよが落下した後、連結が解除されないので、修正を指示します。

# 修正プロンプト
> ぷよが通常落下した後、連結を解除してほしい。連結解除後はぷよの横と落下操作ができなくなり、それぞれのぷよが一番下まで落下する。ぷよが全て落下した後削除処理開始。修正して

はい、承知いたしました。ぷよの落下と連結解除のロジックを、ご要望に合わせて大幅に修正します。

> 下ボタンを押しながら強制落下させると、ぷよが下のぷよを貫通するので修正して
> ぷよを縦に二つ並べた状態で落下させると、下側のぷよが消滅するので修正して
> ゲームボードの右上に、次に落下してくるぷよを表示して
> 

このあたりは、AIに修正内容をどうやって理解させるかが腕の見せ所ですね。
バグが出ることは仕方ないと思っています。
プレイして、バグの発見と修正指示を行うのがこっち(人間)の仕事という感じです。
修正はいい感じでした。

ここで、警告が表示されました。
ℹ ⚡ Slow response times detected. Automatically switching from gemini-2.5-pro to gemini-2.5-flash for faster responses for the remainder of this session.
⚡ To avoid this you can either upgrade to Standard tier. See: https://goo.gle/set-up-gemini-code-assist
⚡ Or you can utilize a Gemini API Key. See: https://goo.gle/gemini-cli-docs-auth#gemini-api-key
⚡ You can switch authentication methods by typing /auth
翻訳すると、
 応答時間が遅くなっているのでgemini-2.5-pro からgemini-2.5-flashに変更します
 これを回避するには、Standard ティアにアップグレードしてください。
とのこと、レート制限に引っかかったのでしょうか。
 無料のproだと、現在は
   RPM 5(1分間の上限)
   RPD 100(1日の上限)
   TPM 250,000(1分のトークン上限)
になっていましたので、RPM かTPMに引っかかったのかもしれません。

レート制限  |  Gemini API  |  Google AI for Developers

続けます。

# 追加修正プロンプト
> ぷよに可愛い目を追加して
> ゲームのデザインをモダンな感じにして
> ぷよぷよという名前をぽよぽよに変更して

モダンでいい感じになりましたので、geminiが作成してくれたプロジェクトをそのまま公開します。

ゲーム(ぽよぽよ)
 ※ざっくり操作方法 ↑回転 ←→移動 ↓落下

 ついつい夢中になって連鎖を組んで遊んでいました。
 私の脳では2連鎖程度が限界ですので、たまに3連鎖がつながると、天才フフッってなります。
 今後の改造ポイントとしては、だんだんと速度が上がるようにしたり、連鎖時のエフェクトを追加したり、落下後のぷよが隣とくっつくエフェクトを追加すると、よりよくなるかもしれません。
 私はこれで充分楽しめます。

業務向けプロジェクトを作らせてみる

 次は、業務向けのプロジェクトを作らせてみます。
 部門毎に書類のテンプレートをダウンロードできるサイトにしました。

# プロンプトの入力
> 次のプロジェクトを、C:\Users\{ユーザ名}\report-manager に作って
  トップページでは部門を選択(営業部、生産部、総務部)
  部門を選択すると、それぞれの部門毎にテンプレートダウンロードページが表示される。
  トップページには、管理者用のリンクがあり、管理者用リンクから管理者ページを表示させる。
  管理者用ページでは、部門毎のテンプレートをアップロードできる。
  アップロードフォームには、部門名、説明、テンプレートファイルのアップロードリンクを表示

✦ すべてのファイルとディレクトリの作成が完了しました。
  これでプロジェクトのセットアップは完了です。
  サーバーを起動するには、C:\Users\{ユーザ名}\report-manager ディレクトリで以下のコマンドを実行してください。
   1 node server.js

作りたいアプリの設計を、最初に入れておくと、AIがなんとなく理解してくれるような気がしています。
最初の一文で作成したプロジェクトはこんな感じでした。

 管理者ページのアップロードフォームから、テストデータをアップロードすることができ、各部門のページからダウンロードも正常に行うことができました。
 しかし、日本語ファイル名が文字化けを起こしています。

# 修正プロンプト
> 日本語名のファイルをダウンロードするとファイル名が化けてしまうので修正して

日本語名のファイルがダウンロード時に文字化けする問題ですね。これは、HTTPヘッダーのContent-Dispositionフィールドでファイル名を正しくエンコードできていないことが原因です。

> 管理者ページから、一度アップロードしたテンプレートの、説明文変更、ファイル差し替え、削除ができるようにしてほしい

管理者ページからテンプレートの「説明文変更」「ファイル差し替え」「削除」ができるようにする機能追加ですね。承知いたしました。

 修正するたびにサーバの再起動が必要ですので、コマンドプロンプトから、nodeサーバの再起動ができる程度の操作はCLIに頼らずとも自分でやった方がいいと思います。
 CLIに「ウェブサーバを起動させて」とお願いするとnodeサーバを起動させてくれるのですが、
   サーバアプリが出力するstdout(標準出力)が見れなくなる
   サーバを停止させるまでCLIに次の指示が出せない
ので、私は別のコンソールを使って手動でnodeサーバを起動させています。
 トークンの節約にもなります よね。 

日本語のファイル名がまだ文字化けを起こしているので、再度修正指示を出しました。

# 修正プロンプト
> 日本語ファイル名が文字化けを起こしています。管理者ページ テンプレート アップロード画面の既存テンプレートの管理欄

これは、ブラウザからサーバーへファイル名が送信される際に、エンコーディングが正しく行われていないことが原因である可能性が高いです。特に、UTF-8でエンコードされた日本語ファイル名が、サーバー側でLatin-1(ISO-8859-1)などの異なるエンコーディングとして誤って解釈されると、ご提示のような文字化けが発生します。
  この問題を解決するため、server.jsで受け取ったoriginalnameを、一度Latin-1としてBufferに変換し、その後UTF-8として文字列に戻すことで、正しい日本語ファイル名に再エンコードを試みます。これは一般的な文字化け対策の一つです。

ファイル名も日本語表示されるようになりました。いい感じですね。

営業部だと次のような表示になる。

いいですね。
次は、誰でもテンプレートが変更できると危険なので、管理者ページにログイン制御をつけてもらいます。

# 修正プロンプト
> 管理者ページにログイン認証を追加して

✦ 管理者ページにログイン認証機能を追加します。

 この指示の後、Geminiは返ってこなくなりました。
 

 実は、今回と同じような実験を他のプロジェクトでも行っていますが、その時も、ログイン認証を追加するように頼んだところ、同じ回答を繰り返した後、回答が得られなくなりました。
 現在のGeminiCLIは、ログイン認証が苦手みたいです。
 もしくは、こだわりすぎて返ってこないのかわかりませんが。
 プロンプトで、
  ・パスワードフォームに”1234″を入力したときだけ、管理者ページを開くようにして
  ・パスワードはハッシュ化しないで、平文で保存して
  ・簡易的なログイン認証でいいので実装して
等と、試してみましたが、私の環境ではうまくいきませんでした。
 ログイン認証のロジックは、個人情報を多く含むのでわざと保存しないようにしているのかもしれません。
 自分でフォーム認証を実装して追加すればいいのですが、あくまでもGeminiCLIの実用実験ですので。

まとめ、感想

 有名なゲームプログラムはすごく簡単に実装できます。
 今回のように、巷にサンプルソースがあふれている有名なゲーム(テトリス、ブロック崩し等)はAIがゲームをよく理解しているので簡単に作ってくれます。
 運が良ければ最初の一文で「ほぼ」完成状態になるかもしれませんが、マイナーなゲームや、他に類似性がないゲームを作るとなると大変だと思います。
 類似しているゲームを使って、どの点をどのように修正するのかといった流れで進めるのが手っ取り早いのではないのでしょうか。
 ゲームのルールをAIに理解させるだけのプロンプト生成能力が要求されると感じました。

 業務アプリについては、ゲームほどロジックが複雑でないことが多いので、必要な機能を実装すること自体は苦労しないと思います。
 どのような機能が必要なのか、何をしたいのかを明確にしたうえで、必要な機能を一つづつ追加していくという方法をとれば、そこそこ使える業務アプリが作れそうですね。
 しかし、「ログインロジックが苦手」という致命的な欠点が明らかになったので、ログインロジックを自分で実装する力がある人以外は
   ログイン不要なアプリ
が主になりそうです。
 外部アプリとの連携は、APIを使ってJSON等の形式でパラメータを受け渡しする形が一般的でしょうか。
 LAN環境で構築するには、外部からの攻撃をそれほど気にしなくてもいと思いますが、オープンな環境に外部接続用のAPIを作る場合は、ある程度経験がある方を交えて、設計からよく考えてください。
 外部連携APIがいくつもあるサーバは、保守が絶望的に面倒です。