Rails開発の初速を上げる! application template
Rails newめんどい・・
小さいコピーアプリをいくつも作ってるので、毎回同じ設定をするのが面倒になってきた・・
そんな時もRailsならちゃんとベストプラクティスが!
とまあ、大体いつもお世話になってるページを参考に、自分が使ってるgemの設定をやってみた。
設定した項目
- Gemfile
- config/application.rb でタイムゾーンやロケールの設定、generator関連の設定
- view関連のgem初期設定
- simple_form
- kaminari
- erb2haml
- device
- rspec
- git
毎回やってるのはこのくらい。
地味に手間取ったのは ./bin/rake haml:erb2haml
のタスク実行。。
erb2hamlがファイルの上書きと、既存のerbファイルを削除するかどうかを、STDINで聞いてくる状態になってたので、
コマンドライン上で rails new
してる時は良いんだけど、 RubyMineでRails project newする時に
バックグラウンド実行になって、そこで止まる・・・うっとおしい;;
rake task的にはさほど大きなものじゃないから、オプションで -y
とかでyesにしちゃう??とか思ったけど
rake task書いたこと無いし・・・うーむ・・
としばし悩んでたんだけど、『そういえば、こういうの yum install とかでなんかあったよな・・』と思って調べてみた。
コレだ!!
yesコマンド!そうそう。あったあった!
というわけで、強制的にyesを答えさせる方法
# erb -> haml Bundler.with_clean_env do run 'yes | ./bin/rake haml:erb2haml' end
拙いLinux力・・多少は役だった!
出来上がった application_template.rb
ばんざーい!コレで初速大幅向上のはず!
コピーアプリ 1 : ヤフオク!のまとめ
2個目のコピーアプリ実装完了。 今回は目標の12時間を下回って、11時間で実装出来た!
コピーした機能リスト
ログインすると使える機能
- ユーザーはログインできる
- ログインユーザーはオークションを作成できる
- ログインユーザーはオークションに参加できる(入札)
- オークション終了日に最高額の入札者は落札できる
- 落札者は出品者を評価できる
ログインしなくても使える機能
- 全オークションを閲覧できる
- 出品者の過去の評価(コメント)を閲覧できる
前回からの改善点
前回のモデリングで苦戦(大幅手戻り発生)したので、今回はちょっと慎重にモデリングしてみた。
以下をコーディング前に意識して取り組んだ。
続きを読むRails routesを書く時の注意点(超基本)
routes.rbを書く時
基本形 (Scaffold準拠にルーティングを追加するとき)
単数なのか複数なのか、注意すること。
- resource
- resources
複数形リソース
一番基本形 (resources) キーワード、リソース名ともに複数形
使用例:
resources :products
生成されるパス
Scaffold基本形と完全一致(7つ)
Prefix Verb URI Pattern Controller#Action products GET /products(.:format) products#index POST /products(.:format) products#create new_product GET /products/new(.:format) products#new edit_product GET /products/:id/edit(.:format) products#edit product GET /products/:id(.:format) products#show PATCH /products/:id(.:format) products#update PUT /products/:id(.:format) products#update DELETE /products/:id(.:format) products#destroy
単数形リソース
どういう時に単数形リソースを使うかの参照記事 Rails のルーティング | Rails ガイド
場合によっては、ユーザーがページを表示する時にidを参照することのないリソースが使用されることがあります。たとえば、/profileでは常に「現在ログインしているユーザー自身」のプロファイルを表示し、他のユーザーidを参照する必要がないとします。このような場合には、単数形リソース (singular resource) を使用してshowアクションに (/profile/:idではなく) /profileを割り当てることができます。
使用例:
resource :profile
生成されるパス (index は生成されない) :idもない
Prefix Verb URI Pattern Controller#Action product POST /product(.:format) products#create new_product GET /product/new(.:format) products#new edit_product GET /product/edit(.:format) products#edit GET /product(.:format) products#show PATCH /product(.:format) products#update PUT /product(.:format) products#update DELETE /product(.:format) products#destroy page GET /pages/*id high_voltage/pages#show
単語の単数形複数形に注意
resource :products
とかやると、意味がわかりにくいので注意。
id指定なしでアクセスできる単数形リソースを作ろうとしている時は、リソース名も単数形にした方がいい。
Scafolldと同じrouting書こうと思ってたのに、何故かindexアクションが生成されてない!?と思ったら、ウッカリ resouce (s忘れ)してないかチェックすること。
Rails で erb -> haml への変換ポイント(どのgemの機能で変換するか)
コメントで教えてもらった
自分の記事に、 erb2haml
の別オプションがあることを教えてもらって、「おお!」と思って調べてみたら、初心者的に混乱した箇所があったのでメモメモ。
元々の手順
erb2haml で変換、してシェルでチマチマ削除してる。
変換
$ bundle exec rake haml:convert_erbs
削除
$ rm app/views/layouts/application.html.erb
教えてもらった手順
gemの提供タスクで、置き換えまでやってくれる方を使う。
$ bundle exec rake haml:replace_erbs
やってみようと思ってハマった件・・
最近勉強を助けるために、RubyMineのお世話になってるので、RubyMineからRakeタスクを実行!
使えるタスクをRubyMineが補完してくれるので、ナイス!と思ってたら・・何故か haml:convert_erbs
も haml:replace_erbs
も出てこない・・・
haml:erb2haml
しかない・・・
そうか!gemが入ってないプロジェクト見てるのかも!
と閃いて、Gemfileを確認すると、やっぱり erb2haml
入ってないプロジェクトだった。
該当のプロジェクトに含まれていた haml 関連の gems
erb2haml入れてみると・・
Gemfileに gem 'erb2haml'
を入れてから、もう一度RubyMine様に聞いてみると・・
おお!!出てきた〜〜♪
別々のgemで同じネームスペース(?)みたいの使ってるってことなのかな。。
難しいな・・この辺コピペしてきたGemfileを入れまくってる初心者的には、どれがどれなのかちゃんと理解してなくてちょっと混乱するポイントかも。
勉強になった。。