初めてのPull Request(プルリクエスト)
スポンサーリンク
このドキュメントの内容は、以下の通りです。
- はじめに
- オープンソースソフトウェアとは
- GitHub とは
- Rull Requestとは
- Pull Requestを送っていいのか?
- まずは fork する
- 作業をどこでするか?
- ローカルで作業する場合は clone する
- 作業用ブランチを作成する
- ブランチを切り替える
- 作業をする前に確認すること
- 作業をする
- 作業内容を確認しよう
- 差分を確認する
- ビルドができるか?
- テストを実行する
- コミットする
- push する
- Pull Request を送る
- 英語に自信がない場合
- Pull Request を出したらひたすら待つ
- 返事が来たら
- Pull Request を修正する
- Pull Request を rebase する
- 最後に
- Gitに関する書籍を探す
はじめに
OSS(Open Source Software) に Pull Request (プルリクエスト) を送ってみたいけど、送っていいのか困っている方向けに書きました。かつ、プルリクエストの送り方がわからない方向けに、やり方も書いてみました。Github のお陰で、OSS に貢献するのも簡単になったのではないかと思います。
普段、OSS を使っているばかりだけれど、何らかの貢献がしたいな、と思われている方もいるのではないかと思います。
オープンソースソフトウェアとは
ソフトウェアには、企業が作成して販売しているものもあれば、個人やコミュニティが作成公開し、無償で提供されているものもあります。オープンソースソフトウェア(Open Source Software)とは、ソフトウェアのソースコードが無償で公開されていて、改良や再配布が誰に対しても行うことが許可されているソフトウェアであると定義されています。
オープンソースソフトウェアは OSS と略されます。
GitHub とは
GitHub とは ギットハブと発音します。Github (https://github.com) は、GitHub, Inc によって運営されています。 GitHub とは、ソフトウェア開発のプラットフォームです。GitHub は、ソフトウェアのソースコードのホスティングサービスでもあります。
ソースコードの管理には、 Gitと呼ばれるバージョン管理システムが利用されています。Git は、 Linux カーネル のバージョン管理システムとして開発されたソフトウェアです。
GitHub は、個人が無償でも使うことができます。
GitHub は、2018年にテックジャイアントのマイクロソフトに買収されました。
Github には、OSSコミュニティや個人、企業などのさまざまな人たちが利用しています。
Rull Requestとは
GitHub には Pull Request という文化があります。それは、プログラムの修正・改善を送りあう文化です。たとえば、githubで公開されていたOSSのソースコードをダウンロードしてきて、自分が利用している環境で、OSSのソースコードがコンパイルができない、とエラーに遭遇したとします。そのような場合に、自分でソースコードを修正して、コンパイルができるようになったとします。
この時に、自分の修正したソースコードを OSS のリポジトリに提供することができます。このときに行うのが、 Pull Request です。
Pull Request を送っても、即座に、リポジトリのマスターにそのまま反映されるわけではありません。 ソースコードのリポジトリに対して、修正したソースコードを Pull Request します。Pull Request が送信されたリポジトリのオーナーは、そのリクエストの内容を確認し、ソースコードなどの変更点に問題がなければ、マージを行い、リポジトリに変更を取り込んでくれるかもしれません。
Pull Requestを送っていいのか?
他人のリポジトリに Pull Request を送っていいかどうかは、確認が必要です。せっかく、修正や新しい機能を実装しても、受け取ってもらえないと勿体ないです。リポジトリごとにポリシーが違うので、リポジトリをよく読む必要があります。- Pull Request がウェルカムなリポジトリ
- Pull Request がお断りなリポジトリ
まずは、受け付けているか確認することからはじめましょう。
お断りな理由はいろいろあるのでしょうが, github のリポジトリは単なるミラーの場合があります。例えば、メーリングリストにパッチを送ってね、というのもあります。
Github の場合は、 リポジトリの Pull requests を見れば、Pull Request が対応されるのか確認することができます。
まずは fork する
修正を送りたいリポジトリが Pull Request を受け付けそうだ、ということがわかったら、まずは fork です。 github の Forkというボタンをクリックすれば、リポジトリが Fork されます。forkとは、 Unix の世界では、新しいプロセスを作成するときに fork() と呼ばれるシステムコールを利用しています。Unix のプログラムは fork によって、同じプロセスが2つに分離します。2つのプロセスの1つは親となり、もう1つは子となります。
GitHub の fork は、リポジトリを複製することを意味します。複製したリポジトリのオーナーは自分ですので、自由に編集できます。
作業をどこでするか?
リポジトリを fork したあとに、作業をする場合に、以下の選択ができます。- github 上で作業する
- github からローカルの PC などにクローンして作業する
github 上でやる場合は、一文字だけ修正したいとか、些細な修正であれば、 github 上 (ブラウザ上) でやるほうが、楽ちんかもしれません。
あとは、趣味の問題だと思います。
ローカルで作業する場合は clone する
ローカルで作業する場合は、リポジトリをローカルにクローンします。
git clone git@github.com:<あなたのアカウント>/<リポジトリ>
github でやる場合は、clone は不要です。
作業用ブランチを作成する
gitのリポジトリには、ブランチという概念があります。gitでソフトウェアを開発する場合には、ブランチを切り替えて、開発の作業を行うことになります。リポジトリは初めから master ブランチを持っています。リポジトリの master ブランチを編集して、Pull Request をしてしまうとあとで面倒なことになります。必ず、作業用のブランチを作成して、作業ブランチから Pull Request を出しましょう。
以下のコマンドで作業用ブランチを作成します。
git branch hoge-work
ブランチを切り替える
以下のコマンドで作業用ブランチに切り替えます。
git checkout hoge-work
branch コマンドで、現在のブランチを確認できます。
git branch
作業をする前に確認すること
ここまで準備ができれば、作業開始、となるわけですが、その前に、確認しておくべきことがあります。
それはなにか?
そう、コーディングスタイルです。コーディングスタイルが合ってないと、あとで、指摘されて、修正が必要になります。もし、一文字だけ修正したいといったタイポ(typo)を直したいだけなら、コーディングスタイルを気にする必要はありません。
どのようなポリシーなのか、確認する必要があります。 一方で、ソースコードを読んでいると、ポリシーが一体どっちなのか、わからないこともあります。 もし調べられるなら、多い方に合わせる、とか、今回の作業対象にしようとしているファイルに合わせるとか、そういった対応が必要です。
コーディングスタイルがまとまっていれば、最初にざっと目を通しましょう。
たとえば、以下のようなことを守って、ソースコードを編集します。
- スペースの入れ方
- インデントはスペースなのか、タブなのか
- 命名規則
- goto の使い方
- 戻り値のポリシー
作業をする
git コマンドで リポジトリを clone して、ブランチを作成し、ブランチを切り替えたら、作業開始です。上記で述べた通り、コーディングスタイルに気をつけて、編集しましょう。
作業内容を確認しよう
作業を行ったら、変更内容を確認しましょう。
- 差分を見る
- ビルドができるか
- テストが通るか
差分を確認する
変更した内容について、差分(diff)をよく、見ましょう。以下のコマンドで変更された部分を表示することができます。何が追加されたか、何が削除されたか、といったことを確認できます。
git diff
diff を見て、目的の変更ができているか、よく確認しましょう。余計なことをしていないかも確認が重要です。もともと編集するつもりのないところまで、変更していないかも確認します。
ビルドができるか?
ソースコードを変更している場合で、C言語 や C++言語などのコンパイル型の言語の場合は、コンパイルが通るか、確認しましょう。ビルドが失敗するものを Pull Request しても、無駄なので、ビルドができるかは、確認してから commit/push/Pull Request しましょう。
だいたい make すれば、良いのではないかと思いますが、対象のソフトウェアのビルド手順に従って下さい。だいたい、リポジトリに書いてあると思います。
make する前に、 configure とか、そういったコマンドを叩く必要があるケースもあります。
make
同様に、RustやGo言語,Javaなどビルドしてみると良いでしょう。
コンパイル型の言語ではなく、スクリプト言語の場合もシンタックスチェックぐらいはしておくべきです。
PHP なら、php コマンドでチェックできます。
ひょっとすると Makefile の中に、シンタックスチェックをするためのターゲットがあるかもしれませんので、確認してみてもいいですね。
php -l foo.php
JavaScript であれば、以下のツールを使うのも良いでしょう。
- JSLint
- JSHint
- ESLint
- JSCS
テストを実行する
ソースコードのコンパイルなどのビルドが通ったら、テストです。シンタックスチェックはテストを実行すれば、テストでシンタックスチェックもできてしまうかもしれませんね。
テスト(Unit Test とか) の実行方法もリポジトリごとの手順に従えば良いのですが、 Makefile があれば、ひょっとすると test というターゲットがあるかもしれません。
make でテストが実行できるようになっているのであれば、以下のコマンドでテストができます。
make test
make test が通ったからといって、テストが完了したかどうかは、テストの出来によりますし、今回の作業の中で、ひょっとすると、テストケース自体を追加しないと、テストにならないケースもあるでしょう。
テストが通ったからといって、テストにならないこともありますが、テストをしてから、コミットしましょう。
ソースコードに誤りがあって、それを直した場合は、そもそもテストがされてなかった、ということかもしれません。
サイドエフェクトも考慮して、必ず、テストは実行しましょう。
コミットする
コミット(commit)するときは、コミットのコメントの言語に注意しましょう。
英語でコミットログを書いているか、日本語か、確認してからコミットしましょう。
git commit -a
push する
コミットして、いよいよ、準備ができたら github に push します。
ブランチを指定して、 pull request を送ります。
git push origin hoge-work
Pull Request を送る
クローンした自分のリポジトリを開くと、push したブランチが、おそらく表示されます。そこから、 New Pull Requestが送れます。
コメントを記載できるので、何を目的としているのか記載します。
目的が明確であれば、あとは差分(diff)を見れば、解ってもらえることも多いのではないでしょうか。
差分見れば、わかるから、コメントは適当で良いという意味ではありませんが、差分がコメントを補完して理解してもらえることも実際にある、ということです。
英語に自信がない場合
英語でコメントを書かないといけない、英語に自信がないと、Pull Request を出しにくいかもしれません。
簡単にやったことを書けばいいんです。英語がイマイチでも、コードで伝わることもあります。
まったく自信がない場合は、Google 翻訳とかを使って、翻訳すれば良いでしょう。
Pull Request を出したらひたすら待つ
リポジトリに Pull Request を送ると、そのうち、レビュワーがやってきて、見てくれるでしょう。レビュワーは、他の国にいる場合、時差があることもあります。
なかなか、返事が来なくても、心配せずに、普段の生活をして待っていましょう。そのうちレビュワーがきてくれます。
返事にレスをつけたりしても、次のレスがくるまでに時間がかかることもあります。
1日1コメントずつ書き合うになるかもしれませんが、気長にキャッチボールしましょう。
返事が来たら
プルリクエストの問題の有無にかかわらず、なんらかのコメントがつくのではないでしょうか。プルリクエストの変更点に問題がなければ、そのまま、レビューが進んで、修正せずに、マージされるかもしれません。
もし、Pull Request 自体を修正したほうが良い場合、どういう作業をしたかによるでしょうけど、たとえば、以下のようなコメントがくるかもしれません。
- インデントがおかしい
- ここ変数にしなくていいんじゃないの
- ここはもっと簡単になるんじゃないの
Pull Request を修正する
一度、Pull Request を送った場合に、Pull Request したソースコードをアップデートしたい場合は、 Pull Request を送ったブランチを更新すれば、自動的に Pull Request にcommit/push すれば、 Pull Request に反映されます。
修正作業をしたら、以下のコマンドで、push しましょう。
git commit -a git push origin hoge-work
必要があれば、レビュワーのコメントに github で、なおしたよ、といった返信をしたら良いのではないでしょうか。
Pull Request を rebase する
Pull Request を修正していく過程で、コミットが増えていきます。レビューが終わった段階で、そのままマージ・クローズされることもあるかと思いますが、rebase してほしいということもあります。
git rebase を使うと、複数のコミットをまとめることができます。git log でコミットログを確認します。
git rebase コマンドをたたくと、エディタが実行されるので、squash を指定して、コミットをまとめます。
すべてのコミットに squash を付けてしまうと rebase できないので、最初のコミットはそのまま残しておきます。
AからCまでのコミットをマージしたい場合には、 rebase では X を指定します。
Aを指定して rebase すると B と C がまとまります。
- C
- B
- A
- X
これをやると、pull request のレビュー結果がなくなってしまったりしますので、 rebase してね、と言われてからやるのが良いでしょう。
git log git rebase -i コミットID git push -f origin hoge-work
最後に
他人のリポジトリにPull Request を送るのは、緊張するのかもしれませんが、以下のことに気をつけて送れば大丈夫じゃないでしょうか。- Pull Request を受け付けているか、作業する前に確認する
- 必ずブランチを作って、Pull Request を送る
- コーディングスタイルがあれば、それに従う
- コンパイル型の言語は、ビルドをする
- スクリプト言語ならシンタックスチェックをする
- ユニットテストなどがあれば、変更後にテストを実施する
- 何がしたいのか明確なコメントをつける
- 英語が苦手でも、翻訳ツールで英語を書けばよいし、翻訳して読めば良い
- 時差などがあるので、反応がなかなか来なくても気にしない
- 心のハードルを勝手に作らず、気にしないで Pull Request を送る
Gitに関する書籍を探す
Github で Pull Reuqest を送るためには、 Git に慣れているほうが楽に進められますので、Git の勉強をするのも有効です。
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12