概要
gem作ってGithubに配置するまで(RubyGems.orgへのpush除く)の続き。
FacebookとのやりとりをMockするfacemockというGemを作った。
作ったGemの使い方と、作るときにやったこと(First Commit以降)を紹介しておきます。
背景・目的
ユーザ・テストユーザの管理ができるFacebookのMockがほしかった。
(適当なテストユーザを作成、Access Tokenでユーザ取得すると作成したテストユーザが返ってくる、等)
fb_graph-mockや他のmockのgemを使うことも考えたが、ユーザは真面目に扱って欲しかったので、自作することにした。
要素技術
- ruby (2.1.1, 2.1.0, 2.0.0, 1.9.3)
- gem (versionはそれぞれ最新を使用)
- rspec
- simplecov
- sqlite3
- activerecord
- fb_graph
- github
- バッジ
- 絵文字
- rubygems
gemの概要
もとのコードをそのまま使えばMockされるようにしたかったため、
MockをonにするとFacebookと通信するgemのネームスペースMockに差し変わる仕組みにした。
今のところFbGraphのみ対応。
ほんの一部のみ。必要になったら拡張していく。
- Mockのon/off
- Mock on のときの
- テストユーザ作成/一覧取得/削除
- ユーザ取得
(今後koalaとかもやってみたい。)
雛形の作成~First Commit
gem作ってGithubに配置するまで(RubyGems.orgへのpush除く)を参照。
こちらの記事ではgem作成メインで進めます。
使い方
README.md参照。
First Commit ~ ver 0.0.1 までにやったこと
実装は省略。githubリポジトリを参照
ハマった点はqiita記事作成済み。
ここでは以下について書く。
- カバレッジ見える化 (simplecovの導入)
- rakeタスクでテスト (Rakefileの設定追加)
- ファイルの整理 (空ディレクトリ作成+.gitkeep配置, .gitignoreの設定追加)
- 色んなバッジ付けてみる
- RubyGems.orgにpush
simplecovの導入
ver 0.0.1をコミットするまで(ある程度使えるものになるまで)は、githubにpushしたくない。
いずれはCoveralls等でやるつもりだが、しばらくはsimplecovを使うことにした。
## simplecovのインストール
$ vi facemock.gemspec # 次の一行を追加 : spec.add_development_dependency "simplecov"
$ bundle install
## spec_helper.rbに設定追加
$ vi spec/spec_helper.rb
$ cat spec/spec_helper.rb
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
require 'simplecov'
SimpleCov.start do
add_filter '/spec/'
end
require 'facemock'
## rspec実行 & coverage確認
$ rspec
Facemock
should have a version number
Finished in 0.00188 seconds (files took 0.08467 seconds to load)
1 example, 0 failures
Coverage report generated for RSpec to /home/aries/personal/applications/tmp/facemock-0.0.0/coverage. 2 / 2 LOC (100.0%) covered.
$ firefox coverage/index.html #<= ブラウザでcoverageを確認
rakeタスクでテストできるようにする
rspecの設定を書いておく。
## Rakeファイルに設定追加
$ vi Rakefile
$ cat Rakefile
require "bundler/gem_tasks"
require "rspec/core/rake_task"
RSpec::Core::RakeTask.new(:spec)
task :default => :spec
## タスク一覧にspecが追加されたことを確認する
$ rake -T
rake build # Build facemock-0.0.1.gem into the pkg directory
rake install # Build and install facemock-0.0.1.gem into system gems
rake release # Create tag v0.0.1 and build and push facemock-0.0.1.gem to Rubygems
rake spec # Run RSpec code examples
## rakeタスクでテストしてみる
$ rake spec
...
/.../bin/ruby -I/.../gems/rspec-core-3.0.3/lib:/.../gems/rspec-support-3.0.3/lib -S /.../gems/rspec-core-3.0.3/exe/rspec ./spec/facemock_spec.rb
Facemock
should have a version number
Finished in 0.00134 seconds (files took 0.06351 seconds to load)
1 example, 0 failures
ファイルの整理 (空ディレクトリ作成+.gitkeep配置, .gitignoreの設定追加)
.gitignoreにGemfile.lockを書いていたが、First Commit時に含まれていたので消す。
## Gemfile.lockを消す
$ git rm —cached Gemfile.lock
$ vi .gitignore # 使いそうなファイル名を追加
$ cat .gitignore
*.gem
*.rbc
.bundle
.config
.yardoc
Gemfile.lock
InstalledFiles
_yardoc
coverage
doc/
lib/bundler/man
pkg
rdoc
spec/reports
test/tmp
test/version_tmp
tmp
tmp/
db/*.sqlite3
vendor/bundle/
vendor/bundler/
log/*.log
$ git add .
$ git push orign master
## Gemfile.lockが含まれないことを確認する
$ bundle install
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: .gitignore
#
no changes added to commit (use "git add" and/or "git commit -a")
dbディレクトリが必要になので作成しておく。
空だとgit addできないので.gitkeepを配置する。
$ mkdir db
$ git status
# On branch master
nothing to commit (working directory clean)
$ touch db/.gitkeep
$ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# db/
nothing added to commit but untracked files present (use "git add" to track)
git add .
git commit -m "Added db directory"
git push origin master
色んなバッジ付けてみる
初Githubリポジトリ作成で、色々使ってみたかった。バッジが欲しかった。のでやってみた。
付けたバッジは、
- Travis Ci : CI
- Coveralls : カバレッジ計測
- Gemnasium : 依存gemの更新状況通知
- Code Climate : コード品質計測
- Version Badge : バージョン表示
色々紹介されているサイトがあるので、ここは参考にしたサイトだけ紹介しておく。
- Travis CI, Coveralls, Code Climate
- http://blog.ruedap.com/2013/09/02/travis-ci-coveralls-code-climate-github-badge
- Gemnasium
- http://qiita.com/skoji/items/6ff1e1d539416d523e8b
- Version Badge
- http://d.hatena.ne.jp/kouji0625/20130914/p1
コミットメッセージに絵文字を入れるようにする
こんな記事を見つけた。
同じルールでやってみて、自分に合えば継続、合わなければ止める。
やりかたは簡単で、コミット時に絵文字を指定するだけ。
表示についてはリポジトリを参照。
git commit -m ":memo: Added badge to README.md"
備考 : 絵文字いっぱいあるんだ・・・。
RubyGemsにpush
色々試してみたので、そろそろversion 0.0.1を登録してみる。
RubyGems.orgは事前にサインアップしておく。
(メールアドレス、ハンドルネーム、パスワードだけで簡単に作成できる)
下記手順では、概要と説明が同じだよ、とか、ホームページがないよ、とか言われた。
後日(多分0.0.2に上げるとき)対応することにする。
$ mkdir pkg
$ cd pkg
$ gem build ../facemock.gemspec
WARNING: no homepage specified
WARNING: description and summary are identical
Successfully built RubyGem
Name: facemock
Version: 0.0.1
File: facemock-0.0.1.gem
$ gem push
Enter your RubyGems.org credentials.
Don't have an account yet? Create one at http://rubygems.org/sign_up
Email: ogawattim@gmail.com
Password:
Pushing gem to https://rubygems.org...
Successfully registered gem: facemock (0.0.1)