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 さんの実装をかなりの部分参考にしました。




