WindowsでGyazoサーバを立ててみた

あまり話題に上ってこないのが不思議ですが*1Gyazoには、サーバ用のCGIスクリプトが添付されています。そのCGIスクリプトは10数行程度のrubyスクリプトなので、ちょっこっと変更するだけでWindows上でも動作させることができます。

で、自分のローカルマシンでGyazoサーバを稼働させることができたので、その手順を簡単に紹介したいと思います。

環境

環境構築に使用したマシンは以下のとおりでした。

Apacheをセットアップ

まずはWebサーバをセットアップして、CGIとしてRubyスクリプトが実行できる状態にする必要があります。Apacheの設定になりますが、ここでは詳細の手順は省略します(正直いうと細かい手順を忘れてしまった...orz)

私の場合、ディレクトリ構成は以下のような感じなってます。

Gyazoのソースを入手

以下よりgyazo-0.2.dmgをダウンロードします。

Windowsでは、通常dmgイメージをマウントすることができないのですが、XacRettというツールを使うことでdmgイメージの内容を展開することができます。
以下よりダウンロード/インストールしてください。(細かい手順は省略します)

XacRettにdmgファイルをドラッグ&ドロップするとディスクイメージが展開されます。
展開したすると以下のようなファイルが現れると思います。

  • upload.rb
  • upload.cgi

どうやら、upload.rbがクライアントのrubyスクリプトで、upload.cgiがサーバ用のCGIスクリプトのようです。これで、Gyazoのソースが入手できました。

ソースの修正

サーバ用スクリプト

基本的に各種パスを調整するだけで動作します。以下の点を環境に合わせ変更します。

  • ruby実行モジュールのパス
  • imagedata(画像)の格納先のパス
  • imagedataを保存するときのファイルのモードは「バイナリ」を指定する必要があります*2
  • アップロード先として出力するURL

参考までに、upload.cgiのパッチ(差分)を貼っておきます。

diff U3 C:\xampp\cgi-bin\upload.cgi.origin C:\xampp\cgi-bin\upload.rb
--- C:\xampp\cgi-bin\upload.cgi.origin	Wed Sep 05 23:34:28 2007
+++ C:\xampp\cgi-bin\upload.rb	Tue Nov 11 23:06:05 2008
@@ -18,6 +18,6 @@
 dbm[hash] = id
 dbm.close
 
-File.open("data/#{hash}.png","w").print(imagedata)
+File.open("c:\\xampp\\htdocs\\uploads\\#{hash}.png","wb").print(imagedata)
 
-cgi.out { "http://gyazo.com/#{hash}.png" }
+cgi.out { "http://localhost/uploads/#{hash}.png" }
クライアント用スクリプト

クライアントは、以前のエントリで紹介したスクリプトを使用します。
このスクリプトのHOST, CGI の定数をローカルのサーバーのものに書き換えてあげます。たとえば、以下のような感じで...

#HOST = 'gyazo.com'
#CGI = '/upload.cgi'
HOST = 'localhost'
CGI = '/cgi-bin/upload.cgi'

上記で準備は完了です。

使ってみた

Apcheを開始して、前回のエントリのように Screenshot Captor スクリーンショットを取ります。
すると、以下のようにlocalhostにアップロードされます。

つたない説明で分かりづらいところが多々あると思いますが、ローカルで使えるGyazoサーバが
手に入ったのがうれしくて、とりあえずエントリとして公開しました。

間違い等あればコメントください。

*1:よくよく考えると、イントラで画像を共有する場合は、Windowsファイル共有で十分だからか。でも、イントラにGyazoサーバ立てると、社内ブログや社内Wikiにそのまま貼れるのでイロイロ便利なはず。

*2:Windowsでは必要っぽいです。自分自身よくわかってないんですが...