他人のサービスに、自分の暮らしを預けすぎない理由
夜の8時を過ぎていました。
ブックマークの整理をしようと思って、Toby というサービスから JSON をエクスポートして、自分が作ったブックマーク管理アプリに取り込もうとしていました。
ファイルを選んで、ボタンを押します。
無反応でした。
エラーすら表示されない

トーストも、アラートも、何も出ません。
ファイルは選んだのに、画面は静かなままです。
ブラウザの裏側を覗いて初めて、エラーが出ているのが分かりました。
「無効なTobyデータ形式です」
私が作ったアプリの中で、私が書いたバリデーションが、Toby のエクスポートを弾いていたのです。
Toby が、黙って構造を変えていた

JSON の中身を見てみたら、データの形が変わっていました。
これまでは、ブックマークのリストが一段の配列で入っていました。
今は、その上に「グループ」という新しい階層が追加されていて、各グループの中に複数のリストがぶら下がっている形になっていました。
たぶん Toby 側で、Workspace のような機能を追加したタイミングで、データ構造を変えたのだと思います。
私のところには、メールもニュースリリースも届きませんでした。
気づくのは、エクスポートして取り込もうとした瞬間でした。
自分のアプリだから、直せた

ここでもし petapeta が、誰か他の人の作ったアプリだったら。
サポートにバグ報告を送って、対応を待つしかありません。
何日かかるか分からないし、直してくれるとも限りません。
その間、574 件のブックマークは宙ぶらりんになります。
でも petapeta は、私が作ったアプリです。
正確には、Claude Code に頼んで、一緒に少しずつ作ってきました。
エラーを見せて、JSON の構造を相談して、Toby のグループを petapeta のコレクションにマップする方針を決めました。
ローカルで動作を確認して、デプロイまで、半日もかかりませんでした。
自分の手元にある、ということ

ブックマークというのは、地味だけれど大事なデータです。
副業の参考になりそうな URL、子どもが見ている学習サイト、税理士さんに聞きたいことのメモ、将来やってみたいことのリンク集。
全部 URL で繋がっていて、自分の生活の半分くらいを支えていると思います。
それを他人のサービスに置きっぱなしにしておくと、ある日突然「形式が変わったから読めません」みたいなことが起きるのだと、今回身をもって知りました。
「自分で持てる」が選択肢になった

petapeta を作り始めた頃は、「自分でブックマーク管理ツールを作る」なんて、難しい話だと思っていました。
非エンジニアが手を出せる領域じゃないと。
でも、AI と一緒に開発するようになってから、少しずつ「自分で持てるもの」が広がってきました。
すごく専門的なものは作れないけれど、自分が毎日使うちょっとしたツールなら、頼めば一緒に作れる。
Toby が静かに仕様を変えていた夜、petapeta が手元にあって良かったと思いました。
完璧なアプリじゃなくていいんです。
自分のデータを、自分の手元で守れる小屋があればいいんです。
そのくらいで、十分だなと思いました。
そして、自分の小屋にも穴があった

Toby だけ直して安心しかけたところで、Chrome のブックマークの取り込みも見直すことにしました。
同じように構造を整えて、これで完璧、と思った時に、別の問題が見つかったのです。
「取り込んだ後、既存の全部が消える。
リロードすると戻る」
そう報告を受けて、頭が一瞬真っ白になりました。
「全部消える」は、ブックマーク管理アプリにとって致命的な言葉です。
幸い、クラウドに保存しているデータ自体は無事でした。
リロードすれば戻る、つまり「画面に映っているデータだけがおかしい」という状態でした。
コードを辿ってみたら、何ヶ月か前にデータの保管方式を新しくした時に、古い「全部入れ替え」のコードが残っていたのが原因でした。
新しい方式は正しく動いていました。
でも、その後ろで古いコードがこっそり「全部入れ替え」を実行していたのです。
5 行直したら、消えていた既存のコレクションが画面に戻ってきました。
外も内も、ぜんぶは分からない
外のサービスが黙って構造を変えることは、怖いです。
でも、自分が作ったアプリの中にも、気づかないまま動いているバグはあります。
今回は誰かが「あれ?」と教えてくれて、はじめて見えました。
完璧なものは作れません。
それでも、その「あれ?」が来たときに、自分で開けて自分で直せるのは、心強いと思いました。
外も、中も、ぜんぶは分からない。
分からないものを、少しずつ手元で確かめていく。
それが、自分のアプリを持つということなのかもしれません。

