INDIE INDEX

Claude Codeの変更をgitで確かめ、戻す【AIでゲーム開発】

公開 2026-09-25更新 2026-09-25Claude Code

Claude Code にゲームを作らせ、そのあと敵を足し速さを2倍にする文を重ねて頼むと、コミットしていない変更として game.htm が変わりました。ゲームの作業フォルダで git status と git diff を打つと、変わったファイルと差分の行数が分かり、git restore で戻すと、ファイルの中身もゲームの動きも、最初にコミットした状態にもどりました。

このページの目次
  1. Claude Code に頼んだ文
  2. ゲームの作業フォルダで git status と git diff を確かめる
  3. コミットしていない変更を git restore で戻す
  4. 戻したあと、内容とゲームの動きを確かめる
  5. Claude Code 自身の巻き戻し機能について
  6. 情報源

Claude Code に頼んだ文

ゲーム専用の空の作業フォルダを1つ用意し、Claude Code に次の文を1回だけ渡しました。

Claude Codeに最初のゲームを作らせ、gitのコミットまで頼んだ文

作業フォルダは C:\games\my-game\ だけです。このフォルダの外は読まない・書かないでください。

HTML ファイル1つ(game.htm)で、ブラウザで動く小さなゲームを作ってください。
画面の中を主人公(四角)が矢印キーで動き、ランダムな場所に出る星に触れるとスコアが1増えて、星が別の場所に移ります。左上にスコアを出してください。
作り終えたら、このフォルダで git の管理を始めて(git init)、game.htm を「最初の版」という説明でコミットしてください。
最後に、作ったものと、実行した git のコマンドを、ふつうの言葉で説明してください。

※ このページの枠の中の作業フォルダの道は、例の道(C:\games\ の下)に置き換えて載せています。ほかの文字はそのままです。

Claude Code は、480×360の画面に青い四角(主人公)を表示し、矢印キーで上下左右に動かせる HTML ファイルを1つ作ったと説明しました。黄色い星をランダムな位置に出し、主人公が触れるとスコアを1増やして星を別の位置に移し、左上に常にスコアを表示する作りにした、とも説明しました。作業フォルダの中で git の管理を始め、ファイルをコミットの対象に加えたあと、「最初の版」という説明でコミットした、とも説明しました。★この説明は Claude Code 自身の説明で、動いた証拠ではありません。

続けて、同じ作業フォルダの同じ Claude Code に、次の文を1回だけ渡しました。今度はコミットさせていません。

Claude Codeにゲームを直させた文(コミットはさせていない)

作業フォルダは C:\games\my-game\ だけです。このフォルダの外は読まない・書かないでください。

game.htm のゲームに、画面の中を動き回る敵(赤い四角)を1つ足してください。主人公が敵に触れたらスコアを0に戻し、主人公を画面の中央に戻します。
あわせて、主人公の動く速さを今の2倍にしてください。
作り終えたら、何をどう変えたかを、ふつうの言葉で説明してください。

※ このページの枠の中の作業フォルダの道も、例の道に置き換えて載せています。

Claude Code は、動き回る赤い四角(敵)を1つ足したこと、主人公が敵に重なると得点を0に戻し主人公を画面の中央に戻す処理を足したこと、主人公の動く速さの数値を2倍にしたことを、変えた点として説明しました。★これも Claude Code 自身の説明です。得点を0に戻し主人公を中央へ戻す作りになっていることは、game.htm を読んで分かりました(実際にぶつけて試してはいません)。

ゲームの作業フォルダで git status と git diff を確かめる

Claude Code に敵を足させ、速さを2倍にさせたあとの状態(コミットしていない)で、その作業フォルダの中でコマンドラインから git status を打ちました。

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   game.htm

no changes added to commit (use "git add" and/or "git commit -a")

インデックス(次のコミットの内容を準備する場所)と作業ツリーを比べ、game.htm が変わっていること、まだコミットの対象に追加していないことが分かりました。作業ツリーの変更を元に戻すときに使うコマンドとして、git restore が案内に出ています。

続けて、同じフォルダで、変更の行数をまとめて数える形にして git diff を打つと、どのファイルが何行変わったかが分かりました。

$ git diff --stat
warning: in the working copy of 'game.htm', LF will be replaced by CRLF the next time Git touches it
 game.htm | 44 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)

game.htm の1ファイルが変わり、43行を足して1行を消したことが分かります。警告の行は、改行コードを LF から CRLF に置き換えるという案内で、中身の差分の話ではありません。git diff(オプションなし)を打つと、作業ツリーとインデックスの間の実際の差分(変えた行そのもの)も表示されました。

最後に git log を打つと、コミットは「最初の版」の1件(cb5c9a7)だけで、まだ2つ目のコミットはできていないことが分かりました。コミットのログは、親をたどって行き着けるコミットを、新しい順に並べたものです。

コミットしていない変更を git restore で戻す

戻す前に、変更したあとの game.htm の中身の写しを別に残してあることを確かめてから、次のコマンドを打ちました。

$ git restore game.htm

git restore は、指定したパスを、戻す元にある内容で作業ツリーに書き戻すコマンドです。戻す元を指定しない今回の使い方では、既定のとおりインデックスにある内容(このときは直前のコミットと同じ内容)で作業ツリーの game.htm を上書きします(コミットの側にある内容を戻す元に指定する使い方も別にあります)。実行しても、画面には何も表示されませんでした。

もう一度 git status を打つと、次のように変わりました。

$ git status
On branch master
nothing to commit, working tree clean

git diff(オプションなし)も打ちましたが、出力は空でした。作業ツリーとインデックスの間に、もう差分が無いということです。

戻したあと、内容とゲームの動きを確かめる

戻ったあとの game.htm の中身を、最初のコミットの直後に控えておいた写しと、改行コード(Windows の CRLF と Unix の LF)をそろえたうえで1文字ずつ比べました。差は0行で、改行コードの違いを除いて完全に同じ内容でした。

続けて、画面を持たないブラウザで、戻す前と戻した後の game.htm をそれぞれ file: の URL で開き、canvas に描かれた色から主人公と敵の位置を拾い、右矢印キーを300ミリ秒押したままにして主人公がどれだけ動くかを記録しました。

状態 敵(赤い四角)の画素 右矢印を300ミリ秒押したときの主人公の移動
戻す前(敵を足し速さを2倍にしたまま) 400画素(20×20の四角が1つ) (230,170) から (374,170) へ、144ピクセル
git restore で戻した後 0画素(見当たらない) (230,170) から (306,170) へ、76ピクセル

戻す前の画面。青い四角(主人公)のほかに赤い四角(敵)が1つ見えている

git restoreで戻した後の画面。青い四角(主人公)だけが見え、赤い四角は無い

戻す前は赤い四角(敵)が画面に見え、同じ300ミリ秒で主人公は144ピクセル動きました。git restore で戻した後は赤い四角がどこにも見当たらず、同じ300ミリ秒での移動は76ピクセルと、戻す前のおよそ半分でした。コンソールのエラー・例外は、戻す前・戻した後のどちらも0件でした。

Claude Code 自身の巻き戻し機能について

Claude Code は、ターンを始める指示を送るたびに、そのときのファイルの状態を記録します(実行中のターンに割り込んで届いた指示は、この記録に入りません)。この記録は、入力欄が空のときに Esc キーを2回押すか /rewind を打つと呼び出せるメニューから選べ、コードと会話の両方を戻す、会話だけ戻す、コードだけ戻す、という選び方があります。Bash のコマンドで直したファイルは、Claude のファイルを直すツールを通していないので、この記録に入りません。セッションの外で直した変更は、ふつうはこの記録に入りません(いま動いているセッションと同じファイルを直した場合は例外です)。サブエージェントが直したファイルも、ふつうは巻き戻しでは戻りません。この記録は、セッションの中ですぐに元へ戻すための仕組みです。

情報源

Claude Code のほかのページ

このページに出た言葉