rails初学者がよくわからず書いていたことについて
railsとは何ぞやって人向け
rails初心者が躓きそうな点
- 命名規則について
- rake routes(どうやってみるの〜〜〜)
- gem(なんとなく使っているけど実態がわからない。。。)
rails helper (なんか聞き覚えはあります。。。。ね!w)
params (たまにみる。params.permitって何!?!!w)
- strong parameters(んーーとりあえず使っているけどよくわからないてなってたw)
- debug(デバッグ手法が難しい、、、)
railsの特徴
通称railsことRuby on rails はオープンソースのWebアプリケーションフレームワークです
- 設計思想(後述)
- 命名規則(後述)
上記の2つを守ることで高速開発ができる...とされています! (チーム開発をする時に真価を発揮!!!)
Convention over Configuration
ex)モデルの命名規則
例えば、"rails g model product"というgeneratorコマンドを実行すると。あらかじめ決められている規則にしたがって下記のようになります。 テーブル名がproducts(複数形)、モデルのクラス名はProduct(単数形)、記述するファイルはproduct.rb(app/models以下)となります。
このように決まっている設計思想に従うことで無駄な記述が減ります。
メリット
- 設定ファイルを記述する必要がない(ほとんど)
上記のルールに従うことで本来であれば”〇〇モデルは〇〇sテーブルを参照する”と言ったような記述が必要になるがそれが不要になる - 共同開発時、コードの解説が最小限で済む
お互いがrailsのルールを知っていればおおよそのチーム内での決まりごとが決まっているのと同じ意味になります!
Don't Repeat Yourself
- 繰り返しを避けよ。(そのままですねw)
DRYは「DRY原則」とよばれ、railsをつかったwebアプリケーションでは同じ記述
を何回も
記述するのは避けることが推奨されています。
同じこと
をソースコードや設定ファイルの中で繰り返し記述するのは仕様変更やbugの原因になってしまうからです。
DRYを意識することで効率よく品質の高いアプリケーション開発ができます 作成できます。
- なんでわざわざDRYにしなきゃいけないの??全部コーディングすればええやん?って方は下記をご覧ください
参考 1.怠慢(Laziness) 2.短気(Impatience) 3.傲慢(Hubris)
プログラマの三大美徳ともいわれるこの思想。
世間からすればダメ人間と思われるかも?しれない。 でもこれができるエンジニアはエンジニア界から崇められる...らしい?
REST
- REpresentational State Transfer
- すべてのリソースに一意となる識別子がある
(雑すぎfixme)
MVCとは
MVCとはそもそもなんなの?
→railsだけがMVCじゃないよ。
Model View Controllerの三つの要素から構成されるものです。
それぞれが各々の仕事のように役割分担をするから、便利だよねって考え方。
実際は下記のような分担をします
- M...model
DBとrailsの中間に位置する。DBからの値を取り出したりしてます。ビジネスロジックを担う部分 - V...view
modelやcontrollerで用意したデータ等を駆使して利用者に、見せる部分 - C...controller
modelのロジック呼び出し。必要なviewの選択。modelとviewの中間にあたります
wiki 引用
MVC(Model View Controller モデル・ビュー・コントローラ)は、ユーザーインタフェースをもつアプリケーションソフトウェアを実装するためのデザインパターンである。 アプリケーションソフトウェアの内部データを、ユーザーが直接参照・編集する情報から分離する。そのためにアプリケーションソフトウェアを以下の3つの部分に分割する。
命名規則
これはCoCに相当する考え方の部分に当たります
(todo:表作成)
rake routes
Prefix Verb URI Pattern Controller#Action
groups GET /groups(.:format) groups#index
POST /groups(.:format) groups#create
new_group GET /groups/new(.:format) groups#new
edit_group GET /groups/:id/edit(.:format) groups#edit
group PATCH /groups/:id(.:format) groups#update
PUT /groups/:id(.:format) groups#update
こういった結果の時の読み方。No route matchesとかなったりしても冷静になればイケる
実はrake routesしたときの PrefixVerb,URIPattern,Controller#Action
、この記述が肝。
- PrefixVerb... 特定のHTTPメソッド (GET、POST、PATCH、PUT、DELETEなど)を表す部分
URIPattern...どのURLでアクセスするのか。という部分。
localhostで開発しているなら「localhost//」の「/」のところ。 ex)一行目を表すURLというのはrake routes上では→ /groups(.:format) URLは"localhost/groups"になります。
逆に"localhost/groups"の時はrake routesの「/groups(.:format)」を見るということですController#Action... どのコントローラ、アクションなのかを判断する。
左の二つが一致しているものを見つけたらこの部分を見てどこのアクションかを判断します。
ex) GETメソッドでURLが"/groups"だったら、「groups#index」これが参照され、groupscontrollerのindexアクションが呼ばれます
リソースフルルーティングでは 1つのアクションに対して、データベース上での特定のCRUD (Create/Read/Update/Delete) にもなります。 上記の上二つ。URLは同じでもhttpメソッドが違うために、別のアクションを呼んでいる
gem
gem は、Ruby用のパッケージ管理ツールになります。
Ruby用ライブラリのインストール、アンインストール、バージョン管理などを簡単に実行することができます。
gem自体はプログラミング言語Rubyのファイルに付属されていて、無料で誰でも使うことができるソフトになります。
余談ですが。gemの正式名称はRubyGemsです
例えば下記のgemを使うと
devise
- loginとか、User管理が簡単にできるよね
- facebook認証も手軽に
Mechanize
- Scrapingするのに便利だね
- webからデータを集める際に便利!
kaminari
- ページネーション便利だね
- 多くのデータを複数のページに跨らせることはUI,UX的にも大事
- bootstrapと組み合わせればそんなにダサくないですw
rails helper
Viewファイルにて複雑なロジックを簡単に記述できる
form_tag
検索の時に頻繁に使う。
頑張ればform_forみたいなことできるけど。頑張る必用もないよね...(form_forが楽ならそっち使いましょう)
form_for
モデルに紐づいている場合に利用するとか言われています。 投稿フォームとか、DBに値を突っ込むときに使うイメージ
form_with
https://techracho.bpsinc.jp/hachi8833/2017_05_01/39502 rails 5系から新規参入したヘルパー。これがなかなか協力
link_to
HTTPメソッド指定してリンクを作れる prefixを使用して記述できる
etc(まだまだたくさんある)
params
URLから送られてきた値やフォームで入力した値をparams[:パラメータ名]で取得する
rails4系ではpryで'params'と取得ができていたが、「rails5」からは取得できなくなったっぽい?
params[:パラメータ名] フォームの内容を受け取ったりする時に上記のような書き方をしますね
メリット
- リンクによるパラメータの受け渡し
- フォームによるパラメータの受け渡し
strong parameters
マスアサイメント脆弱性の対策としてrails4よりこれが必須になった。 簡単にまとめられそうもないので、下記参考にしていただければと思います。 参考
debug
gem "pry-rails" を入れることで rails console
上でpryコンソールが起動する。
(pry-rails を入れるまでは irb が起動する)
- Rails console で Pry が起動するようになる
- Rails console で help と打つと、使えるコマンドがわかる
- show-routes,ls ...etc コマンドが console上 で使えるようになる
- binding.pry を挟むとその位置で処理を止めてデバッグできるようになる
参考書籍
改訂3版 基礎 Ruby on Rails 基礎シリーズ パーフェクトRuby on Rails