「Gyazoの手軽さは便利そうだけど、パブリックな場所に公開されるのはちょっと...。」とお考えのあなた、良い方法ありますよ。
(MacOSXの基本的な操作と、ターミナルを使える人を対象とします。)
Gyazoには画像をアップロードするコードだけでなく、サーバ側のスクリプトも同梱されています。
(現行のバージョン0.3には含まれません。今回は0.2のものを使用します。)
そこでローカルにGyazoサーバを立ててみましょう。
方針は、できるだけOS標準機能を使い、ソースの修正も最小限に抑える方向となっています。
RubyのサーバであるWEBrickを使った方法は、以下のページに詳解されています。
本来であれば、0.2に入っている「upload.cgi」を使えば良いのですが、Rubyの実装に変更があったためそのままでは動作しません。
「Digest::MD5.new(imagedata).to_s」の部分を「Digest::MD5.new.update(imagedata).to_s」に変更します。
(MacOSX 10.5の場合。これ以前のOSXでは修正が不要かもしれません。)
また、「upload.cgi」は、同一ディレクトリにファイルを保存するため、実行環境配下に画像ファイルが入ってしまいます。
これでは、画像ファイルが実行ファイルと認識されてしまうため、ブラウザから参照する事ができません。
(仕様的にcgiファイルでも受け取り実行環境に配置されてしまうため、セキュリティ的にも危険です。)
このため、画像を受け取る専用のアカウントを作成し、実行環境下でない「サイト」フォルダ(内部的にはSitesフォルダ)に保存するようにします。
さらに、ブラウザに通知する保存先URLも変更します。
GyazoはGNU GPLらしいので、上記の修正済「upload.cgi」を載せておきます。
こちらのファイルもGPLになります。
upload.cgi
#!/usr/bin/env ruby
# -*- ruby -*-
#
# $Date$
# $Rev$
#
require 'cgi'
require 'digest/md5'
require 'sdbm'
cgi = CGI.new("html3")
id = cgi.params['id'][0].read
imagedata = cgi.params['imagedata'][0].read
#hash = Digest::MD5.new(imagedata).to_s
hash = Digest::MD5.new.update(imagedata).to_s
dbm = SDBM.open('db/id',0644)
dbm[hash] = id
dbm.close
#File.open("data/#{hash}.png","w").print(imagedata)
File.open("/Users/gyazo/Sites/#{hash}.png","w").print(imagedata)
#cgi.out { "http://localhost/#{hash}.png" }
cgi.out { "http://localhost/~gyazo/#{hash}.png" }
Gyazo専用アカウントの作成
アカウントの設定で次のようなユーザを作成します。
Gyazoサーバの設定
上記の「upload.cgi」はホームディレクトリに保存したと仮定します。
以下、ターミナルを使って設定していきます。
% cd /Library/WebServer/CGI-Executables
% mkdir gyazo
% sudo chown _www:admin gyazo
% sudo chmod 755 gyazo
% sudo mv ~/upload.cgi .
% sudo mkdir db
% sudo chown _www:admin upload.cgi db
% sudo chmod 755 upload.cgi db
% cd /Users/gyazo
% sudo chown _www:admin Sites
% cd Sites
% sudo rm -rf *
% sudo rm -rf .*
Gyazoクライアントの改造
Gyazoクライアントを改造し、画像の送信先を変更します。
そのまま改造すると通常のGyazoと区別がつかなくなりますので、コピーしてからカスタマイズを行ないます。
Gyazoの実行用パッケージは、バージョンが0.2では「gyazo.app」、0.3では「Gyazo.app」となります。
両者の中身は基本的に同じですのでどちらを使用しても構いません。
ここでは、複製したGyazoを「local_gyazo.app」とします。
「local_gyazo.app」を右クリックし、「パッケージの内容を表示」を選択して下さい。
パッケージ内の「Contents/Resouces/script」というファイルをエディタで開いて下さい。
HOST = 'gyazo.com'
CGI = '/upload.cgi'
HOST = 'localhost'
CGI = '/cgi-bin/gyazo/upload.cgi'
実行
「local_gyazo.app」を実行しキャプチャしてみましょう。
「http://localhost/~gyazo/」で始まるURLがクリップボードにコピーされ、ブラウザに画像が表示されたのであれば、ローカルGyazoサーバの設置は完了です。