1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Bitbucketのapp password廃止後、コンテナからgit pushする方法

1
Posted at

はじめに

Docker コンテナの中で開発していると、コンテナ内から Bitbucket のリポジトリへ git push したくなります。

ところが 2026年6月9日に Bitbucket の App password が完全廃止され、従来よく紹介されていた「App password を発行してパスワード欄に入れる」という手順が使えなくなりました。現在は後継の API トークン を使います。

この記事では、Linux コンテナ内から Bitbucket へ push し、プルリクエストを作るところまでの手順をまとめます。

問題

1. App password が使えない

Bitbucket は通常のログインパスワードでの HTTPS 認証を受け付けません。長らくその代替は App password でしたが、これは 2026年6月9日をもって完全に停止しました。今から発行することはできません。

2. clone した URL にユーザー名が埋め込まれている

Bitbucket の Web UI から「Clone」でコピーした URL には、ログイン中アカウントのユーザー名が自動で埋め込まれています。

$ git remote -v
origin  https://example-user@bitbucket.org/example-workspace/example-repo.git (fetch)
origin  https://example-user@bitbucket.org/example-workspace/example-repo.git (push)

この状態で git pull すると、ユーザー名を聞かれずパスワードだけを求められます。

$ git pull
Password for 'https://example-user@bitbucket.org':

API トークンはこのユーザー名の組み合わせでは認証できないため、ここで何を入れても弾かれます。

解決方法

Step 1: API トークンを発行する

API トークンは Atlassian アカウント側の画面から発行します。Bitbucket の App passwords 画面には「Go to API tokens」というリンクがあり、そこからも遷移できます。

  1. https://id.atlassian.com/manage-profile/security/api-tokens を開く
  2. Create API token with scopes をクリック
  3. 名前と有効期限を入力して Next
  4. 対象アプリに Bitbucket を選んで Next
  5. スコープを選択して作成
  6. 表示されたトークンをコピーする(再表示できないので必ず控える)

選ぶスコープ

スコープは 動作:リソース:プロダクト の3段構成になっています。

スコープ 意味 用途
read:repository:bitbucket リポジトリの読み取り clone / fetch / pull
write:repository:bitbucket リポジトリへの書き込み push
write:pullrequest:bitbucket プルリクエストの作成・更新・マージ API 経由で PR を作る場合

git コマンドで push するだけなら repository 系だけで足ります。write は read を自動的に含まないので、両方にチェックが入っているか確認してください(UI 上は write を選ぶと read が自動で付くこともあります)。

pullrequest スコープが要るのは、CLI やスクリプトから API でプルリクエストを操作する場合だけです。ブラウザで PR を作るならログインセッションで操作するので不要です。

Step 2: remote URL を書き換える

埋め込まれている個人のユーザー名を、API トークン認証用の固定ユーザー名 x-bitbucket-api-token-auth に置き換えます。

git remote set-url origin https://x-bitbucket-api-token-auth@bitbucket.org/example-workspace/example-repo.git

URL の構造は次のとおりです。

https://ユーザー名@ドメイン/ワークスペース/リポジトリ名.git

3つ目は「プロジェクト名」ではなく ワークスペース名 です。Bitbucket のワークスペースはリポジトリをまとめる組織・アカウント単位の入れ物で、GitHub でいうオーナー(組織名/ユーザー名)に相当します。Bitbucket には別に「プロジェクト」という分類機能もありますが、こちらは URL には現れません。

なぜユーザー名が固定値でよいのか

URL の ユーザー名@ は、リポジトリの場所を特定するためのものではありません。HTTP Basic 認証(ユーザー名とパスワードをまとめて送る標準的な認証方式)のユーザー名欄を、あらかじめ埋めておくための指定です。リポジトリの特定に使われるのはドメイン以降だけです。

そして API トークンでは「誰として認証するか」「どの権限を持つか」という情報をトークン自体が持っています。そのためユーザー名欄は識別に使われず、Bitbucket 側が x-bitbucket-api-token-auth という固定文字列を受け付ける仕様になっています。

なお、Atlassian アカウントのメールアドレスを使うこともできますが、@ を含むため URL エンコード(%40)が必要になります。固定ユーザー名のほうが確実です。

Step 3: 認証情報を保存する

毎回トークンを打ち込むのは現実的ではないので、保存用のヘルパーを有効にします。

git config --global credential.helper store

その後 git pull や git push を実行すると、パスワードを聞かれます。

$ git pull
Password for 'https://x-bitbucket-api-token-auth@bitbucket.org':

ここに API トークン を貼り付けて Enter を押します。入力中は何も表示されませんが、入力自体は通っています。ターミナルへの貼り付けは Ctrl+Shift+V(環境によっては右クリック)です。

認証が通ると ~/.git-credentials に保存され、次回以降は聞かれなくなります。

注意: store はトークンを平文で保存します。コンテナのホームディレクトリを名前付きボリュームにしている場合、コンテナを作り直しても残る代わりに、そのボリュームを他人と共有すると漏洩します。共有しない前提で使ってください。

Step 4: コミット者情報を設定する

コンテナを作り直すと消えることが多いので、併せて設定しておきます。

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

Step 5: push する

git switch -c feature/my-change
git add .
git commit -m "Add my change"
git push -u origin feature/my-change

Step 6: プルリクエストを作る

ブラウザで作る場合

push すると Bitbucket 側にブランチが現れるので、Web UI から「Create pull request」を押すだけです。この操作は通常のログインセッションで行われるため、トークンのスコープは関係ありません。

コンテナ内から API で作る場合

write:pullrequest:bitbucket スコープを付けたトークンが必要です。Bearer 認証で REST API を叩きます。

export BITBUCKET_API_TOKEN="発行したトークン"

curl -X POST \
  -H "Authorization: Bearer ${BITBUCKET_API_TOKEN}" \
  -H "Content-Type: application/json" \
  https://api.bitbucket.org/2.0/repositories/example-workspace/example-repo/pullrequests \
  -d '{
        "title": "Add my change",
        "source": { "branch": { "name": "feature/my-change" } },
        "destination": { "branch": { "name": "main" } }
      }'

Bearer 認証を使うと、トークンに紐づく Atlassian のメールアドレスを渡す必要がなくなります。

補足: プロキシ配下のコンテナの場合

社内プロキシを経由する構成では、コンテナに HTTP_PROXY / HTTPS_PROXY が設定されていれば git はそれをそのまま使うため、git 側に追加設定は不要です。

environment:
    - HTTP_PROXY=http://px:3128
    - HTTPS_PROXY=http://px:3128
    - http_proxy=http://px:3128
    - https_proxy=http://px:3128

外部ネットワークに直接つながらない internal: true なネットワークにコンテナを置いている場合も、プロキシ経由で HTTPS が通れば push できます。逆にこうした構成では SSH(22番ポート)が塞がれていることが多いので、HTTPS + API トークンのほうが現実的です。

おわりに

ポイントは3つです。

  • App password は廃止済み。今は API トークン
  • clone 時に埋め込まれた個人のユーザー名を x-bitbucket-api-token-auth に置き換える
  • スコープは read / write を明示的に両方選ぶ

古い記事の手順をそのままなぞると App password 発行画面で行き止まりになるので、同じところで詰まった方の参考になれば幸いです。

参考

JISOUのメンバー募集中!

プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!
▼▼▼
https://projisou.jp

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?