【gitをソフト開発で使いこなそう!:第13回】プルリクエストを送ってみよう!

次回の記事

terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

  terapotan.hatenablog.jp

今回は、GitHubの大きな特色である「プルリクエスト」という機能について解説します。
これが出来るようになると、他の人がGitHub上で公開しているソースコードを編集することが出来るようになります。

プルリクエストとは?

プルリクエス(プルリク・PRとも略される。)とは、GitHubに備わっているリポジトリの内容の変更をリクエスト出来る機能のことです。

プルリクエストの機能は、GitHubが独自に備えている機能です。gitに備わっている機能ではありません。

一つ例を挙げてみましょう。

誰かが、GitHub上にとあるソフトのソースコードを公開しているとします。

あなたが、このソフトのバグ(不具合)を見つけたため、公開されているソフトのソースコードを修正したいとします。

しかし、第10回で説明している理由で、プッシュ出来る人を普通、制限しているため、あなたが直接ソースコードを修正することは出来ません。

そこで直接ソースコードを修正出来る人に「こういう変更をしてくれ!」というリクエストを送ります。これが、プルリクエスです。

プルリクエストの送り方

フォークとクローン

今回は、下のリポジトリを例にしてプルリクエストを送ってみます。

github.com

Column:上のリポジトリについて

上のリポジトリは書籍「わかばちゃんと学ぶGit使い方入門」のプルリクエスト練習用リポジトリとして公開されているものです。
ですが2020年4月現在、数百件以上のプルリクエストがマージされないまま、放置されている状況です。恐らくプルリクエストが受け入れられることは……ないでしょう。

そこで、プルリクエスト練習用のリポジトリを作成しました。下のリンクから移動することが出来ます。
気軽にプルリクエストの練習に使ってください。

github.com

プルリクエストを送りたいリポジトリに移動したら、画面右上の「Fork」というボタンを押してください。

Forkボタンの場所

このボタンを押すと、今表示しているリポジトリが自分のアカウントにコピーされます。(これをボタンの名前の通り、フォークと言います。)

フォークの概念図

フォークしたリポジトリの名前を見ると、elmas3/pull-request-practiceからterapotan/pull-request-practiceに変わっているのが分かります。(terapotanは私のアカウント名です。)

フォーク成功

さらにフォークしたリポジトリに変更を加えるために、リポジトリをローカル(自分のPCとか)にコピーします。
これをクローンと言います。

フォークしたリポジトリClone or downloadをクリックして、git@から始まるアドレスをクリップボードにコピーしてください。

アドレスを見る

中身が空のフォルダを作成し、そこでGitBashを立ち上げて、次のコマンドを入力してください。

git clone <コピーしてきたgit@から始まるアドレス>
Column:コピーと貼り付けのショートカットキー

普通Windows上では、コピーと貼り付けのショートカットキーは「Ctrl+C」と「Ctrl+V」です。
ですが、GitBashでは「Ctrl+Ins(インサートキー)」と「Shift+Ins」がコピーと貼り付けのショートカットキーとなっています。

クローンが終わったら、下のコマンドを入力して作成されたフォルダに移動してください。(カレントディレクトリを新たに作成されたフォルダにする。)

cd ./<新たに作成されたフォルダの名前>

変更を加える

新たに作成したフォルダに移動したら、新しいブランチを作成します。
ブランチ名は何でもいいですが、今回はpullreqdevとしました。

git branch pullreqdev
git checkout pullreqdev
Column:git checkout -b

「git checkout -b」と入力することで、ブランチの作成と作成したブランチへの、チェックアウトを同時に行うことが出来ます。
上の例であれば、「git checkout -b pullreqdev」と入力します。

新しく変更を加えます。これも、何でもよいのですが、今回は新しく下の内容のファイルを追加しました。

プルリク.txt

PullRequestTest

次のコマンドを実行してコミットします。

git add --all
git commit -m "プルリクコミット"

git pushコマンドを実行して、変更をフォークしたリポジトリに反映します。

git push origin pullreqdev
Column:あれ?git remoteコマンド打ってないよ?

第10回では、リモートリポジトリにプッシュする前に「git remote add~」を使って「origin」を追加していましたが、今回はしていません。
……ですが、上の「git push」コマンドは正常に実行されます。なぜ上手くいくのでしょうか。
それは、「git clone」コマンドを使ってローカルリポジトリを作成した場合、自動的にクローン先のリモートリポジトリ(今回の場合、フォークしたリポジトリ)のアドレスをoriginとして登録するようになっているからです。

プルリクエストを送る

新たにブランチを作成したら、プルリクエストを送りたいリポジトリのページを開いてください。

下の画像のような、メッセージが画面の上の方に表示されているはずです。

プルリクボタン

画像右端にある、Compare & pull requestをクリックしてください。

下のような画面が表示されます。

プルリクを出す。

画像上の方にある、base repositoryhead repository……というのは、「head repositoryからbase repositoryへ、内容変更のリクエストを出す」という意味になります。

画像のような表示だと「terapotan/pull-request-practiceリポジトリpullreqdevブランチから、elmas3/pull-request-practiceリポジトリmasterブランチへ、内容変更のリクエストを出す」という意味になります。

何となく気づいた方もいらっしゃるかもしれませんが、プルリクエスというのは、「俺の作ったブランチをお前のリポジトリのブランチに、マージさせてくれ!」というリクエストです。

ですから、どこのブランチをどこのブランチへマージさせるのか、予め指定しておく必要があります。

画像中央に「プルリクエストのテストです。」と書かれている部分があります。
ここに、プルリクエストと一緒に送るメッセージを書き込みます。

Column:Markdown

プルリクエストと一緒に送るメッセージは、Markdownという書式で書くことが出来ます。
Markdownと呼ばれる書式で書くと、見出しや太字・箇条書きと言ったものを簡単に書くことが出来ます。この記事も、Markdownで書いています。
Markdownには、HTMLのように決まった規格があるわけではないため、エディタによって書く方法に若干の差があります。
ここではMarkdownについて詳しく解説しません。詳しいことが知りたい方は、参考文献をご覧下さい。

メッセージが書けたら、画像下にあるCreate Pull requestを押してください。

プルリクエストが作成されます。

プルリクエスト作成完了

後は、マージされるのを待つだけです。

マージされると、画像左上にあるOpenという文字がMergedに変わります。

マージが通った

(上の画像は、別のリポジトリでマージされた時のものです。)

次回予告

次回は、よくGitHubリポジトリに登場するREADME.mdLICENSE.gitignoreの3つのファイルについて解説していきます。

う-ん、よく分からん!

この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。

参考文献

Pro Git

git,GitHubを使うにあたって必要なコマンドの使い方が詳しく解説されています。この連載を読んで分からないことや詳しく知りたいことがあったときはまずProgitを読んでみるといいでしょう。 git-scm.com

GitHub公式マニュアル

GitHub公式の、プルリクエストについて解説した文章です。

help.github.com

Markdown関連

Markdownそのものについて詳しく知りたい方はこちら。

www.markdown.jp

Markdownの書き方について知りたい方はこちら。

help.github.com

次回の記事

[terapotan.hatenablog.jp

前回の記事

terapotan.hatenablog.jp

連載記事一覧

terapotan.hatenablog.jp