ファイルを置く第12章 ・ 読むのにかかる時間 約6分

整える:一覧・削除・メタデータ

増えたファイルを扱えるようにする

ファイルは増えます。増えたら、探せないと意味がありません。この章では並べる・消す・情報を持たせるの3つを覚えます。地味ですが、ここができた瞬間に、作ったものが急に「使えるもの」になります。

この章でできるようになること

  • R2に入っているファイルを一覧して、画面に並べる
  • いらないファイルを消す(そして消す怖さを知る)
  • ファイルに「撮影日」などの情報を一緒に持たせる

並べる:一覧を取る

倉庫にある荷物の札を、順番に読み上げてもらう操作です。全部を読み上げさせることもできますが、先頭が一致するものだけに絞れます。第9章でキーを images/ で始めたのは、これのためです。

const listed = await env.BUCKET.list({ prefix: "images/" });
listed.objects.map((o) => o.key);   // キーの一覧

prefix(プレフィックス)

「この文字で始まるものだけ」という絞り込みです。フォルダが無いR2では、これがフォルダの代わりになります。images/2026/ と指定すれば、2026年のぶんだけ取り出せます。キーの付け方を最初に決めておくと、あとからこう効いてきます。

もう1つ知っておくべきことがあります。一覧は、一度に全部は返ってきません。数が多いと途中で区切られて、「続きがあります」という印と一緒に返ります。数百枚くらいまでは意識せずに済みますが、増えたら続きを取る作りが必要になります。

Claude Codeにこう頼みます

R2に入っている画像の一覧を返す仕組みを作ってください。 ・images/ で始まるキーだけを対象にする ・キーと、ファイルの大きさと、アップロードされた日時を返す ・新しいものが先に来るように並べる ・件数が多いときに続きが取れる形にしておく(いまは実装だけで、使わなくてよい) 作ったら、確認用のURLを教えてください。

消す:戻せないつもりで扱う

消す操作はあっけないほど簡単です。だからこそ、先に心構えを書いておきます。消したものは戻ってこないつもりで扱ってください。ゴミ箱に入るわけではありません。

実用的な対策は2つです。

  • 消す前に、対象を必ず表示させる… 「これから消すキーを先に見せてください」と頼む習慣をつけます
  • 本当に消さず、消したことにする… 実際には消さず、非表示の印を付けるだけにする方法です。あとから戻せます
Claude Codeにこう頼みます

画像を削除する仕組みを作ってください。ただし、事故を防ぐ作りにしてください。 ・削除する前に、対象のキーを画面に表示して、確認してから消す形にする ・一度に複数を消せる作りにはしないでください ・存在しないキーを消そうとしたときの動きも、日本語で説明してください 実装したら、どこが事故防止になっているのかを説明してください。

情報を持たせる:メタデータ

写真そのものとは別に、「いつ撮ったか」「誰が上げたか」を一緒に覚えさせられます。これをメタデータと呼びます。R2では2種類あります。

種類何を入れるか役割
httpMetadata Content-Type など決まった項目 ブラウザに渡すための情報第10章・第11章で使ったもの
customMetadata 撮影日・投稿者・タイトルなど自分で決めた項目 あなたのアプリのための情報短い文字列を数個まで

便利ですが、万能ではありません。メタデータで検索することはできません。「撮影日が10月のものを出して」はR2だけでは無理です。それをやりたくなったら、第8章で出てきたD1(表)の出番です。写真はR2、探すための情報はD1。倉庫と台帳です。

メタデータ

「データについてのデータ」です。写真そのものが中身で、撮影日や撮影者はメタデータです。荷物と、荷札に書かれた情報の関係だと思ってください。

一覧を画面に並べる

Claude Codeにこう頼みます

アップロード済みの画像を、トップページにサムネイル一覧として並べてください。 ・第11章で作った /file/ のURLを使って表示する ・新しいものが左上に来るようにする ・スマホでは2列、パソコンでは4列に並ぶようにする ・1枚もないときは「まだ画像がありません」と日本語で表示する 見た目はシンプルで構いません。作ったら確認用のURLを教えてください。

ここまでで、アップロードして、保存して、一覧して、表示する、という一周がつながりました。これはもう小さなアプリです。

うまくいったか確認する

  • トップページに、上げた画像がサムネイルで並ぶ
  • 新しく上げた画像が、一覧の先頭に出てくる
  • 1枚消すと、一覧からも消える
  • スマホで開くと2列で並ぶ

よくあるつまずき

一覧に出るのに、画像が壊れたマークになる
一覧のキーと、表示に使っているURLがずれています。キーに / が含まれるため、URLの組み立て方で崩れがちです。「一覧のキーと表示URLが一致していません」と伝えてください。
消したはずの画像が、まだ表示される
ブラウザが前の画像を覚えています。強制的に再読み込みするか、シークレットウィンドウで確認してください。
古い画像が先に並んでしまう
一覧はキーの順で返ってきます。日付順にしたいなら、並べ替えを別に指定する必要があります。「アップロード日時の新しい順に並べ替えてください」と頼んでください。
画像が増えたら、一覧の表示が遅くなった
全部を一度に読み込んでいます。第13章で、軽くして速く見せる方法をやります。

この章のまとめ

並べる・消す・情報を持たせる。この3つで、倉庫が「整理された倉庫」になりました。prefixで絞る、消す前に見せる、検索したくなったらD1と組む。この3点を覚えておけば、あとから応用が効きます。

次の章は、見せ方の仕上げです。画像を軽くして、速く届けます。

章末チェックリスト