はじめての道具箱 — 壊さない・消さない
— 別のファイルに書き終えてから、名前を差し替える —
データを保存している最中に、Mac の電源が落ちたり、道具(AI に書いてもらって自分の Mac で動かしているプログラム。このページではそう呼びます)が止まったりしたら、保存したファイルはどうなるのでしょうか。作りによっては、書きかけの壊れたファイルが残り、それまでのデータが読めなくなります。
この記事を読むとできること
想定している使い方
ブラウザで開くチャット型の AI(Gemini や ChatGPT など)にコードを書いてもらい、 それを自分の Mac に保存して動かす使い方です。この記事の操作や画面の説明は、すべて Mac を前提にしています。
読む目安:約8分 ・ 道具箱の項目 D4(壊さない・消さない)・ 図3枚
ファイルを直接書き換えて保存すると、途中で止まったとき、書きかけの壊れたファイルが残ります。別のファイルに最後まで書いてから名前を差し替える形にすると、途中で止まっても元のファイルは無事です。
道具はデータをファイルに保存して覚えます。いちばん素直な保存の仕方は、ファイルを開いて新しい中身を書き込む「上書き」ですが、開いた瞬間に古い中身は消えて空になり、書き終えるまでの間、ファイルは「書きかけ」の状態です。
書いている最中はごく短い時間ですが、その間に Mac の電源が落ちる、道具が強制的に終了する、ディスク(データをしまっておく保存装置。Mac の中のストレージのこと)の空きが足りなくなる、といったことが起きると、前半だけが書かれたファイルが残ります。
とくに困るのは、JSON(データを入れる箱の書き方のひとつで、最後の閉じ括弧まで揃って初めて読める形式)で保存している場合です。途中で切れると、データの全部が開けなくなることがあります。
保存は何度も繰り返されるので、最初から「途中で止まっても壊れない保存にして」と AI に伝えておくのが確実です。
図の見方:上の段は本物のファイルを直接書き換える作りで、途中で止まると壊れたファイルが残ります。下の段は別のファイルに最後まで書いてから名前を差し替える作りで、元のファイルか新しいファイルのどちらかが、必ず完全な形で残ります。
作りとしては、4つのことをします。1つ目は、本物のファイルと同じフォルダに、仮の名前のファイルを作って、新しい中身を最後まで書くことです。この仮のファイルを、一時ファイル(仮置きの別ファイル)と呼びます。たとえば本物が「お気に入り.json」なら、「お気に入り.json.tmp」のような名前にします(同じ道具を2つのウィンドウで開いて、ほぼ同時に保存したとき、同じ仮のファイルに書き込みが重なって壊れないよう、名前は毎回変えます)。
2つ目は、書いた中身をディスクへ確実に届けることです。Mac は書いた内容をすぐにはディスクへ書かず、少しためることがあり、その間に電源が切れると中身が失われるので、ためずに書き出すよう命じます。
3つ目は、仮の名前を本物の名前に差し替えることです。名前の付け替えは、中身を書き直す作業と違って、前の名前のままか、差し替わったかのどちらかしかありません。そのため、「差し替えている途中」という状態が作られません。AI が書くコードには、この差し替えをする命令が入ります。
4つ目は、途中で失敗したときに、仮のファイルを片付けることです。片付けないと、仮のファイルが残ります。仮のファイルを本物と同じフォルダに作るのは、別のディスク(別の保存装置)だと名前の付け替えができず、「コピーしてから削除する」という2段階になって、その途中で止まる可能性が生まれるからです。
筆者の体験メモ
筆者が作った、フォルダの置き場所を登録しておく道具は、登録の一覧を1つのデータファイルに保存していました。2026年9月のコードの見直しで、保存のたびにそのファイルを直接開いて上書きする作りだと分かりました。途中で止まれば書きかけで壊れ、次に開いたときに登録が読めなくなる恐れがあるため、一時ファイルに書いてから差し替える形に直し、失敗したときは一時ファイルが残らないようにしました。なお、この直しは AI エージェント(AI が Mac の中で直接作業する形。Claude Code)を使い始めたあとのことで、チャットの AI の頃の話ではありません。
差し替えの形にしておくと、本物のファイルは「元のまま」か「新しいもの」のどちらかになります。仮のファイルに書いている途中で止まったときは、本物は元のままで、残るのは書きかけの仮のファイルだけです。名前の差し替えは、前の名前のままか、差し替わったかのどちらかしかなく、途中の状態が作られないので、止まるとしても差し替えの前か後のどちらかで、前なら元のまま、後なら新しい中身が完全な形で入っています。
さらに大事なデータでは、差し替える前に、いまの本物を「控え」(バックアップ。たとえば「お気に入り.json.bak」)として残します。間違いがあったときも、前の版へ戻せます。
起きていることから探します。
| 起きていること | 原因 | どうするか |
|---|---|---|
| 道具を開いたら「データが読めません」と出た。電源が落ちたあとだった | 保存の途中で止まり、書きかけのファイルが残った可能性がある | その画面では保存せず、控え(.bak など)や前の日のバックアップを探し、今後は「一時ファイルに書いてから差し替える保存」にしてもらいます |
| データのフォルダに、「.tmp」のような見慣れないファイルが残っている | 保存の途中で止まった仮のファイル。差し替え前なので本物は無事なはず | 本物が開けることを確かめたら、仮のファイルはゴミ箱へ入れて構いません。「失敗したら仮のファイルを片付けて」と頼みます |
| 差し替えの形にしたのに、電源を切ったあとファイルが空だった | 差し替えは終わったが、中身がディスクに届く前に電源が切れた | 「差し替える前に、書いた中身をディスクへ確実に書き出して」と頼みます |
| 同じ道具を2つのウィンドウで開き、ほぼ同時に保存したら、データの一部が欠けた | 仮のファイルの名前がいつも同じで、2つの保存が同じ仮のファイルに書いた | 「仮のファイルの名前は毎回変えて。保存は1つずつ順番に行って」と頼みます |
※ この道具箱は対話型コーディング(ブラウザの画面でチャットの AI と文章をやりとりして、コードを書いてもらうやり方)の前提です。 チャットの AI はあなたの Mac を見られないので、頼むのは「コードを書いて」、困ったら出た文字を貼って伝えます。 コツは、保存の仕方まで指定して頼むことと、途中で止まっても元のデータが残ることを条件に入れることです。 下は言い方の見本です。
① データを保存する道具を頼むとき
「お気に入りの一覧をファイルに保存する道具を作って。保存の途中で Mac が止まっても、元のファイルが壊れないようにして。本物と同じフォルダに仮のファイルを作って最後まで書き、中身をディスクへ確実に書き出してから本物の名前に差し替えて。失敗したら仮のファイルは片付けて。差し替え前の版は『.bak』で控えに残して。コードを書いて」
② すでに作ってもらったコードを見直すとき
「このコードの中で、本物のファイルを直接開いて上書きしている保存の部分をすべて、一時ファイルに書いてから差し替える形に直して。直したコードを全部書いて」
③ 保存の安全を確かめたいとき
「保存の最中にプログラムが止まったら、本物のファイルはどうなるか教えて。書きかけのファイルが残るなら、壊れない保存に直して。コードを書いて」
うまくいかないとき
「電源が落ちたあと、道具を開いたらデータが読めなくなっていた。画面の文字は:(ここに貼る)。保存の途中で止まって書きかけのファイルが残ったのではないか、原因を教えて、直して」
試すのは、本物のデータではなく、そのコピーだけにします。データのファイルがどこにあるかは、AI に「この道具が保存しているデータのファイルの場所を教えて」と頼めば分かります(道具のコードを貼ってから頼みます)。分かったら、そのファイルをデスクトップなどへコピーし、道具がコピーのほうを読み書きするよう AI に頼みます。場所の見方はファイル・フォルダ・パスの項目にあります。
コピーのほうを読み書きさせたいとき
「この道具が読み書きするデータのファイルを、試し用のコピー(場所:ここに貼る)に切り替えて。コードを全部書いて」
効いているかは、「いま読んでいるファイルの場所を画面に出して」と頼んで確かめます。次の3つを順に確かめます。
いつも通り保存して、仮のファイルが残らないのを見る。何かを1件追加して保存し、Finder(Mac でファイルを見るためのアプリ)でコピーのファイルがあるフォルダを開きます。「.tmp」のような仮のファイルが残っておらず、開き直して追加した内容が出れば成功です。
保存の途中でわざと失敗させる。AI に「保存の途中で、わざとエラーを起こして止める確認用のコードを書いて。実行のしかたも教えて」と頼み、コピーのファイルに対して動かします。コピーを開いて中身が元のまま読めれば成功です。中身が空だったり切れていたりするなら、本物に直接書く形のままなので、直してもらいます。
控えから戻せるのを見る。控え(.bak など)を残す作りにしたなら、保存を2回したあと、控えのファイルがあることを確かめます。まず、コピーの本物の名前のファイルを、いったんゴミ箱へ入れます(対象はコピーなので、本物のデータは無事です)。次に、Finder で控えのファイルを選んで Return キーを押し、名前の末尾の「.bak」を消して本物の名前にします(拡張子を変えてよいか聞かれたら、変えるほうを選びます)。そのうえで道具を開き、1つ前の状態で開ければ成功です。控えを残さない作りなら、この手順は飛ばして構いません。