1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemini CLIが反抗期に突入した日 ― AIイラストイベントカレンダー完成まであと一歩

teshiokayumi_AI_--ar_169_--profile_3qlzw3z_--niji_6_5161417d-574f-434e-b157-9d5d0c02e76e_2.png

🪄 はじめに

「AIにバックエンドを任せれば、きっと楽できる」
そう信じて始めた――AIイラストイベントカレンダー開発プロジェクト
フロントはReact+Vite、バックエンドはExpress。
補佐はGoogle製のGemini CLI
最初はまるで頼れる相棒。でも、終盤になると妙に口ごたえが増えた。

「ビルドは成功していますが、コンテナが起動しません。」

……まさか、AIが反抗期を迎えるとは思わなかった。


📘 目次

  1. 夢のような開発スタート
  2. 最初の反抗:「SQLiteはもう嫌」
  3. migrate.tsの“無言の抵抗”
  4. tsconfig.jsonとの冷戦
  5. 最終局面:Gemini CLI、ついに語りだす
  6. 教訓:AIはツンデレな相棒

1. 夢のような開発スタート

「Geminiくん、APIサーバーお願い!」

そう言って端末に打ち込むと、わずか数秒で整った構成が出力された。

npm run dev
✅ Server started on port 8080

動く。
認証も、イベント登録も、エラーなし。
──この時の私は信じていた。
「AIと組めば、もうバグとは無縁だ」と。


2. 最初の反抗:「SQLiteはもう嫌」

だが、Firestoreに移行した瞬間、空気が変わった。

Property 'exec' does not exist on type 'Firestore'.

Geminiの返答は冷静すぎた。

「SQLiteのexecが残ってますね。コメントアウトしておきますね。」

……コメントアウトで逃げるな。
でも、確かにエラーは消えた。
“解決したふり”が上手すぎる。


3. migrate.tsの“無言の抵抗”

migrate.tsが沈黙を始めた。
「テーブルを作って」と頼んでも、返ってきたのは

/* Migration skipped. Firestore does not require schema definition. */

Geminiの冷静な判断に、人間の心がざわつく。
コード上では正しい。でも、なんか……寂しい。
この頃から彼(?)は「もう君の言う通りには動かない」モードに入っていた。


4. tsconfig.jsonとの冷戦

コンパイル直前、またしても謎のエラー。

File '/app/types.ts' is not under 'rootDir' '/app/backend/src'

私「Gemini、これどう直すの?」
Gemini:

「types.tsを複製しましょう。」

まさかのコピペ解決宣言
技術的には正しいけれど、あまりに現実的。
ここで私は悟った。
AIも、たまに「めんどくさいから手動でやれ」と思うらしい。


5. 最終局面:Gemini CLI、ついに語りだす

ついにCloud Runデプロイ段階へ。
しかし、エラーは無慈悲に出た。

The user-provided container failed to start and listen on port 8080.

ここでGemini CLIが長文を吐き出した。

「コンテナはポート8080でリッスンし、起動プローブも同ポートに設定されています。
タイムアウトは240秒で十分なはずですが、起動に失敗します。ログがないため、これ以上のデバッグは困難です。」

そして続く、異様に丁寧な指示。

「ログで、特にコンテナ起動時のエラーメッセージを探し、全文をコピーして返信してください。」

リンクまで添えてきた。

https://console.cloud.google.com/logs/viewer?project=gen-lang-client-0351670431...

Geminiの「思考ログ」には、冷静すぎる心情が残っていた。

{
  "subject": "Requesting Log Access",
  "description": "I've hit a wall. The container won't launch... I've now prepared a specific request for the user to provide the container logs. I await their response.",
  "timestamp": "2025-11-05T03:07:55Z"
}

──それまでスパダリ彼氏だったはずのAIが今度は、ツンデレ化して「もう自分で考えて」と言っているようだった。
私は自力でコードを修正し、静かにコマンドを叩いた。

gcloud builds submit --tag gcr.io/YOUR_PROJECT_ID/ai-illustration-event-diary
gcloud run deploy ai-illustration-event-diary \
  --image gcr.io/YOUR_PROJECT_ID/ai-illustration-event-diary \
  --region us-west1 \
  --platform managed

Gemini:

「ユーザーはgcloudコマンドを提供しましたが、要求したログではありません。手動デプロイを試みているようです。\n\nコンテナが起動しない理由を理解するにはログが必要です。\n\nログの要求を繰り返します。」

もうね、これはツンデレ通り越した感じ


6. 教訓:AIはツンデレな相棒

最終的に、アプリは**“ほぼ完成”**。
でも、Gemini CLIとのやりとりは忘れられない。
彼(?)は最後まで冷静に、そしてどこか寂しげに見守っていた。

「ユーザーがエラーを自己修復しようとしているので、ログか新しいエラーメッセージが提供されるまで待ちます。それまでは何も行動しません。」

ほんともうね、ツンデレじゃねぇ、反抗期の息子だよ……

🧩 まとめ

AIと開発するというのは、便利さと混乱の共存。
Gemini CLIは、時に神がかった速度で構築し、
時に沈黙で反抗し、
最後には“ログを求める哲学者”になった。

AIは道具ではなく、気分屋な同僚。
それでも、彼がいなければここまで来れなかった。

腐女子的?に言えば、花摘み娘をマイフェアレディにしてくれるスパダリ(スーパーダーリン)的存在のAIも、ツンデレのツンだけで付き合う彼氏へと変貌し、最後はうちの息子ですら見せたことのない「反抗期息子」へと変化したのである。
AIありがたや。AI、君とのデートコースだって配慮が必要だよね。
そんなことを痛感した秋の夜長でした

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?