BETA

開発を便利にするイカれた Gem を紹介するぜ!!

投稿日:2019-07-13
最終更新:2019-07-13

Rails を触り始めてしばらく経ちます。
毎日コンスタントに書いているわけではなく、時間ができたときに、少しずつ書いていっている感じで、
まだまだ理解が及ばないところと、少しずつ理解できたこと、自分なりのノウハウなんかも出てきました。

一番大きく変わったのは、導入する Gem でしょうか。

触りはじめの頃は、ほぼデフォルトの状態でしたが、最近では開発用に様々な Gem を入れています。
今回はそうした Gem の紹介(何番煎じだろうか・・・・)と、備忘録を兼ねて一部 Gem の導入手順を書いていきたいと思います。

前提

プロジェクトのディレクトリを作り、その中で bundle init を実行した上でrails newしています。一連のコマンドは次のとおりです。

mkdir my_app  
cd ./my_app  
bundle init  
bundle exec rails new . -B -G -T -d=mysql  

このコマンドを実行すると、今いるディレクトリで rails new を実行します。
オプションの意味は次のとおりです。

  • -B
    rails new 実行後の bundle install をスキップする。入れたい Gem を Gemfile に追記してからbundle installしたいので。
  • -G
    .gitignore の生成をスキップ

    • 僕は VSCode を使っているんですが、.gitignore を自動生成すると、何故か記述した通りに管理外になりません。なので、自動生成をスキップして、VSCode の拡張機能を使って .gitignore を作成しています。
      この拡張機能は次のコマンドでインストールできます。
      ext install codezombiech.gitignore
  • -T
    テスティングフレームワークとして、標準で Minitest がインストールされますが、 RSpec を使いたいので、Minitest のインストールをスキップします。

  • -d
    DBとして MySQL を使用します。ここはお好みで。

イカれた Gem を紹介するぜ!

slim-rails

View のテンプレートエンジンとしては標準で erb が使用されますが、最近は slim を使っています。構文がスッキリするので気に入っています。

Gem をインストールしただけでは、View の生成時に erb で生成されてしまうので、デフォルトのテンプレートエンジンを slim に変更します。

# config/application.rb  

class Application < Rails::Application  
  config.generators.template_engine = :slim    
end  

html2slim

erb のファイルを slim に一括変換してくれる Gem です。
slim をインストールしても、 layouts ディレクトリ配下が erb のままです。
また、途中から slim を導入して erb の View が残っているときなどに、一括変換できるのでとても便利です。

rspec-rails

Minitest の代わりに RSpec をインストールします。なお書き方は勉強中
Readme にも記載がありますが、Gemfile の:development:testのグループに追記します。

group :development, :test do  
  gem 'rspec-rails', '~> 3.8'  
end  

bundle install後、rails コマンドでインストールします。

$ bundle install  
  :  
(省略)  
  :  
$ rails generate rspec:install  
      create  .rspec  
      create  spec  
      create  spec/spec_helper.rb  
      create  spec/rails_helper.rb  

RSpec の導入についてはこちらが参考になります。
参考記事
Ruby on Rails のテストフレームワーク RSpec 事始め

better_errors

rails でエラーが発生したときの画面をよりわかりやすくする Gem です。Readme にイメージが貼られているので、こちらを見てもらうとわかりやすいと思います。

bullet

DB の N+1 問題を検出してくれる Gem です。
※ N+1問題についてはこちら
コンフィグでかなり細かく挙動を設定できますが、僕はとりあえずこんな感じの設定にしています。
Bullet.alert = trueと記載しておくと、開発中のアプリを触っているときに、N+1 問題に遭遇すると、Javascript のアラートでポップアップして教えてくれます。

# config/environments/development.rb  

  config.after_initialize do  
    Bullet.enable = true # Bulletプラグインを有効  
    Bullet.alert = true # Javascriptのアラートで通知する  
    Bullet.bullet_logger = true # log/bullet.logへの出力  
    Bullet.console = true # ブラウザのコンソールログに記録  
    Bullet.rails_logger = true # Railsログに出力する  
  end  

rubocop

説明不要の静的コード解析の Gem ですね。
導入や.rubocop.yml のサンプルについては Qiita などを検索してみてください。

annotate

schema を model のファイルに書き出してくれる Gem です。モデルを書いているときに「カラム名なんだっけなあ」と思うことがあれば、ぜひ導入してみてください。
こんな感じになります。

# == Schema Information  
#  
# Table name: posts  
#  
#  id         :integer          not null, primary key  
#  image      :string  
#  created_at :datetime         not null  
#  updated_at :datetime         not null  
#  

class Post < ApplicationRecord  
  :  
(省略)  
  :  
end  

Gem をインストールしただけでは、手動で都度コマンドを実行しないと、schama の情報が書き出されません。そこで、以下のコマンドで設定ファイルを作成し、db:migrateしたときに自動で書き出されるようにします。

bundle exec rails g annotate:install  

コマンドを実行するとlib/tasks/auto_annotate_models.rakeというファイルが作成されます。
デフォルトで'skip_on_db_migrate' => 'false',となっていて、db:migrate実行時にschemaの情報がモデルに書き出されます。

参考記事
schemaをmodelに書き出してくれるgem annotate

pry-rails

bundle exec rails cで rails コンソールを表示したときに Pry を使用できます。
また、一緒にpry-bybugという Gem をインストールすると、コードの中のbinding.pryと書いた箇所がブレークポイントになり、ステップ実行などができます。
また、テンプレートの中に- binding.pryと書いてあげると、View でもステップ実行できるようになります。コレは便利!

参考記事
Rails で Pry を使う

awesome_print

irbでオブジェクトを表示したときに、表示を整形してくれる Gem です。
実際に見てみたほうがわかりやすいと思います。
awesome_print ありでは、pry を使っているので、標準のirbとは見た目がちょっと違います。

# awesome_print なし  
irb(main):012:0> employee = {  
irb(main):013:1* first_name: "taro",  
irb(main):014:1* last_name: "sato",  
irb(main):015:1* age: 24,  
irb(main):016:1* mail: "[email protected]",  
irb(main):017:1* joined_at: "2019-07-01"  
irb(main):018:1> }  
=> {:first_name=>"taro", :last_name=>"sato", :age=>24, :mail=>"[email protected]", :joined_at=>"2019-07-01"}  
irb(main):019:0> employee  
=> {:first_name=>"taro", :last_name=>"sato", :age=>24, :mail=>"[email protected]", :joined_at=>"2019-07-01"}  

# awesome_print あり  
[8] pry(main)> employee = {  
[8] pry(main)*   first_name: "taro",  
[8] pry(main)*   last_name: "sato",  
[8] pry(main)*   age: 24,  
[8] pry(main)*   mail: "[email protected]",  
[8] pry(main)*   joined_at: "2019-07-01"  
[8] pry(main)* }    
{  
    :first_name => "taro",  
     :last_name => "sato",  
           :age => 24,  
          :mail => "[email protected]",  
     :joined_at => 2011  
}  
[9] pry(main)> employee  
{  
    :first_name => "taro",  
     :last_name => "sato",  
           :age => 24,  
          :mail => "[email protected]",  
     :joined_at => "2019-07-01"  
}  
[10] pry(main)>   

また、上述の pry-rails を使っている場合、ルートフォルダに.pryrcを作成しておく必要があります。

# /.pryrc  

begin  
  require 'awesome_print'  
rescue LoadError  
else  
  AwesomePrint.pry!  
end  

まとめ

いろいろ便利な Gem があり、開発効率をアップすることができますね。
それらしい成果は出してないのであまり時間を空けずに、少しでもいいので Rails 書いていけたらなと思います。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@toyocyの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!