Atlassian Cloud の組織やサイトから一括でユーザーを削除する

# 背景
Jira や Confluence を Cloud で利用しているのですが、その環境からユーザーを一括で削除したいことがありました。
本記事作成時点で Atlassian Cloud では Invite されたユーザーを組織やサイトから削除する API は用意されていないため、一括でユーザーを削除することができず、画面から一人ずつ削除していく必要があります。
最近 React を勉強し始めたこともあり、せっかくなので Web ブラウザーのコンソールから実行して一括でユーザーを削除する JavaScript を書いてみたので記事にします。

:information_source: Atlassian Cloud では「旧組織」の環境と「新組織」の環境があるため、それぞれの環境に合わせた手順を参照してください。
:warning: 本記事の内容はサポートされている方法ではなく、動作の保証はできません。検証環境などで試してから実施してください。

# ソースコード
旧組織と新組織用のそれぞれのソースコードを以下のリポジトリに Push しています。

|旧組織  |新組織  |
|---|---|
|[atlassian-remove-user-old-org](https://bitbucket.org/shuzaburo/atlassian-remove-user-old-org/src/master/)|[atlassian-remove-user-new-org](https://bitbucket.org/shuzaburo/atlassian-remove-user-new-org/src/master/)  |

# 手順
旧組織と新組織で手順や JavaScript が異なります。
自身の環境にあった手順を参照してください。

はじめに、削除したいアカウントのメールアドレスを改行区切りで記載したテキストファイルを用意しておいてください。
テキストファイルの中身は以下のような内容になります。
```
user001@example.com
user002@example.com
user003@example.com
```

## 旧組織の場合
:warning: 旧組織の場合、ユーザーはサイトごとに登録されています。サイトからユーザーを一括で削除する手順を記載します。

1. https://admin.atlassian.com へアクセスし、削除したいサイトのユーザー管理画面を開きます。 ![old-org-user-page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/aa73e5e2-c874-b470-3352-d3fa9da107a4.png)
1. F12 ボタンなどからブラウザーの 開発者ツール > コンソール を開きます。 ![old-org-user-page-console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/4e38bb2c-882d-d90e-366b-161a2987ad30.png)
1. [atlassian-remove-user-old-org](https://bitbucket.org/shuzaburo/atlassian-remove-user-old-org/src/master/) リポジトリの `dist` ディレクトリ配下にある `main.js` の内容をすべてコピーし、Web ブラウザーのコンソールに貼り付け、Enter ボタンを押下して JavaScript を実行します。 ![old-org-execute-script.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/21cc78fc-b68d-878e-e51a-05d817a40fd3.png)
1. 画面にダイアログが表示されるので、アカウントを削除したいサイトの ID と、メールアドレス一覧を記載しておいたテキストファイルを指定して「確認」ボタンをクリックします。
サイトの ID は URL から確認することができます。たとえばサイトの管理画面の URL が `https://admin.atlassian.com/s/fe43f486-c978-478f-a5eb-0e0b38281193/users` の場合、サイトの ID は `fe43f486-c978-478f-a5eb-0e0b38281193` です。 ![old-org-input-params.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/28b3b89b-35e7-7fc2-c5e0-2d8f98a9445d.png)
1. テキストファイルから取得されたユーザー数がダイアログに表示されます。問題なければ「削除」ボタンをクリックして実行します。 ![old-org-confirm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/02dedbc2-3c59-a59d-fe35-88ef19048f48.png)
1. サイト内のユーザーの取得、対象ユーザーの削除が行われます。ダイアログ内には進捗が表示されます。 ![old-org-progress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/9fe22808-9911-8a6e-0a94-4c4ae43f006c.png)
1. すべての処理が完了したら `delete-result.csv` ファイルがダウンロードされます。入力したメールアドレスのアカウントが削除されたかどうかや、失敗していればその詳細を CSV 形式で出力しています。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/bebb63d1-7d91-5b17-e395-7411d3e0b029.png)

## 新組織の場合
:warning: 新組織の場合、ユーザーは組織全体に登録されています。組織からユーザーを一括で削除する手順を記載します。

1. https://admin.atlassian.com へアクセスし、削除したい組織のユーザー管理画面を開きます。 ![old-org-user-page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/3fe98ce5-3b55-4ef8-50d1-7c54007289a4.png)
1. F12 ボタンなどからブラウザーの 開発者ツール > コンソール を開きます。 ![old-org-console.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/50820b07-8662-e3cf-028f-c33366adf151.png)
1. [atlassian-remove-user-new-org](https://bitbucket.org/shuzaburo/atlassian-remove-user-new-org/src/master/) リポジトリの `dist` ディレクトリ配下にある `main.js` の内容をすべてコピーし、Web ブラウザーのコンソールに貼り付け、Enter ボタンを押下して JavaScript を実行します。 ![old-org-execute.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/59742feb-3961-9282-0426-aafb321e93ef.png)
1. 画面にダイアログが表示されるので、アカウントを削除したい組織の ID と、メールアドレス一覧を記載しておいたテキストファイルを指定して「確認」ボタンをクリックします。
組織の ID は URL から確認することができます。たとえば管理画面の URL が `https://admin.atlassian.com/o/53bb177d-99c9-426a-b0a8-91f73abb8117/users` の場合、組織の ID は `53bb177d-99c9-426a-b0a8-91f73abb8117` です。 ![old-org-input.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/39b5f3fd-c606-eddb-c7a9-a7e05ecfc69c.png)
1. テキストファイルから取得されたユーザー数がダイアログに表示されます。問題なければ「削除」ボタンをクリックして実行します。 ![old-org-delete.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/f0e5990b-dbb2-bf81-bb13-c2fa41f333ea.png)
1. サイト内のユーザーの取得、対象ユーザーの削除が行われます。ダイアログ内には進捗が表示されます。 ![old-org-progress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/d5df73ba-f906-dbb8-febf-47c70df4c264.png)
1. すべての処理が完了したら `delete-result.csv` ファイルがダウンロードされます。入力したメールアドレスのアカウントが削除されたかどうかや、失敗していればその詳細を CSV 形式で出力しています。![old-org-done.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114825/7af6becd-2334-2efd-2cd9-ccbe359edef0.png)


# 注意点

冒頭にも書きましたが、この内容はサポートされている方法ではありません。動作の保証はできないので、検証環境などで試してから実施してください。
またユーザー数が多い場合、Atlassian Cloud のレート制限により 429 ステータスで失敗された内容が Web ブラウザーのコンソールに出力されますが、429 以外のステータスが返されるまでリトライするようにしているため、すべての処理完了後にダウンロードされる `delete-result.csv` ファイルで結果を確認してください。

# 最後に
[Cloud 版の Confluence（コンフルエンス） で子ページを一気に消す方法 2022 年冬](https://www.ricksoft.jp/blog/articles/001434.html) といった記事も書いていますので、ぜひお役立てていただけると嬉しいです。