RubyGemの作成

#はじめに
gemの作成と公開があるが、まずはgem作成と実行までの作業をまとめ

#準備

```
$ gem update --system

#bundler未インストールの場合はインストール
$ gem install bundler

#bundlerインストール済みの場合はアップデートする
$ gem update bundler
```

#gemのひな型を作成

```
$ bundle gem test_gem -t
Do you want to license your code permissively under the MIT license?
< code for free as long as they admit you created it. You can read more about the MIT license at http://
MIT License enabled in config
Do you want to include a code of conduct in gems you generate?
<e know who to contact in case of a violation. For suggestions about how to enforce codes of conduct, se
Code of conduct enabled in config
      create  test_gem/Gemfile
      create  test_gem/.gitignore
      create  test_gem/lib/test_gem.rb
      create  test_gem/lib/test_gem/version.rb
      create  test_gem/test_gem.gemspec
      create  test_gem/Rakefile
      create  test_gem/README.md
      create  test_gem/bin/console
      create  test_gem/bin/setup
      create  test_gem/.travis.yml
      create  test_gem/.rspec
      create  test_gem/spec/spec_helper.rb
      create  test_gem/spec/test_gem_spec.rb
      create  test_gem/LICENSE.txt
      create  test_gem/CODE_OF_CONDUCT.md
Initializing git repo in C:/Users/shige/test_gem
```

#Gem情報の更新
test_get\test_gem.gemspecの中を書き換える。

```ruby:test_gem.gemspec
# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'test_gem/version'

Gem::Specification.new do |spec|
  spec.name          = "test_gem"
  spec.version       = TestGem::VERSION
  spec.authors       = ["user name"]
  spec.email         = ["Gmail"]

  # このgemの説明を書く
  #spec.summary       = %q{TODO: This gem print Helloworld.}
　spec.summary       = %q{This gem print Helloworld.}
  #spec.description   = %q{TODO: test.}
  spec.description   = %q{test.}
  # このgemのホームページ
  #spec.homepage      = "TODO: Put your gem's website or public repo URL here."
  spec.homepage      = ""
  spec.license       = "MIT"

  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
  # to allow pushing to a single host or delete this section to allow pushing to any host.
  if spec.respond_to?(:metadata)
    spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
  else
    raise "RubyGems 2.0 or newer is required to protect against " \
      "public gem pushes."
  end

  spec.files         = `git ls-files -z`.split("\x0").reject do |f|
    f.match(%r{^(test|spec|features)/})
  end
  spec.bindir        = "exe"
  spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
  spec.require_paths = ["lib"]

  #依存関係のgemを指定
  # spec.add_dependency 'xxxx', '~>x.x'

  # 開発時に必要な依存gemが存在する場合の指定方法
  #spec.add_development_dependency "bundler", "~> 1.14"
  #spec.add_development_dependency "rake", "~> 10.0"
  #spec.add_development_dependency "rspec", "~> 3.0"
end
```

ファイルの中に　{TODO: ... } の「TODO」が記述してあるままだと、パッケージ化できない。
なので、とりあえず「TODO」の文字を削除　と　URLの削除をする。

```ruby
  #spec.summary       = %q{TODO: This gem print Helloworld.}
　spec.summary       = %q{This gem print Helloworld.}

  #spec.description   = %q{TODO: test.}
  spec.description   = %q{test.}
  
  #spec.homepage      = "TODO: Put your gem's website or public repo URL here."
  spec.homepage      = ""
```

初期では依存関係も関係ないのでコメントアウトする

```ruby
# 開発時に必要な依存gemが存在する場合の指定方法
  #spec.add_development_dependency "bundler", "~> 1.14"
  #spec.add_development_dependency "rake", "~> 10.0"
  #spec.add_development_dependency "rspec", "~> 3.0"
```

#Gemの実装
Gemの実装するにはlibディレクトリー内の gemname.rb を書き換える

```ruby:lib/test_gem.rb
require "test_gem/version"

module TestGem
  def self.greet
    'Hello World!'
  end
end
```

#Gemの実行
作成したgemファイル上で以下を実行する。
（Gemfile がある場所ってこと）

```bash:
$ bundle install
  Fetching gem metadata from https://rubygems.org/
  Fetching version metadata from https://rubygems.org/
  Resolving dependencies...
  Using test_gem 0.1.0 from source at `.`
  Using bundler 1.14.6
  Bundle complete! 1 Gemfile dependency, 2 gems now installed.
  Bundled gems are installed into ./vendor/bundle.
```
```
$ bundle exec irb
irb > require "test_gem"
 => true
irb > TestGem.greet
 => "Hello World"
```

もしも、test_gem.rb　の書換えがあった場合は、「Gemの実行」の手順をすると
書き換えた内容が反映される。

#参考
[RubyGemはめっちゃ簡単に作れる！](http://morizyun.github.io/blog/ruby-gem-easy-publish-library-rails/)