初めてのpull request


##バグの発見

rubyでGoogle Maps APIを簡単に扱えるgemがあります。

- [zilverline/google-maps](https://github.com/zilverline/google-maps)

これがmacでは動くけど、windowsだとエラーが出て動きません。
原因はログファイルの出力で`/dev/null`を使ってるから。

これをwindowsでは`nul`を使うように修正すればmacでもwindowsでも使えるようになります。

- [ryu22eBlog:Windowsコマンドプロント版の「/dev/null」](http://blog.livedoor.jp/ryu22e/archives/65030819.html)

というわけで修正したものをgithubにアップして、本家の作者に取り込んでもらえるようにpull requestを送るまでの流れをまとめました。

##GithubにSSHキーの登録

主に以下の記事通りに進めます。
キーの登録が既に済んでる人はこの作業をやる必要はありません。

- [git初心者がmacでgithubを使うまでのTips – githubのお勉強 | clicktx::Tech::Memo](http://perl.no-tubo.net/2011/12/18/git%e5%88%9d%e5%bf%83%e8%80%85%e3%81%8cmac%e3%81%a7github%e3%82%92%e4%bd%bf%e3%81%86%e3%81%be%e3%81%a7%e3%81%aetips-github%e3%81%ae%e3%81%8a%e5%8b%89%e5%bc%b7/)

```bash
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa): ↓（エンターキーの入力）
Created directory '/Users/username/.ssh'.
Enter passphrase (empty for no passphrase): 設定したいパスワードを入力↓
Enter same passphrase again: 上で入力したのと同じパスワードを入力↓
Your identification has been saved in /Users/username/.ssh/id_rsa.
Your public key has been saved in /Users/username/.ssh/id_rsa.pub.
The key fingerprint is:
：
：
：
$ cat ~/.ssh/id_rsa.pub | pbcopy
```

- [| pbcopy で cat した内容をクリップボードへコピーする « pplog.org](http://pplog.org/?p=1741)

以上の操作でクリップボードに公開鍵がクリップボードにコピーされるので、下記ページから登録します。

- [SSH Keys](https://github.com/settings/ssh)

登録が済んだら、接続できるかテストしてみます。

```bash
$ ssh -T git@github.com
（パスワード入力画面が出るので、先ほど設定したパスワードを入力）
Identity added: /Users/username/.ssh/id_rsa (/Users/username/.ssh/id_rsa)
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
```

以上のように`successfully`と出れば、SSHの設定はうまくいっています。

##修正してpull request

ここからが本番です。
主に下記の記事の通りに進めます。

- [始めてのpull request @ GitHub - rcmdnk's blog](http://rcmdnk.github.io/blog/2013/05/19/computer-git-github/)

forkしてリポジトリをコピーしてきたら作業に移ります。

```bash
$ git clone git@github.com:inarin/google-maps.git
$ cd google-maps
$ ls
Gemfile			Rakefile		spec
LICENSE.mkd		google-maps.gemspec
README.mkd		lib
$ git checkout -b external
```

これで`external`ブランチに移ったので、ファイルを修正します。

```lib/google-maps/logger.rb
require 'logger'

module Google
  module Maps
    module Logger

      attr_accessor :logger
          
      def log_file=(file)
        self.logger = ::Logger.new(file)
      end
      
      def self.extended(base)
        # base.log_file = "/dev/null"
        base.log_file = RUBY_PLATFORM.index(/mswin(?!ce)|mingw|cygwin|bccwin/) ? "nul" : "/dev/null"
      end
    end
  end
end
```

- [ryu22eBlog:Windowsコマンドプロント版の「/dev/null」](http://blog.livedoor.jp/ryu22e/archives/65030819.html)
- [RUBY_PLATFORM - みずぴー日記](http://d.hatena.ne.jp/mzp/20070913/platform)
- [index (String) - Rubyリファレンス](http://ref.xaio.jp/ruby/classes/string/index)

変更をcommitしてリモートへpushします。

```bash
$ git commit -am "windows bug fix"
$ git push origin external
```

これでGitHubのレポジトリに`external`ブランチができます。

あとは記事の通りに…。

- [始めてのpull request @ GitHub - rcmdnk's blog](http://rcmdnk.github.io/blog/2013/05/19/computer-git-github/)

##追記

pull requestを無事に送れたので参考までにリンクを貼っておきます。

- [windows bug fix by inarin · Pull Request #1 · zilverline/google-maps](https://github.com/zilverline/google-maps/pull/1)