LoginSignup
927

More than 5 years have passed since last update.

Rubyはじめての人がRails開発に参加するときに最初に知っておくべきこと

Posted at

※この内容はRailsで書かれたWantedlyのプロジェクトに参加することを想定していて、一部Railsのデフォルトでない機能の解説もありますが、使っているgemもメジャーなもので割と汎用的な内容になっていると思うので、是非参考にしてみてください。

URLを見ればだいたいどこを変更すればいいかわかると言うこと

Ruby on RailsはMVC(Model View Controller)にもとづいて設計されていて、ディレクトリ構造的にもapp/以下に綺麗に分かれている。

MVCって何?って人は、ググってみてほしいが、割と宗教論争になりかけているので、モデルはDBの各テーブルに関連していて、ビューはHTMLの部分に近くて、コントローラーはビュー用にモデルを引っ張ってくるつなぎ役だと思ってれば大体合っている。これ以上は深く考えずにコードを読んだほうが良いと思う。

Router

でもコード的に本当に大事なのは、Routerと言われる部分で、config/routesに存在する。これは、URLとコントローラーを紐付けている部分で、設定の仕方はRouting - RailsGuides参照。
設定結果はrake routesによって出力し確認できる。ただ、これいちいち打つのはめんどくさいので、定期的に結果をconfig/routesのファイル内下部にannotateしている。

Routesを理解したら、app/以下にあるmodels, controllers, viewsをそれぞれ見てみれば良い。Railsでは何を複数形にして何を単数形にするかは割と大事なので間違えないように覚えて欲しい。Modelは単数でController, Viewの時は複数で書く。

Model

ModelはActiveRecordというORマップなので、DBの知識があれば雰囲気で読めるはず。ちゃんと知りたければActive Record Basics - RailsGuides参照。

Controller

Controllerを書く際、RailsはREST構造を大切にしているため、index, show, new, edit, create, update, destroyという7つのメソッドだけ特別な意味を持っている。これらのメソッドがそれぞれどんなURLに紐付けられるかは理解しておいて欲しい。
以下の表にCollection/Member, GET/POSTの2軸で分類しておいた。

Collection Memeber
GET index new show edit
POST(PUT/PATCH/DELETE) create update destroy

MemberはIDが必要でどのオブジェクトなのかが1つに定まるやつ。Collectionはそれ以外、具体的にはIndexページなど複数のオブジェクトを同時に表示するときと、新しくオブジェクトを作成するときに使う。

View

GET、POSTは送られるリクエストでの分類だが、GETのもののみViewに存在するという事が大切。ただ、デフォルトで、new.html,edit.htmlは同じ_form.htmlというpartialを利用する実装になっているので、scaffoldされたviewには5つファイルが存在しているはず。

Haml

sample.haml
.wrapper{ style: "margin: 0 20px" }
  %h1= post.title
  %h2 サブタイトル:#{post:subtitle}
  - post.images.each do |image|
    = image_tag image.url

:javascript
  alert("hello");

Htmlのテンプレートを書くとき、RailsでのデフォルトはERB(.html.erb)だがHAML(.html.haml)というのを使っている。(haml-rails)

こっちの方がいろいろ楽だが、中でも閉じタグ忘れがなくなるのがレビューもしやすくて良い。

これはCSSを知っていれば雰囲気で理解できると思う。
ただHaml内Javascript/CoffeeScriptの部分は割とややこしくなるので気をつけること。その時だけたまにerbを使ったりしている。

Viewに出てくるform_for, link_toなどは、Form Helpers - RailsGuides参照。
simple_form gemが定義しているsimple_form_forというのもたまに出てくるかもしれない。

Coffee Script

基本的にはRubyに慣れてきたら、RubyっぽいJavascriptだと思えば良くて、ちょっとわからなくなったら本家サイトの"TRY COFFEESCRIPT"のところでJavascriptに変換しながら書けばいい。

気をつけておくと良いかなというのは次の3点

  • メソッドの引数がない場合でも最後の()は省略できない
  • 3項演算子<condition> ? <true-case> : <false-case>は使えない。if <condition> then <true-case> else <false-case>を使う
  • Hashの時Javascriptでのfor k, v in hashfor k, v of hashになる。inじゃなくてofinは配列の時に使う。

デバッグの仕方とPry

Rubyでは標準の対話式コンソールとしてirbというものが提供されているが、大抵のRubyプログラマは機能強化版のpryというものを使っている。とりあえず上の公式ドキュメントを見に行ってくるとVisualが多いので感覚がつかめると思う。

Railsのプロジェクトはどんなメソッドがあるか、メソッドがどこで定義されているかなどわかりにくいことも多いが、pryで対話的に調べることが可能。cd, ls, ?あたりはマスターしとくこと。

特にプログラム中に埋め込めるbinding.pryがデバッグはもちろん、既存コードの動きを理解する際にとても役に立つ。

このbinding.pry中にできる事一覧はhelpとうてば出てくるし、ググって予め調べとくのもいい気がする。

Dashでリファレンス検索

Rubyのメソッドなのか、Railsのメソッドなのか、誰かが定義したメソッドなのかわからないことが多々ある。一つの解決法は上記のpryで定義場所を探ることだが、Macの人はRubyとRailsのメソッドを同時に検索できるDashというツールを入れると良い。このDash先生、Ruby,Railsに限らず他のいろいろな言語の公式ドキュメントとAPIリファレンスをローカルで高速に検索して見れるようにしてくれる。ちなみに引っかからなかった時はGoogleから検索してくれるので、よくあるfind_by_XXXや、有名なgemが定義しているメソッドだった場合も気づくことができる。

ただ、お金払わないとたまに待ちぼうけを食らうのが難点。ちなみに自分はお金を払った。

必要ファイル一括生成: rails g

rails g(generate)という一気に必要なファイル群を生成するコマンド、特にscaffoldでどういうファイルができてくるか知っておくと良い。例えば、以下のものを打ってみて何が生成されるか見てみると良い。

rails g scaffold Blog user:references title content:text category_cd:integer

ちなみに_cdと言うのは、simple_enumのイディオムで決まった個数しかないカテゴリのようなものをDB的には数値で管理して、使用時にはstringとして扱う際によく利用している。

ちなみにrails gやった後に、中身を変更するのは結構めんどくさい。予め必要になるモデル構造を考えてからコーディングし始めることをオススメする。

ちなみに自分はscaffoldで作るときつかっているオプションはこれ:
http://qiita.com/awakia/items/d7d9b2ca006b51210ce9

Railsサーバーを起動できない時に試してみるポイント

きちんと環境も揃っているのに、うまく起動できないは以下のをチェックしてみると良いかも。

  • 環境変数は全て正しくセットされているか (dotenvを使っているので.envを確認)
  • DBなど必要な外部サービスは起動しているか
  • rake db:migrateをして最新のDBスキーマになっているか
  • bundle installをした後にrails sを再起動しているか
  • 起動時にbundle execをつけているか

このbundle execはなくても大抵動くが、他のruby関係のプロジェクトで別のバージョンのgemが入ってたりするとよくわからないエラーが出たりするのでつけておいたほうがいい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
927