Pull Request の� �合、GitHub Enterprise Server には、Pull Request 全体に対するコメント、Pull Request 内の 特定の行に対するコメント、Pull Request 内の特定のコミットに関するコメントの 3 種類のコメント ビューが用意されています。
これらの種類のコメントは、それぞれGitHub Enterprise Server APIの異なる部分を通ります。 このガイドでは、それぞれにアクセスして操作する方法を説明します。 すべての例で、"octocat" リポジトリ上で作成されたこのサンプル Pull Request を使用します。 いつもと同様に、サンプルは platform-samples リポジトリにあります。
プルリクエストのコメント
Pull Request のコメントにアクセスするには、Issues API を使用します。 最初はこれを意外に思うかもしれません。 しかし、Pull Request がコード付きの Issue に過ぎないことさえ理解すれば、Pull Request にコメントを作成するため Issues API を使うこともうなずけるでしょう。
Octokit.rb を使用して Ruby スクリプトを作成することで、Pull Request コメントをフェッチする方法を示します。 また、個人用アクセス トークンを作成することも必要です。
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
ここでは、特に Issues API を呼び出してコメント (issue_comments
) を取得します。これにより、リポジトリの名前 (octocat/Spoon-Knife
) と、関心のある Pull Request ID (1176
) の両方が得られます。 その後は、コメントを反復処理して、各コメントの情� �を取得している� けです。
行につけるプルリクエストのコメント
diff ビュー内では、Pull Request 内の一つの変更について、特定の側面からディスカッションを開始できます。 これらのコメントは、変更されたファイル内の個々の行に対して発生します。 このディスカッションのエンドポイント URL は Pull Request Review API から取得されます。
以下のコードは、指定したプルリクエスト番号のファイルにあるプルリクエストのコメントすべてをフェッチします。
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 のレビューの一環として行うコメントは、ファイルで特定の変更が実装された方法について特に扱うべきです。
コミットのコメント
最後のタイプのコメントは、特に個々のコミットで発生します。 このため、コミットのコメント API が使用されます。
コミットのコメントを取得するには、コミットの 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 呼び出しは、単一の行コメントと、コミット全体に対するコメントを取得することに注目してく� さい。