Fire Engineering

化学の研究者→消防士→ITエンジニア(2016年11月〜)

初心者が「パーフェクトRuby on Rails」でイベント告知アプリケーションを作ったときの記録

 Ruby on Railsの参考書の中には、いくつか有名なものがありますが、私は最近「パーフェクトRuby on Rails」を読んでいます。この本は、全くRailsに触れたことがないという方には少し内容が難しいですが、Railsの入門書やチュートリアルをやって、少しずつわかってきたよっていう方がステップアップのために選ぶ本として最適だと思います。内容は、Railsの概要やMVCの説明に始まり、テストの話、インフラの話、実践的なモデルの使い方など、盛りだくさんです。  この本の6章には、「Railsアプリケーション開発」という章があり、イベント告知アプリケーションを作りながら、Webアプリケーション開発をする上で必要となる基本的な機能の実装方法を学んでいきます。今回は、ゼロからプログラミングを始めたばかりの私が「パーフェクトRuby on Rails」でアプリケーションを作ったときの記録と、本の書評を書いていきます。

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

目次

イベント告知アプリケーションって?

 本の中では、作成するアプリケーションをイベント告知アプリケーションと呼んでいますが、機能的にはほぼ掲示板アプリです。機能をまとめると以下のような感じです。

・ユーザはTwitterアカウントでログインできる。

・ログインしたユーザはイベントを作成できる。

・すべてのユーザは作成されたすべてのイベント情報を閲覧できる。

・ユーザは自分で作成したイベントであれば、編集・削除ができる。

・ユーザはイベントに参加表明ができる。

f:id:hirotsuru314:20160620182307p:plain



f:id:hirotsuru314:20160620182314p:plain

アプリケーション開発を通じてできるようになること

 「パーフェクトRuby on Rails」でイベント告知アプリケーション開発を終えると習得できることは以下のような感じです。

・Bootstrapの導入と適用

・OAuthを利用してTwitterアカウントでログイン機能を作る

・ログイン状態の管理

・基本的なCRUD(Create-Read-Update-Delete)機能の実装

・ページネーション機能を作る(Kaminariを使う)

・検索機能を作る(ransackを使う)

・画像のアップロード機能を作る(carrierwaveを使う)

これだけできれば、ある程度簡単なWebアプリケーションは作れるんじゃないかなーという気になれます。

開発メモ

OAuth認証はかなり重要

 OAuthって何?という方もおそらくOAuthという技術には必ず触れたことがあると思います。例えば、 f:id:hirotsuru314:20160620182301p:plain

 このように、何かのアプリケーションにログインする際に、Facebookアカウントなどでログインしたことがあると思います。また、Instagramで共有した写真をFacebookTwitterにも投稿するといったことをやったことがあるかもしれません。このように、異なるサービス間をまたがって何かをしようとしたときにはOAuthが利用されています。

 OAuthは個人レベルでアプリケーションを開発する上でもかなり重要だと思います。例えば、個人でユーザログインが必要なWebアプリケーションを作ったとします。当然多くのユーザに使ってもらいたいわけですが、ユーザの心理的には、誰が作ったかわからない新しいWebサービスに対してユーザ名やメールアドレス、パスワードを登録するのは、かなりハードルが高いと思います。このような問題を解決できるのがOAuth認証であり、OAuthを用いることで、すでに信頼関係を築いている既存のサービスのアカウント情報を使って、新たなアプリケーションにログインすることができます。このため、新たなアプリケーションにパスワードなどの情報を渡す必要がなくなるため、アプリケーションを使い始める心理的なハードルを下げてくれます。

 今回はTwitterが提供するOAuthを利用してユーザ認証を行いました。細かい実装方法はここでは書きませんが、OAuthを利用してTwitterアカウントでログインしようとすると以下のような画面が現れます。

f:id:hirotsuru314:20160620182304p:plain

Bootstrapでモーダルウィンドウを実装できる。

 私はBootstrapをよく利用していますが、Bootstrapでモーダルウィンドウまで作れるのは知りませんでした。モーダルウィンドウというのは、下のように、ふわっと浮かび上がるように表示され、それに応えないと先に進まなくなるような画面のことです。これをBootstrapで比較的簡単に実装できました。 f:id:hirotsuru314:20160620182310p:plain

おそらく一番の山場はイベントへの参加機能である。

 イベントの登録や編集、削除などの機能は基本的なCRUD操作なので、そんなに難しくはありません。このアプリケーションで一番実装が難しいと感じたのが、イベントに対して参加を表明する機能です。ただ、このパターンはアプリケーション開発でよく出てくるので、かなり重要です。それぞれのイベントには、複数人のユーザが参加を表明でき、逆にそれぞれのユーザは複数のイベントに参加表明をすることができる。このような関係を「多対多」と言います。RailsのActive Recordにおいて、この多対多を表現するには、二つの間に中間テーブル用のモデルを作成します。どういうことかというと、二つの(ここでは、イベントとユーザ)関係を表すためだけのテーブルを作るということです。詳しい実装の仕方を知りたい方は本を見るか、下記のサイトなどを参考にして下さい。

ruby-rails.hatenadiary.com

 この考え方は、多くの機能実装において有効です。例えば、TwitterなどのSNSで、ユーザー同士のフォローする、フォローされる(フォロワー)も多対多で表現できますし、Facebookのいいねなどのようなお気に入りを示す機能もこの考え方で実装できます。

ページネーションでサーバの負荷を軽減できる

 ページネーションについては、以前の記事でも書きました。(以前はKaminariではなくwill_paginateというgemを使いました。)

hirotsuru.hatenablog.com

今回のアプリケーションでは、トップページに登録されているイベント一覧を表示するようになっているのですが、多くのイベントが登録された場合に、サーバに必要以上の負荷をかけてしまいます。Kaminariを用いてページネーション機能を加えることで、サーバの負荷も軽減できますし、ユーザにとっても見やすいページになります。

アプリケーション作成を進める上で、必要だと感じた前提知識

 今回のアプリケーションは比較的単純なものですが、知識ゼロから「パーフェクトRuby on Rails」を読んでイベント告知アプリケーションを作り出しても、コードを丸写しすれば作れなくはないですが、何をしているのか全くわからないと思います。最低限知っておかなければならないと感じた知識は次のような感じです。

MVCアーキテクチャについて

 モデル、ビュー、コントローラがそれぞれどういう役割を担っているのかくらいは理解しておく必要があると思います。

②HTMLの知識

 今回のアプリケーション作成では、CSSは触りません。すべてBootstrapでデザインします。Bootstrapに関しては、クラス名のつけ方などルールを覚えるだけなので、HTMLの文法的なことがわかっていれば十分だと思います。

CRUDについて

 データベースのレコードに対する基本的な操作であるCRUDについての知識は、どんなアプリケーションでも必ず必要になってきます。Railsでいうと、基本的なアクションメソッド(index、show、new、create、edit、update、destroy)にどういう役割を持たせるか。また、resourcesメソッドを使って自動生成したルートがどのようになっているのか、くらいは知っておいた方がよいでしょう。

書評

 今回は、「パーフェクトRuby on Rails」という本の6章「Railsアプリケーション開発」の部分だけ取り上げましたが、この本は本当に内容が盛りだくさんです。一周読みましたが、まだまだ理解できてないところも多いです。内容が深いゆえに、Railsを学ぶ1冊目の本としては適していないと思います。(他の言語をすでに習得されている方は話は別だと思いますが)あくまでも、Rails初心者がさらなるステップアップのために読む本です。本の最初の方に一応Railsの概要など基礎的なことが書かれていますが、基礎的な部分は他でフォローしておいた方がよいでしょう。

 今回紹介した6章を終えると、簡単なWebアプリケーション(例えば、掲示板アプリやSNSのクローンなど)が作れるようになります。この章では、実際に作る過程を順を追って書いてあるので、アプリケーションって実際にこうやって作るんだっという部分を垣間見ることができます。ただ、コードが淡々と書かれている感じで、それぞれのコードに対する細かい説明はあまりありません。したがって、私はわからないことをネットで検索したり、他の本で調べたりしながら作りました。そうやって作ってみると、このイベント告知アプリケーションには、Webアプリケーション開発に必要な機能がギュッと詰まっていて、やってみて本当によかったなーと感じました。

4章の 「Railsのロードパスとレイヤーの定義方法」では Model、View、Controller 以外の層 を定義して使うための方法について書いてあり、本当に目から鱗の内容でした。また、9章の 「より実践的なモデルの使い方」では4章で得た知識をもとに、複雑になりがちなモデルを整理するためのアプローチについて書かれています 。どうやらRails上級者になるとデフォルトの MVC だけではモデルやコントローラが複雑になってしまってしまうことがよくあるそうです。本当にまだまだ勉強不足です。。

 最後に、私はRailsの勉強方法の一つとして次のようなフローチャートが有効だと思います。

 まず、Railsの入門書やチュートリアルをやって基礎的な知識をつける → 少しずつわかってきたら、「パーフェクトRuby on Rails」の6章「Railsアプリケーション開発」でアプリケーションを作ってみる。 → 「パーフェクトRuby on Rails」の他の内容について掘り下げながら勉強していく。という感じで勉強してみたらよいと思います!