なぜやるか?
普段なんとなく必要な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
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
公開してみる
まずは、以下のリンクからアカウントを作ります。
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/