joppot

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

プログラミング

Rails pluginを使ったgemの作り方[1](基本設定編)

投稿日:2015年4月12日更新日:

Pocket

h9top

概要

みなさんこんにちはcandleです。今回からできればシリーズ物として、railsのgemを作っていこうと考えています。なぜかgemの作り方の詳しい解説サイトが日本語で少ないので未だgemを満足に作れるほどではないのですが、備忘録も含め書きます。

ちなみに、私はrubyはそこまで達者じゃないので、間違って書いている可能性があるかもしれません。
そこのところも、よろしくお願いします。

前提

railsとgemがインストールされている。
適当なrailsプロジェクトがある



gemの基本的な知識

少し前まではgemの作成には幾つかの方法がありました。
rails4になり、大きく分けて2つの方法でgemを作成する事が基本になってきたらしいです。

1つはgemコマンドを使用したgemの作成。
2つ目はrails コマンドを使用したgemの作成です。

両者の違いなのですが、分かり易く書けば、railsアプリケーションのapp以下のviewやcontroller、modelに干渉したいならrailsコマンドを使用したgemを作ります。
お手軽簡単gemを作りたいなら、gemコマンドから作成するのが良いと思います。

gemで出来る事を集合論の様に書くと、railsコマンドで作成したgemはgemコマンドで作成したgemを梱包するので、このシリーズで解説するのはrailsコマンドで作成したgemの作り方にします。

componet


このシリーズ

Rails pluginを使ったgemの作り方[1](基本設定編)

Rails pluginを使ったgemの作り方[2](rails組み込み編)
Rails pluginを使ったgemの作り方[3](vendor/assets 読み込み編)
Rails pluginを使ったgemの作り方[4](controller helper編)


gemを作成する

gemを作成します。分かり易い様に、ホームディレクトリにrailsgemsフォルダを作りそこにgemを作りましょう。

cd ~
mkdir railsgems
cd railsgems

サンプルのgemを作りましょう。

rails pluginを使用したgemの作り方は一般に以下の様になります。

rails plugin new 好きな名前

今回はgood_itemというgemを作ります。
ここが重要なポイントなのです。オプションでmountableを与えると、rails engineとしてgemが機能します。
これがどのようにrailsアプリケーションに作用するかの詳しい事は執筆時はよくわかってないのですが、
ようはrailsアプリケーションにgemを組み込める様になるっぽいです。
といことで、オプションをつけておきます。

rails plugin new good_item --mountable

createsamplegem-1

作成された、gemに移動して、中身を確認しましょう。

cd good_item
ls

macc

gemが作成されました。

gemspecを編集する

gemを作成すると、gemspecなるものが作成されます。
今作成した、good_item gemなら、「good_item.gemspect」というのが作成されます。

gemrubyに登録される際に必要となる情報の設定に使用します。
gemrubyとは普段railsアプリでGemfileにgem名を書き込み、「bundle install」すると任意のgemが入りますよね。
あのサービスを提供しているのが、gemrubyです。

もしも、あなたが素晴らしいgemを作成して、世界中の人と共有したいと思ったら、このgemspecを編集してgemrubyに登録する事で、簡単にgemを共有する事ができます。

自作したgemをgemrubyに登録しないにしても、設定の仕方だけでも覚えておきましょう。

エディタでgemspecファイルを開きます。

gemspecfile

上から、見ていきましょう。
「name」はなるべく、そのままにしましょう。ちょっと昔、gemの名前をどうしてもハイフン区切りにしたくて、変えた事が合ったのですが、あまりオススメしません。

「version」もそのままにしましょう。

「authors」は変更してください。もちろん、本名でもあだ名でもかまいません。多分、ローマ字じゃないとエラーです。「TODO: Your name」→「candle」。

「email」は公開されるので、あまり重要ではないメールアドレスを登録しましょう。「TODO: Your email」→「candle@example.com」。

「homepage」はgithubのページを登録する人が多いですね。もしも、ブログなどをやっている人はそれを書いても良いと思います。「TODO」→「http://xxx.xxx.xxx.com」

「summary」は簡潔に1文でgemの説明をします。「TODO: Summary of GoodItem.」→「This gem help your coding」

「description」はgemの詳しい説明を記述します。それでも長過ぎない様に数行にまとめましょう。「TODO: Description of GoodItem.」→「This gem is a gem that I made for the first time. This gem will support your rails application.」

changedata


作成したgemが依存するgemを初期化する

gemspecファイルの下の方に、作成したgemが依存するgemの記述があると思います。
初期設定で、railsとsqlite3の記述があります。

gemappend

dependency railsは作成したgemがどうしてもrailsの任意のバージョン以降の関数や記述を使う場合、railsのバージョンを指定します。参考までにgithubの多くのgemはrailsのバージョンを指定してないものが多いです(主観)。もしも、作っているgemが特にrailsのバージョンに依存しないなら、消してしまいましょう。不安なら、バージョンを3.2.0以上と指定しておくとよいでしょう。というのも、railsは3.2.0で大幅なアップグレードがあり、それ以降のバージョンで動くものはだいたい、今でも動くからです。

sqlite3の項目は開発環境下でのデーターベースをsqliteを想定するという記述です。ですが、そのgemがどうしてもsqliteじゃなくてはならない場合を除いて、削除してかまいません。

deletedepend

これでgemspecのセットアップが完了しました。

まとめ

基本設定は以上です。次回、railsアプリケーション内で使用する為の設定を行います。

スポンサードリンク

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

-プログラミング
-, ,

執筆者:


  1. Stew Eucen より:

    Rails向けのgem作成方法を探していて辿り着きました。

    開発で一番難しいのは「開発環境構築」だと考えています。この記事はとてもわかりやすくまとまっていて、自作gemを開発する環境まで最短で到達できました。ありがとうございます。

    typoがひとつありました。
    ×「authers」
    ○「authors」

comment

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

関連記事

railsのcarrierwaveとremotipartで画像のアップロードを非同期にしjsonを受け取る

概要 みなさんこんにちはcandleです。今回はremotipartとcarrierwaveを使って画像のアップロードをajax化したいと思います。 railsのフォームはremote設定をするだけで …

ruby on railsで出力されるlog(ログ)のフォーマットを変更する

概要 みなさんこんにちはcandleです。今回はrailsのログに関する記事です。railsは決まった記述でログを出力します。 webアプリケーションを実行中におかしな挙動が合った場合はこのログをもと …

wordpressで任意のサブカテゴリー全てをget_categoriesで取得する

概要 みなさんこんにちはcandleです。今回はwordpress開発でよくあるサブカテゴリーを全て取得する方法を紹介します。 カテゴリー一覧をサイドバーに表示したい時があります。この時、get_ca …

railsのform_forとstrong parametersを使用して画像をアップロードする

概要 みなさんこんにちはcandleです。今回はrailsのform_forを使って、railsプロジェクトのpublicディレクトリに画像をアップロードしてみましょう。 form_forは基本的にデ …

railsのfluent-loggerとdevise gemを使ってユーザーの行動をfluentdサーバに収集する

概要 fluentdと言えば、ビックデータで扱うようなデータを集め出力するサーバですが、これとrailsのfluent-logger gemとdevise gemを組み合わせてユーザーの行動ログをとっ …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ