hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

メソッドにcallbackを追加するgemをつくってみた

概要

以前からgemを作ってみたいと思いつつ作れてなかったので作成してみました。
methodにcallbackを追加するembed_callbacksというgemを作成しました。
探すと似たようなgemが出てくるので車輪の再発明的なものになりますが作成してみました.

gemの機能

まだそこまで機能はないのですが以下のようになります。

  • メソッドの前に処理を追加
  • メソッドの後に処理を追加
  • メソッドの前後に処理を追加

上記を簡単に呼び出せるようにしています。
今後更に機能は追加する予定です。詳細はGithubを確認していただければと思います。

gemの作り方

参考記事

https://qiita.com/coe401_/items/8e90373a76f590ef0abe
しおいさんがQiitaで取り上げてくれた記事を参考にしました。
丁寧に説明してくれていてとてもいい記事ですね。

gemの命名

https://guides.rubygems.org/name-your-gem/
こちらの記事でどのような命名するとよいか記載されている内容を参考にしました。

gem searchコマンドもしくは https://rubygems.org/ から作成するgem名を検索しておき
同じ名前にならないようにしておくのがいいかと思います。
はじめに考えていた名前はすでに登録されていたので別名を考えていた今回の命名になりました。
命名は先行優位ですね。

困ったこと

RubyGemsへの登録

RubyGemsにユーザ登録時のメールアドレスを間違ってしまい、
確認メールをチェックできなくなってしまいました。
ログインはできるのですが確認メールをチェックしてください。というような文言で確認できない状況です。
メールアドレスは一度目の登録からは変更できないようなので、
とりあえずはRubyGemsには登録しないでしばらくGithubだけで公開しておきます。
同様の問題で困っている人は少なそうですが、解決方法がわかる方いらっしゃいましたら情報いただければと思います。
どうしようもなくなったらhotoolong2みたいなのにして登録しようと思います。

gemの作成

参考記事にはbundle gem hogehoge などすると対話式にオプションを設定できるようなものもあったのですが、私の環境ではそうならなかったので引数などを設定しました。

$ bundle gem embed_callbacks --test=rspec --coc --mit
Creating gem 'embed_callbacks'...
MIT License enabled in config
Code of conduct enabled in config
      create  embed_callbacks/Gemfile
      create  embed_callbacks/lib/embed_callbacks.rb
      create  embed_callbacks/lib/embed_callbacks/version.rb
      create  embed_callbacks/embed_callbacks.gemspec
      create  embed_callbacks/Rakefile
      create  embed_callbacks/README.md
      create  embed_callbacks/bin/console
      create  embed_callbacks/bin/setup
      create  embed_callbacks/.gitignore
      create  embed_callbacks/.travis.yml
      create  embed_callbacks/.rspec
      create  embed_callbacks/spec/spec_helper.rb
      create  embed_callbacks/spec/embed_callbacks_spec.rb
      create  embed_callbacks/LICENSE.txt
      create  embed_callbacks/CODE_OF_CONDUCT.md
Initializing git repo in /Users/hotoolong/repositories/embed_callbacks
Gem 'embed_callbacks' was successfully created. For more information on making a RubyGem visit https://bundler.io/guides/creating_gem.html

まとめ

比較的簡単に作成まではいけそうなので、他にもgemにしていなかったものや放置してるものを徐々にupしていければいいかなと思っています。 なにか助言やPRなど私の困ったことへの解決の糸口になるものなどアドバイスいただければとてもありがたいです。

参考にした記事

はじめての自作gem 「Hello, Tama!」を出力してみる - Qiita
RubyGemはめっちゃ簡単に作れる! | 酒と涙とRubyとRailsと
意外と簡単!? Ruby Gemの作り方 - Qiita
RubyGemsの作り方 - Qiita
Bundler: How to create a Ruby gem with Bundler
Name your gem - RubyGems Guides
READMEの良さそうな書き方・テンプレート【GitHub/Bitbucket】 - karaage. [からあげ]
個人gemのCIをほぼ全部Travis CIからGitHub Actionsに移行した - くりにっき
GitHub Actions がローンチされたのでマイグレートしてる - HsbtDiary(2019-08-11)
GitHub - actions/setup-ruby: Set up your GitHub Actions workflow with a specific version of Ruby
今の時代だからこそオススメする車輪の再発明|erukiti|note