さくらVPSにzncをインストール

以前、自宅のPC (MMX 133MHz!) でNetBSDを運用しておりまして、
その上でIRCゲートウェイ(というのかプロキシーというのか)を走らせていたんですが、
ずいぶん前に雷でマシンごとやられまして、そのままになっていたのを急に思い出しました ^^;

今度はさくらVPSにインストールすることにして、
ゲートウェイはどれにしようか悩んだのですが、最近はtiarraよりzncのようなので、
zncにしてみます。以前動かしていたのはなんだったかもう思い出せませんでした。年か ^^;

CentOSはyumでzncを入れればいいです。epelに入っているみたいです。

$ sudo yum -y install znc
...(略)...
Installed:
  znc.x86_64 0:1.2-1.el6                                                                                                       

Complete!

というわけで、znc 1.2 がインストールできました。単に

$ znc

と起動してやると、かってにバックグランドで起動します。起動する前に設定を
しなくていはいけませんが、–makeconf をつけて起動すると対話的に
設定を作ることができます。

$ znc --makeconf
[ ok ] Checking for list of available modules... 
[ ** ] Building new config
...(略)...

設定は適当にやりますが、zncでは複数のユーザーを作成することができます。ひとつzncを起動するだけで、
複数の人からの接続を許すことができます。最近のバージョンでは、ひとりのユーザーにつき、複数のネットワーク
(IRCサーバー)を指定することができ、同時にあっちのサーバーとこっちのサーバーにつなぐことができます。
主な設定を抜粋しておくとこんなかんじ。

[ ?? ] What port would you like ZNC to listen on? (1025 to 65535): 6667 
       ↑クライアントがzncに接続するポートの指定

[ ?? ] Would you like ZNC to listen using SSL? (yes/no) [yes]: yes
       ↑クライアントとの接続にSSLを使うか (yesにしました)

[ ?? ] Would you like to create a new pem file now? (yes/no) [yes]: yes
[ ok ] Writing Pem file [/home/iwa/.znc/znc.pem]... 
       ↑pemファイルを作るかどうか (作ります)

[ ?? ] Would you like ZNC to listen using ipv6? (yes/no) [no]: no
       ↑ipv6 は無効に

[ ?? ] Listen Host (Blank for all ips): 
       ↑ブランクでいいみたい

[ ** ] -- Network Modules --
...(略)...モジュール類はぜんぶnoにしておいて、あとから追加すればいいでしょう。

[ ** ] Now we need to set up a user...
       ↑ユーザーの作成をします

[ ** ] 
[ ?? ] Username (AlphaNumeric): hoge
[ ?? ] Enter Password: 
[ ?? ] Confirm Password: 
       ↑クライアントがzncに接続するユーザー名とパスワード

[ ?? ] Would you like this user to be an admin? (yes/no) [yes]: yes
       ↑クライアントがzncに接続するユーザー名とパスワード

[ ?? ] Nick [hoge]: kenic
[ ?? ] Alt Nick [kenic_]: kenip
       ↑IRCのニックの指定

[ ** ] -- IRC Servers --
[ ** ] -- Channels --
       ↑大胆に省略しますが、IRCサーバーとチャンネルを指定します。複数指定できます。

[ ** ] To connect to this ZNC you need to connect to it as your IRC server
[ ** ] using the port that you supplied.  You have to supply your login info
[ ** ] as the IRC server password like this: user/network:pass.
[ ** ] 
[ ** ] Try something like this in your IRC client...
[ ** ] /server  +16668 iwa:
[ ** ] And this in your browser...
[ ** ] https://:16668/
       ↑注意がきです

[ ?? ] Launch ZNC now? (yes/no) [yes]: yes
       ↑yes ってすると起動します。

できた設定は ~/.znc/configs/znc.conf に書かれています。これを手で書き換える場合は次のようにします。

IRCクライアントで /znc SaveConfig
~/.znc/configs/znc.conf を編集
IRCクライアントで/znc Rehash

複数のネットワークを指定したばあいは、クライアントはどのネットワークを使いたいか、
指定する必要があります。ネットワークの指定(切替)は、クライアントから /znc jumpnetwork
でネットワークをそのつど切り替えるか、クライアントの接続の設定で、パスワードに
「user名/ネットワーク名:パスワード」として、あらかじめネットワークを指定するかします。
ここのところが良くわからなくて少し悩みました。よくみたらちゃんとメッセージが出てたんですけど。

moduleはいろいろあるみたいですが、とりあえずlogぐらいはとるようにしたいです。IRCクライアントから
ロードできます。 /znc loadmodule log としさえすれば、あとはかってに ~/.znc/users/hoge/moddata/log/
の下に、チャンネル別、日付別にログができます。便利です。

その他、くわしいことは /znc help でわかるみたいです!

参考文献

nfsで公開されているディレクトリをLeopardでマウントする方法

nfsで公開されているディレクトリをMac OS X でマウントする場合、以前はNetinfoを利用して設定をしたようですが、
LeopardではNetinfoがなくなってしまったので、手順がかわりました。作業をまとめておきます。

LeopardではNetinfoがなくなってしまったので、「Directory Utility」を使ってマウントします。場所はApplications→Utilities→Directory Utilityです。

directory utility

図1. Directory Utility.app

Directory Utilityを起動したら、右下の「Show Advanced Settings」を押します。すると上にオプションが出ます。

Directory Utility

図2. Directory Utilityが起動したら「Show Advanced Settings」を押す

Directory Utility

図3. すると上にオプションが出ます

つづいて「Mounts」というのをポチッとします。

Directory Utility

図4. Mountsオプション

ここで自動的にNFSをマウントするための設定をします。下の鍵マークをクリックすると管理者のパスワードを聞かれるので、入力します。そのあと「+」ボタンをおすと、次の画面になります。

Directory Utility

図5. NFSのマウントの設定画面

ここでなかほどにある「Advanced Mount Parameters」をクリックして、マウントオプションを入れられるようにします。

Directory Utility

図6. マウントオプションの欄を表示にする

さあこれで準備はできました。あとはNFSのexport元と、マウントするディレクトリを入力します。このときのポイントは、「Ignore “set user ID” privileges」(=nosuid)をオンにするのはよくある設定ですが、ついでに「-P」を指定すること。これは
resvportと同等で、1024番以下のポートを利用するようにするオプションです。たいていのNFSサーバーはデフォルトで
セキュアポート(=1024番以下)のポートを使わないと接続できないように設定されていますが、Leopardでマウントする側は
デフォルトでは1024番以上を使うようになっています。そのため、このresvportまたは「-P」を設定しないとマウントできません。
ここ重要。

Directory Utility

図7. いろいろ入力

できたら、「Verify」して「Apply」します。NFSのサーバー名やディレクトリ名がちがっていると、エラーが出るので修正します。

これでNFSで公開されているディレクトリがマウントされるのですが、マウントするのがホームディレクトリの場合、
uidがおなじじゃないとうまくいきません。NISで共有できればいいんだけど、とりあえずNISを使わずに同じにしておく方法を
紹介しておきます。

まず、あらかじめ「Terminal」を開いておきます。ここも重要。これをやらないと、そのユーザーでログインできなくなる可能性がありますので要注意。

次に「System Preferences」の「Accounts」をひらいたら左下の鍵マークをクリックし、管理者のパスワードを入力しておきます。そして、NFSを公開している元とおなじuidにしたいユーザーをコントロール+クリック。するとコンテクストメニューがでて、
「Advanced Options…」というのが選べるので選びます。すると図8のような画面が出ますね。

Accounts

図7. 左のアカウントの一覧のところで、コントロール+クリックして「Advanced Options…」をえらぶと

Accounts

図8. こんな画面が出ます

ここで「User ID」をNFSサーバー上のuidと同じにします。そのあと「OK」をクリック。

できたら、さきほどひらいたTerminalで「chown -R .」します。ホームディレクトリのファイルを
あたらしいuidの所有物にします。できたらリブートすれば完成!

デスクトップにでもショートカットをおいておくと便利かも!

WordPressにGoogle Analyticsのトラッキングコードを追加する方法

全然更新してないけど、実験用のWordPressのサイトにGoogle Analyticsのコードを追加してみました。画像はflickrにおいたものを使ってるんだけど、flickrのstatみるとそこそこアクセスがあるようなので。

ふつうに(?)ga.jsっていうトラッキングコードを埋め込んでもいいんだけど、せっかくなのでPluginを使ってみることにしました。今回つかってみたのはUltimate Google Analyticsというプラグインです。ではさっそくインストールの方法。

  1. まず、Google Analyticsのアカウントをとります。
  2. Ultimate Google AnalyticsのZIPファイルをダウンロードします。2008年4月現在の最新版は1.6.0です。ダウンロードはUltimate GAのダウンロードの章からどうぞ。
  3. ZIPファイルを展開するとでてくるphpファイルを、WordPressがインストールされているディレクトリの下にある
    wp-content/plugins ディレクトリの下にコピーします。
  4. WordPressの管理画面 (通常 http://あなたのblog.com/wp-admin です)に行き、「Plugins」タブでUltimate Google Analyticsを「Activate(有効に)」します。
  5. Ultimate Google Analyticsが有効になっていると「Options」タブの下に「Ultimate GA」というタブができるので、ここで設定をします。とりあえず「Account ID」だけ設定すればよいでしょう。Account IDはGoogle AnalyticsのアカウントのIDです。UA-999999-9というようなフォーマットをしています。UA-999999の部分がアカウントのIDで、最後の一桁がWebサイトごとにつけられた番号だと思われます。

なお、すでにGoogle Analyticsに登録してあるwebサイトのAccount IDの確認の方法がわかりにくくなっています。Analyticsにログインして、「Analytics 設定」→ webサイトのリストの右側にある「編集」→ 上部に出てくる「(ステータスを確認) 」でそのWebサイトのトラッキングコードが表示されます。そのなかにUA-999999-9というフォーマットのIDがあるはずですので、それをつかってください。

google analytics

図1. Google AnalyticsのAccount ID

これだけでとりあえず完了です。あとはGoogle Analyticsがレポートをアップデートするのをまつだけです。Google Analyticsのアップデートは、今のところ24時間ぐらいかかっているようです。

参考文献

Leopard の VNC で画面共有

Mac OS X 10.5 LeopardからVNCのクライアントが標準装備になったとのこと。サーバ機能はTigerにもあったんだけどね。で、その肝心のVNCクライアントはどこにあるかというと、「/System/Library/CoreServices/Screen Sharing.app」にあります。ふつうにFinderでたどれば出てきますし、Safariのアドレスバーに「vnc:」といれれば勝手に起動します。いったん起動したらドックに登録しておくと便利かも。

screensharing.jpg

図1. Screen Sharing.app

で、みられる方のマシンはTigerの場合は「システム設定」の「共有」で「Apple Remote Desktop」を有効にして、「監視」の「制御」をオンにすればいいみたいです。

Tigerの共有

図2. みられる側がTiger (10.4.x)の場合

みられる側がLeopardの場合は「システム環境設定」の「共有」の「画面共有」をオンにするだけでよいです。

sharing-leopard.jpg

図3. みられる側がLeopard (10.5.x) の場合

あとはScreen Sharing.appをたちあげて、接続するマシンの名前かIPアドレスをいれて、許可されたユーザーログインすればOK。便利ですねー。

iPod touch 1.1.3のjailbreakが可能に!

iPhone/iPod touchの1.1.3がでてしばらくたちますが、参考文献[1]によると、ついにjailbreakが可能になったようです。詳しくはJailbreak-1.1.3.tar.gzをダウンロードしてお試しください。私はいま手順をみているところです。参考文献[2]も参考にするといいかも。

参考文献

  1. Dev Team’s 1.1.3 jailbreak for iPhone / iPod touch now available, engadget, 2008
  2. Leaked 1.1.3 Jailbreak, George’s Blog, 2008

08.1.28追記

install.shをみるとほとんどたいしたことはしてなくて、

  1. 1.1.3ファームウェアの取得、復号、マウント
  2. fstabの変更、Install.appのコピー
  3. 変更した1.1.3ファームウェアを現行のファームウェアに上書きコピー

ぐらいのようです。いつの間にかファームウェアを復号するためのキーが発見されていたんですね。
よく考えればファームウェアが復号できないから苦労していたのであって、キーがわかってればなんてことないような…?
install.shではほかに/binを全部コピーしたりとなんかイマイチな部分もあるので、あとで手順をまとめてみたいとおもいます。

さくらのレンタルサーバで503 Service Temporarily Unavailableが出る謎

さくらのレンタルサーバのスタンダードを借りているのですが、2、3日前から503 Service Temporarily Unavailableがでるようになりました。phpのみで、ふつうのhtmlはOK。URLでphpを直接指定すると503で、URLでディレクトリを指定してphpを参照すると403 Forbiddenになっちゃいます。

503.jpg

図1. 503 Service Temporarily Unavailable

performancepartscentral.comってのがさくらの上で動いているドメインです。これをみたとき、なにがおこったのかさっぱりわからず、てっきりサーバが壊れたのかと思ってさくらに問合せをしたところ、下記のようなお返事をいただきました。

「503 Service Temporarily Unavailable」というエラーメッセージは、
一時的にウェブアクセスが集中している、もしくは、お客さまにて設置
されているCGIプログラムが誤作動を起こしている場合において表示され
ます。

▼ オンラインマニュアル エラーメッセージ集
http://support.sakura.ad.jp/support/manual/rs/errmsg_web.shtml#503

弊社「さくらのレンタルサーバ」サービスは1台のサーバを複数のお客様と
共有して使用いただく、いわゆる”共用サーバ”となります。
そのため、1人のお客様がサーバの性能を使い果たし、サーバの負荷に
よって他のお客様へご迷惑をおかけすることのないよう様々な制限が
設けられております。

お客様のサーバを確認いたしましたところ、お客様のアカウントに対して
CGIやPHPによるアクセス制限が設けられておりました。今回こちらの制限の
緩和を行なわせていただきました。
しかしながら、今後同様にサーバに許容範囲を超える過負荷等が発生しま
した場合、再度制限が設けられる可能性がございますのでご注意ください
ますようお願いいたします。

なお、これらの制限につきましてはサーバへの負荷がかかる状態を確認
すると制限を掛かり、負荷が緩和されると制限を解除いたします。
弊社にて定めている具体的なしきい値につきましては時流により変動いた
しますため、申し訳ございませんが
公表させていただいておりません。あらかじめご了承ください。

要するに具体的な制限値があるわけではなく、「負荷が掛かる状態」を確認すると制限がかかるということらしいです。
つまり、わたしが動かしているサイトのどれかが負荷をかけたので、503の規制がかかったということですね。
でも、10月や11月とくらべると、わたしのサイトへのアクセスは激減しているはずなのに、10月や11月には503にならず、
1月に急に503になるのはおかしい気がします。そこで、 アクセス数と503の回数をグラフにしてみました。

hits-503.jpg

図2. 1日あたりの503の回数とhit数

ログを見ると1月8日の夜23時ごろから規制がはじまってます。でもねえ、グラフにしてみるとはっきりわかるとおり、
やっぱり10月とくらべるとだんぜんアクセス数も少ないし、規制がはじまったときの
絶対的な値もいちにち2000ヒットや4000ヒットですよ? なにがきっかけで規制がはじまったのかちっともわからん…

今回の件があるまでぜんぜんしらなかったけど、さくらは「503」になることがよくあるらしいですね。それで文句が
よく出ているようですが、なんか、503規制をはじめるアルゴリズムがダサイのが文句が出る原因じゃないかって気がしてきた。
ちゃんと理解可能な理由で503規制がはじまれば、ユーザー側で対策もとれるし文句はでないのでは….?

この件は、またあとでさくらに問合せしてみるかも。

参考文献

  1. 共有さくら鯖の503の謎, またたび.ws, 2005
  2. さくら(sakura)インターネットの503 Service Temporarily Unavailableについて, 時事ネタに釣られるブログ, 2007

wordpressのビジュアルエディタを無効にする方法

以前さくらのレンタルサーバーにwordpressをインストールする方法で使い始めたwordpressですが、記事を書いてみるとなぜか<div>が<p>になってしまいます。divの中に入っているpもなんか変換されちゃってへんなかんじ…なんだろうと思ったら参考文献[1]に書いてありました。ビジュアルエディタにバグが! へんなバグだなあしかし…

解決するにはビジュアルエディタを無効にするか、そのバグそのものを直すパッチをあてればいいようです。わたしはビジュアルエディタはぜんぜん使わないので、無効にすることにしました。これがまた、無効にする方法がわからん…うーん。ユーザー→編集ってどこよ! ないし!

悩むこと3分、参考文献[2]を発見。ディレクトリ「wp-includes/js/tinymce/」をリネームすればいいらしい。簡単だね!

$ cd wordpressをインストールしたディレクトリ
$ mv wp-includes/js/tinymce wp-includes/js/tinymce.bk

案外簡単になおりました。オタメシアレ!

参考文献

  1. WordPressの文章整形機能でdivタグがpタグに…, lovelog, 2007
  2. Disable Visual Editor, wordpress.org, 2007

Mac OS X 10.5 Leopard でデフォルトのデスクトップ画面を変更する方法

Mac OS X 10.5 Leopardが出てからだいぶんたちますが、皆さんいかがお過ごしでしょうか。わたしのまわりでもそろそろ様子見を脱却して、インストールするひとがふえています。色々べんりになってるし、動作も軽快だし、いいですよね!

そのレパードですが、デフォルトのデスクトップ画面がこんなのになっています。

DefaultDesktop.jpg

図1. デフォルトのデスクトップ

作業画面の後ろに常時だしておくにはまぶしすぎるので、すぐに「システム環境設定」の「デスクトップとスクリーンセーバ」で「Solid Colors」のなかの「Solid Gray medium」に変更しました。これで自分のデスクトップはOKです。でもこの画像、ログインの画面でも出てくるんです。これが、かなりまぶしい。ううっ。

という意見は実際あちこちでよく見かけます。この画像を変更するTipsはもうあちこちに書かれています。この画像のありかは、「/System/Library/CoreServices/DefaultDesktop.jpg」です。同じ名前で違う画像ファイルをおいておけば、このまぶしい画像のかわりに、おこのみの画像を使うことができます! 簡単ですね。

というのがよくあるTipsですが、ここでは単に削除してみます。ほかに、とくに使いたい画像もありませんので。まあ「消す」といっても、本当に消しちゃうともしかして困ることがあるかもしれないので(ないと思うけど)、名前を変更しておきます。

$ cd /System/Library/CoreServices
$ ls -l DefaultDesktop.jpg
-rw-r--r--  1 root  wheel  1378680  9 24 10:51 DefaultDesktop.jpg
$ sudo mv DefaultDesktop.jpg DefaultDesktop.jpg.bk
Password: ここでパスワードを入力

これで「Solid Aqua Blue」が背景に使われるようになります。

it's natural eh?

写真1. Solid Aqua Blueなレパードのログイン画面

かんたんですねー。皆さんもやってみよう!

さくらのレンタルサーバーにWordPressをインストールする方法

ちょっと思い立ったので、さくらのレンタルサーバにWordPressをインストールしてみました。WordPressのインストールって、ちょう簡単なのねえ…しらなかった。作業開始から動作確認まで3分ぐらいで完了しました。さくらのレンタルサーバーをかりてるひとは、wordpress.comとか借りる必要まったくないですね。とかいいつつ、これはblogger.comだけど! その、今回インストールしたのはこちら、Performance Parts Central。まあなんていうんですか、普通のブログです。

インストールは簡単に言うと、ダウンロードして、展開して、パーミッションなおして、データベースの設定をするだけなんです。というわけで、さっそくやってみよう。用意するものはtelnetの端末とウェブブラウザだけです。WindowsのひとはコマンドプロンプトかTera termを、Mac OS Xのひとは「ターミナル」を使ってください。WindowsやMac OS Xのftpクライアントとかは必要ありません。

ではまず、コマンドプロンプト/Tera Term/ターミナルをつかって、さくらのレンタルサーバーにログインしましょう。ログインの仕方はだいじょうぶですかー?

% ssh ****.sakura.ne.jp -l ****  ←借りるときに指定したサブドメイン名とユーザー名ね
****@****.sakura.ne.jp's password: ←パスワード入力
Last login: Tue Dec 18 10:11:03 2007 from xxxx.xxxx.xx
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
 The Regents of the University of California.  All rights reserved.

FreeBSD 6.1-RELEASE-p17 (SAKURAx) #0: Mon Jun 11 20:40:49 JST 2007

Welcome to FreeBSD!

%

では、つぎにWordPressをダウンロードしましょう。日本語版のひとはWordPress Localizationリリースファイル・リストを、英語版でいいひとはDownload WordPressを見て、ダウンロードするファイルのURLを見つけてください。現在のところ、日本語版のひとは「http://prdownloads.sourceforge.jp/wordpress/27093/wordpress-me223.zip」、英語版のひとは「http://wordpress.org/latest.zip」です。そうしたらこれをさくらのサーバー上でダウンロードします。場所はどこでもいいですが、ホームディレクトリにしておきましょうか。ここでは英語版にしました。

% cd ~/
% ftp http://wordpress.org/latest.zip
Requesting http://wordpress.org/latest.zip
  1040 KB  296.92 KB/s 
1065215 bytes retrieved in 00:03 (296.92 KB/s)
% ls -l ./latest.zip
-rw-r--r--  1 narak  wheel  1065215 Dec 19 17:32 ./latest.zip

ダウンロードできたら、展開します。これもとりあえずはどこでもいいです。ホームディレクトリで展開しちゃいます。

% unzip latest.zip
Archive:  latest.zip
   creating: wordpress/
  inflating: wordpress/wp-trackback.php  
  inflating: wordpress/wp-config-sample.php 
....
  inflating: wordpress/wp-content/plugins/akismet/akismet.gif  
  inflating: wordpress/wp-content/plugins/akismet/akismet.php  
  inflating: wordpress/wp-content/plugins/hello.php 

これで、「~/wordpress」以下に展開できました。展開できたら、ブツを所望の位置に移します。ここでは仮にxxx.sakura.ne.jp/blog/というディレクトリで動かすことにします。すると、移動する先は「~/www/blog」になるはずです。

% mv wordpress ~/www/blog
% cd ~/www/blog
% ls
index.php  wp-config-sample.php wp-rdf.php
license.txt  wp-content/  wp-register.php
readme.html  wp-cron.php  wp-rss.php
wp-admin/  wp-feed.php  wp-rss2.php
wp-app.php  wp-includes/  wp-settings.php
wp-atom.php  wp-links-opml.php wp-trackback.php
wp-blog-header.php wp-login.php  xmlrpc.php
wp-comments-post.php wp-mail.php
wp-commentsrss2.php wp-pass.php

ターミナルでやる作業はこれでおわりです。あとはweb経由で設定を行います。動かすつもりのディレクトリにブラウザでアクセスすると、次のような画面が出るはず。

wordpress1.jpg

図1. 初めてのアクセス

ここの「create a wp-config.php file through a web interface」というリンクをぽちっとします。

wordpress2.jpg

図2. 次の画面

この画面の「Let’s go」をクリックしましょう。するとこうなるはず。

wordpress3.jpg

図3. データベース設定画面

ここで、さくらでつかえるMySQLサーバー名やデータベース名などを入力します。最後の「Table Prefix」は、WordPressを複数設置するときは、重ならないように適当にユニークな名前にしておきます。入力できたら「Submit」をポチ。

wordpress4.jpg

図4. 準備完了

ここで「run the install!」をポチとします。

wordpress5.jpg

図5. タイトルとe-mail入力

ブログのタイトルと、emailアドレスの入力を求められるので入力します。入力したら「Install WordPress」をポチ。

wordpress6.jpg

図6. インストール完了!

ここで表示されるパスワードは忘れないようにして下さい。あとは、ここで与えられたパスワードをつかって、wp-login.phpにログインすればオッケーです。「wp-login.php」というリンクをポチ。

wordpress7.jpg

図7. ログイン画面

ユーザー名「admin」パスワードは先ほどのものでログインしてください。すると、

wordpress8.jpg

図8. 管理画面

おおっ! そして、ブログの本体の画面はというと…

wordpress9.jpg

図9. てきとうすぎるブログ名のブログ!

できましたー。あとは先ほどの管理画面から投稿すればオッケーです。管理画面は「ブログのURL/wp-admin.php」です。あとは、ユーザーを作成したり、テーマをダウンロードしてブログの見た目をかえたり、パーマリンクのURLのかたちを変えたり、いろいろやりましょう!

参考文献

  1. wordpress.org (WordPressの配布元)
  2. Installing WordPress, WordPress Codex

さくらのレンタルサーバーのRuby on Railsを高速化する方法

以前、さくらのレンタルサーバーにRuby on Railsをインストール、動作を確認し、実際に簡単なアプリケーションをうごかしてみました。

  1. さくらにRailsをインストールする方法
  2. その動作確認
  3. サンプルアプリケーション

しかし、これがどうにも遅い! 通常はApacheに加えてfastCGI等を利用して起動の高速化をはかるのですが、さくらの共用サーバーでは利用できません(参考文献[1])。ただのCGIで動かした場合にどれぐらい遅いかというと、参考文献[2]をごらんください。普通の(?)方法でうごかすのと比較すると、ただのCGIはざっと100倍ぐらい遅い。ひどい!

というわけで、多少でもはやくならんもんかと思い色々と試してみました。速度の測定にはhttperfを使ってみました[3]。Mac OS X の場合はMacPortsで簡単にインストール可能です。ほかのプラットフォームでもいろいろあると思いますが、割愛します。

まずは、RailsもRubyも関係ない、静的ファイルの場合を測定してみます。ファイルの内容はあとで出てくるRailsのものとおなじです。

% httperf --server=narak.sakura.ne.jp --port=80 --uri=/test.html --num-conns=100 --num-calls=1
httperf --client=0/1 --server=narak.sakura.ne.jp --port=80 --uri=/test.html --send-buffer=4096
  --recv-buffer=16384 --num-conns=100 --num-calls=1
httperf: warning: open file limit > FD_SETSIZE; limiting max. # of open files to FD_SETSIZE
Maximum connect burst length: 1

Total: connections 100 requests 100 replies 100 test-duration 8.095 s

Connection rate: 12.4 conn/s (80.9 ms/conn, <=1 concurrent connections)
Connection time [ms]: min 77.5 avg 80.9 max 88.4 median 80.5 stddev 2.2
Connection time [ms]: connect 27.0
Connection length [replies/conn]: 1.000

Request rate: 12.4 req/s (80.9 ms/req)
Request size [B]: 78.0

Reply rate [replies/s]: min 12.2 avg 12.2 max 12.2 stddev 0.0 (1 samples)
Reply time [ms]: response 27.3 transfer 26.6
Reply size [B]: header 231.0 content 5512.0 footer 0.0 (total 5743.0)
Reply status: 1xx=0 2xx=100 3xx=0 4xx=0 5xx=0

CPU time [s]: user 1.83 system 6.17 (user 22.7% system 76.2% total 98.9%)
Net I/O: 70.2 KB/s (0.6*10^6 bps)

Errors: total 0 client-timo 0 socket-timo 0 connrefused 0 connreset 0
Errors: fd-unavail 0 addrunavail 0 ftab-full 0 other 0

httperfは指定のサイトの指定のページにある回数アクセスして、速度を測定します。今回は100回にしてみました。結果が色々出てますが、とりあえず

Request rate: 12.4 req/s (80.9 ms/req)

ここだけみることにします。これは1リクエストあたり80.9msかかり、1秒間に12.4リクエストの処理が可能ということです。Railsの処理時間をいくらみじかくしても、これより速くなることはないという値です。

ではつぎに、サンプルのtodoリストの速度を測定してみます。

Request rate: 0.5 req/s (1851.1 ms/req)

うーん、100倍は遅くありませんが、静的ファイルの場合と比較すると25倍ぐらい遅いですね。これをベースに、どれぐらい高速化できるか検討します。

まずは実行環境です。実は上記todoリストはdevelopment環境で稼働していました。これをproduction環境に変更します。production環境の方が速い。らしいです。変更の仕方は、

  1. config/database.ymlでproduction環境にもデータベースの設定を書く。
  2. config/environment.rb で「ENV['RAILS_ENV'] ||= 'production'」の行のコメントを外す。

です。これでプロダクション環境になります。ではさっそく、速度を測ってみよう!

Request rate: 0.6 req/s (1675.0 ms/req)

ビミョーに速くなりました!

さらに、今回の例はセッションを使っていないので、セッションを無効にしてみます。無効にする方法はapp/controllers/application.rbを下記のように変更します。

class ApplicationController < ActionController::Base
  # Pick a unique cookie name to distinguish our session data from others'
  # session :session_key => '_Todo_session_id'
  session :disabled => true
end

このときの速度は下記の通り。

Request rate: 0.6 req/s (1752.7 ms/req)

うーん、あまりはやくならない。ていうかむしろすこし遅くなったような。セッションはDBに保存するので、DBが遅い場合はセッションを無効にすると劇的に改善することがあるようです。しかし、さくらのようにデータベースがMySQLで別のサーバになっている場合は効果があまりない。残念。

気を取り直して今回の最後の手段。必要のないモジュールをロードしないようにします。具体的には、config/environment.rbの下記の行のコメントアウトをとります(行頭の#を削除して行を有効にします)。

  # Skip frameworks you're not going to use (only works if using vendor/rails)
  config.frameworks -= [ :action_web_service, :action_mailer ]

このときの速度は下記の通り。

Request rate: 0.9 req/s (1103.7 ms/req)

おおっ、だいぶはやくなった! 静的ファイルと比較して25倍から13倍によくなりました! というわけでみなさんもお試しあれ。焼石に水という気もしますが...

参考文献

  1. Movable Type 3.34 アップグレード, blog kazuking, 2007
  2. 優しいRailsの育て方, 2006
  3. Welcome to the httperf homepage, HP Labs, 2005