概要
みなさんこんにちは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の作り方にします。
このシリーズ
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
作成された、gemに移動して、中身を確認しましょう。
cd good_item ls
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ファイルを開きます。
上から、見ていきましょう。
「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.」
作成したgemが依存するgemを初期化する
gemspecファイルの下の方に、作成したgemが依存するgemの記述があると思います。
初期設定で、railsとsqlite3の記述があります。
dependency railsは作成したgemがどうしてもrailsの任意のバージョン以降の関数や記述を使う場合、railsのバージョンを指定します。参考までにgithubの多くのgemはrailsのバージョンを指定してないものが多いです(主観)。もしも、作っているgemが特にrailsのバージョンに依存しないなら、消してしまいましょう。不安なら、バージョンを3.2.0以上と指定しておくとよいでしょう。というのも、railsは3.2.0で大幅なアップグレードがあり、それ以降のバージョンで動くものはだいたい、今でも動くからです。
sqlite3の項目は開発環境下でのデーターベースをsqliteを想定するという記述です。ですが、そのgemがどうしてもsqliteじゃなくてはならない場合を除いて、削除してかまいません。
これでgemspecのセットアップが完了しました。
まとめ
基本設定は以上です。次回、railsアプリケーション内で使用する為の設定を行います。
Rails向けのgem作成方法を探していて辿り着きました。
開発で一番難しいのは「開発環境構築」だと考えています。この記事はとてもわかりやすくまとまっていて、自作gemを開発する環境まで最短で到達できました。ありがとうございます。
typoがひとつありました。
×「authers」
○「authors」
ありがとうございます。
修正しました。