使用している OS を取得する方法 (JRuby)
OS に併せて処理を若干変更 しなければいけない こともあると思うのですが、JRuby では Ruby での一般的な OS の取得方法である PLATFORM 定数を参照しても、常に ‘java’ が返されてしまうため、実際に実行されている OS が今まで通りの方法では取得できません。
これの解決策としては、Java の System クラスの getProperty メソッドを使う手があります。
java.lang.System.get_property('os.name')
# => 'Mac OS X'
気をつけておきたいのは MRI などで PLATFORM 定数が返す内容とは異なる為、PLATFORM 定数に正規表現を使って OS を検出している場合、必ずしも同じ正規表現で検出できるとは限らない点です。
Filed under: Ruby, スニペット, ソフトウェア開発 | Leave a Comment
debugger というメソッドを呼び出すことでその行からデバッグ用のコンソールを立ち上げてくれる ruby-debug は、C で書かれているネイティブ拡張を含んでいる為に、C によるネイティブ拡張を標準で利用できない JRuby では使えません。
しかし、その C で書かれている ruby-debug の部分を他の方法で実装した gem をインストールすることによって、MRI (本家 Ruby) と同じように debugger を利用できます。利用手順は以下の通りです。
- jgem で、依存関係を無視して ruby-debug をインストール。jgem install ruby-debug –ignore-dependencies
- 後は require ‘ruby-debug’ (もちろん ‘rubygems’ も) をして読み込んでおき、必要なところで debugger メソッドを呼び出す。
気になった点は、jgem でインストールされた ruby-debug-base-0.10.3-java/lib/ 内のいくつかのファイルの権限が 600 になっていた点で、後から手動で 644 に変更しました。
Filed under: Ruby, ソフトウェア開発 | Leave a Comment
今週は “先を行くこと” (”Living on the Edge”) がお休みですが、Rails のコミュニティーは相変わらずなので、情報をお待ちの皆様を暇にさせることはありません。
ライアン・ディーグル (”Ryan Daigle”) が、開発版のいくつかの変更をフォローしており、それらについての素晴らしい解説をいくつか投稿してくれました。
- ActiveSupport::Memoizable を利用した手軽なメモ化 (”Memoization”)
- ネストされたモデルの一括割り当て
- メタクラス・アクセサー (通称: 固有クラス “eigenclass”)
それらよりも特筆すべきなのは、国際化サポート (I18n: “Internationalization”) が Rails のコアに導入されたことかもしれません。スヴェン・フュッフス (”Sven Fuchs”) が、国際化の技術的な詳細と API および、Rails と国際化の歴史について説明しています。国際化サポートは、Rails 2.2 の公開に合わせて完全に安定化させられる予定です。国際化に興味のある方は、Google グループでアイディアやフィードバック、パッチ等を提供してみてはいかがでしょうか。
Filed under: Ruby, ソフトウェア開発, 翻訳, 読み物 | 1 Comment
Outpost で Basecamp が iPhone 対応に
先週末は、ソフトバンクから発売されたアップルの携帯電話というかスマートフォン iPhone (”アイ・フォーン”) が、メディアをにぎわせていました。
そんな iPhone に、Ruby on Rails が生まれたきっかけとなったプロジェクト管理ツール Basecamp を利用する為のアプリケーション、Outpost が8月に提供される様です。
Filed under: iPhone, ウェブ, ソフトウェア, ツール | Leave a Comment
ここのところ開発版 Rails ではさほど大きな変更や機能追加が無かったので、かなり短くなっています。この記事で触れられていない小規模な変更などについては Rails commit logs の方を参照してください。ActionPack のリファクタリングやマルチスレッド化、ActiveModel などもありますが、まだまだ開発途中で、それほど具体的でないので省略します。
要望や批判がありましたら、いつもの様にコメント欄にお願いします。
script/server が Thin に対応
script/server が Thin が使用可能かチェックし、可能であれば使用する様になりました。開発環境で Thin を使用している場合でも、運用環境で Thin を使用している場合でも便利な機能でしょう。Thin を使用する場合は、environment.rb に config.gem 'thin' を追加する必要があります。
この機能のパッチは fluxin の人達が提供してくれました。
String#humanize が語形変化 (”Inflection”) でカスタマイズ可能に
中核拡張 (”Core Extension”) の String#humanize が、テーブル項目の様なアンダーバー付き文字列を読みやすくするのに使われる様になりました。例えば以下の様になります。
"actor_salary".humanize => "Actor salary" "anime_id".humanize => "Anime"
レガシーな項目名を設定していたり、出演者の報酬 (”Actor salary”) という項目に "act_sal_money" といった様な「非人間的」な名前を使っている場合は、"Act Sal Money" が返されてしまい、あまりうまく機能しません。
この語形変化は、単数形、複数形、例外、不可算などと同じように、語形変化法則を指定することでカスタマイズできます。
Inflector.inflections do |inflect| inflect.human /_cnt%/, '\1_count' inflect.human 'act_as_money', 'Actor salary' end
正規表現を使って "click_cnt" を "Click count" できる点は気に留めておきたいところです。
このパッチを提供してくれた ダン・マンジェス (”Dan Manges”) と パスカル・エラート (”Pascal Ehlert”) に感謝。
ハッシュを使って複数テーブルにまたがる条件を設定可能に
ネイクさん (”Pratik Naik”) が、結合 (”JOIN”) されたテーブルにハッシュでそれぞれ条件を設定できる、小規模ながら便利な ActiveRecord の機能を提供してくれました。説明より以下の例を見た方がわかりやすいでしょう。
Anime.all(
:joins => :character,
:conditions => {
:active => true,
:characters => { :gender => 'female' }
}
}
この ActiveRecord クエリーは、アクティブに設定され、キャラクターが女性 (”female”) のすべてのアニメを返します。
あとがき
今回は以上です。小規模な修正や変更でも、もっと紹介して欲しいものがあれば、是非教えてください。
きょうのはま
湿度にやられています。
Filed under: Ruby, ソフトウェア開発, 翻訳, 読み物, 開発版 Rails "edge" | Leave a Comment




