はじめに
reviewDogをいじる機会があり、理解を深めようと個人的にいじってみました。
こちらの記事がすごく分かりやすかったので、真似てやってみました。
前提
砂遊びリポジトリがあるので、こちらで色々お試し。
ちょっとハマったこと
GitHubActions初心者過ぎて、ちょっとハマったので残します。
トークンってどうするんだろう。
トークン発行の手順をGeminiに聞いたところ「secrets.GITHUB_TOKEN」を使うと、何もせずとも利用できるよ!ってことを教えて貰い変更。
REVIEWDOG_GITHUB_API_TOKEN : ${{ secrets.GITHUB_TOKEN }}
改めて公式を調べてみたら、ふむふむ。って感じ。
カレントディレクトリって、どこだろう・?
kotlinc -script ./reviewdog/Main.kts
自分の脳内では、「reviewdog.yml が置いてあるフォルダがカレントディレクトリになる?」と迷ったので、Geminiに相談したところ、「リポジトリ直下」だよ。というアドバイスを貰い、無事に保存。
reviewdog.ymlってどこのブランチのが利用される?
feature/test1(マージ元) からdevelop(マージ先)へのPR だったら、「develop」と「feature/test1」のどっちのreviewdog.ymlが利用されるか?
(今、冷静に考えると答えは明らかなんですが。)
「feature/test1」(マージ元)でした。
当時は色々いじっていて、反映されない?とかありテンパっていました。
キーワードで検出してもコメントがPRに出力されない。
1個目の原因
PR内の変更点に対象キーワードが無いとPRにコメントされない。
Gemini曰く、reviewDogは以下のようにPR上に修正箇所を引用してコメントするので、PR上に修正箇所が無いとコメントがされないとのこと。(まあ、言われてみると確かに。)
2個目の原因
pull-requests: write
の権限が無くて書き込めなかったらしく、以下のように追記。
permissions:
contents: read
pull-requests: write
on:
深堀の疑問
コメントを警告とかエラーとか分かりやすくできないかな?
パターン1
reviewdogのパラメータに「-efm="%f:%l:%c:%m"」があったので、深堀。
「%t」があり、「e - error message」と「w - warning message」を知る。
結果はこんな感じ。
cat ./result.txt | reviewdog -name="test" -efm="%f:%l:%c:%t:%m" -reporter=github-pr-review
「e - error message」は、以下の赤枠で囲ったアイコンが出てきた。
「w - warning message」は、こんな感じ。(コメントに記載した「
」と同じアイコンだ!と気づきました。)
パターン2
本文にアイコンを書けるだろうか?
ということころで、試したのが、
「
」
:warning: :x: :information_source:
で、試した結果は以下の通り。
パターン3(ダメでした。)
具体的にはこの書き方ができないか?
を試したところ
その1 「\n」で改行してみる。
report.appendText("${file.path}:${index + 1}:1:w: > [!CAUTION] \n > test.\n")
ダメだった、2行目が削られるし、「> [!CAUTION]」を認識していない。
そもそも、どういう風にコメントされているのか?を分析するため、コメントを「EDIT」で見てみるとこんな感じ。
⚠️ **[test]** <sub>reported by [reviewdog](https://github.com/reviewdog/reviewdog) :dog:</sub><br> > [!CAUTION]
<!-- __reviewdog__:ChAxYjBhZjliOTRjNWFjMTY0EgR0ZXN0 -->
試しに、手動で以下のように「Edit」すると、出てくる。
⚠️ **[test]** <sub>reported by [reviewdog](https://github.com/reviewdog/reviewdog) :dog:</sub><br> > [!CAUTION]
> [!CAUTION]
> test
<!-- __reviewdog__:ChAxYjBhZjliOTRjNWFjMTY0EgR0ZXN0 -->
※ 手動で編集して表示しています。(reviewDogの自動ではありません)

つまり、改行して入力してあげれば良いのだが、これが難しい。
その2 HTMLのbrタグで改行してみる。(今考えるとあまり意味が無かった)
report.appendText("${file.path}:${index + 1}:1:w: > [!CAUTION] <br> > test.\n")
副産物として複数行を表現したい場合は、HTMLのBRタグで表現すれば良さそう。
その3 半角スペースを2つ 入れてみる。
report.appendText("${file.path}:${index + 1}:1:w: > [!CAUTION] > test.\n")
で、諦める。
番外編
reviewDogじゃなくて、GitHubActionsから直接PRにコメントできない?
って思い、Geminiに相談したら以下で送れることを教えて貰いました。
これはこれで便利。
- name: Add a custom comment using GitHub CLI
if: ${{ github.event_name == 'pull_request' }}
env:
# GitHub CLI を認証するためにトークンを環境変数にセット
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# 複数行のメッセージを変数に格納
MESSAGE="## :memo: 最終チェックリスト
- [ ] 命名規則は守られています
- [ ] テストが追加されています
> [!CAUTION]
> この処理は危険です。
上記を確認後、マージを許可します。"
# gh pr comment コマンドでPRにコメントを投稿
# -b: body (メッセージ内容)
# $PR_NUMBER は PRの番号
PR_NUMBER=${{ github.event.pull_request.number }}
gh pr comment $PR_NUMBER -b "$MESSAGE"









