プルリクエストを利用したチームでの作業

チームで作業をしている際などに、他のメンバーに自分の行った変更を通知する事を、プルリクエストといいます。たとえば、自分の行った変更を、管理者にプルリクエストを行い通知します。

吉田先生

プルリクエストによって、コードの確認を複数名で行う事が出来るので、結果的に質の高いコードをマージする事が出来ます。


プルリクエストとは

チームで作業をしている際などに、他のメンバーに自分の行った変更を通知する事を、プルリクエストといいます。たとえば、自分の行った変更を、管理者にプルリクエストを行い通知します。

そして、管理者はコードをチェックし、問題なければマージを行うというような事が可能となります。プルリクエストによって、コードの確認を複数名で行う事が出来るので、結果的に質の高いコードをマージする事が出来ます。

リポジトリを取り込む

プルリクエストを行うという事は、まず参加するプロジェクトのリポジトリを自分のローカル環境に取り込む必要がありますね。その為に「Fork」と「clone」を行います。

Fork

「Fork」とは「clone」と同じように、リポジトリを複製する事です。「clone」との違いは、どこに複製するのかという点です。

「clone」は自分のローカル環境に複製します。それに対して「Fork」は、自分のGit Hub上に複製します。プルリクエストは、Git Hub上で行う為、まずGit Hub上に複製する必要があるという事です。

では「Fork」を行っていきましょう。まず、複製したいリポジトリのページにアクセスします。今回は、「blog」というリポジトリを例として使用します。

他の誰かが「blog」リポジトリを作成していて、皆さんはそこに途中参加するという想定で進めて行きたいと思います。ですので、以下の「blog」リポジトリにアクセスしてください。

https://github.com/git-test-00/blog

画面右上部分に「Fork」というボタンがありますので、クリックしてください。すると、自分のGit Hub上にリポジトリが出来ているはずです。これで、Git Hub上では複製が完了しました。

clone

では、ローカル環境にも複製を行なっていきましょう。先程のGit Hubの画面の「clone or download」という緑のボタンをクリックしてください。そして「Use SSH」という部分を押下します。次に1番下の赤枠部分のコードをコピーします。

そして、以下コマンドの後に先ほどコピーしたコードを貼り付け実行してください。

(master) $ git clone コピーしたコード

これで、ローカル環境にも複製する事が出来ました。

Issues

制作中に問題が発生したり、機能追加の必要が出てきた場合は、Git Hub上でプロジェクトの管理者から通知が届きます。その、連絡の為の機能が「Issues」です。Git Hubのリポジトリのページの以下赤枠部分でメッセージを確認します。

今回は、以下のような「Issue」が追加されたと想定して進めて行きます。また、今回はエラーが発生したという「Issue」になります。プロジェクトのどの部分でエラーが起きたのか、そして改善案が書かれています。この部分を修正して、プルリクエストを送ります。

修正作業

修正作業に入っていきます。この時に重要なのが、トピックブランチを作成し修正を行なっていくということです。

そして、そのトピックブランチをプルリクエストします。トピックブランチで修正を行いプルリクエストする事で、不要な情報を省き、修正点のみを管理者に伝える事が出来ます。管理者がコードのチェックをしやすくなると言う事です。

今回は、Railsでブログを作成するという想定です。そして現在、記事を投稿するためのフォームは完成しています。ですが「show」ページ・アクションがない為、投稿後に「Unknow action」というエラーが発生しています。

以下のように「rails s」コマンドを実行し、URLの最後に「/articles/new」を加えアクセスしてください。そして、フォームから投稿を行ってみましょう。エラーが確認できたでしょうか。では、このエラーを解消するためのトピックブランチを作成していきます。

(master) $ cd blog
(master) $ bundle install  #リモートリポジトリ上の環境と合わせるため
(master) $ rake db:migrate #テーブルを作成
(master) $ rails s
(master) $ git checkout -b fix-form-redirect
Switched to a new branch 'fix-form-redirect'

そして「articles_controller.rb」というファイルの2行目に以下コードを追加して保存してください。

def show
  @article = Article.find(params[:id])
end

そして、「app→views→articles」ディレクトリに「show.html.erb」を作成してください。そして、以下コードを追加しましょう。

<code class="language-html">&lt;p>
  &lt;strong>Title:&lt;/strong>
  &lt;%= @article.title %>
&lt;/p>

&lt;p>
  &lt;strong>Text:&lt;/strong>
  &lt;%= @article.text %>
&lt;/p>
</code>

では、エラーなく記事の投稿、参照が出来るか確認してみましょう。

問題がなければ、この修正をインデックスに追加してコミットします。

(fix-form) $ git add -A
(fix-form) $ git commit -m "Add show to articles"
[fix-form 0624bcf] Add show to articles
2 files changed, 13 insertions(+)
create mode 100644 app/views/articles/show.html.erb

リモートリポジトリに反映

プルリクエストをする為に、先程の修正をリモートリポジトリに反映します。先程「fix-form-redirect」というトピックブランチを作成しました。しかし、リモートリポジトリにはそのようなブランチは存在していません。

リモートリポジトリに作成したトピックブランチも反映させなくてはいけないので、実行するコマンドは以下のようになります。

(fix-form) $ git push origin fix-form-redirect

これで、リモートリポジトリにトピックブランチと、そこでの修正が反映されました。

プルリクエストを行う

まず、プルリクエストを行う前にリモートリポジトリ上で先程の反映がうまくいっているか確認してみましょう。Git Hubのサイトに移動して「Branch」というボタンをクリックします。「fix-form-redirect」があると思いますので、クリックしてください。

そして「Compare」をクリックします。きちんと反映されているでしょうか。問題がなければ、プルリクエストに移ります。

「Compare & Pull Reqest」というボタンをクリックします。フォームが出てきますので、修正の理由などを書いていきます。

Comment例

リダイレクトがうまくいってなかったので、articles/showへのリダイレクトを作成しました。

そして「Create Pull Reqest」をクリックすればプルリクエストは完了です。あとは、コードに問題がなければマージされるでしょうし、問題点があれば修正依頼が届くでしょう。このようにして、やり取りをし作業を進めていきます。

リポジトリを最新の内容に更新する

前レッスンの「pull」のセクションでも行った、リモートリポジトリの更新内容をローカル環境に取り込んでいきます。現在、Git Hub上で「Fork」したリポジトリを自分のローカルリポジトリのリモートリポジトリとして設定している状況です。

ここで重要なのが、フォーク元のリモートリポジトリが更新されても、複製したリモートリポジトリには更新が反映されないという事です。

ですので、リポジトリを最新の内容に保つために、フォーク元のリポジトリもリモートリポジトリとして追加する設定を行います。以下のコマンドを実行してください。

(fix-form) $ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
(master) $ git remote add upstream git://github.com/git-test-00/blog.git

今回は、フォーク元のリポジトリに「upstream」という名前を付けています。フォークしたリポジトリは「origin」です。では、フォーク元のリポジトリ「upstream」の更新内容を取り込んでいきましょう。

今回は「fetch」というコマンドを使用します。「pull」は実行すると、ローカルリポジトリに、リモートリポジトリの内容が反映されます。対して、「fetch」はリモートリポジトリの内容を取り込むだけで、ローカルの内容は変更されずそのままとなります。

つまり、「origin/master」にリモートリポジトリの最新の内容が反映されるが、ローカルの「master」には反映されないという事です。これは、状況により使い分けましょう。「pull」だとローカルでの作業内容に影響があり困るという場合は「fetch」という感じですね。

では「fetch」を行います。

(master) $ git fetch upstream
From git://github.com/git-test-00/blog
* [new branch] master -> upstream/master

もし「upstream」の内容をローカルの「master」にも反映したい場合は、以下コマンドを実行します。

(master)$ git merge upstream/master

まとめ

プルリクエストとは、他のメンバーに自分の行った変更を通知する機能のことです。・プロジェクトの管理者に、変更を通知し問題がなければ管理者がマージを行います。

「Fork」とはGit Hub上でリモートリポジトリを複製する事で、「Fork」後に「Clone」を行い、自分のローカル環境に複製します。

ローカル環境での修正作業は、トピックブランチを作成し行いましょう。フォーク元のリモートリポジトリの変更を、ローカルに取り込むには「fetch」か「pull」を実行します。

無料ビデオ講座のお知らせ

Skillhub [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。

無料講座一覧を見る

×