かなり ここ を参考にさせてもらいましたが、メモとして記載
gem プロジェクトの作成
- 以下のコマンドを入力すると "qiita_cmd" という名前の gem を作るためのリポジトリが作成される
$ bundle gem qiita_cmd
# 上記コマンド実行後にできるツリー構成
.
├── Gemfile
├── LICENSE.txt
├── README.md
├── Rakefile
├── lib
│ ├── qiita_cmd
│ │ └── version.rb
│ └── qiita_cmd.rb
└── qiita_cmd.gemspec
- qiita_cmd.gemspec を開き、今回必要となる gem ファイルを追記するための編集をおこなう
- 今回追加する gem は Thor, json, faraday の 3 つ
qiita_cmd.gemspec
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'qiita_cmd/version'
Gem::Specification.new do |spec|
spec.name = "qiita_cmd"
spec.version = QiitaCmd::VERSION
spec.authors = ["Wataru.Kasahara"]
spec.email = ["xxxx@gmail.com"]
spec.summary = %q{TODO: Write a short summary. Required.}
spec.description = %q{TODO: Write a longer description. Optional.}
spec.homepage = ""
spec.license = "MIT"
# インデックスにキャッシュされているファイル一覧
spec.files = `git ls-files -z`.split("\x0")
# spec.files の中で bin/ 下にあるファイルを実行コマンドとする
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
# Gem パッケージを使用する際に require するファイルのあるディレクトリを指定
spec.require_paths = ["lib"]
spec.add_development_dependency "bundler", "~> 1.5"
spec.add_development_dependency "rake"
########## 今回の実装用に追加
spec.add_runtime_dependency "faraday"
spec.add_runtime_dependency "json"
spec.add_runtime_dependency "thor"
##########
end
実行コマンドを作る
bin/qiita_cmd
qiita_cmd
puts "Hello, QiitaCmd"
動かしてみる
$ rake -vT
$ rake build
$ sudo gem install pkg/qiita_cmd-0.0.1.gem
$ bundle install
$ bundle exec qiita_cmd
- bin/qiita_cmd が実行され、下記の表示される
Hello, QiitaCmd
ユーザ情報を取得するコマンドを作成
get_user_info
input
- USERNAME
編集ファイル
Qiita API のドキュメントはこちら
- 今回は Username を指定することで、指定した User の情報を表示するコマンドを実装
bin/qiita_cmd
require 'qiita_cmd'
QiitaCmd::Command.start
lib/qiita_cmd.rb
require "qiita_cmd/version"
require "qiita_cmd/command"
module QiitaCmd
# Your code goes here...
end
新規作成ファイル
lib/qiita_cmd/command.rb
require "qiita_cmd"
require "thor"
require "qiita_cmd/command/get_user_info"
module QiitaCmd
class Command < Thor
end
end
lib/qiita_cmd/command/get_user_info.rb
require "qiita_cmd/command"
require 'json'
require 'faraday'
module QiitaCmd
class Command < Thor
desc "get_user_info USERNAME", "get_user_info of USERNAME"
def get_user_info(username)
conn = Faraday::Connection.new(:url => 'https://qiita.com') do |builder|
builder.adapter Faraday.default_adapter
end
puts "-------------------------------------"
puts "#{username} の基本情報取得"
response = conn.get do |req|
req.url "/api/v1/users/#{username}"
end
parsed_output_data = JSON.parse(response.body)
puts "------------------------------"
puts parsed_output_data["url_name"]
puts parsed_output_data["description"]
puts "------------------------------"
end
end
end
実行
# 下記のように実行すると qiita_cmd として使用できるコマンド一覧が表示される
$ bundle exec qiita_cmd
Commands:
qiita_cmd get_user_info USERNAME # get_user_info of USERNAME
qiita_cmd help [COMMAND] # Describe available commands or one specific command
# get_user_info コマンドを指定して実行すると
# lib/qiita_cmd/command/get_user_info.rb で実装したコマンドが実行される
$ bundle exec qiita_cmd get_user_info kasaharu
-------------------------------------
kasaharu の基本情報取得
------------------------------
kasaharu
ソフトウェアエンジニア。
Android / Ruby / RoR / DevOps
------------------------------