独自gem作成その1 / bundler
本日からは、独自の gem を作ることを目標にいろいろ学習を進めていきます!
gem についてはこちらの記事で少し触れていますのでご参照ください✨
目次
1.gem 作成前の下準備
独自の gem はまだ思いついていないので、まずはRubyGemsの公式ページを読んでみます。
目次の順番に読んでいき、MAKE YOUR OWN GEM
を読み始めてみると、bundler で gem を作るというリンクがあります💡
ちょっと寄り道してリンク先の bundler のページを見てみると、bundler 1.13で gem を作る解説ページに飛びます👀
私のパソコンにインストールされている bundler のバージョンは 1.17.1 なので、1.17の解説ページを読むことにしました😊
Bundler: How to create a Ruby gem with Bundler
私のパソコンには bundler がいつの間にかインストールされています。というか、過去にインストールした記憶はあるのですが、なぜだったか思い出せません笑
なのでインストール手順は飛ばして、以下のコマンドでバージョンの確認をします。
$ bundler -v
バージョンは 1.17.1 です💡
ちなみに bundler 未インストールの場合、以下のコマンドでインストールできます。
$ gem install bundler
2.bundler で gem を作る練習
2-1. Getting Started
先程の bundler のサイトに gem を作る例が載っているので、まずはそれに従ってやってみます。
bundler で新しく gem を作るには、まず以下のコマンドを実行します。
$ bundler gem 作りたいgem名
ここではfoodie
という名前の gem を作ってみます!
We call our gem foodie because this gem is going to do a couple of things around food, such as portraying them as either “Delicious!” or “Gross!”. Stay tuned.
どうやら food に対してDilicious!
かGross!
のどちらか反応をするための gem っぽいですね🙂
bundler gem foodie
を実行すると、3つの質問をされます。
どれも今は正直分からないので、テストファイルはよく見かけるほうのrspec
にしておいて、それ以外はyes
としておきます。
無事にfoodie
という gem が作れたみたいです!
ホームディレクトリにfoodie
というファイルができたみたいです!これが gem ですね😊
foodie
の中にも様々なファイルが作成されています。
ターミナル操作は大変になってくるので、ここからは必要に応じてVSCodeで作業します😗
2-2. Testing our gem
VSCodeでfoodie
を開いてみると、ファイルが作成されているのがより分かりやすくなります。
次のキャプチャはfoodie
の中のfoodie.gemspec
を開いている様子です。authors や homepage などダミーの文字列が入っていますが、正しく入力しないと進めないので、適当に入力して、飛ばしたいところはコメントアウトしていきます😐笑
次にbundle install
を実行します。ここでエラーがあると、先程のダミーがまだどこかに残っている可能性があります💀
エラー文が丁寧に教えてくれるので、読んだとおりに対処すれば解決は難しくないと思います。
bundlerのページを読み進めていくと、foodie_spec.rb
に書く内容が載っているので、コピペしてみます。
foodie_spec.rb
には元々何か書かれているのでそれはそのままにして、# added by sayaka
以下がコピペ文章になります。
ちなみにコピペそのままだと 17行目でdescribe
が Object に定義されていないというエラーが起きてしまうので、ここは元々書いてあるコードの真似をして冒頭にRSpec.
を付け足しています⛄️
コードを見ると、どうやらブロッコリーが不味いみたいですね😂笑
bundler exec rspec spec
を実行します。
テスト成功です🎉🎉
2-3. Using other gems
続いて、自分の gem から Active Support のpluralize
メソッドを使うとのことですが、なんのこっちゃという感じですね〜🙃
解説を読んだところ、activesupport
という gem を指しているのだと思いますが、pluralize
は今のところ謎です。
それっぽいリンクは見つかりました!笑
Method: String#pluralize — Documentation for activesupport (5.2.1)
今は言われるがままに進めてみましょう💪💪
他の gem を使うには、foodie.gemspec
に使いたい gem を関連付けます。
activesupport
への紐付けをfoodie.gemspec
の44行目に書いてみました。
次に、再びbundle install
を行います。これでactivesupport
という gem がインストールされるはずです✨
実行画面では分からなかったので、gem list
コマンドを実行し、インストール済みの gem 一覧を見てみました。
activesupport
が正しくインストールされていることが確認できました🙂
次はfood_spec.rb
のdescribe Foodie::Food
ブロック内にpluralize
のテストを作成します。
上のキャプチャでいう26〜28行目です!
最後に、doof.rb
の先頭にrequire 'active_support/inflector'
を追加し、food
クラスの中にpluralize
メソッド(14〜16行目)を定義します。
以上で Active Support のpluralize
メソッドが使えるようになったはずなので、テストしてみます!
テストは成功…っぽいですが、pluralizes a word
という出力で合っているんでしょうか…笑
てっきりfoodie.spec.rb
で設定したtomatoes
が出力されると思っていたのですが😐
仕組みがまだ分からない以上なんとも言えませんが、とりあえず本日はここまで!