GyazoのバックエンドをDropboxにしてpublic URLも作るやつ
タイトルの通りのよくある話です。
前職には社内Gyazoがあって重宝していたのだが、はてなにははてなフォトライフというサービスはあるものの、社内Gyazoサーバー的なものは無く、各自がめいめい画像をキャプチャしている状況である。実際問題、社内Gyazoサーバーは作って立てるのは比較的簡単だが、メンテは大変そうなので、賢明な判断とも言える。
ということで僕も自分なりのキャプチャソリューションが必要になったので考えてみた。要件としては以下くらい。
- httpsアクセス
- URLの推測が困難
- ストレージ管理がやりやすい(削除とかが簡単)
- 画像に直接ブラウザアクセスできる
URLに関してはpublicなやつで良くて、認証とかも特に要らないだろうというところ。ものすごくクリティカルなものを配置しないように多少は配慮した方が良いが、そっちのほうがチャットツールに貼ると上手いこと展開してくれたりするので便利だったりもする。
最初は自前で適当にGyazoサーバー立てるかとか思ったりもしたんだけど、よくよく考えると、Dropboxで良いということに気が付き、ぐぐったら案の定何年も前からやっている人がたくさんいた。
その辺を参考にしつつ、最近のGyazo.appの中身をもとに調整して以下の様な感じになった。
既存実装は#{Digest::MD5.hexdigest(Time.now.to_f.to_s)}.png
みたいに現在時刻を単純にハッシュ化してるものが多かったけど、URLの推測を困難にする上ではやや問題があると感じたのでSecureRandom
を使っている。それとファイル名は単純なハッシュ値にするのではなく、先頭には日付を入れていつキャプチャした画像かURLから分かるようにしていると言ったところがちょっとした工夫。
最近のDropboxにはスクリーンショットの共有機能もあるんだけど、URLになんかマルチバイト入ったりして嫌だし単純な画像表示のみにして欲しかったのでこういう感じにした。