ハコヅミを作る #57:料理に写真を付ける、依存パッケージを上げる(公開の前に残していたもの)

前回(#56)に続いて、テスタを待つあいだの作業です。今回は、「一般に公開する前に片づける」と決めていた2つを入れました。

  • 料理に写真を付ける
  • 数える場所が、2つあった
  • 依存パッケージを上げる
  • どちらを先に出すか
  • 書く欄があっても、書き忘れる

料理に写真を付ける

料理には、名前・レシピ・食材を登録できます。ここに、できあがりの写真を1枚付けられるようにしました。

画像だけ足しても、編集の画面でしか見えません。そこで、料理の一覧を、ギアやキャンプと同じように「リスト」「カード」で切り替えられるようにして、カードに写真を出すことにしました。

料理の一覧のカード表示。カレー、ベーコンエッグトースト、ホットサンドのカードには料理の絵が出ていて、写真のない焼きそばのカードには、淡い緑の地に「焼」の字が出ている。それぞれのカードの下に名前と「食材 0 件」

料理の一覧のカード表示(写真の代わりに、描いた絵を使っています)

ほとんどが、使い回し

ギアとキャンプには、もう画像があります。料理の画像は、その仕組みをほとんどそのまま使えました。

  • 画像を選ぶ欄(ファイルを選ぶか、URL から取り込む。ブラウザで小さくしてから送る)
  • 画像の置き場所(利用者ごとのフォルダ。退会したら、フォルダごと消える)
  • 差し替えたら、古い画像を消す
  • 画像の数の上限(ギア・キャンプ・料理を合わせて数える)
  • データの書き出し(ZIP の中の images/ に入れる)
料理の編集の画面の、画像の欄。今の画像(料理の絵)、ファイルを選ぶボタン、「または、画像の URL」の欄と「取り込む」のボタン、「画像を削除する」のチェックボックス

画像の欄は、ギア・キャンプと同じ部品

新しく決める必要があったのは、見た目だけです。Claude Code に、手元の画面で実際に写真を付けた絵を撮ってもらい、それを見て決めました。

決めること 決めた形
カードに出すもの ギアのカードと同じ正方形に、名前と「食材 N 件」。写真のない料理は、名前の頭文字
リスト表示 今までどおり、料理のアイコン(ギアのリスト表示にも写真は出していないので、そろえる)
キャンプの画面の料理の欄 写真を出さない(名前で足りる。出すと画面が重くなる)

画像の数は、変えない

フリーの人が付けられる画像は、ギアとキャンプを合わせて 50 枚です。料理の写真もこの合計に入れるので、「50 枚で足りるかを見直す」ことも、この作業の中に入れていました。

結論は、変えないことにしました。ベータ版は始まったばかりで、まだ誰も使い込んでいません。決める材料がない状態で数を動かしても、根拠のない数が増えるだけです。フリーの料理は 20 件までなので、料理の写真で増えるのは、多くても 20 枚です。ベータ版で「足りない」という声が出たら、見直します。

使い方のページも直す

前回、「画面の動きを変えたら、使い方のページの文も直す」という決まりを作りました。早速、その出番でした。料理の説明に、写真とカード表示のことを書き足しました。


数える場所が、2つあった

画像の数は、2か所で数えています。

  • 登録できるかを決めるとき(今の数と上限)
  • 管理画面の、ユーザーごとの件数

Claude Code が、画像の列(image_key)を使っているところをコードの中から全部探したときに、2つ目に気づきました。上限のほうだけを直していたら、管理画面の件数は、料理の写真を数えないままになるところでした。

同じ数を、別々のコードで数えている場所が2つあると、片方だけ直して、もう片方を忘れます。今回は、列の名前で探したので見つかりました。


依存パッケージを上げる

もう1つは、依存パッケージの版上げです。3日前(10/6)、セカンドオピニオンのレビュー(#47〜)のときに npm audit(依存パッケージの、知られている脆弱性を調べるコマンド)を流して、8件を記録していました。「公開する前に片づける」と決めていたものです。

取りかかって流し直すと、12件に増えていました。

重さ 10/6 10/9
高 0 4
中 4 4
低 4 4

何もしていなくても、3日で増えます。脆弱性は、見つかった日に増えるからです。

大きな版上げをしない「fix」だけを当てる

増えた「高」の4件は、どれも、デプロイに使う道具(wrangler)が中で使っているパッケージでした。手元の開発と、ビルドやデプロイのときにだけ動くもので、本番で動くコードには入りません。

npm audit fix は、大きな版上げ(メジャーバージョンの変更)を伴わない直しだけを当てるコマンドです。これで、「高」の4件が直りました。変わったのは、入っているパッケージの版を記録したファイル(package-lock.json)だけで、どの版を使うかを決めたファイル(package.json)は変わっていません。

残る8件を、上げない

残る8件は、10/6 から変わらないものです。直すには、大きな版上げが要ります。

件 直すには 本番に効くか
cookie(低) SvelteKit 3(使っているフレームワークの、次の大きな版) 効かない。クッキーの名前などに変な文字を通す問題だが、ハコヅミはクッキーの名前を利用者の入力から作っていない
esbuild(中) drizzle-kit 1.0(まだ正式版ではない) 効かない。手元でマイグレーションを作るときだけ使う道具で、問題の機能(開発サーバー)も使っていない

SvelteKit 3 への版上げは、それだけで1つの作業になります。一般に公開したあとに回すことにしました。

npm audit の件数は、ゼロにすることが目的ではありません。1件ずつ、「本番で動くコードに効くか」「ハコヅミの使い方で当たるか」を見て、上げるかを決めます。上げない理由は、PR に書いて残しました。

全部のテストを流す

版上げは、全部の画面に効くかもしれない変更です。手元でも、E2E テストを全件(542 件)流しました。全部通りました。


どちらを先に出すか

料理の写真は、開発環境での確認が済み、本番に出すだけの状態でした。そこで、「先に版上げをしても大丈夫?」と Claude Code に聞きました。

返ってきたのは、こういう答えでした。

  • 大丈夫。版上げは画面の動きを変えないので、料理の写真と一緒に1回で出せば、リリースが1回で済む
  • ただ、本番で何か起きたときに、どちらのせいかを切り分けにくくなる

料理の写真は、データベースに列を足すマイグレーションを伴います。何か起きても、データベースを過去の時点に戻せます。版上げは、開発環境で一通り触って確かめます。それで、まとめて出すことにしました。


書く欄があっても、書き忘れる

マイグレーションを伴う本番リリースでは、リリースの PR に「マージの直前の時刻」を書く欄を置いています。マイグレーションで本番のデータベースが壊れたときに、その時刻に戻すためです(データを戻す手順を作ったときに決めました)。

今回、その欄が空のままマージされました。リリースのあとに Claude Code が PR を読み直して、気づきました。

幸い、GitHub には、PR をマージした時刻が残っています。マイグレーションが当たったのは、その2分後でした。マージの時刻を、戻す時刻として、あとから書き足しました。

書く欄を置いても、書くのは人です。今回は、代わりになる記録(マージの時刻)が、たまたまありました。


おわりに

  • 先に作った仕組み(ギア・キャンプの画像)があると、新しく決めることは見た目だけになる
  • 根拠のない数は、動かさない。材料がそろってから決める
  • 同じ数を数えている場所が2つあると、片方を直し忘れる。列の名前で探す
  • npm audit の件数は、何もしなくても増える。ゼロにするより、1件ずつ「本番に効くか」を見る
  • まとめて出すと楽になるが、何か起きたときに切り分けにくくなる。戻せる手段があるかで決める
  • 書く欄を置いても、書くのは人。代わりになる記録がないかも、見ておく

次回こそ、テスタからの最初の声を聞く予定です。

← トップページに戻る