Archive for 7月, 2009

Rails ActiveRecordのテストコード

7月 26th, 2009

ActiveRecordって

WEBアプリケーションを高速開発するのに貢献した、Ruby On Railsを書いた人がどのようなコードを書いたのか勉強したいと思った。

ActiveRecordのコードを全体像を見てみました。 ActiveRecord自体の説明は下記参照

ActiveRecord (以下 AR) は RLR 第 4 回 に取り上げられたように、Ruby での O/R マッピングライブラリのひとつです。 AR を使えば、簡単かつ効率的にリレーショナルデータベース上の情報を Ruby オブジェクトとして扱うことができます。その理論的なところは P of EAA: Active Record を見てください。 参照:RubyOnRails を使ってみる 【第 3 回】 ActiveRecord

コードステップを計る

まずは、コードステップ数。 Project AmaterasのNetBeans対応ステップカウンターに感謝します! 私は、NetBeansを使っていますが、Eclipseにも対応してますよ。

CAP000012

Netbeans内で、実装コード、空行、コメント行がフォルダ単位で調べられます。

activerecord-2.3.2 実装コード

  • 57ファイル、実効コード9.9KStep、コメント7.2KStep
  • 1ファイルあたり、実効コード173Step、コメント126Step

テストコード

  • 188ファイル、実効コード19.7KStep、コメント0.5KStep
  • 1ファイルあたり、実効コード104Step、コメント3Step

驚いたことに、実装コードとほぼ同じぐらいコメントを書いている。 コード1行に対してコメント1行ってすごいね。 これは、Rdoc 使ってドキュメントも作っているからこれぐらいの行数になるんですね。

更に、びっくりしたのは、テストコード!。 これ、実装コードに対してテストコードを2倍書いています。 しかも、テストコードのファイル数は3倍以上で作っています。 少ない行数で沢山のテストコードを細かく実装しているんですね。 テストコードにコメントは作っていませんね。 テストコード自体を文章で説明しなければいけないテストコードは書くなということでしょう。 簡潔に誰が見てもどのようなテストを実施しているのかわかるテストコードを書いています。 また、書く必要があるときは、実装コードの中に集約しているのでしょう。そうすれば、RDocの中に仕様を集約できるからね。

定量的に品質を考える重要性

最近僕もあるプロジェクトをTDDで開発しています。 上記、ActiveRecordのテストコード作成と実装コードの比率は参考になりました。 テストファーストの考え方とか、実装するコードのステップ数とか、何を何のために作っているかを意識しながらプロジェクトを進めていくことは大事だと思います。 改めて、品質を考える上でも定量的にコーディングをとらえることは重要だと思いました。

CentOS 5に、ZabbixAgentをインストールする!

7月 12th, 2009

サービスを止めないために

一度作ったサービスを止めないためにはサーバ監視が大事です。 複数のサーバーを使っているサービスもあります。 その上、運営していくサービスが多くなると人的な監視にも限界があります。 そんな時に、『Zabbix監視サーバ』を使います。 これが完全無料の監視サーバです。 アプリの監視、インフラの監視、サーバ監視実績などサービスが問題なく稼動していくための監視体制を作るのに寄与します。 大規模のインフラも監視できるソリューションを持ち、分散監視や、10000を超えるサーバ監視も可能です。 監視サーバで有名なNagiosと比べグラフィカルで見た目がグッドです。

今回は、さくらインターネット専用サーバCentOS 5に、ZabbixAgentを入れてみました。

これにより、Zabbixサーバに複数のサーバ監視情報を集約できます。

ZabbixAgentインストールメモ

wget http://www.zabbix.jp/rpms/rhel5/i386/zabbix-agent-1.4.5-1.el5.i386.rpm
rpm -ivh zabbix-agent-1.4.5-1.el5.i386.rpm

/etc/zabbix/zabbix_agentd.confの下記1行のコメントされていることを確認する。

#ListenIP=127.0.0.1

また、下記Serverの設定に、ZabbixサーバのインストールされているグローバルIPを設定

Sever=127.0.0.1,your.zabbixserver.com

zabbix-agentサービスを起動します。

service zabbix-agent start
chkconfig zabbix-agent on

Agentを入れたサーバ内で下記を実行すると無事に接続できる

telnet localhost 10050

外部のサーバからもアクセス出来ることを確認

telnet your.zabbixagent.com 10050

無事に接続完了!

手軽に複数サーバーを監視できます

手軽に複数サーバーを監視できます

参考

Zabbix監視サーバ http://www.miraclelinux.com/support/?q=node/313

ストリートビューなみの衝撃!『Googleブックスbeta』

7月 11th, 2009

また、Googleさんやばいです!

ストリートビューでもビビりましたが、この書籍検索もすごいです。

普通の書籍検索って、書籍のタイトルや短い書評の文章にヒットしなければ見つかりませんでした。

しかし、このGoogleブックスは、本文の文章のどこかにヒットすればその本が見つかります。 これって、今までの書籍を探す探し方とまったく違う感覚を味わえます。 技術的にも、膨大な書籍の膨大な全文を検索してるって、すごいです。(ここでもBigTable使ってるんでしょうね)

申し訳ないけど、Amazonの検索なんて「比」にならない。

Amazonさんは優等生で、Googleはアナーキー!?

しかも、クールなのは、Googleさんは、ビジネス的にも、ギリギリのところで勝負しています! 権利の問題で裁判にもなっているんですが、出版社から承諾をもらっていないのに図書館とかの本を、片っ端からスキャニングしてOCRかけてDB化してます! だから、出版社から許可をもらっていない書籍に関しても勝手に検索にヒットします! もちろん書籍を全部WEBで見せる事は出来ないので、一部を抜粋して、見せちゃってます。 更に、Googleのこの強腰は、主業が広告事業で収益を作っているからというのも大きく後押ししてますね。^^v この芸当は、書籍販売を主業にしている、Amazonさんには絶対にマネできませんよね。

私は、このGoogleの、どこの会社にも依存せず、常に志(Googleの理念)を持ち、強く成長しているのが好きです。

そんなことを考えながら、Googleブックスを使ってました。 皆様もどうぞお試しあれ。。

http://books.google.co.jp/

試しに「梨木」をGoogleブックスで検索

ちなみに、

Amazonで「梨木」で検索しても、著者が「梨木香歩」さんの本しか出てきません orz.

NetBeans IDE 6.7のRubyでコードカバレッジが気持ちイイ!

7月 9th, 2009

フラクタルな品質

最近ソースの『品質』が気になる! 20代だったら気合で作っていたな。気合でデバッグして。 だけど、やはり足場あためないとね。コードレベルでも。 すべてはフラクタル構造なのでコードレベルから固めていかないとね。

コードカバレッジ

RubyでコードカバレッジをRcovを使ったが、もっと簡単に出来ないかと調べていた。

やはり、NetBeans IDE 6.7のリリースに含まれていそうとのこと、早速インストール。

すげ~、簡単にRubyのカバレッジが取得できます!^^v しかも、ソース行単位で実行されたかされてないか緑と赤の背景色で一目でわかります。 エンジニアは左脳に寄りがちだから、 このような感覚的なツールは使っていて気持ちいいです!

NetBeans IDE のダウンロードはこちらから。

Restful_authenticationとforgot_passwordで楽々ユーザ認証!

7月 3rd, 2009

Railsのプラグイン『restful_authentication』と『forgot_password』で楽々にユーザ認証部分が作れます。 restful_authenticationは、ユーザ登録やEメールを送ってEメール上のリンクをクリックしないと本登録にならないようなフローなども設定できます。 ログイン処理と、ログインされていないと表示出来ない設定もページ単位で簡単に出来ます。 ここらへん、まじめに作ると結構骨が折れますね。。。

こんな時に、『restful_authentication』と『forgot_password』を使うと汎用性の高いユーザ認証部分が手軽に作れて便利ですよ!

下記、インストールメモです。

ローカル環境上でgitコマンドの準備

私はWindows環境だったので下記URLからGitをダウンロードしてインストール
http://code.google.com/p/msysgit/downloads/list

RailsプロジェクトへPluginの導入

Railsプロジェクトのルートで、下記コマンドを実行
script/plugin install git://github.com/technoweenie/restful-authentication.git
script/plugin install git://github.com/greenisus/forgot_password.git
上記Netbeansからでは入らなかったのでコマンドで実行

ユーザ認証コードをGenerate

script/generate authenticated user sessions --include-activation
script/generate forgot_password forgot_password user
出力されるコードが一部間違っているので下記修正 # 50行目をコメントアウト
#PasswordMailer.deliver_reset_password(@user)
ForgotPasswordMailer.deliver_reset_password(@user)
routeも勝手に追加してくれます。 しかし、下記Routeは追加が必要です。
map.activate '/activate/:activation_code', :controller => 'users', :action => 'activate', :activation_code => nil
ApplicationControllerに下記1行を追加
include AuthenticatedSystem

DB作成

rake db:migrate

ログイン画面を開く

http://localhost:3000/loginをアクセスしたらRouteエラーが出た
ActionController::RoutingError in Sessions#new
Showing app/views/sessions/new.html.erb where line #3 raised:
session_url failed to generate from {:controller=>"session", :action=>"show"} - you may have ambiguous routes, or you may need to supply additional parameters for this route.  content_url has the following required parameters: ["session", :id] - are they all satisfied?
Extracted source (around line #3):
rake routesを実行してRoutesの設定確認を行った。 ログイン画面の、下記パスを認識してくれないので、書き換えました。
<% form_tag session_path do -%>を <% form_tag :controller => 'sessions', :action => 'create' do -%>に書き換えた
無事に会員登録(仮登録、本登録)、ログイン認証、パスワード再発行まで自動で出来ました!

これは、会員系のサービス作るのであればすごく手軽に作れます。

皆様もお試しください。
参照:http://www.func09.com/wordpress/archives/348