« 前のエントリー | main | 次のエントリー »

mod_rewriteを使ったiPhone対応 (2008年07月12日)

iPhone用のサイトを作る際のTipsとして。

HTMLの書き方については色々なサイトで紹介されているので、
そちらを参照していただくとして、
iPhone用のページとPC用のページの振り分けについてなど、
弊社で運営している30min.の設定の一部を例として紹介させていただく。

GoogleAnalyticsなどでiPhoneのアクセスのみを集計したいため、
iPhoneとPC用のURLを分けたいが、トップページは同じURLにしたいので、
http://30min.jp/ にアクセスするとiPhoneは http://30min.jp/iphone/
以下にリダイレクトするようにした。

振り分けの設定はhttpd.conf内に記述することにした。
mod_rewriteを利用して次のような設定をしている。

    RewriteEngine On

    RewriteCond %{HTTP_USER_AGENT} ipod|iphone [NC]
    RewriteRule !^/(iphone|images|javascripts|stylesheets) http://30min.jp/iphone [R=301,L]

画像、JavaScript、CSSは共通のディレクトリを使用するが、
それ以外のページはHTTP_USER_AGENTにipod、iphone(大文字小文字を区別せず)
を含む場合は /iphone へリダイレクトするようにしている。

    RewriteCond %{HTTP_USER_AGENT} !(ipod|iphone) [NC]
    RewriteRule ^/iphone http://30min.jp/ [R=301,L]

逆にPCからの /iphone 以下へのアクセスはPC版のトップへリダイレクトさせている。

Ruby on Railsで開発している場合には、
負荷対策としてページキャッシュを使うことが多いと思う。

プログラム中にリダイレクトの処理を書く方法だと、
静的なページとして保存するページキャッシュが使えないのだが、
httpd.conf中に振り分けを記述してしまうことで、
Railsのページキャッシュを有効に活用することができるので便利だ。

mod_rewriteには他にも便利な使い方がある。
30min.ではエリアを選択した際、そのエリアをCookieに保存して、
次回トップページにアクセスする際には、
Cookieに保存されているエリアにリダイレクトするようにしている。
この設定も次のように記述できる。

    RewriteCond %{HTTP_COOKIE} c_default=town%3A(\d+) [NC]
    RewriteRule ^/$ http://30min.jp/town/%1/1 [R=301,L]

    RewriteCond %{HTTP_COOKIE} c_default=station%3A(\d+) [NC]
    RewriteRule ^/$ http://30min.jp/station/%1/1 [R=301,L]

Cookieがない場合のトップページはブラウザがキャッシュしてしまうと、
Cookieを持った後に以前のページを表示してしまうことがあるので、
トップページのテンプレート(rhtml)には次の記述を入れておく。

    <% if request.env["REQUEST_URI"] == "/" %>
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Cache-Control" content="no-cache" />
    <meta http-equiv="Expires" content ="Thu, 01 Dec 1994 16:00:00 GMT" />
    <% end %>

便利な使い方ができるので、工夫して色々試してもらいたい。
苦労して振り分け処理をしている箇所など、
案外簡単に解決できたりすることがあったりする。


第一回ジオメディアサミット (2008年03月22日)

シリウスラボさん主催の第1回ジオメディアサミットに参加してきた。

ヤフーマップの開発者や、MSN Live Search Mapsの開発者のパネルディスカッションでは、
航空写真の掲載について個人情報についての考え方やポリシーなど、
興味深い話を聞くことができたし、
オープンソースGISで有名なオークニーさんのプレゼンも、
普段なかなか知ることのできないツールの紹介が満載で有意義だった。

そして面白かったのがライトニングトーク。
位置情報関連について一人5分のプレゼンなのだが、
エッジの効いた方々ばかりで、最先端の色々な技術の話が聞ける上に、
5分というスピード感が良くて面白かった。

位置情報系のサービスや地域情報サービスを開発している方は、
普段Webで調べていてもなかなか出てこないような情報が聞けるので、
一度参加してみることをオススメする。


懇親会では色々な方と話ができ、非常に有意義な時間だった。
日程が許せば、次回も是非参加したいなと思う。


自分への投資 (2008年01月20日)

昨年末から久しぶりに開発モード。

Ruby on Rails関連の書籍を色々探していたのだが、
「簡単に作れる!」ことをウリにしたものが多く、
凝ったことをやろうとするには少し物足りない。

そんな中見つけたのが「RailsによるアジャイルWebアプリケーション開発」。
Active Recordの説明だけで100ページを費やしているなど、
詳細について書かれていて、痒い所に手が届く内容となっている。

Railsを勉強し始めて基本的な使い方を覚えてきて、
では実際に業務で使ってみよう、と考えている方にはオススメする。

また、Ajaxとの連携については、
「Ajax on Rails」が非常によくまとまっている。
実際に作業をしている際、一番頻繁に開いているのはこれかもしれない。

新しい技術を勉強する際には、一冊の本やある特定のドキュメントに頼るより、
色々な情報ソースから幅広く集め、適材適所で利用していくことが、
上達への近道だと思っている。


書籍代や勉強時間など捻出するのに苦労するが、
それに見合ったリターン(知識や技術)が得られればと思って、
時には自分への投資をしてみるのも良いのではないか?


Ruby on Railsの世界 (2007年11月05日)

最近Ruby on Railsの魅力の虜になっている。

生産性が良いというだけでなく、「楽しい」という評判をよく聞いていたが、
使ってみるまで正直半信半疑だった。

ただ、実際使ってみると、綺麗なコードになるし、
prototype.jsとの相性の良さもあって、「楽しい」という言葉がぴったり来る。

もちろん便利なことばかりではなく、最初は構造に慣れるのに苦労したし、
書籍も初心者向けの「簡単にできる!」ということをウリにしたものが多く、
少し凝ったことをやろうとすると、手法を調べるのが大変だったりするが、
それでも使いたくなる便利さと楽しさがある。

もう少し書籍やドキュメントが充実してくるともっと便利になりそうだ。


Ruby on Railsに限らず、新しい手法はなるべく試すようにしている。


昔、駆け出しのプログラマーだった頃、
CGIプログラムを上手に書けるようになって来たと思っていたら、
Apacheモジュールを使っている人に話を聞き驚いたことがある。

当時はプログラムの中でできることを基準に考えていたのが、
それ以来、80番ポートで受けたデータをどう処理するかというように、
もっと広い視野で考えられるようになった。

また学生時代には、ユークリッドの互除法を知った時、
世の中には便利な手法が色々あるのだと教えられた。


そういう経験があって以来、
自分の知っている方法が最善だと思わないようにして、
色々な手法を試すようにしている。


適材適所だと思うので、「Ruby on Railsを使うべきだ」と言うつもりは全くないが、
よく考えられたフレームワークだと思うので、
時間が許せば試してみてはいかがだろう?


※Ruby on Railsの実験を兼ねてリニューアルしたレストラン検索サイトはこちら