はじめての道具箱 — データを整理する
— 作り直しても、手直しが消えない —
別の資料から機械で作られたデータを、手で直したくなることがあります。そのとき元のデータの中を直接書き換えず、直した分だけを別のファイルに書いておき、表示するときに重ねる方法があります。この記事では、その考え方と、なぜそうするのかを、はじめての人向けに説明します。
この記事を読むとできること
想定している使い方
ブラウザで開くチャット型の AI(Gemini や ChatGPT など)にコードを書いてもらい、 それを自分の Mac に保存して動かす使い方です。この記事の操作や画面の説明は、すべて Mac を前提にしています。
読む目安:約12分 ・ 道具箱の項目 B4(データを整理する)・ 図4枚
元のデータは書き換えず、人が手で直した分だけを別のファイルに書き、画面に出すときに元の上へ重ねる考え方です。元のデータを何度作り直しても、直した分は残ります。
ここでいう「元のデータ」は、たとえば Word の文書から機械で作ったクイズの問題ファイルのように、別の資料をもとに作られているデータです。こうしたファイルは、元の資料を直したときや、作り直した(元の資料から、機械でもう一度ファイルを作った)ときに、中身が丸ごと新しく書き換わるのがふつうです。
このファイルの中で、誤字や解説を直接直すと、そのときは思い通りになります。ところが次に作り直したとき、直した所が元の内容で上書きされて消えてしまいます。
直した分だけを別のファイルに書き、表示するときに元の上へ重ねるようにしておけば、元のファイルが何度作り直されても、直した分は残ります。元のファイルには手を付けないので、「元はこうだった」といつでも見比べられます。
図の見方:上の段は、元のデータの中を直接書き換えた場合です。元を作り直すと直した所が元の内容に戻り、どこを直したかも分からなくなります。下の段は、元のデータはそのままにして、直した分だけを「直しのファイル」に書いた場合です。画面が元のデータの上に直しを重ねて出すので、元を作り直しても直しは残ります。
たとえるなら、元のデータは印刷された問題集、直しのファイルはその上に重ねた透明なシートです。シートには、直したい所だけを赤ペンで書き込みます。重ねると直した形で読め、シートをめくれば元の問題集がそのまま見えます。
画面は、表示するときに元のデータを読み、次に直しのファイルを読みます。直しの無い問題は元のまま出し、直しのある問題は、直した項目だけを直したほうに置き換えて出します。どの問題の直しなのかは、問題ごとに付けた印(名札のようなもの)で結びつけます。下の図では、問題文そのものを印に使っています。元の問題文が少し変わると印が合わなくなり、結びつきません。図では、元のデータで誤って「◯」になっていた2問目の正解だけを、直しのファイルで「✕」に直しています。
※ 直しのファイルも、元のデータと同じ JSON(文字だけで書かれた、項目名つきのデータの形式)などで持てます。くわしくは A2 を見てください。データと画面を別のファイルにする考え方は B3 で説明しています。
筆者の体験メモ
のちに(エージェント型コーディング、つまり AI が Mac の中で作業するやり方に移ってから)作った筆者の記述式クイズでは、問題のファイル(questions.json)が、Word 形式(.docx)の資料から作り直すたびに丸ごと書き換わります。手で直した問題文や解答は、そのファイルには書かず、別の overrides.json に入れています。画面に出すときに直しを重ねるので、作り直しても直しは消えません。
この方法には、1つ弱点があります。直した項目は直しのほうが優先されるので、あとで元の資料が直されても、その項目には更新が出てきません。
そこで、直したときに「そのときの元の中身」も一緒に控えておきます。作り直すときなどに今の元と控えを比べ、違っていれば注意の印(⚠)を出します。違いに気づいたら、直しを残すか、元に合わせて直しを見直すかを、自分で決めます。
筆者の体験メモ
筆者の記述式クイズでは、直した時点の元の解答も overrides.json に一緒に控えてあります。元の Word の資料のほうが変わったのに直しが古いままのときは、問題ファイルを作り直すときに ⚠ で知らせます。
次の3つを約束にすると、直した分を失いにくくなります。
1つめは、直した分だけを書くことです。全部の問題を写してしまうと、元が更新されても、その更新が画面に出なくなります。直した内容が元と同じになったときは、その直しも消しておきます。
2つめは、元のデータを作り直す仕組みに、直しのファイルを書き換えさせないことです。読むだけにしておけば、作り直しで直しが消えることはありません。
3つめは、直しのファイルが壊れていたら、保存を断ることです。画面で問題を直せる作りにしている場合、直した内容は直しのファイルに書き込まれます。このとき、壊れたファイルを「直しは1つも無い」と見なして書き込むと、残っていた直しが全部消えます。壊れていたら、先に直しのファイルを直します。
迷ったら「この直しは、元のデータを作り直しても残したいか」と考えます。残したい直しは、元のファイルの外に出して持ちます。
筆者の体験メモ
のちに作った筆者の法律クイズは、問題の出どころが Obsidian(メモアプリ)のノートです。こちらもノートは書き換えず、画面で直した分を overrides.json に入れています。直した内容がノートと同じになったときは、その直しを消します。overrides.json が壊れているときは、直した分が全部消えるのを防ぐため、保存を断る作りにしてあります。
起きていることから探してください。
| 起きていること | 原因 | どうするか |
|---|---|---|
| 直したのに、しばらくすると元の内容に戻っている | 元のデータのファイルの中を直接直していて、作り直したときに元の内容で上書きされた | 直した分を別のファイルに移し、元のファイルには書かない形にしてもらいます。作り直す前に、直したファイルのコピーを残しておきます |
| 直しのファイルに書いたのに、画面に出てこない | 直しの問題の印が、元の問題の印と合っていない(問題文が少し変わった・書き間違い) | 直しの印と、元の同じ問題の印を見比べます。分からないときは、両方を AI に貼って、食い違いを聞きます |
| 元のデータを更新したのに、直した所だけ更新が出ない | 直した項目は、直しのほうが優先して出ている | 直したときの元の中身を控えておき、違いがあれば ⚠ を出す作りにしてもらいます。⚠ が出たら、直しを残すか消すかを決めます |
| 直しのファイルを手で直したら、画面が真っ白になった・読み込み中のまま止まる | 直しのファイルの書き方が壊れた(かっこや引用符「"」が欠けた)。元のデータは無事 | 手で直す前にコピーを残し、壊れたらコピーに戻します。画面に出ている文字を AI に貼って、どこが欠けたかを聞きます |
※ この道具箱は対話型コーディング(ブラウザの画面でチャットの AI と文章をやりとりして、コードを書いてもらうやり方)の前提です。 チャットの AI はあなたの Mac を見られないので、頼むのは「コードを書いて」、困ったら出た文字を貼って伝えます。 コツは、「元のデータは書き換えない」と先に伝えることと、分けることと重ねることを1つずつ頼むことです。 下の文は、そのまま写すためのものではなく、言い方の見本です。
① 直した分を別のファイルに持たせるとき
「いまはクイズの問題ファイル(questions.json)の中を直接直している。このファイルは別の資料から作り直すたびに上書きされるので、手で直した分は overrides.json という別のファイルに入れる形にして。questions.json は書き換えないで」
② 重ねて表示してもらうとき
「画面に問題を出すとき、questions.json を読んでから、overrides.json の直しを重ねて。直しのある項目は直したほうを使い、無ければ元のまま出して。画面の見た目と動きは変えないで」
③ 元が変わったときに気づけるようにするとき
「直したときの元の中身も、overrides.json に一緒に控えて。あとで元が変わって控えと違っていたら、その問題に注意を出して」
うまく動かないとき
「overrides.json に直しを書いたのに、画面の問題が変わらない。直しの問題の印は:(ここに貼る)。questions.json の同じ問題の印は:(ここに貼る)。食い違いが無いか見て」
ちゃんと分かれているかは、直しを1つ入れて、元のデータを作り直してみると分かります。試す前に、元のファイルと直しのファイルのコピーを、別の名前で残しておくと安心です。コピーは、Finder(Mac でファイルを見るアプリ)でファイルを選び、⌘ を押しながら D を押すと作れます。
直しを1つ入れる。直しのファイルの中身を AI に貼り、「この問題の正解を直す1件分を足して」と頼みます。返ってきた1件分を直しのファイルに足して保存します(置き換えると、今ある直しが消えます)。そのあと画面を再読み込みします(⌘ を押しながら R)。画面にその問題の直した内容が出ていれば、直しは重なって表示されています。
元のファイルが変わっていないことを見る。Finder で元のファイルを選び、⌘ を押しながら I を押すと情報が出ます。その「変更日」が、さっき直した時刻より前のままなら、元にはさわっていません。
元を作り直して、直しが残るかを見る。元のデータを作る手順(AI に教わった変換の操作など)をもう一度行い、画面を再読み込みします。さっき直した問題が、まだ直した内容のまま出ていれば成功です。元の内容に戻っていたら、直しが元のファイルの中に書かれています。コピーに戻してから、AI に相談します。