Time to Read

2分

皆さんご存知の便利画像アップロードサービス、 Gyazo 、そのサーバ側実装 upload.cgi を、クローンして再実装してみた。

プロジェクト名は冗談で、中身は Sinatra で実装されています。さらに、画像保存にファイルではなく MongoDB(Mongoid gem) を利用しているので、 heroku その他クラウド上にデプロイできるというおまけ付きです。

デプロイメント、使い方

Heroku に登録し、アカウントを verify したあとならば、

1
2
3
4
5
6
7
8
9
10
git clone git://github.com/udzura/upload.cgi.git
cd upload.cgi
heroku create your-gyazo-app
# setup heroku
heroku addons:add mongohq:free
heroku addons:add custom_domains:basic
heroku domains:add youapp.example.com
# ... 後述するようなアプリの設定
# 終わったら
git push heroku master

その後、 Linux なら、 gyazo 投稿スクリプト内部を改変して:

35
HOST = 'youapp.example.com'

Mac、Windows版にも同様な設定項目があるはずですよね?

サーバ詳細設定

デフォルトでは、誰でも upload できて破滅的なので、

1
2
cat ~/.gyazo.id
#=> XXXXXXXX

上記のコマンドで ID を確認ののち、 lib/gyazo_app.rb を編集し、

5
set :gyazo_id, "XXXXXXXX"
1
git commit -am "add my id" && git push heroku master

とかこんな感じで設定を反映させましょう。そうすれば、アナタ(のPC)以外は upload できません。でも Windows はどこに ID が入っているんだろう……?

あと、 favicon.ico もあります。リポジトリルートにある favicon.ico を上書きしてアップすれば OK です。

画像削除

本家と違い、画像をカジュアルに消せます。つまり HTTP DELETE メソッドをサポ~トします。curl かなんかで:

1
curl -X DELETE http://youapp.example.com/b1848ccab5c2e9f7ec7c8768c89c4b05.png?id=`cat ~/.gyazo.id`

上述の ID 設定をしている場合は、 id パラメータが無いと消せません。

MongoHQ free ではわずか 16MB 、いち画像平均 100KB だとしてもおおよそ 160 個しかアップできないんで、適宜消して整理する運用も出来るようにしてあります、ということです。

テスト

なんと! 若干のテストが付いています。ローカルサーバに MongoDB を入れていれば:

1
2
bundle
rake spec

もっと充実させたいですね~。あと、そもそも MongoDB の実インスタンスに依存しているのがちょっと……。

ちなみに、ローカルで立ち上げたい場合は:

1
2
bundle
rackup

これで、 localhost:9292 とかで動くはずですので、 gyazo スクリプトを書き換えたりして試してみてください。一応、 bin/gyazo というものを用意していて、そのまま起動すれば localhost に投稿しにいきます。

留意すること

Linux 版 gyazo クライアントとして配布されているものをインストールしている方は、実はそのままだと現在の Gyazo 本家にアップロードできないようです。修正方法は別記事に書きます。どちらかというと僕のインストールしていた、どこぞでコピペしてきた記憶のある gyazo スクリプトが異常だったようです…… github にホストされているもので正常に投稿可能です(ただ、 proxy まわりはいじらないと動きません。)。

このクローン版 upload.cgi は、修正前/修正後の両方の gyazo クライアントに対応しますが、修正後の方が色々望ましいのでそっちを推奨します。

ということで、

容量制限はありますけれど、カジュアルに自前の gyazo サーバを持てますね! 社内等での運用にもお使いいただけます。

see also

他の言語での実装が色々リンクされています。また、僕の実装は、 id:send さんの実装をかなりの部分参考にしました。