僕は発展途上技術者

[RAILS_APP]/config/boot.rb:26:Warning: Gem::SourceIndex#search support for String patterns is deprecated メッセージを消す

以前の案件の Rails アプリケーションで

# rake db:migrate

を実行してみたところ、うまく動くは動くのだが

[RAILS_APP]/config/boot.rb:26:Warning: Gem::SourceIndex#search support for String patterns is deprecated

という Warning メッセージが出る。

config/boot.rb の26行目

rails_gem = Gem.cache.search('rails', "~>#{version}.0").sort_by { |g| g.version.version }.last

rails_gem = Gem.cache.find_name('rails', "~>#{version}.0").sort_by { |g| g.version.version }.last

に修正すれば、Warning は消える。

» #8729 ([PATCH] Rake rails:freeze:gems loads the last gem that starts with the string "rails") - Rails Trac - Trac

に詳細が書かれている。

In the source for the rake task, the code is calling the search method for the Gem SourceIndex. This method matches anything that has the pattern of the string passed in, in this case "rails" which would include any gem starting with the string "rails." I have patched this code to use the find_name method that returns the exact match of the string that is passed in; in this case, "rails."

search メソッドだと、rails で始まるすべての gem にマッチしてしまうので、"rails" gem だけにマッチさせるよう find_name に変更された、とのこと。

DateHelperJa プラグインで date_select/datetime_select を和暦に対応させる

date_select/datetime_select を日本語表示させる Rails プラグイン DateHelperJa が和暦に対応した。

» DateHelperJa 0.2 リリース - Rails で行こう!

» elm200's date_helper_ja at master - GitHub

和暦対応と Rails 2.2.2 への対応部分で、微力ながら協力させていただいた。

DateHelperJa は、Rails やフリーでの仕事のしかたでいろいろと相談に乗ってくれる僕の師匠、酒井さんが公開していたプラグイン。date_select の部分を日本語化する必要があり、date_select_ja みたいなヘルパーを自分で作ってもよかったのだが、なにかスマートな方法がないかと調べていたところ偶然見つけた。

対応する Rails のバージョンが 1.2.x で、僕は 2.2.2 で対応させたかったのと、昭和、平成などの和暦に対応させたかったので、その部分は自分で書き足し、酒井さんにマージをお願いした。酒井さんは、現在ベトナムにいるにも関わらず快く応じてくれ、Skype とメールを駆使して全く距離の不便を感じることなく、スムーズにコミュニケーションが取れた。

おかげで、Rails プラグインの開発、オープンソースプロジェクトへの貢献、そして GitHub の利用と非常に貴重な体験をさせてもらって感謝している。ありがたく使わせていただきます。

autotest + growl で楽々テスト

もっと早くからやっておけばよかったです。

autotest を使うと Rails でのテスト実行が格段に楽になります。コードを編集しファイルを保存した瞬間、テストを自動実行してくれるので、いちいち開発 <-> テストの各作業の切り替えが必要なく、開発している間中ずっと裏でテストを実行し続けてくれるのです。

さらに mac だと growl と連携できるため、いちいち autotest を実行しているコンソールを開く必要がなく、さらに快適。

以下の情報源を参考にさせていただいたのですが、本日(2008/12/10)時点での各アプリケーションのバージョンの違いや環境の違いからか、そのままではうまく動かないところがありました。メモ代わりに自分の環境でおこなった手順を書き留めておきます。

参考にした情報源

autotest をインストール・設定

sudo gem install ZenTest

でインストールできます。

sudo cp /Library/Ruby/Gems/1.8/gems/ZenTest-3.11.0/example_dot_autotest.rb RAILS_ROOT/.autotest

で、設定ファイルのひな形をRailsアプリケーションのルートフォルダ以下にコピーし、以下のように編集します。

.
.
# require 'autotest/rcov'
require 'autotest/redgreen' <== コメントアウトをはずす
# require 'autotest/restart'
.
.

Growl と連携させる

Growlのページより Growl 1.1.4 をダウンロードします。(Growl がインストールされていなければインストール)

以下の手順で、growlnotify をインストールします。

% cd /Volumes/Growl-1.1.4/Extras/growlnotify
% sudo ./install.sh

次に Growl の設定。Growl の環境設定を開き、以下のように「受信される通知を聞く」と「リモートアプリケーション登録を許可」のチェックを入れておきます。

growl-1.png

表示オプションも次のように変更して、見やすくしておきます。

growl-2.png

このあたりの設定は、

» テストはとことん自動で楽しく...。 - ザリガニが見ていた...。

で書かれているとおりそのままなのですが、「Mac OSX 10.5 Leopardでgrowlnotifyを利用する為に」の手順は飛ばしても私の環境ではうまく動きました。(後述する growlnotify の -H localhost オプションを追加したことが関係するのかもしれません)

通知メッセージとともに表示するアイコンの画像を用意します。

% mkdir ~/.autotest_icons
% cd ~/.autotest_icons
% wget http://blog.internautdesign.com/files/rails_ok.png
% wget http://blog.internautdesign.com/files/rails_fail.png

autotest の設定にもどり、RAILS_ROOT/.autotest の最後に以下を追加します。

この部分も基本的には、

» テストはとことん自動で楽しく...。 - ザリガニが見ていた...。

を参考にしたのですが、4行目の部分が以下のままだと、autotest を実行しても、通知が来たり来なかったりと不安定でした。

system "growlnotify -n autotest --image #{img} -p #{pri} -m #{msg.inspect} #{title} #{sticky}"

» growlとautotestを連携させる - Hello, world! - s21g

を参考にして、-H localhost(赤字部分)を追加したところ、ちゃんと通知されるようになりました。

system "growlnotify -n autotest -H localhost --image #{img} -p #{pri} -m #{msg.inspect} #{title} #{sticky}"

以上で設定終了。

% cd RAILS_ROOT
% autotest

で autotest を実行すれば、テストがおこなわれるたびに結果が Growl で通知されるようになります。

つくるぶガイドブログ: ひとりサービスの雛型をつくる

» つくるぶガイドブログ: ひとりサービスの雛型をつくる(リキッドレイアウト、GetText、Acts as Authenticated)

を書き終えました。

今回は、基本的なレイアウトを決め、英語版もすぐリリースできるよう多言語化の用意もしておき、ログイン機能を整えた上で、ひとりサービスの雛型として次のサービスを作るときにも再利用できるものを作ります。

サイトも作りながらなので、えらい時間がかかります。まあ、楽しみながら書いているので、いいのですが。。

Mac vs Windows のパロディ Ruby on Rails vs PHP のコマーシャル

Hi, I'm Mac もとい I'm Ruby on Rails で始まるコマーシャル。

よくできたパロディです。

Ruby on Rails vs Java -- ad #1 of 4

Ruby on Rails vs PHP - Migrations - ad #2 of 4

Ruby on Rails vs PHP - Organization - ad #3 of 4

Ruby on Rails vs PHP - Changing Database - ad #4 of 4

このなかで、最も共感したのは、三つ目の Ruby on Rails vs PHP - Organization - ad #3 of 4。

(フレームワークを使ってない場合に限り、そして他人が書いたコードの場合は特になのですが)ぐっちゃぐちゃでどこでどんな処理をしているのか見通しが非常につきにくいPHPに対して、整然としていて他人が書いたコードでもだいたいどこでどんな処理がされているかがわかりやすい Ruby on Rails という主張です。

わけのわからん SQL だらけ、と登場する PHP さんは嘆いていますが、僕が始めて他人の書いた PHP のコードを見たときにも同じ思いをしました。

今、Rails の開発案件でちょうど他人の書いたコードを読んでいるところですが、Rails なら構成はいつも同じなので、どこでどんな処理をしているかあらかじめ見当がつき、PHP のときとは段違いの読みやすさです。

Start Mac あるいは Switch to Mac ならぬ Start Ruby on Rails, Swicth to RoR ですかね。(一般的にPHP駄目って言ってるわけではないです。そんなこと言えるほど PHP も Ruby on Rails も知り尽くしているわけではないので。。。単に僕の経験の上では Ruby on Rails 最高、って意見ですので悪しからず。)

gem_server で rails の API ドキュメントを電車(ローカル)で読む

Rails 関連メモです。

以前参加した Rails ワークショップ で教わったこと。

Rails の API ドキュメントは gem_server を起動したあと、http://localhost:8808 で閲覧できる。

さらに、はてな secondlife さんのRDoc をインクリメンタルサーチする greasemonkey スクリプトを使えば超快適。

Rails をやり始めた方は絶対知っておいたほうがいい情報です。

僕は約1年間、ネット上のドキュメントを参照していました。もっと早くに知ってればよかった。。。

Rails の migration ファイルで decimal 型のカラムを作成する

メモ代わりのエントリー。

Google Maps 上にデータをプロットしたくて、緯度と経度を DB に保存したいのだが、Rails の migration ファイルで

  def self.up
    create_table :tests, :force => true do |t|
       t.column :lat, :float
       t.column :lng, :float
    end
  end

として、float 型の lat と lng カラムを用意した場合、誤差が生じて、実際にプロットしたい場所とずれて表示されてしまう。

解決方法はというと、Rails のバージョンが 1.2.2 以上ならば、:decimal 型がサポートされているとのことなので、

  t.column(:price, :decimal, :precision => 17, :scale => 14,
    :default => 0.0, :null => false)

のように指定できる。
(depot/iterate/TaskA_Product_Maintenance - Study Ruby On Rails - Trac より)

rails 1.2.2 を使用できない場合は、

  def self.up
    create_table :tests, :force => true do |t|
    end
    execute "ALTER TABLE pages ADD COLUMN lat DECIMAL(17,14)"
    execute "ALTER TABLE pages ADD COLUMN lng DECIMAL(17,14) AFTER `lat`"
  end

のように execute 文で直接 SQL 文を流せばよい。
(UsingMigrations in Ruby on Rails より)

Rails でデータベースの内容を fixture ファイル(YAML形式)にダンプする

Rails 関連のメモ書きです。

» Dump or Slurp YAML Reference Data (and Fixtures) | Ruby on Rails for Newbies

より、「Rails でデータベースの内容を fixture ファイル(YAML形式)にダンプする」方法。

日本語の解説は

» ヽ( ・∀・)ノくまくまー(2006-02-11) 優しいRailsの育て方

を参照。

db:fixtures:load とあわせて使うと、テスト環境で用意したデータを本番環境に(あるいはその逆)が簡単にできます。

何をするにしても Rails だとスマート!

Rails で最寄り駅Webサービスを簡単に使えるプラグイン MapSimpleApi

Rails プラグインシリーズ第四弾、こんどは Yahoo から離れ、SimpleAPI シリーズの最寄り駅Webサービスを簡単に使えるようにしたプラグインを作りました。

↓ インストール方法や使い方の例はこちら。RDoc 形式で用意しました。

» MapSimpleApi プラグイン

どういったメソッドを用意すればいいかなどクラスの設計にあたっては、PHP の PEAR として公開されている Services_SimpleApi_Station を参考にさせてもらいました。

» 秋元@サイボウズラボ・プログラマー・ブログ: PEAR::Services_SimpleApi_Station-0.1.0をリリース

不具合やドキュメントの誤りなどあれば、このエントリーにコメント・トラックバックをいただければと思います。

参考
» SimpleAPI vol.2 - 最寄り駅Webサービス & 最寄り駅モバイル地図

あと、コードはPHPですが、秋元さんの著書も参考にさせてもらってます。

PHP×WebサービスAPIコネクションズ
秋元 裕樹
ソフトバンククリエイティブ (2006/11/30)
売り上げランキング: 9145
おすすめ度の平均: 3.5

4 マッシュアップ本では一番好き
3 最新Webサービスのとっかかりに。

Rails で Yahoo オークション API を使うためのプラグイン YahooAuctionApi

Rails プラグインシリーズ第三弾、こんどは Yahoo オークション API を使うためのプラグインを作ってみました。

現時点で対応しているのは、REST 経由の商品検索のみです。

インストール方法や使い方の例はこちら ↓

» YahooAuctionApi プラグイン

不具合やドキュメントの誤りなどあれば、このエントリーにコメント・トラックバックをいただければと思います。

参考
» Yahoo!デベロッパーネットワーク - Yahoo!オークション

Recent Entries

Recent Comments

Tags

Archives

Admin