Gemini CLIでターミナルに魚を泳がせてみた話|遊び心で学ぶ生成AI
はじめに
2、 3年前、遊びとしてターミナル上で魚が泳ぐアニメーションを点字を使って描画するプログラムに挑戦したことがありました。
その時は魚の自然な動きを実装できず、諦めて書いたコードも削除するという大敗北でした。
最近になってGemini CLIを使えば作れるかなと思い再挑戦したので、その過程で得たAIとコードを書くときの工夫や気づき
それから、遊びで書くコードとの向き合い方について少し書いてみます。
作ったもの

動画の通り、ターミナルに魚が泳ぐアニメーションを表示するプログラムです。
画面の描画は点字を用いて行い、差分描画など負荷を抑える工夫もしています。
実装上の工夫
1. ライブラリと本体の分割
まず、Gemini CLIにプログラムを2つに分割するよう指示しました。
- 点字描画ライブラリ:指定した図形をターミナルに点字で描画するライブラリ
- 本体プログラム :上記ライブラリを使い、魚のアニメーションの表示するプログラム
この分割の狙いは次の通りです。
- コードの見通し向上:機能ごとにファイルを分けると、コードが読みやすくなり、将来の作業効率も上がります。
- 指示の明確化:スコープを絞ることで、Gemini CLIへの指示が具体的になり、意図したコードが生成されやすくなりました。
2. ドキュメントとサンプルの活用
ライブラリのREADME.md
とサンプルコードも生成させました。
これらはライブラリ本体プログラムを書くときに参考として使われ、サンプルコードは点字描画ライブラリの単体テスト代わりにも活用できました。
3. 安全な開発環境の構築
今回はトライ&エラーを高速化するため、実行確認をスキップするYoloモード
を使いました。
ただし、Yoloモード
は確認なしでファイル操作やコマンド実行も行うため、安全対策が必須です。
- Sandbox (
-s
オプション):コンテナで開発環境を隔離し、ホストへの影響を防ぎました - Git:コードをコードを壊されたり、もとに戻したくなることがあるためGit管理しました
Gemini CLIを使ってみて分かったこと
Gemini CLIを使っていく中で、その特性と上手な付き合い方が見えてきました。
「手数の多さ」を味方につける
以前の挫折は、実装案を実際にコードにするのに時間がかかるため、実装をする前に完璧な実装案を組み上げよう思ってしまったことが一因でした。
Gemini CLIはこの課題を解決しました。アイデアを言葉で伝えれば、すぐに動くコードが現れます。
今回採用した実装は、「尾びれだけを速度に合わせて振る」というシンプルなものです。
以前なら、逆に単純過ぎてこれでは駄目だろうと、試さなかったと思います。
すぐに試せる環境だからこそ、この単純なアイデアが意外に使えると発見できました。
トライ&エラーの手数を増やすことで、実装の幅が広がり、より良い選択ができることを実感しました。
「生成コードのブラックボックス化」に注意
しかし、この手数の多さは落とし穴でもあります。
生成されたコードを理解しないまま進むと、コード全体がブラックボックス化していきます。
そうなると的確な指示が出せず、闇雲な指示を繰り返すことになり、結果的に時間を浪費してしまいます。
作業に慣れてきてからは、生成されたコードと動作の確認に時間をかけるようになりました。
Yoloモード
でも、完全な手放しはできない
Yoloモード
は強力ですが、時々様子を見てやる必要がありました。
目を離した隙にGemini CLIがサーバーとの通信に失敗して503エラーで止まっていたり
作ったプログラムをGemini CLIが実行してしまい、それを停止できずに固まっていることもありました。
相談の方法を工夫する
「この実装方針どう思う?」のような聞き方は、殆どの場合で肯定されてしまうため有効ではありませんでした。
むしろ「A、B、C案を出して」と具体的な選択肢を提示させ、メリット・デメリットを聞き、最終決定を人間が下す方がうまくいきました。
遊びで書くコードとの向き合い方
「勉強」と構えず、あくまで「遊び」として、楽しくなければ辞めていいくらいの気軽さで始めるのも良いのかなと思いました。
今回は数年前に諦めた試みが、Gemini CLIを学ぶ題材として蘇りました。
あの時、少しでも遊んでおいて良かった。そう思える、楽しい再挑戦でした。
関連記事
- AIは地方創生の夢を見るか?ハッカソンで挑んだ「地図の中の哲...
Oh ByeongHeon
- 30分で完了、AWS SAMを用いてLLM APIを構築しよ...
Tsai Yalin
Advent Calendar!
Advent Calendar 2024
What is BEMA!?
Be Engineer, More Agile