カテゴリ: Ruby on Rails

Image Collector extensionでのDelayed Jobの使い方の歴史

Image Collector extensionのバックエンドはRuby on Railsで書かれたサーバアプリケーションです。Webページ上にある画像群について、ユーザが何らかのクラウドストレージにアップロードすることをポップアップウィンドウから選択したとき、拡張機能からは画像のURL群がサーバアプリケーションに送信されます。URLで示された画像ファイルをクラウドストレージにアップロードする処理は、拡張機能がやっているのではなく、僕…

続きを読む →

OmniAuth-mixiとjpmobileを組み合わせてガラケー対応する方法

RubyのWebアプリでmixiの認証機能を手軽に組み込める「 [OmniAuth-mixi](http://www.eisbahn.jp/yoichiro/2012/11/omniauth-mixi.html)」ですが、標準の機能でもdisplayクエリパラメータを指定することで、スマフォ対応することが可能です。 でも、ガラケー端末向けには、ちょっと工夫が必要になります。これは、mixiのOAuth2対応では、PC&スマフォの認…

続きを読む →

mixiへの認証を行ってくれる「OmniAuth-mixi」を作ってみました

Ruby on RailsやSinatraで作るWebアプリケーションに各種認証機能を手軽に追加できる機構として、「 [OmniAuthシリーズ](https://github.com/intridea/omniauth)」があります。これのmixi版を作ってみました。 [OmniAuth-mixi](http://goo.gl/tMJAG) - Github OmniAuthは、Strategyという形式で任意の認証プロバイダの実…

続きを読む →

僕が考えたRuby on RailsとDojo toolkitで作るWebアプリのデザインパターン

今年の前半、ある限定した範囲で使うツールを以下の構成で作ってました。 Ruby 1.9.3 Rails 3.2 Dojo toolkit 1.7 Railsで何かを作るのが久々だったこと、 [Erlangで最初作ったもの](https://github.com/yoichiro/mixi-staging)をRubyベースでPortingすること、という背景があったのですが、実際に僕がRubyベースで書き直したときの書き方が…

続きを読む →

Google Drive APIをRuby on Railsから叩く方法

DropboxとSkyDriveの各APIを叩いてRuby on Railsアプリからファイルのアップロードする方法を紹介してきましたが、最後はGoogle Driveを紹介してみます。Image Collector extensionでサポートしているGoogle Driveへの画像のアップロードですが、実は連携数はNo.1です。Dropboxが人気なのかな、と勝手に思ってたんですが、やっぱりみんなGoogle大好き!ってことなのでし…

続きを読む →

SkyDrive APIをRuby on Railsから叩く方法

Image Collector extensionでは、Webページにある画像を一気にSkyDriveにアップロードする機能が備わっています。ただし、Chromeから直接SkyDriveにアップロードすることはできないので、僕の自宅で稼働しているRuby on Railsサーバアプリケーションがその役目を担っています。つまり、Chrome上で動作しているImage Collector extensionは「このURLの画像をSkyDri…

続きを読む →

Dropbox APIをRuby on Railsから叩く方法

Image Collector extensionを使うことで、Webページ上にある画像をDropboxにアップロードすることができます。この際、Chrome extensionから直接Dropboxに上げることはできませんので、僕の自宅サーバで動いているRuby on Railsアプリがその処理を代行するようになっています。つまり、Chrome extensionからは「このURLとこのURLの画像を取得して、それをDropboxにア…

続きを読む →

Rubyで重複しない結果を得るための効率的な方法

今まで「Rubyのuniqは遅い」という思い込みをしていました。ある配列から重複を取り除いた配列を作り出すためにはいくつかの方法が考えられますが、何が効率的なのか、実測してみました。 試した方法は以下の4つです。 Arrayuniq Arrayuniq! Set Hash それぞれのコードは最後に掲載するとして、さっそく実測値です。使ったマシンはmacbook air 11'。CPUは1.6GHz Intel Cor…

続きを読む →

「JRuby on Rails」について発表しました

昨日の4月30日、JJUG主催による「クロスコミュニティカンファレンス」にて、「JRuby on Rails」というお題目で話をしてきた。 [![SlideShare](http://static.slideshare.net/swf/logoembd.png)](http://www.slideshare.net/?src=embed) | [View](http://www.slideshare.net/yoichiro/jru…

続きを読む →

ActiveResourceで拡張子なしのURIを発行する方法

Ruby on Rails 2.0から標準搭載されたActiveResource。これを使うと、RESTful APIをActiveRecordのように叩くことができるようになる。自分でURIを作ってopenすることもせず、レスポンスを自分でパースしてオブジェクトを作ることもせず、数行の記述でRESTfulなサービスを利用することが可能になる優れものだ。ActiveResourceの詳細は、 [ここ](http://www.eisbah…

続きを読む →

map.resourcesでcollectionを指定すると.xmlを受け付けない、なんてことはなかった

RESTful APIをRuby on Railsで実装するための重要な機構に、map.resourcesがある。これはconfig/routes.rbファイルで記述され、URIに関してRESTfulなプロトコルに対応した処理のマッピングを自動的に設定してくれる仕組みだ。例えば、 map.resources :articles としてあげれば、「GET /articles/1.xml」というリクエストに対してArticleContr…

続きを読む →

イルカが太陽に取り込まれる日

OSSなデータベースの代表格「MySQL」が、米Sunにより買収されるらしい。 「 [米Sun、オープンソースDBのMySQLを買収へ](http://enterprise.watch.impress.co.jp/cda/foreign/2008/01/17/12031.html?ref=rss)」- Enterprise Watch PostgreSQLの性能向上によってMySQLを選択する理由が次々となくなってきている今、MySQL…

続きを読む →

僕のCode to Test Ratio歴

Ruby on Railsでの開発では、その規模の大小問わず、短期的・長期的問わず、最低限の品質を確保するためにテストコードの作成と自動化は「必ず」行うべきである、という考えを僕は持っている。つまり、テストコードのないRailsの成果物は、非常識きわまりなく、構造計算が一切行われていない建物と一緒。もしそんな開発プロジェクトがあれば、それは国会で取り上げられる程の騒ぎにならなければいけない事態であり、IT業界からご退場願わなければならな…

続きを読む →

Fixtures Visualizerプラグインを公開しました

あけましておめでとうございます。今年もよろしくお願いいたします。 2008年の最初のエントリは、新年の挨拶もほどほどに、この冬休みの宿題の1つの成果報告をしてみよう。4つほどあった宿題だが、結果が出たのは1つのみである。なんとも情けない。。。 さて、昨年さんざん騒がれたRuby on Railsだが、「Javaな感覚」でRailsアプリを作ると、それはすなわち「Java以上の失敗プロジェクト」になる。「Javaな感覚」とは、つまり、…

続きを読む →

railsとrakeは似ている

Railsアプリのディレクトリの中で、テストケースを実行するために、 rake test と打たなければならないところを、 rails test と打ってしまうと、もれなくtestアプリケーションがテスト対象アプリの中にできあがる。 Railsアプリを「正しく」作っている(=ちゃんとテストコードを書いて品質を担保している)人々はきっと経験していることではないか、と想像してみるが、いかがだろうか。。。…

続きを読む →

JRuby1.0.3がリリースされました

先週の土曜日、JRubyの安定バージョンとして、1.0.3がリリースされた。これはマイナーバージョンアップであり、バグフィックスが中心となっている。 [JRuby 1.0.3 Released](http://docs.codehaus.org/display/JRUBY/2007/12/15/JRuby+1.0.3+Released) - JRuby - Codehaus 参考までに、リリースに関する上記の内容を訳してみた。 ---…

続きを読む →

Rails2.0.2がもうあるよ!

JRuby1.0.3がリリースされたので、それにRailsを入れようとした。 ![rails202.jpg](http://www.eisbahn.jp/yoichiro/images/rails202.jpg) なんと、すでに2.0.2がある。この前2.0.1がリリースされたばかりなのに。 というわけで、近日中に2.0.2リリースのアナウンスが正式に来るだろう。…

続きを読む →

丸レクでREST on Railsについて話をしてきました

本日、「 [丸山先生レクチャーシリーズ RESTfulサービス技術の台頭](http://www.c-sq.com/modules/article/article131.html)」で話をしてきた。僕の題目はというと、「Ruby on Rails2.0におけるREST対応」。使用したスライドは下のものである。 [![SlideShare](http://static.slideshare.net/swf/logoembd.png)](…

続きを読む →

あるタグ全体を検証するassert_dom_equalメソッド

RailsにおけるControllerの挙動をテストするために、functionalsテストがある。functionalsテストの対象は各種Controllerクラスのメソッドであり、Webブラウザのリクエストをシミュレートして、それに対するControllerおよび使用されたViewの結果の内容を検証するのが目的。つまり、rhtmlやrxmlなどのViewによってレンダリングされた内容についても、動的に変化する部分に関してはfunct…

続きを読む →

assert_selectで属性値を扱う方法

rhtmlのレンダリング結果を確認するために、assertselectを使用する。この際、要素が持つテキストを確認するのではなく、ある属性の値を検証する必要も出てくるだろう。 ある要素のある属性値を確認するためには、以下のようにすれば良い。 assertselect element, '[name=?]', 'value' 上記の例では、ある要素elementに対して、それが持つ"name"属性の値が"value"であることを確認…

続きを読む →

「Ruby on Rails2.0におけるREST対応」のハンズオンが公開されました

来週の18日に控えている丸レクで使用する資料が、今日から以下のサイトで公開されている。 丸山先生レクチャーシリーズ2007-2008 「 [第2回「RESTfulなサービス技術の台頭](http://www.c-sq.com/modules/article/article131.html)」 僕の資料は、「第3セッションのハンズアウト」である。興味のある方は、ぜひ見てみて欲しい。もちろん当日会場に来てもらえると、もっと嬉しい。…

続きを読む →

Ruby on Rails 2.0がリリースされました!

見落としていたのだが、すでにRuby on Rails 2.0が、12月6日にリリースされていた。現在は、すでに2.0.1になっている。 [root/tags/rel2-0-1](http://dev.rubyonrails.org/browser/tags/rel2-0-1) - Rails Trac 今日時点で、例えば「jruby -S gem install rails --include-dependencies」すれば、2.…

続きを読む →

リソースが3段以上ネストしたときのmap.resourcesの書き方

RESTfulなサービスを実装するとして、対象リソースがその他のリソースとの従属(親子)関係があるときに、Ruby on Railsではmap.resourcesをネストして記述することが可能になっている。例えば、部署(Division)に所属する社員(Employee)のリソース定義であれば、 map.resources :divisions, :pathprefix = '/api' do |divisions| division…

続きを読む →

ActionController::Resourcesを翻訳しました

「 [Active ResourceのREADMEを翻訳してみました](http://www.eisbahn.jp/yoichiro/2007/11/activeresourcereadme.html)」エントリでRESTサービスを叩くためのActiveResourceに関するドキュメントを翻訳したが、またもや勉強のために、今回はActionController::Resourcesに関するドキュメントを翻訳してみた。ActionCon…

続きを読む →

Active ResourceのREADMEを翻訳してみました

Rails 1.2から搭載され、Rails 2.0でいくつか改良されたActive Resource。これを使えば、RESTなWebサービスを簡単に利用できるようになる。これのREADMEが「 [ここ](http://dev.rubyonrails.org/svn/rails/trunk/activeresource/README)」にあるのだが、勉強がてら日本語に翻訳してみたので、公開してみようと思う。 [ActiveResourc…

続きを読む →

RBCドリコムノック(長崎)に参加してきます

車酔いを恐れず,果敢にブログエントリを試みる。 ギガプライズ勤務最終日だった昨日から一夜明け,今日は「 [Ruby ビジネス・コモンズ ドリコム・ノック](http://qwik.jp/rbc/16.html)」のお手伝いを行うため,九州に旅立つ。福岡には昨年いやというほど行ったのだが,長崎は初めての上陸。このエントリは,大宮から羽田空港に向かうバスの中で書いている。 「 [こみゅすけ](http://commusuke.eisbahn…

続きを読む →

「24」風Ustreamプレーヤー,題して「Ustream24」

外国ドラマの「24」風な感じで,Ustreamを見るためのサイトを作ってみた。 題して,「 [Ustream24](http://ustream24.eisbahn.jp/)」。 ![ustream24.jpg](http://www.eisbahn.jp/yoichiro/images/ustream24.jpg) ま,単にUstreamを四方に置いて,真ん中に黄色くLCD的なデジタル時計を置いただけ。ただそれだけ。しかし,何故かこ…

続きを読む →

Timeオブジェクトに対するto_jsonメソッド呼び出し

Ajaxを多用したアプリケーションにおいても,Ruby on Railsの採用が今後どんどん増えていくと考えられる。Ajaxと言えば,言葉の通りXMLを連想するかもしれない。しかし,サーバから受け取った後の処理効率を考えると,JSONでやり取りを行ったほうがトータルで都合が良い。近年では,XMLではなくJSONを利用する機会が多いと考えられる。 Ruby on Railsの1.2から,全オブジェクトに対してtojsonメソッドを呼び出…

続きを読む →

ActiveRecordの属性に「?」で問い合わせる

ActiveRecordオブジェクトは, class Employee < ActiveRecord::Base end とするだけで,上記で言えばemployees表が持つ各種列に対応する属性が利用可能になる。例えば,employees表にname列が定義されていたとすれば, employee.name = 'Yoichiro' p employee.name というように,nameアクセッサを利用することができる。とても簡単…

続きを読む →

結局lighttpdからmungrel_clusterに移行

「 [lighttpdで稼働しているrailsアプリでリダイレクトが効かなくなった](http://www.eisbahn.jp/yoichiro/2007/07/lighttpdrails.html)」件だが,結局原因は判明せず。どうもyumの自動更新によってlighttpdがバージョンアップされたらしく,そのタイミングで動作がおかしくなった模様。 apacheとlighttpdの組み合わせは,mongrelの自動機能の設定を行うのが…

続きを読む →

lighttpdで稼働しているrailsアプリでリダイレクトが効かなくなった

「 [約5時間かかったRuby on Railsの実行環境構築](http://www.eisbahn.jp/yoichiro/2007/07/5rubyonrails.html)」で頑張ってみたRails運用環境だが,今日になって不具合が出てしまった。昨日までは元気に動いていたのに。。。 昨日の夜に,配置してあるRailsアプリに機能追加を行った。実際には2つRailsアプリを配置してある。形態は「apache2 modproxy …

続きを読む →

updated_atを自動でセットしないようにする方法

データベースに格納される情報は,「作成日時」や「更新日時」を付与することが多い。ActiveRecordでは,作成日時や更新日時について,暗黙的にセットする機構が標準で備わっている。例えば, class CreateEmployees 'updatedat DESC') end end lastupdatedemployeeメソッドを呼び出すと,最後に更新されたEmployeeオブジェクトを1件取得できる。さて,これをテストするこ…

続きを読む →

ActiveRecordに置き換えられたfind_allメソッド

ActiveRecordは,Rubyの動的な性質を存分に使って作られた,非常に利便性の高いライブラリだと思う。ActiveRecordをJavaにコピーすることは,きっとできないだろう。しかし,時に初心者(今の僕)は,その動的な特徴故に,期待した通りの動きにならずに苦戦することが多い。 ActiveRecordを使えば,モデル間の関連とそれに関する操作を数行で定義することができる。例えば,部署を表すDivisionモデルと,部署に所属…

続きを読む →

JavaでいうdeprecatedはRubyではobsoleteというらしい

遥か昔に制定した法律や決め事が今日のご時世に合わずに支障を来しているように,プログラムにおいても,過去に作ったものについて現在使って欲しくないという状況がしばしば起きる。実際のプログラミング環境では,「使って欲しくない」という作者の意図が何らかの形でプログラマに伝わらなければならない。 Javaでは,ソースコードに"deprecated"というキーワードを埋めておくことで,プログラマに「このメソッドは非推奨だから使ってはいけません!」…

続きを読む →

options_form_collection_for_selectの初期選択が効かない

アプリケーションでは,データベース内に格納された各種マスタの一覧から1つ選択する,という行為が良く行われる。Webアプリケーションにおいて,マスタの内容を一覧表示する際は,selectタグとoptionタグの組み合わせが多く使われる。Ruby on Railsのactionpackに含まれるactionviewヘルパーには,あるモデルの集合からoptionタグのセットを生成してくれる便利な機能が提供されている。それが,optionsfr…

続きを読む →

railsでテストが実行できなくなった

快調にRuby on Railsなアプリを開発。そして振り返ると,なーんにもテストコードを書いていない自分に気がつく。Rails上でのテストコードの記述は好きな部類に入るため,テストを書かねばと思い立つ。 あるモデルに対するテストを1メソッド作り,「rake test:units」を実行した。すると, ./test/unit/../testhelper.rb:18: undefined method usetransactionalf…

続きを読む →

assert_selectでCSSセレクタを使う

Ruby on Railsアプリケーションの統合テストは,ActionController::IntegrationTestクラスを継承して作成する。統合テストは,ユーザが行うアクションを想定してコードでシミュレーションを行い,結果としてアプリケーションが正しく振る舞うかどうかを確認するためのテストである。一般的にWebアプリケーションの場合は,操作の結果としての出力の形式がHTMLという比較的複雑な文字列であるため,正しい動作を行った…

続きを読む →

YAMLファイルの読み込みと場所の指定

Ruby on Railsアプリケーションにおいて,実行環境依存で設定を変更したくなるときがある。昨日一応の完成を見た僕の処女作では,最初にログインする際のパスワードについて,正解のパスワードをデータベースからではなく,ファイルから読み込ませるようにしたかった。しかし,IntegrationテストやFunctionalテストのコード中にログイン処理のテストをコーディングする際に,正解のパスワードを記載しなければならないため,produc…

続きを読む →

datetime型を持つモデルのテスト

Ruby on Railsにおいて,テスト環境がとっても気持ちがいいと「前のエントリ」で書いたが,実際にテストケースを書き始めると,やっぱり知らないことがいろいろと出てきて,サクサクっとはいかない。もちろん,それは俺がバンビーノだからなのだが。。。 datetime型な列があるappointments表のAppointmentモデルをテストすることを考える。fixtureには,こんな感じで記述するだろう。 first: id: 1 …

続きを読む →

Railsアプリを本番環境に配備する際の注意点

MacOS Xで作成したRuby on Railsアプリケーションを,今日Fedora Core 6に配備することにチャレンジした。もちろん一発でうまくいく訳もなく,いくつかハマり箇所があった。同じミスを繰り返さないためにも,ここに残しておく。 [rubyコマンドのパス] 作成したRailsアプリを,「 [約5時間かかったRuby on Railsの実行環境構築](http://www.eisbahn.jp/yoichiro/2007/…

続きを読む →

「%>」と「-%>」の違い

Ruby on Railsで採用されているERB(eRubyの実装)。これによって,HTML内にRubyコードを記述することで,動的なコンテンツを出力することが可能となっている。 いくつかのサイトや書籍を見ながらRoRアプリケーションを試していたところ,以下の点に気がついた。 「%」と「-%」,何が違うのか? マイナス記号が付いている場合と付いていない場合がある。例えば, 'edit', :id = user.id -% とい…

続きを読む →

Ruby on Railsのテスト環境が気持ちいい

Javaな世界に10年以上どっぷりと浸かってきたが,Ruby on Rails(RoR)をやっていると「良く考えられているなぁ」と感心してしまう箇所が随所に見られる。とかくScaffoldやActiveRecordに関するコーディングに目が行ってしまいがちだが,僕個人的にはテストに関する環境が最も「おぉ」と感じている。 言うなれば,「JUnit + DbUnit + Cactus」な環境が標準で整備されている,ということだ。 JUn…

続きを読む →

約5時間かかったRuby on Railsの実行環境構築

ここ数日はJavaからほとんど離れて,Ruby on Railsのお勉強に多くの時間を割いている。確かにRoRがこんだけ騒がれる理由がわかる。railsの内部処理に踏み込むと宇宙な世界だが,railsの上でアプリケーションを書いて単体テストをしている分には,この上ない気持ちにさせてくれる。 しかし,RoRアプリの運用環境構築に5時間も苦戦するとは思わなかった。 RoRの運用環境は,現在では以下のパターンがあるらしい。細かく分ければ,もっ…

続きを読む →

今日もPythonは僕に冷たい

ちょっと興味が出てきたので,軽くテスト。 Python 2.3.5 (1, Jan 13 2006, 20:13:11) [GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin Type "help", "copyright", "credits" or "license" for more information. class Foo(object): ... de…

続きを読む →

僕のRuby第一歩目

誠に恥ずかしながら,今日初めてRubyコードを書いた。 Weclome to Darwin! beloved:~ yoichiro$ irb irb(main):001:0 print "test" test= nil irb(main):002:0 "Hello world!"ではなく,"Hello Ruby!"でもなく,"test"。 うーん,センスなし。orz…

続きを読む →