« lightboxをカスタマイズしてみよう(中編)- 角丸対応ライブラリとCanvas | メイン | Adobe AIRでAjax!HTMLとJavaScriptでそのままAIRに移行できるサンプル »

ひとりサービスをリリースするまでやっておくこと10個はてなブックマークに追加 livedoorクリップに追加 Yahoo!ブックマークに追加 del.icio.usに追加 イザ!ブックマーク ニフティクリップに追加

Ruby(とRails)を担当している石原です。

ソーシャル「OSを入れた後にインストールする10のアプリケーション」(仮) を作る過程をレポートしています。

今回は、開発はひとやすみにして、サービスをリリースする前にやっておくべき細々としたことを紹介したいと思います。

これらは筆者がひとりサービスをリリースするときに、毎回なんとなく思い出しながらやってきたことで、サービスによっては忘れてしまっているものもあります。

ですから、次からはこれをチェックリスト代わりに使おうと思っています。

Rails に限った話とWebサービス一般の話が混ざっています。ほかの言語やフレームワークを使っている方にも、Rails に限った話を自分の使っている環境に読み替えれば、いくらか参考になるかもしれません。

参考までにこれまでのエントリーはこちらです ↓

  1. つくるぶガイドブログ: Ruby on Rails を使ってひとりでサービスを作ってみよう
  2. つくるぶガイドブログ: ひとりサービスの雛型をつくる(リキッドレイアウト、GetText、Acts as Authenticated)
  3. つくるぶガイドブログ: Rails で楽々ソーシャルブックマークの仕組みを作る
  4. つくるぶガイドブログ: Rails プラグイン acts_as_taggable_redux でタグクラウドを作ろう
  5. つくるぶガイドブログ: ドラッグアンドドロップで並べ替え(Rails + Ajax)
  6. つくるぶガイドブログ: Rails + rcov でテストカバレッジを調べる
  7. つくるぶガイドブログ: capistrano で本番環境にデプロイ
  8. つくるぶガイドブログ: Rails で Yahoo 検索 API + Widgets Tabnav でタブナビゲーション

1. アプリケーションエラーをメールで通知する

サービスをリリースした後、ユーザーが使っていて、アプリケーションエラーが出た場合に即座にそれをメールで通知するようにしておきます。

Rails には Exception Notifier というプラグインが用意されています。


script/plugin install exception_notification

でインストールし、アプリケーションコントローラーに次のように一行追加します。


== app/controllers/application.rb ==

class ApplicationController < ActionController::Base
  include ExceptionNotifiable

environment.rb に通知先のメールアドレスを記述して完了です。


== config/environment.rb ==

ExceptionNotifier.exception_recipients = %w(webmaster@10best.champierre.com)

2. エラーページをカスタマイズする

Production 環境でアプリケーションエラーが発生したとき(500エラー)、または該当するページがないとき(404エラー)には、以下のようなRailsデフォルトのエラーページが表示されます。

500.png

しかし、これではあまりに素っ気ないので、サービスのロゴやフッターを入れたり、トップページへ戻るリンクをつけておきましょう。

修正するファイルは public/404.html と public/500.html です。

3. Javascript を無効にしているユーザー向け対策をおこなう

ユーザーが Javascript を有効にしていること前提で Ajax を使ったりしてこれまで開発してきました。

企業などのサイトであれば、Javascript を無効にしている場合でもちゃんとサイトの機能が動くように開発する必要があるのかもしれません。

しかし、ひとりサービスなら割り切って Javascript を無効にしているユーザーには、「ごめんなさい。Javascript を有効にしてください」といったメッセージを表示するだけで構わないと思っています。

すべてのページが共有しているような、例えば _header.rhtml に以下のように <noscript> タグで囲んだメッセージを入れておきます。


== app/views/shared/_header.rhtml ==

  <noscript><span id="noscript">このサイトではJavaScriptを使用しています。ブラウザの設定でJavaScriptを有効にしてからお使いください。</span></noscript>

4. フッターのコピーライト表示を常に最新にしておく

Copyight ©2007-2008 champierre.com All rights reserved.

のようにフッターのコピーライト表示にサービス開始年と現在の年を記述すると思います。

年を越したときなど、この現在の年の部分をしばらくアップデートし忘れてしまうことがあります。

ずっと忘れてしまっていてこの部分の表示が古いと、サービスが継続しているにも関わらず、「このサービスってもうやってないのかな」とユーザーに誤解を与えてしまいかねません。忘れず更新しておきましょう。

面倒なら、いっそこの部分を以下のようにして、自動的に更新されるようにしてもいいかもしれません。


Copyright ©2007-#{Time.now.year} champierre.com All rights reserved.

5. slow query ログを送るようにしておく

筆者は MySQL をつかっているので、MySQL を例に挙げます。

筆者の経験だと、Rails でアプリケーションのレスポンスが遅いほとんどのケースは、処理に時間がかかるクエリーがある場合です。

» mysql のスロークエリログを集計するの術 - TokuLog 改め だまってコードを書けよハゲ

を参考に、定期的に slow query を自分あてにメールしてチェックしています。

» MySQL :: MySQL 4.1 リファレンスマニュアル :: 4.10.5 スロークエリログ

などを参考にして、事前に MySQL の slow query log を有効にしておく必要があります。

6. DBのバックアップを定期的におこなう仕組みを作っておく

筆者は開発に subversion を使っているため、ソースコードはレポジトリと本番サーバー、それに開発マシンの最低三カ所に分散しているので、ソースコードがなくなってしまう心配はしていません。

しかしデータベースの内容は別です。

あらかじめ、定期的に mysqldump をおこない、べつのサーバーに rsync する仕組みを作っておきましょう。

英語ですが、以下の記事が非常に参考になります。

» Create Incremental Snapshot-style Backups With rSync And SSH | HowtoForge - Linux Howtos and Tutorials

ここに書かれていることをほぼそのまま実行しています。

7. サイトのアクセス解析をおこなう

サービスをリリースして気になるのは、どのくらいのユーザーが訪れてくれていて、ページビューがどのくらいか、ということでしょう。

これを知るにはアクセス解析が必要です。

筆者は、無料で機能豊富な

» Google Analytics

を使っています。

すべてのページが使うレイアウトファイルなどに以下のように、production 環境のときだけ partial ビューに切り出した Google Analytics のタグを埋め込むようにしています。


== app/views/layouts/application.rhtml ==

<%= render(:partial => "shared/google_analytics") if RAILS_ENV == 'production' -%>
</body>
</html>

8. Google Adsense のタグをはっておく

サービスが現金を稼ぐようになれば、もっとたくさんのユーザーに訪れてもらおうと、サイトをより良くして育てる大きなモチベーションとなるでしょう。

もっとも手軽な方法が

» Google Adsense

です。

アカウントを登録し、発行されたタグを Google Analytics でおこなった方法同様、production 環境にだけ表示するようにしておきます。

9. セッションファイルを定期的に削除する仕組みをつくっておく

Rails のデフォルトの設定では、セッションのデータがアプリケーションディレクトリの下、tmp/sessions 以下に ruby_sess.fee2a644dcba97c0 といったファイルに保存されます。

放っておくと、/tmp/sessions 以下でファイルが増え続けるので定期的に削除しておきましょう。

たとえば、cron に以下のように設定して、10日以上前のセッションファイルを削除するようにしておきます。


0 10 * * * /usr/bin/find /appfolder/tmp/sessions/ -name 'ruby_sess.*' -type f -mtime +10 | /usr/bin/xargs /bin/rm -f

10. サイトの死活監視をおこなう

サイトが知らないうちに止まっていたなんてことがないよう、筆者は

» Montastic: the free website monitoring service

という無料サービスを使っています。

定期的にサイトがアクセス可能かどうかをチェックして、もしアクセスできなくなっていたらメールで通知してくれます。

通知先を携帯メールなどにしておけばいち早くサイトダウンを知り、対応することができるでしょう。

まとめ

「ひとりサービスをリリースするまでやっておくこと10個」を紹介しました。

これからサービスを作ろうと思っている方の参考になれば幸いです。

今回の内容を反映して修正したソースコードを以下にアップロードしておきます。

» 10best - Google Code


svn checkout http://10best.googlecode.com/svn/trunk/ 10best

でチェックアウトするか、ブラウザでもリポジトリを閲覧することができます。