reviewdog: lint結果を変更行へ届けるコードレビュー連携ツール
プログラミング言語に関係なく、あらゆるコード分析ツールと統合された自動コード レビュー ツール。
ひと目でわかる
- これは何?
- リンターの出力を解析し、diffに該当する指摘だけを各種コードホスティングへ送るGo製ツールです。
- 誰に向いている?
- reviewdogは、既存リンターを置き換えずにレビューの入口へ接続したいチーム向けです。導入前に、使うリンターの出力をerrorformat、RDFormat、checkstyle XML、SARIFのどれで表現できるかを確認し、同じdiffでlocalレポーターの結果と対象行を照合してください。
- 商用利用できる?
- できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 2 日前です。
- 何の言語で書かれている?
- 主に Go です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月14日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
reviewdog がリンター出力に対して行うこと
reviewdog は、リンター出力をコードレビューシステムに接続する Go 製のコマンドラインツールです。リンターやコンパイラの標準出力を読み取り、形式の説明に従って解析し、unified diff に対して結果をフィルタリングします。パッチ内で追加または変更された行にある結果のみが報告されます。このツールは、その結果を GitHub、GitLab、Bitbucket、Gerrit のレビューコメントとして投稿したり、単にターミナルに出力してローカルで使用したりできます。この設計により、リンター自体はホスティングサービスについて何も知る必要がありません。reviewdog が変換と diff フィルタリングを処理します。
入力形式: errorformat から SARIF まで
主な入力形式は errorformat で、Vim の errorfile 形式の移植です。%f:%l:%c: %m のような小さな形式文字列を使用すると、多くのツールが生成する一般的な file:line:column: message 出力を解析できます。一般的なツールについては、reviewdog に事前定義された errorformat が含まれています。reviewdog -list を実行すると利用可能なものが表示され、-f フラグで選択します。errorformat に加えて、reviewdog は Reviewdog Diagnostic Format(RDFormat)も受け入れます。これは、重大度、ルールコード、コード提案などの豊富な診断情報をサポートします。また、unified diff 出力を入力として受け入れるため、diff を生成するフォーマッタを処理でき、checkstyle XML と SARIF 2.1.0 JSON も読み取れます。README には、golint ./... | reviewdog -efm="%f:%l:%c: %m" -diff="git diff FETCH_HEAD" のようなローカルフィルタリング用のパイプが示されています。
.reviewdog.yml とランナーによる設定
毎回フラグを渡す代わりに、reviewdog は .reviewdog.yml ファイルで駆動できます。このファイルはランナーを定義し、各ランナーには実行するコマンドと、errorformat または名前付き形式のいずれかが含まれます。ランナーは名前とレポートレベルも設定できます。-f フラグなしで reviewdog を実行すると、設定を読み取り、定義されたランナーを実行します。-runners フラグは特定のランナーに実行を制限し、-conf はカスタム設定パスを指定します。README には golint と govet の例を含む設定が示されており、このような実行の出力行には project/run_test.go:61:28: [golint] error strings should not end with punctuation のようにツール名が角括弧で含まれます。
レポーターとコメントの宛先
reviewdog には、結果の投稿先を決定するレポーターのセットがあります。デフォルトのレポーター local は結果をターミナルに出力し、変更行にどの結果が該当するかを確認するのに便利です。GitHub にはいくつかのレポーターがあります。github-pr-check は GitHub Checks に投稿し、github-check はプルリクエストだけでなくコミットにも対応し、github-pr-review は GitHub API を使用してレビューコメントを投稿し、github-annotations は GitHub Actions のワークフローコマンドを出力します。GitLab レポーターはマージリクエストのディスカッションまたは個々のコミットに投稿し、Bitbucket Code Insights と Gerrit 用のレポーターもあります。具体的な置き換えを提案するコード提案は、README のサポート表によると github-pr-review と gitlab-mr-discussion レポーターでのみサポートされています。他のレポーターはサービスがサポートしていないか、まだ実装されていません。
フィルターモードと終了コード
デフォルトでは、reviewdog は追加または変更された行に結果をフィルタリングします(filter-mode=added)。他のモードは diff_context(変更行の周囲に数行のコンテキストを含める)、file(ファイルが変更されていれば行に関係なくそのファイル内のすべての結果を報告)、nofilter(フィルタリングを完全に無効にする)です。README は、すべてのレポーターがすべてのモードをサポートしているわけではないと述べています。たとえば、github-pr-review は diff コンテキスト外の結果に対してチェックアノテーションにフォールバックします。終了コードは -fail-level で制御されます。デフォルトの -fail-level=none では、問題が見つかった場合でも reviewdog は常に 0 を返します。-fail-level を any、info、warning、error に設定すると、少なくとも 1 つの結果がその重大度以上の場合にツールは 1 で終了します。これにより、CI ステップを lint 結果で失敗させることができます。
CI 統合と GitHub Actions エコシステム
reviewdog は継続的インテグレーション内で実行されるように設計されています。README には Travis CI、Circle CI、GitLab CI、Bitbucket Pipelines のセットアップが記載されており、任意の CI システムで機能する環境変数のセット(CI_PULL_REQUEST、CI_COMMIT、CI_REPO_OWNER、CI_REPO_NAME)が含まれています。GitHub Actions には、reviewdog をインストールする専用アクション reviewdog/action-setup があり、ESLint、ShellCheck、golangci-lint などの特定のリンターをラップする多くのコミュニティアクションがあります。README は、フォークされたリポジトリからのプルリクエストのグレースフルデグラデーションのパスも説明しています。GITHUB_TOKEN に Checks または Reviews への書き込みアクセスがない場合、reviewdog は GitHub Actions のログコマンドにフォールバックしてアノテーションを作成します。
インストールとリリースチャネル
README にはいくつかのインストール方法が記載されています。主な方法は、curl を install.sh スクリプトにパイプする方法で、デフォルトでは最新バージョンを ./bin/ にインストールします。-b フラグで別のディレクトリを指定でき、バージョンを引数として指定できます。Alpine Linux ユーザーには、デフォルトで curl がないため、wget バリアントが提供されています。また、Homebrew と Linuxbrew 用のパッケージ(brew install reviewdog/tap/reviewdog)、Windows 用の Scoop パッケージ、ソースからビルドする go install コマンドもあります。ナイトリリースは別のリポジトリ reviewdog/nightly に公開され、独自のインストールスクリプトがあります。リポジトリのメタデータによると、このプロジェクトは Go で書かれ、MIT ライセンスを使用しています。
編集部の結論
reviewdogは、既存リンターを置き換えずにレビューの入口へ接続したいチーム向けです。導入前に、使うリンターの出力をerrorformat、RDFormat、checkstyle XML、SARIFのどれで表現できるかを確認し、同じdiffでlocalレポーターの結果と対象行を照合してください。投稿先ごとに提案機能やfilter-modeの対応が異なるため、GitHub Actionsの権限と実際のPRでの表示まで試す必要があります。
コミュニティノート