kdnakt blog

hello there.

Go言語のOSSにプルリクエストを送るのに苦労した話とか

f:id:kidani_a:20190214071548j:plain

少し前にgitの説明記事がバズっていたが、自分もgitの説明してくれって言われたら嫌な顔をする気がする。

ので、自分がGithubでGo言語のOSSをフォークしてプルリクエストを送る際に困ったポイントをまとめておく。

 

 

[GithubリポジトリをクローンしたときのGOPATH設定]

Go言語の場合、ソースコード中にGithubリポジトリが指定されていることがある。今回扱っていたプロジェクトだと下記のように、自プロジェクト内の別ディレクトリを参照するようになっていた。

package main

import (
	"context"
	"os"

	"github.com/write-blog-every-week/write-blog-every-week-remind/config"
    ...(略)...
)

 

他の言語でプルリクエストを作成する場合同様、オリジナルのリポジトリをフォークして、クローンして開発しようとすると、リポジトリのオーナー名が変わってしまう。

そのため、プロジェクト内の別ディレクトリのコードの変更を反映させるためには、上記のコードを下記のように変更して開発を行う必要があった。

package main

import (
	"context"
	"os"

	"github.com/kdnakt/write-blog-every-week-remind/config"
    ...(略)...
)

 

これはめんどくさい……と思っていたところ、下記のブログで解決策が書かれていた。

deeeet.com

 

前述の通りgitよく分かってないマンとしては、クローンする際にディレクトリ名をオリジナルのリポジトリに合わせて変更するシンプルな方式を採用した。

$ git clone https://github.com/kdnakt/write-blog-every-week-remind.git $GOPATH/src/github.com/write-blog-every-week/write-blog-every-week-remind

 

これで問題なく開発を行い、プルリクエストを送ることができるようになった。

 

[フォーク元のリポジトリに追従する]

2018年はいくつかのOSSにプルリクエストを送ったが、いずれの場合もほぼ単発で、継続して一つのプロジェクトにコントリビュートするという経験は今回が初めてだった。

kdnakt.hatenablog.com

 

継続して開発をしていると、当然別の開発者がコミットした偉大な変更を自分がフォークしたリポジトリに取り込んでからでないと、新たなプルリクエストを送ることが難しい。

どうしたものか……とググったところ、以下の記事にたどり着いた。

qiita.com

 

本家リポジトリをupstreamとして追加し、fetchし、mergeせよとのこと。fetchなんて普段pullしか使わないから怖い……と思いながらなんとか以下のコマンドを実行して、フォークしたリポジトリを最新の状態にすることができた。

$ git remote add upstream https://github.com/write-blog-every-week/write-blog-every-week-remind.git // 初回のみ実行
$ git fetch upstream
$ git merge upstream/master

 

あとは最新の状態になったmasterブランチから新たに開発用のブランチを作成して、いつも通り開発をしてプルリクエストを送るだけ。

無事プルリクエストを送ることができた。 

 

[まとめ]

今週のブログテーマはプルリクエストということで、aws-cdkに続き、Go言語のプルリクエストを送るための方法についてまとめた。

他のGo言語プロジェクトにもプルリクエスト送ってみたい。

 

その前にマスター(id:kojirooooocks)、どうかレビュー&マージお願いします! 🙇‍♂️🙇‍♂️🙇‍♂️

github.com

 

次は、その週に書かれたブログのはてなブックマーク数ランキングをSlackに送る機能をつける予定。