joppot

コピペで絶対動く。説明を妥協しない

プログラミング

Rails pluginを使ったgemの作り方[4](controller helper編)

投稿日:

Pocket

uf08eau

概要

みなさんこんにちはcandleです。今回はgemの中枢とも言えるhelperの作り方です。
helperというのは様はgemにすることで便利になる関数を作るとというイメージです。
例えば、controllerの中で使える便利な関数や、viewの中で使える描画など。

よくあるのが、こんな感じのviewヘルパーですね。

<%= render_user_info() %>

これらはlib/helperで作れます。


前提

このシリーズは以下の3つの記事からの続きです。gemの初期化などは前の記事で紹介しています。

Rails pluginを使ったgemの作り方[1](基本設定編)
Rails pluginを使ったgemの作り方[2](rails組み込み編)
Rails pluginを使ったgemの作り方[3](vendor/assets 読み込み編)

Rails pluginを使ったgemの作り方[4](controller helper編)


controller helperの作成

helperは厳密にはviewで動こうがcontrollerで動こうが、helperなのですが、ここでは明示的にcontrollerヘルパーとかviewヘルパーと言います。
今回はcontrollerヘルパーを作成します。

gemの作成方法はあまりにも多様で、紹介する方法が全てではなありませんが、1つの方法として紹介します。

helperは一般に以下の様に作成します。

lib/gem名/helper名.rb

例えば、こんな感じ。ヘルパーを1つしか作らないなら、大方この方法がベストだと思います。

lib/gem名/helper.rb

サンプルのgemでいうと以下の様にします。

cd lib/good_item
touch helper.rb

touchheleper

次にhelperの一般的な記述です。

module gem名
  module 作成したhelperファイル名
    def 関数名
    end
    ……
    …
  end
end

「gem名」はキャメルケイスで記述します。この辺が妙にちゃんとしてないとだめです。
「作成したhelperファイル名」は今作成したhelper.rbを指しています。キャメルケイスで記述します。
もしも、作成した、ヘルパーファイルがgood_helper.rbなら、GoodHelperになります。

関数は幾らでも作ってください。
今回のサンプルの場合は以下の様になります。

module GoodItem
  module Helper
    def logi(value)
      logger.debug("===============================")
      logger.debug(value.inspect)
      logger.debug("===============================")
    end
  end
end

logiという関数を作りました。
デバッグ様のツールですね。

logidef-1

これで、ヘルパーが完成しました。


engineでhelperの設定

ここから、gemならではの書き方です。

私はgemにもrubyにも精通しているわけではないので、ここで苦労しました。

自分みたいなコピペプログラマはrailsがどこまで自動的に動くのかよくわかっていません。
ただ1つ、gemのhelperは次の様に設定しないとrailsで呼び込まれません。

やってきましょう。

helperの設定は以下のengine.rbに記述します。

lib/gem名/engine.rb

サンプルの場合ですと、

lib/good_item/engine.rb

ですね。
それを開いて、以下の様に記述します。

require 'good_item/helper'
module GoodItem
  class Engine < ::Rails::Engine
    isolate_namespace GoodItem
    initializer 'good_item.action_controller_helpers' do
      ActiveSupport.on_load :action_controller do
        include GoodItem::Helper
      end
    end
  end
end

railsenginesetting

require ‘good_item/helper’
は作成したhelper.rbのファイルを呼び出しています。ファイル名が変わればそれに応じて「/helper」の部分が変わります。

isolate_namespace GoodItem
は、今の所、自分は分かりません。合っても無くても動きます。

initializer ‘good_item.action_controller_helpers’ do
このinitializarの記述はわりと適当です。gem名.action_controller_helperです。
controllerに関するヘルパーだからaction_controller_helperです。

ActiveSupport.on_load :action_controller do
include GoodItem::Helper
include GoodItem::Helperは一般的に書けば「Gem名::ヘルパー名」です。故に、good_helper.rbというファイル名でヘルパーを作ったら、「GoodItem::GoodHelper」になります。

railsenginesetting

以上で設定は終わりです。これで作成したhelperであるlogi関数が使える様になりました。


railsアプリケーションで使ってみる

予めgood_item gemを読み込んだrailsアプリケーションで、適当なコントローラーでlogi関数を使います。

私はposts_controllerがあるので、そのindexアクションで使ってみます。

indexactionlogi

railsのlogを見てみると、作成したlogi関数実行されています。

watchloge


まとめ

という感じで、簡単なcontrollerのヘルパーを作成しました。
次回はviewのヘルパーを作ってみます。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-プログラミング
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

phpのsnappyで複数のwebサイトのサムネイルを保存する

概要 前回、snappyの基本的な使い方を試しました。 今回はsnappyを使って、あらかじめ、定義してある複数のwebサイトのサムネイルを保存してみたいと思います。 前提 composerがインスト …

ruby on rails のckeditor gemの機能ボタンをカスタマイズする

概要 みなさんこんにちはcandleです。今回はruby on rails のckeditor gemのショートカットボタンをカスタマイズして自分が必要な機能のみを表示してみましょう。 前提 cked …

正規表現を極めるその1

概要 みなさんこんにちはcandleです。今回から正規表現を1から100まで極めようと思います。 正規表現って、使えると便利ですが、それを勉強して使いこなせている人って少ないと思います。この機会にぜひ …

Mysqlテーブルの照合順序を変更する

概要 みなさんこんにちはcandleです。今回はテーブルの照合順序を変更する方法を行います。 この方法はやっても、mysqlクエリー1行ですみます。早速やりましょう。 テーブルの照合順序を変更する 次 …

wordpressのbogoでサイトで使用する言語を「en-US」から「en」に変更する方法

English 日本語 概要 みなさんこんにちはcandleです。 今回はbogoプラグインのカスタマイズです。bogoはwordpressのサイトを簡単に他言語に対応することができる素晴らしいプラグ …

  • English
  • 日本語

プロフィール


ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー

スポンサードリンク

アーカイブ