Qiitaの記事に画像を埋め込むとqiita.com内のURLへのリンクが生成されると思いきや、S3内のURLへのリンクが原文に張られます。執筆者がアップロードした画像はS3に送られて、そのURLを使って画像表示をしているようです。ここまではいいのですが*1、問題は画像を消すときです。どうやってるんでしょうね。
素直に考えると次のような実装が考えられます。
- ユーザごと、あるいは記事ごとに、過去にアップロードした画像リストを管理している
- 記事公開/下書き保存のタイミングでフックを仕掛けて、画像リンクへの参照カウンタを増減させる
- 参照カウンタが0になったら画像データを削除する
これを確かめるために、
- とある既存記事に埋め込まれている適当な画像へのリンクを削除
- 記事を更新(ここで記事から画像は消える)
- 再度記事を編集して、1で削除したリンクを挿入
- 記事を更新
という操作をすると、再び画像が表示されました。どうやら、参照カウンタによって画像データの開放時期を管理しているとしても、開放のタイミングは記事公開/下書き保存の時ではないようです(少なくとも毎回はやっていない)。定期的にバッチ処理で開放しているのか、はたまた参照カウンタじゃない全然別の方法で管理しているのか。
中の人ではないのでこれ以上の真相は闇の中ですが、知らなくても困るものでもないので、とりあえずはここまで。