joppot

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

プログラミング

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

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


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

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

関連記事

Chart.js 2.0でy軸の最大値(scales max)と最小値を設定する

概要 みなさんこんにちはcandleです。今回はChart.js2.0でy軸の最大値、最小値を設定する方法を紹介します。 Chart.js 2.0では特に指定しないと自動的に、y軸の最大値を設定してく …

railsのwebrickでi18nの言語切り分けをサブドメインで設定する

概要 みなさんこんにちはcandleです。最近では海外展開も視野に入れたwebアプリケーションの開発が行われることが多くなってきているような気がします。 そうなってくると、webアプリケーションの国際 …

fabricのsshのネットワーク設定でパスワードか公開鍵を使って認証する

概要 皆さん今日はcandleです。今回はsshを使ったfabricの設定をしましょう。 一般にsshにはパスワード認証と公開鍵認証があるので、そのどちらも試してみましょう。 もちろんセキュリティ面で …

phpでcompassを使った開発の仕方

概要 みなさんこにちはcandleです。今回はphpでcompassを使いたいと思います。 compassは別名scssともいいます。 compassはphpのライブラリが既にあります。 しかし、その …

javascriptでのJSONの大きさ(サイズ)の取得

概要 みなさんこんにちはcandleです。今回はプログラミングで少し手間取ったJSONサイズ取得の問題について書いていこうと思います。 JSONはjavascirptでわりと多く使われるオブジェクト型 …

  • English
  • 日本語

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