0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rubyのgemの作り方を学んでみた

Last updated at Posted at 2024-10-14

なぜやるか?

普段なんとなく必要なgemをinstallして使っているが
実際どうやって作られて公開されているかを知ってみたかった。

どういうgemを作るか?

今回は、よくSQLのQuery文を忘れることが多いので
入力値から自動でSQL文を作成してくれるgemを作ってみようと思います。
名前は、「sql_craft」にします!

作ってみる

https://guides.rubygems.org/make-your-own-gem/ を参考に進めます。

まず、以下のようなディレクトリ構成にする必要があります。

$ tree
.
├── sql_craft.gemspec # gemspecは、gemの中身、作成者、バージョンを定義する。
└── lib
    └── sql_craft.rb # 実際のコードの中身

./lib/sql_craft.rb を 以下のように記述します。
とりあえず、入力値を元に
DATABASEのcreate文とdrop文を出力するプログラムを書いてみます。

module SqlCraft
  # DB関係
  class Database
    def initialize(name)
      @name = name
    end

    def create
      "CREATE DATABASE #{@name}"
    end

    def drop
      "DROP DATABASE #{@name}"
    end
  end
end

動きは、irbでデバッグして確認できました。
スクリーンショット 2024-10-14 21.51.47.png

sql_craft.gemspec を以下のように記述します。

Gem::Specification.new do |s|
  s.name        = "sql_craft"
  s.version     = "0.1.0" # プレリリース
  s.summary     = "A simple SQL query builder gem"
  s.description = "you can be easier to make sql queries!!"
  s.authors     = ["Rinmaru"]
  s.email       = "xxxxxxxxxxxxxxx"
  s.files       = ["lib/sql_craft.rb"]
  s.homepage    = "https://rubygems.org/gems/sql_craft"
  s.license     = "MIT"
end

ローカルにgemを作成するため以下を実行します。

$ gem build sql_craft.gemspec

すると... 以下のような警告文が出てきました。

WARNING:  make sure you specify the oldest ruby version constraint (like ">= 3.0") that you want your gem to support by setting the `required_ruby_version` gemspec attribute
WARNING:  See https://guides.rubygems.org/specification-reference/ for help

調べてみると、gemが動くRubyのversionを記述しろ?とのことですので
sql_craft.gemspecに以下の内容を記述します。
https://rubygems.org/gems/net-http gem のページ見ると書いてあるやつですね。

 s.required_ruby_version = ">= 3.0"

再度実行すると警告文が出ずに成功しました。

  Successfully built RubyGem
  Name: sql_craft
  Version: 0.1.0
  File: sql_craft-0.1.0.gem

インストールしてみました。

$ gem install ./sql_craft-0.1.0.gem
Successfully installed sql_craft-0.1.0
Parsing documentation for sql_craft-0.1.0
Installing ri documentation for sql_craft-0.1.0
Done installing documentation for sql_craft after 0 seconds
1 gem installed

自分がつくったgemが動くのはなんか気持ちが良いですね
スクリーンショット 2024-10-14 22.08.18.png

公開してみる

まずは、以下のリンクからアカウントを作ります。
https://rubygems.org/sign_up

以下を実行して、ターミナルでログインします。

$ curl -u user_name_hoge https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials;
$ chmod 0600 ~/.gem/credentials

以下を実行すると...pushできました。

$ gem push sql_craft-0.1.0.gem
Pushing gem to https://rubygems.org...
Successfully registered gem: sql_craft (0.1.0)

実際にアップロードされました!! (感動)
https://rubygems.org/gems/sql_craft

コマンドからも確認できました。

$ gem list -r sql_craft

*** REMOTE GEMS ***

sql_craft (0.1.0)

感想

普段何気なくインストールしているgemがどのようにして作られて
公開されるのか知れて、Rubyに関して知識が深められた。
今回作った、「sql_craft」gem は、databaseのcreate文とdrop文だけなので
今後少しずつ、table, column の方も拡張していこうと思います。

参考記事

https://guides.rubygems.org/make-your-own-gem/
https://qiita.com/9sako6/items/72994b8b1c00af4e61fe
https://techblg.app/articles/howt-make-gem-and-publish/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?