【gitをソフト開発で使いこなそう!:第13回】プルリクエストを送ってみよう!
今回は、GitHubの大きな特色である「プルリクエスト」という機能について解説します。
これが出来るようになると、他の人がGitHub上で公開しているソースコードを編集することが出来るようになります。
プルリクエストとは?
プルリクエスト(プルリク・PRとも略される。)とは、GitHubに備わっているリポジトリの内容の変更をリクエスト出来る機能のことです。
プルリクエストの機能は、GitHubが独自に備えている機能です。gitに備わっている機能ではありません。
一つ例を挙げてみましょう。
誰かが、GitHub上にとあるソフトのソースコードを公開しているとします。
あなたが、このソフトのバグ(不具合)を見つけたため、公開されているソフトのソースコードを修正したいとします。
しかし、第10回で説明している理由で、プッシュ出来る人を普通、制限しているため、あなたが直接ソースコードを修正することは出来ません。
そこで直接ソースコードを修正出来る人に「こういう変更をしてくれ!」というリクエストを送ります。これが、プルリクエストです。
プルリクエストの送り方
フォークとクローン
今回は、下のリポジトリを例にしてプルリクエストを送ってみます。
上のリポジトリは書籍「わかばちゃんと学ぶGit使い方入門」のプルリクエスト練習用リポジトリとして公開されているものです。
ですが2020年4月現在、数百件以上のプルリクエストがマージされないまま、放置されている状況です。恐らくプルリクエストが受け入れられることは……ないでしょう。
そこで、プルリクエスト練習用のリポジトリを作成しました。下のリンクから移動することが出来ます。
気軽にプルリクエストの練習に使ってください。
プルリクエストを送りたいリポジトリに移動したら、画面右上の「Fork」というボタンを押してください。
このボタンを押すと、今表示しているリポジトリが自分のアカウントにコピーされます。(これをボタンの名前の通り、フォークと言います。)
フォークしたリポジトリの名前を見ると、elmas3/pull-request-practice
からterapotan/pull-request-practice
に変わっているのが分かります。(terapotan
は私のアカウント名です。)
さらにフォークしたリポジトリに変更を加えるために、リポジトリをローカル(自分のPCとか)にコピーします。
これをクローンと言います。
フォークしたリポジトリのClone or download
をクリックして、git@
から始まるアドレスをクリップボードにコピーしてください。
中身が空のフォルダを作成し、そこでGitBashを立ち上げて、次のコマンドを入力してください。
git clone <コピーしてきたgit@から始まるアドレス>
普通Windows上では、コピーと貼り付けのショートカットキーは「Ctrl+C」と「Ctrl+V」です。
ですが、GitBashでは「Ctrl+Ins(インサートキー)」と「Shift+Ins」がコピーと貼り付けのショートカットキーとなっています。
クローンが終わったら、下のコマンドを入力して作成されたフォルダに移動してください。(カレントディレクトリを新たに作成されたフォルダにする。)
cd ./<新たに作成されたフォルダの名前>
変更を加える
新たに作成したフォルダに移動したら、新しいブランチを作成します。
ブランチ名は何でもいいですが、今回はpullreqdev
としました。
git branch pullreqdev git checkout pullreqdev
「git checkout -b」と入力することで、ブランチの作成と作成したブランチへの、チェックアウトを同時に行うことが出来ます。
上の例であれば、「git checkout -b pullreqdev」と入力します。
新しく変更を加えます。これも、何でもよいのですが、今回は新しく下の内容のファイルを追加しました。
プルリク.txt
PullRequestTest
次のコマンドを実行してコミットします。
git add --all git commit -m "プルリクコミット"
git push
コマンドを実行して、変更をフォークしたリポジトリに反映します。
git push origin pullreqdev
第10回では、リモートリポジトリにプッシュする前に「git remote add~」を使って「origin」を追加していましたが、今回はしていません。
……ですが、上の「git push」コマンドは正常に実行されます。なぜ上手くいくのでしょうか。
それは、「git clone」コマンドを使ってローカルリポジトリを作成した場合、自動的にクローン先のリモートリポジトリ(今回の場合、フォークしたリポジトリ)のアドレスをoriginとして登録するようになっているからです。
プルリクエストを送る
新たにブランチを作成したら、プルリクエストを送りたいリポジトリのページを開いてください。
下の画像のような、メッセージが画面の上の方に表示されているはずです。
画像右端にある、Compare & pull request
をクリックしてください。
下のような画面が表示されます。
画像上の方にある、base repository
・head repository
……というのは、「head repository
からbase repository
へ、内容変更のリクエストを出す」という意味になります。
画像のような表示だと「terapotan/pull-request-practice
リポジトリのpullreqdev
ブランチから、elmas3/pull-request-practice
リポジトリのmaster
ブランチへ、内容変更のリクエストを出す」という意味になります。
何となく気づいた方もいらっしゃるかもしれませんが、プルリクエストというのは、「俺の作ったブランチをお前のリポジトリのブランチに、マージさせてくれ!」というリクエストです。
ですから、どこのブランチをどこのブランチへマージさせるのか、予め指定しておく必要があります。
画像中央に「プルリクエストのテストです。」と書かれている部分があります。
ここに、プルリクエストと一緒に送るメッセージを書き込みます。
プルリクエストと一緒に送るメッセージは、Markdownという書式で書くことが出来ます。
Markdownと呼ばれる書式で書くと、見出しや太字・箇条書きと言ったものを簡単に書くことが出来ます。この記事も、Markdownで書いています。
Markdownには、HTMLのように決まった規格があるわけではないため、エディタによって書く方法に若干の差があります。
ここではMarkdownについて詳しく解説しません。詳しいことが知りたい方は、参考文献をご覧下さい。
メッセージが書けたら、画像下にあるCreate Pull request
を押してください。
プルリクエストが作成されます。
後は、マージされるのを待つだけです。
マージされると、画像左上にあるOpen
という文字がMerged
に変わります。
(上の画像は、別のリポジトリでマージされた時のものです。)
次回予告
次回は、よくGitHubのリポジトリに登場するREADME.md
・LICENSE
・.gitignore
の3つのファイルについて解説していきます。
う-ん、よく分からん!
この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。
参考文献
Pro Git
git,GitHubを使うにあたって必要なコマンドの使い方が詳しく解説されています。この連載を読んで分からないことや詳しく知りたいことがあったときはまずProgitを読んでみるといいでしょう。 git-scm.com
GitHub公式マニュアル
GitHub公式の、プルリクエストについて解説した文章です。
Markdown関連
Markdownそのものについて詳しく知りたい方はこちら。
Markdownの書き方について知りたい方はこちら。