TinyMysqlというRubyのライブラリ的何かを作ってみました。
これはなに?
MySQLのCLIを使ったRubyのMySQLライブラリです。 普通のMySQLのライブラリと違ってCLIさえインストールされていればどこでも使えます。
なんでつくったの?
とにかく手軽にRubyでMySQLを使いたい、ということがたまにあるんですよ。ないですか?
MySQL/Rubyやmysql2はCライブラリの依存関係がたまにめんどくさくなるのでCLIで適当にできるライブラリがあるとうれしかったので作りました。
qeuryメソッドの出力はHashなので「文字列をパースして…」とか考えなくてすむのがよいと思います。
使い方
ちょうかんたんな使い方は以下の通り。
#!/usr/bin/env ruby # ▼▼▼ おまじない ▼▼▼ require 'open-uri' require 'digest/sha1' tm = open('https://goo.gl/6z8rE1', &:read) Digest::SHA1.hexdigest(tm) == '4028a6764164a69086bb28e7a940380bfbf7cc71' or raise 'checksum error' eval tm # ▲▲▲ おまじない▲▲▲ require 'pp' mysql = TinyMysql.new(username: 'scott', password: 'tiger', database: 'mysql') pp mysql.query('show tables') # => [{"Tables_in_mysql"=>"columns_priv"}, # {"Tables_in_mysql"=>"db"}, # {"Tables_in_mysql"=>"event"}, # {"Tables_in_mysql"=>"func"}, # {"Tables_in_mysql"=>"general_log"}, # {"Tables_in_mysql"=>"help_category"}, # {"Tables_in_mysql"=>"help_keyword"}, # {"Tables_in_mysql"=>"help_relation"}, # {"Tables_in_mysql"=>"help_topic"}, # {"Tables_in_mysql"=>"innodb_index_stats"}, # {"Tables_in_mysql"=>"innodb_table_stats"}, # {"Tables_in_mysql"=>"ndb_binlog_index"}, # {"Tables_in_mysql"=>"plugin"}, # {"Tables_in_mysql"=>"proc"}, # {"Tables_in_mysql"=>"procs_priv"}, # {"Tables_in_mysql"=>"proxies_priv"}, # {"Tables_in_mysql"=>"servers"}, # {"Tables_in_mysql"=>"slave_master_info"}, # {"Tables_in_mysql"=>"slave_relay_log_info"}, # {"Tables_in_mysql"=>"slave_worker_info"}, # {"Tables_in_mysql"=>"slow_log"}, # {"Tables_in_mysql"=>"tables_priv"}, # {"Tables_in_mysql"=>"time_zone"}, # {"Tables_in_mysql"=>"time_zone_leap_second"}, # {"Tables_in_mysql"=>"time_zone_name"}, # {"Tables_in_mysql"=>"time_zone_transition"}, # {"Tables_in_mysql"=>"time_zone_transition_type"}, # {"Tables_in_mysql"=>"user"}]
ファイルをダウンロードしてローカルで読み込んでもよいと思います。
$ curl https://goo.gl/6z8rE1 -L -o tiny_mysql.rb $ shasum tiny_mysql.rb 4028a6764164a69086bb28e7a940380bfbf7cc71 tiny_mysql.rb $ RUBYLIB=. ruby -r tiny_mysql -e 'p TinyMysql.new(username: "scott", password: "tiger").query("select 1")' [{"1"=>"1"}]