2024年10月、StackBlitz / bolt.new から heic-converter を始めた。iPhone の写真(HEIC)をブラウザ上で JPEG に変換するやつ。
動機
iPhone 写真は HEIC で、Web にそのまま上げると表示できないことが多い。サーバーに送る前に、ブラウザ側で JPEG にしてしまいたかった。アップロードもサーバー処理も要らないので、その方がプライバシー的にも気楽。
構成
bolt.new が吐いた React + Vite + shadcn/ui のベースに、変換まわりを足した。
heic2any— HEIC → JPEG/PNG の変換本体react-dropzone— ドラッグ&ドロップで画像を受けるjszip— 複数枚をまとめて zip でダウンロードsonner— 変換完了のトースト- 変換ロジックは
src/lib/image-utils.ts、UI はImageConverter.tsx
全部クライアントサイドで完結する。ファイルはどこにも送らない。
ハマったところ / 気づき
heic2any を入れたら変換自体はあっさり動いた。むしろ考えどころは「複数枚を一気に変換したとき、1枚ずつ落とすのは面倒」という UX 側で、jszip でまとめて zip にして1回でダウンロードできるようにした。react-dropzone + トーストで、放り込んだら勝手に変換されて完了通知が出る、くらいの軽さに寄せた。
学び
こういう小さいユーティリティは、StackBlitz / bolt.new → GitHub のフローが最速。本番化(独自ドメインとか)は後回しでよくて、まず「動くものを URL で渡せる」状態にするのが正解だった。実際この変換は、ツール詰め合わせの 2rab-app にも組み込んだ。クライアント完結のミニツールは、Cloudflare Pages に置いておくと地味に長く使える。