Twitterでサインインする機能

Ruby on Railsoauthを使い、Ruby on Rails Tutorial: Learn Rails by Exampleのサンプルアプリ「sample_app」*1に、Twitterでサインインする機能も追加してみました。

サンプルアプリ

http://github.com/nkmrshn/sample_app
TwitterOAuth認証を使うので、config/twitter_example.ymlにConsumer KeyとConsumer Secretを設定し*2、config/twitter.ymlに名前変更してください。
このチュートリアルのサンプルアプリは、Gravatarに登録されているサムネイル画像を使用していますが、Twitterでサインインした場合は、Twitterに登録してあるサムネイル画像を使います。これは、Gravatarからサムネイル画像を取得するためのメールアドレスを取得できないからです。その為、サムネイル画像のimgタグを生成するapp/helpers/users_helper.rbを書き換え、各ビューファイルなどもそれにあわせて修正しています。

これ以外に追加した機能など

今週、サンプルアプリに以下の機能などを追加しGitHubにpushしました。

  • ユーザアカウントを更新するページで、パスワードを入力しなくても更新できるようにした。
  • 管理者(adminフラグがtrue)でサインインしている時、ユーザ一覧に表示される自分自身の「delete」リンクを消した。
  • サインインのページで、「Remember me」チェックボックスを追加し、チェック時にはログイン情報をクッキーに、そうでない場合はセッションに保存するようにした。
  • 設定(Setting)ページに「quit」リンクを表示し、退会機能を追加しました。
  • 入会確認メールによるアクティベーション機能
    • メールサーバのユーザ名・パスワードは、config/mail_example.ymlを修正して、config/mail.ymlを作成してください。
    • config/environments/development.rbで、GmailSMTPサーバを指定しています。他サーバを使う場合は、smtp_settingsなどを修正してください。
    • production環境下における、メールサーバの設定は何をしてませんので、必要であれば設定してください。
    • 無効なユーザを削除する機能を追加し、サインアップしてから24時間経過したユーザアカウントは「rake cron」で削除できるようしました。これは、HerokuCron jobsを意識しています。

1.xから3.xへ

Ruby on Railsのバージョン1.xから事情*3により2.xをスキップし、3.xに挑戦した私は、Ruby on Rails Tutorial: Learn Rails by ExampleのTDDによるチュートリアル*4は、GitHubやHerokuのことも書かれてあり、実践的なサンプルアプリを作っていて、とても楽しかったです。
この他、Ruby on Rails Guidesが役に立ちました。特に、config/route.rbに関しては、大きく1.xとは異なりますので、Rails Routing from the Outside Inは熟読しました。
これ以外に、「WEB+DB PRESS vol.58」(技術評論社著、2010年)の「特集1・詳解Rails3」もRails3の起動プロセスやコアライブラリの新機能と変更点がわかり、とても参考になりました。
アプリを1.x(あるいは2.x)から3.xへ移行する方法は、技術系サイトやブログ、雑誌・書籍などに詳しく書かれていると思います。しかし、『プログラマ自身が移行する方法』は、個々の事情が違うこともあり、中々書かれていないのではないでしょうか。この記事が、どなたかの参考になれば幸いです。

今後

チュートリアルのサンプルアプリに機能追加するのは、この程度で止めておきます。ただし、まだHerokuを使ったことがないので、何か簡単なアプリをRuby on Railsで一つ作り、アップしてみるのもいいかなと思っています。

*1:Twitterライクなアプリ。

*2:当然のことながら、Twitter連携アプリの登録が終わっていることが前提です。

*3:2.xが出たころは、iPhoneアプリの開発にシフトしていた為。

*4:Play Frameworkもそうですが、最近のチュートリアルはTDDで開発を進めながら解説する方法が多いのでしょうか。