カテゴリ: Ruby on Rails

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails , Google Drive API/SDK

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby 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/jruby-on-rails-383150?src=embed) …

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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陣営にとっては嬉しいニュースなんじゃないかな。これによって、…

Read more →

僕のCode to Test Ratio歴

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

railsとrakeは似ている

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

先週の土曜日、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 参考までに、リリースに関する上記の内容を訳してみた。 --- JRubyコミュニティは、JRuby1.0.3のリリースを…

Read more →

Rails2.0.2がもうあるよ!

· Ruby on Rails

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

Read more →

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

· Ruby 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)](http://www.slideshare.net/?src…

Read more →

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

· Ruby on Rails

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

Read more →

assert_selectで属性値を扱う方法

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

見落としていたのだが、すでに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.0.1一式を得ることができる。ちなみに、僕のmacではヒープ…

Read more →

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

· Ruby on Rails

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

Read more →

ActionController::Resourcesを翻訳しました

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

結局lighttpdからmungrel_clusterに移行

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

options_form_collection_for_selectの初期選択が効かない

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

assert_selectでCSSセレクタを使う

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

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

· Ruby on Rails

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

Read more →

今日もPythonは僕に冷たい

· Ruby on Rails

ちょっと興味が出てきたので,軽くテスト。 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): ... def p(self): ... pri…

Read more →

僕のRuby第一歩目

· Ruby on Rails

誠に恥ずかしながら,今日初めて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…

Read more →