Pull Request の場合、GitHub には、Pull Request 全体に対するコメント、Pull Request 内の 特定の行に対するコメント、Pull Request 内の特定のコミットに関するコメントの 3 種類のコメント ビューが用意されています。
これらの種類のコメントは、それぞれGitHub APIの異なる部分を通ります。 このガイドでは、それぞれにアクセスして操作する方法を説明します。 すべての例で、"octocat" リポジトリ上で作成されたこのサンプル Pull Request を使用します。 いつもと同様に、サンプルは platform-samples リポジトリにあります。
プルリクエストのコメント
pull request のコメントにアクセスするには、エンドポイントを使って issue を管理します。 最初はこれを意外に思うかもしれません。 しかし、pull request がコード付きの issue に過ぎないことを理解すれば、pull request でコメントを作成するためにこれらのエンドポイントを使うことは理にかなっています。
Octokit.rb を使用して Ruby スクリプトを作成することで、Pull Request コメントをフェッチする方法を示します。 また、personal access token を作成することもできます。
Octokit.rb を使って Pull Request からコメントにアクセスを始めるには、以下のコードが役立つでしょう。
require 'octokit'
# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']
client.issue_comments("octocat/Spoon-Knife", 1176).each do |comment|
username = comment[:user][:login]
post_date = comment[:created_at]
content = comment[:body]
puts "#{username} made a comment on #{post_date}. It says:\n'#{content}'\n"
end
ここでは、特に API を呼び出し、リポジトリの名前 (octocat/Spoon-Knife
) と、関心のある pull request ID (1176
) の両方を指定して、コメント (issue_comments
) を取得します。 その後は、コメントを反復処理して、各コメントの情報を取得しているだけです。
行につけるプルリクエストのコメント
diff ビュー内では、Pull Request 内の一つの変更について、特定の側面からディスカッションを開始できます。 これらのコメントは、変更されたファイル内の個々の行に対して発生します。 このディスカッションのエンドポイント URL は、pull request レビューを管理するためのエンドポイントから取得されます。
以下のコードは、指定したプルリクエスト番号のファイルにあるプルリクエストのコメントすべてをフェッチします。
require 'octokit'
# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']
client.pull_request_comments("octocat/Spoon-Knife", 1176).each do |comment|
username = comment[:user][:login]
post_date = comment[:created_at]
content = comment[:body]
path = comment[:path]
position = comment[:position]
puts "#{username} made a comment on #{post_date} for the file called #{path}, on line #{position}. It says:\n'#{content}'\n"
end
上の例と非常に似ていることにお気づきでしょう。 このビューと Pull Request のコメントとの相違点は、会話の焦点にあります。 Pull Request に対するコメントでは、コードの全体的な方向性についてのディスカッションやアイデアを扱うべきです。 Pull Request のレビューの一環として行うコメントは、ファイルで特定の変更が実装された方法について特に扱うべきです。
コミットのコメント
最後のタイプのコメントは、特に個々のコミットで発生します。 このため、エンドポイントを使ってコミット コメントを管理します。
コミットのコメントを取得するには、コミットの SHA1 を使用します。 言い換えれば、プルリクエストに関する識別子は全く使用しません。 次に例を示します。
require 'octokit'
# !!! DO NOT EVER USE HARD-CODED VALUES IN A REAL APP !!!
# Instead, set and test environment variables, like below
client = Octokit::Client.new :access_token => ENV['MY_PERSONAL_TOKEN']
client.commit_comments("octocat/Spoon-Knife", "cbc28e7c8caee26febc8c013b0adfb97a4edd96e").each do |comment|
username = comment[:user][:login]
post_date = comment[:created_at]
content = comment[:body]
puts "#{username} made a comment on #{post_date}. It says:\n'#{content}'\n"
end
この API 呼び出しは、単一の行コメントと、コミット全体に対するコメントを取得することに注目してください。