Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby:ログ出力を支援するsppというgemを作ってみた💎✨

こんにちは、まどぎわです(・∀・)
今回はsppというログ出力を支援するGemを公開したので、それについて書こうと思います🙌
(ちなみに初めてRubyGemsにコードを公開してみました...!)

ちなみに今回リリースしたGemは下記です。

spp | RubyGems.org | your community gem host

github.com

使い方はこんな感じ

Spp::spp('hoge')
=>
========== START ==========
"hoge"
========== E N D ==========

使う前には、Gemfileに下記を追記するか、gem install sppを実行するだけです👀

gem 'spp'

ログを見ながらデバッグするときとか、こんな感じに便利かなぁと思います(..)
下記のような感じでやると取得したユーザー一覧の取得処理をログ上で目立たせることができます🙌

  def index
    @quizzes = if params[:search_text]
                 Quiz.includes(:choices).search(params[:search_text])
               else
                 Quiz.includes(:choices)
               end
    Spp::spp(@quizzes.pluck(:title).uniq)
  end

こんな感じで目立つ(・∀・)

========== START ==========
["テスト", "タイトル", "HUNTERXHUNTERクイズ", "プロレスクイズ", "テストあああ", "私についてのQuiz"]
========== E N D ==========

ちなみに下記のような感じで、修飾をカスタマイズすることもできますφ(..)

  def index
    @quizzes = if params[:search_text]
                 Quiz.includes(:choices).search(params[:search_text])
               else
                 Quiz.includes(:choices)
               end
    Spp::spp(@quizzes.pluck(:title).uniq, '開始', '終了', '' * 5)
  end

こんな感じ(・∀・)

⚡⚡⚡⚡⚡ 開始 ⚡⚡⚡⚡⚡
["テスト", "タイトル", "HUNTERXHUNTERクイズ", "プロレスクイズ", "テストあああ", "私についてのQuiz"]
⚡⚡⚡⚡⚡ 終了 ⚡⚡⚡⚡⚡

内部的にはシンプルで、下記コードが実行されているだけなのですが、毎回書くのがめんどくさかったのでGemにしてみました🙌

puts "========== START =========="
pp 'hoge'
puts "========== E N D =========="

ちなみにこんな感じで書くと、

  def index
    Spp::spp_bench do
      @quizzes = if params[:search_text]
                  Quiz.includes(:choices).search(params[:search_text])
                else
                  Quiz.includes(:choices)
                end
      @quizzes.pluck(:title).uniq
    end
  end

ベンチマークも取れます💪

========== START(2018-08-09 22:12:16 +0900) ==========
   (5.1ms)  SELECT "quizzes"."title" FROM "quizzes" LEFT OUTER JOIN "choices" ON "choices"."quiz_id" = "quizzes"."id"
  ↳ app/controllers/quizzes_controller.rb:12
["テスト", "タイトル", "HUNTERXHUNTERクイズ", "プロレスクイズ", "テストあああ", "私についてのQuiz"]
========== E N D(2018-08-09 22:12:16 +0900) ==========

同じように修飾もできます(・∀・)

⚡⚡⚡ START(2018-08-09 22:15:06 +0900) ⚡⚡⚡
   (1.3ms)  SELECT "quizzes"."title" FROM "quizzes" LEFT OUTER JOIN "choices" ON "choices"."quiz_id" = "quizzes"."id"
  ↳ app/controllers/quizzes_controller.rb:12
["テスト", "タイトル", "HUNTERXHUNTERクイズ", "プロレスクイズ", "テストあああ", "私についてのQuiz"]
⚡⚡⚡ E N D(2018-08-09 22:15:06 +0900) ⚡⚡⚡

みなさんも良かったら使ってみてくださいm( )m

ソースコードや詳しい使い方はこちら github.com

Gemの作り方

Gemの作り方は下記記事を参考にさせて頂きましたm( )m
意外と簡単に作れるので、みなさんも作ってみては?🙌

morizyun.github.io

qiita.com

masarakki.github.io

ハマったところ

一応gem公開時にハマった箇所もメモしておきますφ(..)メモメモ

rake release時の権限Error

bundle exec rake release実行時に下記のようなErrorが出てハマりました(T_T)

You do not have permission to push to this gem. Ask...

原因は、単純にgemの名前が重複していて、既存のgemにpushしようとして権限Errorになってました。。。
重複しないようにコードの内のgemの名前を指定している箇所を置換して解決しました。