Railsでサブドメインを利用するには"subdomain_routes"がおすすめ!!

久々のブログですが、Railsのアプリケーションでサブドメインを利用するのにすごく便利なプラグインの紹介します。

最近は、ユーザ毎や、グループ毎に、サブドメインで分けるサービスが流行っていますよね。例えば、hoptoad http://www.hoptoadapp.com/ とか、lighthouse http://lighthouseapp.com/ とか、今回紹介するプラグインを利用すると、Railsでもかなり手軽にそのようなサービスを実現できます。

Railsサブドメインを扱うプラグインはいくつかあるようですが、僕が見つけて利用しているのは、"subdomain_routes"というプラグインです。

http://github.com/mholling/subdomain_routes

他のプラグインとの一番の大きな違いは、polymophicなルーティングに対応している点だと思います。今回やりたかったことは、あるグループに対して、サブドメインを設定して、そのサブドメインでアクセスするとグループのページを表示するということだったので、これができることは、Railsのレールに乗って開発する上では非常にメリットがありました。

例えば、 @group の has_manyの @entry にアクセスする場合、polymophicなルーティングを利用して以下のように書けます。

(@group = {:id => 1, :subdomain => "vissel"}, @entry = {:id => 2, :title => "勝利!!!"} というような感じとする)

link_to @entry.title, [@group, @entry]

一般的なRESTなルーティングの場合は、 /groups/1/entries/2 などとマッピングされますよね。subdomain_routesを利用すると、 http://vissel.mat-aki.local:3000/entries/2 というようなURLになります。

こう書けることで、RailsのデフォルトのScaffoldに似たように書け非常に分かりやすく、書きやすいです。

他のプラグインでやると

link_to @entry, {:subdomain => @group.subdomain, :controller => ... }

とかしないといけないのが多かったように思います。

さて、次にルーティングはどのように書くかというと、

  map.subdomain :model => :group do |group|
    group.resources :users
  end

今回実現したかったpolymophicなモデルを元にしたルーティングはこんな感じです。Railsっぽいですよね。無理がない。

wwwとかのサブドメインも似たような感じで書くことができます。

  map.subdomain :www do |www|
    www.resources :users
  end

詳しくは、githubのREADMEに書いてあるので、見ていただけるとよいと思います。

http://github.com/mholling/subdomain_routes

ちなみに、僕が利用しはじめたころには、ポート番号を指定して起動するとうまくルーティングしてくれないという不具合があったので、パッチを送ったら取り込んでくれました。

http://github.com/mholling/subdomain_routes/commits/master

初pullリクエスト成功!!!

是非、サブドメインを利用するようなサービスをRailsで開発する際は、"subdomain_routes"をご利用になってはいかがでしょうか???

      • -

最近ブログを書いていなかったので、こんな感じでRailsプラグイン紹介記事でも書いていこうかなぁ。