プログラミング
Maiao: GitHub、GitLab、GiteaなどのためのGerrit風コードレビューワークフロー
Maiao: Gerrit-style code review workflow for GitHub, GitLab, Gitea, others (github.com)
要約
Maiaoは、Gerritスタイルのスタック型プルリクエスト(またはマージリクエスト)ワークフローをGitHub、GitLab、Giteaなどの主要なGitホスティングプロバイダーに提供するツールです。このツールは、大きな機能を小さなレビュー可能なコミットに分割し、各コミットを独立したプルリクエストとしてスタック化することで、コードレビューの効率と履歴の明瞭さを向上させます。コミュニティフォークとして開発が継続されており、MITライセンスで提供されています。
全文翻訳
Maiaoノート: これはadevinta/maiaoのコミュニティフォークです。元のメンテナーはAdevintaを離れ、アップストリームリポジトリはもはや積極的にメンテナンスされていません。このフォークはrunetes/maiaoの下で開発を継続しています。
GerritスタイルのコードレビューワークフローをGitHub、GitLab、Gitea、Forgejo、Bitbucket Cloud、およびCursor Origin向けに提供します。
Maiaoは、スタック型プルリクエスト(またはマージリクエスト)のパワーをあなたのgitホスティングプロバイダーにもたらし、大きな機能を小さくレビュー可能なコミットに分割できるようにします。各コミットが独自のPR/MRになります。
Maiaoとは?
Maiaoは以下の機能を持つgitレビューコマンドを提供します。
* ブランチ内のコミットごとに1つのPR/MRを作成します
* 親子関係を適切に管理しながら、PRs/MRsを自動的にスタック化します
* ネイティブスタックが利用可能な場合(GitHub Stacks、GitLab自動検出スタック)に登録します
* git commit --fixupを使用してフィクサップをエレガントに管理します
* Change-IDを使用してコミットを追跡します(Gerritのcommit-msgフックを使用)
* PRs/MRsがマージされたときにスタックを自動リベースします
* リモートURLからプロバイダーを自動検出します
サポートされているプロバイダー
| プロバイダー | PR/MRタイプ | WIP/Draft | ネイティブスタック |
|--------------------------|-------------------------|-----------------------|--------------------------------|
| GitHub | Pull Request | APIフィールド | はい(明示的な登録) |
| GitLab | Merge Request | タイトルのプレフィックス | はい(ターゲットブランチから自動検出、最大20 MR) |
| Gitea | Pull Request | タイトルのプレフィックス | いいえ |
| Forgejo/Codeberg | Pull Request | タイトルのプレフィックス | いいえ |
| Bitbucket Cloud | Pull Request | サポートされていません | いいえ |
| Cursor Origin (beta) | Pull Request | APIフィールド | はい(parentPullNumber) |
Maiaoは、既知のホスト(github.com, gitlab.com, codeberg.org, bitbucket.org, origin.cursor.com)のリモートURLからプロバイダーを自動検出します。セルフホストインスタンスの場合は、初回使用時にプロンプトが表示され、git config maiao.providerに選択が保存されます。
簡単な例
# 複数のコミットを作成します
git commit -m "Add user authentication"
git commit -m "Add authorization middleware"
git commit -m "Add admin endpoints"
# 全てのコミットに対してスタック型PRs/MRsを作成します
git review
結果:3つのPRs/MRsが作成され、スタック化されました。
PR #1: Add user authentication → main
PR #2: Add authorization middleware → PR #1
PR #3: Add admin endpoints → PR #2
主なメリット
* 詳細なレビュー: 各コミットが独立してレビューされるため、迅速で集中的なフィードバックが得られます。
* 明瞭な履歴: PR/MRごとに1つの論理的な変更があるため、クリーンなgit履歴が維持されます。
* 簡単なフィクサップ: git commit --fixup <sha> を使用して、レビューフィードバックに対応します。
* 自動スタッキング: ツールがPR/MRの依存関係を自動的に管理します。
* ネイティブスタック: GitHub StacksおよびGitLabの自動検出スタックと統合します。
* マージ検出: PRs/MRsがマージされると、スタックが自動的に更新されます。
* リベース統合: 上流の変更を適切に処理します。
* マルチプロバイダー: GitHub、GitLab、Gitea、Forgejo、Bitbucket Cloud、Cursor Origin間で動作します。
ネイティブGitHub Stacks
MaiaoはGitHubネイティブスタックをプログレッシブエンハンスメントとして扱います。2つ以上のPRがプッシュされると、MaiaoはStacks API(24時間キャッシュ)をプローブし、サポートされていればPRをスタックとして登録します。古いGitHub Enterpriseインスタンスでは、この機能はサイレントにスキップされます。ブランチベースのスタッキングは以前と同様に機能します。
# git config による制御(デフォルト: auto)
git config maiao.useNativeStack auto # 利用可能な場合は使用し、それ以外はスキップします
git config maiao.useNativeStack true # 常に登録します。利用不可の場合は警告します
git config maiao.useNativeStack false # 完全に無効にします
ドキュメント
* 開始方法 - インストールとワークフローガイド
* 仕組み - 技術的な詳細とアーキテクチャ
* 価格 - 無料でオープンソース
スタックドディフについて学ぶ
Maiaoはスタックドディフ(stacked diffs)の方法論を実装しています。詳細はこちらをご覧ください。
* Stacked Diffs Versus Pull Requests - Jackson Gabbardによる哲学的な記事
* Graphite's Guide to Stacked Diffs - ワークフローとベストプラクティスに関する包括的なガイド
* The Pragmatic Engineer: Stacked Diffs - 業界分析と採用パターン(ペイウォールあり)
なぜ「Maiao」?
Maiaoは、ユーザーがプルリクエストでより小さく、より優れたコミットを作成することを奨励しているため、小さな島の名前が付けられました。
貢献
貢献を歓迎します!詳細はCONTRIBUTING.mdをご覧ください。
ライセンス
MITライセンス - 詳細についてはDISCLAIMER.mdをご覧ください。