まりぴよこのブログ

日々の日記。技術ネタでまとまりきってないものの記録、伝わる文章の書き方を練習とか。

Rails開発の初速を上げる! application template

Rails newめんどい・・

小さいコピーアプリをいくつも作ってるので、毎回同じ設定をするのが面倒になってきた・・

そんな時もRailsならちゃんとベストプラクティスが!

railsguides.jp

morizyun.github.io

とまあ、大体いつもお世話になってるページを参考に、自分が使ってる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 とかでなんかあったよな・・』と思って調べてみた。

dharry.hatenablog.com

コレだ!!

yesコマンド!そうそう。あったあった!

というわけで、強制的にyesを答えさせる方法

# erb -> haml
Bundler.with_clean_env do
  run 'yes | ./bin/rake haml:erb2haml'
end

拙いLinux力・・多少は役だった!

出来上がった application_template.rb

github.com

ばんざーい!コレで初速大幅向上のはず!

コピーアプリ 1 : ヤフオク!のまとめ

2個目のコピーアプリ実装完了。 今回は目標の12時間を下回って、11時間で実装出来た!

コピーした機能リスト

ログインすると使える機能

  • ユーザーはログインできる
  • ログインユーザーはオークションを作成できる
  • ログインユーザーはオークションに参加できる(入札)
  • オークション終了日に最高額の入札者は落札できる
  • 落札者は出品者を評価できる

ログインしなくても使える機能

  • 全オークションを閲覧できる
  • 出品者の過去の評価(コメント)を閲覧できる

前回からの改善点

前回のモデリングで苦戦(大幅手戻り発生)したので、今回はちょっと慎重にモデリングしてみた。

以下をコーディング前に意識して取り組んだ。

  • データモデリングに対する考え方(Railsに限らず)な参考資料を見れたので、その手順に従ってちゃんと図を書いた
  • モデル・コントローラーを作る前にroute.rbに欲しいURLの形を書いてみた
続きを読む

コピーアプリ 1 : DropBox データモデリングに苦戦・・

今回のお題はDropBoxのコピーアプリ!

Webアプリのコピーなので、ローカルとのファイル連携は無視して、 単純に階層的なフォルダ情報を管理して、その中にファイルをアップロード出来るところを目指す。

(・・と、この一文を書いて既に昨日までせっせとやってたモデリングの最初の段階でつまづきがあったことに気づいた;;)

続きを読む

コピーアプリ 0 : Answers

前置き

Railsに慣れるため、更にコピーアプリ作成!

・・の前に、コピーアプリで目指すものよりもちょっと小さい規模で、自分で使いたい用にアプリを作ってみることにした。

最初は土日の自由時間、合計4~5時間でできるかな〜と思ってたんだけど・・

続きを読む

Railsの上達方法

ココ半年くらい、集中的にRailsの勉強をやって、(最初の時と比べたら)かなり上達した!と思うので、上達方法を書いてみる。

普段お仕事は他の言語やフレームワーク使ってて、Railsやりたいんだよな〜というプログラマさんにオススメの勉強方法。

  • RailsTutorial
  • コピーアプリを作る
  • デバッグ力を上げる方法

Railsの識者の方に、こうするのが良いよと薦められて、その通りやったら本当に上達した!と思うので、半年前の自分に向けて書いてみる。

続きを読む

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の機能で変換するか)

コメントで教えてもらった

qiita.com

自分の記事に、 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_erbshaml:replace_erbs も出てこない・・・

image

haml:erb2haml しかない・・・

そうか!gemが入ってないプロジェクト見てるのかも! と閃いて、Gemfileを確認すると、やっぱり erb2haml 入ってないプロジェクトだった。

該当のプロジェクトに含まれていた haml 関連の gems

erb2haml入れてみると・・

Gemfileに gem 'erb2haml' を入れてから、もう一度RubyMine様に聞いてみると・・

image

おお!!出てきた〜〜♪

別々のgemで同じネームスペース(?)みたいの使ってるってことなのかな。。

難しいな・・この辺コピペしてきたGemfileを入れまくってる初心者的には、どれがどれなのかちゃんと理解してなくてちょっと混乱するポイントかも。

勉強になった。。