Bitbucket のプルリクエストをコマンドラインで
Bitbucket には、プルリクエストを扱う公式のコマンドラインの道具がありません。GitHub の gh pr create や、Azure CLI の az repos pr create に当たるものが無いのです。Atlassian CLI(acli)のコマンドは Jira・管理・Rovo Dev の3つで、Bitbucket はありません(コマンドの一覧)。使えるのは Bitbucket の REST API を1回呼ぶことで、curl でできます。下の例は、Atlassian の Bitbucket Cloud と Bitbucket Data Center 10.2 の API の資料に沿っています。
Bitbucket Cloud
スコープつきの API トークンを、アプリに Bitbucket を選んで作ります。プルリクエストを作るのに、Atlassian の資料が挙げるスコープは read:pullrequest:bitbucket と write:pullrequest:bitbucket です。API トークンで REST API を呼ぶときのユーザー名は、Bitbucket のユーザー名ではなく Atlassian アカウントのメールアドレスです(Using API tokens)。トークンを Authorization: Bearer で送れば、メールアドレスは要りません。
curl --request POST \
--url 'https://api.bitbucket.org/2.0/repositories/{workspace}/{repository}/pullrequests' \
--user 'you@example.com:{api_token}' \
--header 'Content-Type: application/json' \
--data '{
"title": "Login page",
"source": { "branch": { "name": "feature/login" } },
"destination": { "branch": { "name": "main" } },
"reviewers": [ { "uuid": "{504c3b62-8120-4f0c-a7bc-87800b9d6f70}" } ],
"close_source_branch": true
}'
- なくてはならないのは
titleとsourceだけです。destinationを省くと、リポジトリのメインのブランチへのプルリクエストになります。 - レビュアーは名前でなく UUID で、波かっこごと書きます。自分のものは
GET /2.0/user、ワークスペースの人のものはGET /2.0/workspaces/{workspace}/membersにあります。 - 他に使える欄は
description、close_source_branch(マージの後にブランチを閉じる)、draftです。 - 答えは、できたプルリクエストの JSON です。
links.html.hrefが Web のページです。
Bitbucket Data Center
個人の HTTP アクセス トークンを作り、Authorization: Bearer で送ります。Atlassian の資料によると、アカウントには両方のリポジトリの読み取りの権限(REPO_READ)が要ります。
curl --request POST \
--url 'https://bitbucket.example.com/rest/api/latest/projects/PRJ/repos/my-repo/pull-requests' \
--header 'Authorization: Bearer {token}' \
--header 'Content-Type: application/json' \
--data '{
"title": "Login page",
"fromRef": { "id": "refs/heads/feature/login", "repository": { "slug": "my-repo", "project": { "key": "PRJ" } } },
"toRef": { "id": "refs/heads/main", "repository": { "slug": "my-repo", "project": { "key": "PRJ" } } },
"reviewers": [ { "user": { "name": "charlie" } } ]
}'
- ブランチは
refs/heads/…の形で書きます。元はタグでもかまいませんが、先はブランチでなければいけません。同じフォークの系列なら、元と先が別のリポジトリでも作れます。 - レビュアーはユーザー名で書きます。下書きにするなら
"draft": trueを足します。下書きは Data Center 8.18 からです。
レビュアーを断られたとき
Bitbucket が受け付けないレビュアーが1人でもいると、呼び出し全体が失敗し、プルリクエストはできません。
- Cloud は 400 を返します。gildas/bitbucket-cli の公開の報告(2026年)では、送った既定のレビュアーに作成者が入っていて、
reviewers: <name> is the author and cannot be included as a reviewer.と返りました。自分は外します。 - Data Center は 409 を返します。中身は
InvalidPullRequestReviewersExceptionで、断られた名前ごとのreviewerErrorsと、受け付けられたvalidReviewersがついています。bitbucket-data-center-cli の報告(2026年)では、レビュアーのグループをユーザー名として送っていて、reviewer-group/cog_product is not a user.と返りました。送るのは人のユーザー名だけにします。
この呼び出しがしないこと
- Data Center では、作成の画面なら入る既定のレビュアーを足しません。先に読んで、一緒に送ります。Cloud では
effective-default-reviewersで一覧が取れます。どちらも Bitbucket の既定のレビュアーにあります。 - push はしません。元のブランチは先に Bitbucket に上げておきます。
この呼び出しを包んだコミュニティの道具はあります(上の2つなど)。どれも Atlassian のものではありません。
IntelliJ IDEA から Bitbucket のプルリクエストを作るなら
Pull Request Inbox for Bitbucket は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Git メニューに Bitbucket のプルリクエストを作成… を足し、Bitbucket Cloud と Data Center で使えます。今いるブランチから、選ばなければメインのブランチへ、下書きにもできるプルリクエストを作ります。既定のレビュアーは Cloud でも Data Center でも自分で読んで足し、自分は外します。リポジトリの最近のプルリクエストから人も選べます。それでも Bitbucket が誰かを断ったら、その人たちを外してプルリクエストを作り、Bitbucket の理由を見せます。ブランチがまだ Bitbucket に無ければそう伝えて、先に IDE の push の画面を開きます。プルリクエストの作成・承認・マージは Pro(月 US$1.50・30日間の試用つき)、受信箱は無料です。画面は日本語です。
Bitbucket・Jira・Rovo は Atlassian の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・JetBrains のいずれとも提携しておらず、承認も受けていません。