LINE WORKS メンバー配置転換APIを簡単に実行できるツール

## メンバー配置転換APIとは

LINE WORKSにはグループ会社機能といってマルチドメインをひとつのテナントにまとめる機能があります。（申込には諸条件があり、各販売パートナーへご相談ください）

出向や転籍など様々な理由から、所属するドメインを移動させたい（グループ会社テナント内のＡ社ドメイン⇒Ｂ社ドメインへの移動など）場合、LINE WORKSの標準機能では、いちどＡ社ドメインからアカウントを削除し、Ｂ社ドメインで作成し直す必要があります。つまり、これまで該当のアカウントで利用していた、過去のトークやカレンダーなどのデータ履歴を引き継ぐことができません。

そこで「[メンバー配置転換API](https://developers.worksmobile.com/jp/docs/user-move)」を使えば、過去のデータを保持したまま、在籍をドメインＡ→ドメインＢに移すことができます。

本記事では、メンバー配置転換に必要な情報をGoogle Sheetにまとめ、一括でAPIを実行するツールを紹介します

:::note warn
配置転換APIを実行するとログインIDが変更になるので、強制ログアウトがかかり、再ログインが必要になります。
外部LINE、LINE WORKS連携用のQRコードや招待URLも変更になります。
トークやカレンダー、外部LINE友だちのトークなど、過去のデータを引き継ぐことが可能ですが、
組織のデータとグループのデータは、API実行時に維持するかを指定する必要があります。
その他制約事項について[ドキュメント](https://developers.worksmobile.com/jp/docs/user-move)を参照し、必ず事前検証してください。

:::

## 必要なもの

・グループ会社環境のLINE WORKS
※移動先ドメインで契約しているライセンス数に、移動するID数ぶんの猶予が必要です
・各グループ会社ドメインの[LINE WORKS Developers Console](https://dev.worksmobile.com/jp/console/openapi/v2/app/list/view)へのアクセス権限
・[Google Sheetをコピー](https://docs.google.com/spreadsheets/d/1dt93TxgDOW6PnYz2ipr8gbLE9FfHP-NcxFIQGyAIxGs/copy#gid=345400411)して、ご自身のGoogle Driveに保存

## 事前準備

### 1. LINE WORKS Developersから認証情報をコピー

[LINE WORKS Developers Console](https://dev.worksmobile.com/jp/console/openapi/v2/app/list/view) へアクセスして、アプリを新規追加します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/9442be87-7f4e-4c47-188f-0594ad5e3023.png)

 「アプリの説明」に任意のテキストを入力します
 「**Client ID**」をコピーしてメモしておきます
 「**Client Secret**」をコピーしてメモしておきます
 「Redirect URL」に任意のURLを入力します
 「**Domain ID**」をコピーしてメモしておきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/c7e30934-0ac4-ee83-8361-a65d66b15ee6.png)


「**OAuth Scopes**」の管理にて、以下のスコープを選択して保存します。

:::note info
user
directory
:::


「**Service Account**」をコピーします
「**Private Key**」の発行ボタンを押してkeyファイルをダウンロードします 

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/f82383a7-b690-8320-7902-7395645f5766.png">

### 2. Google Sheetの設定

[Google Sheetをコピー](https://docs.google.com/spreadsheets/d/1dt93TxgDOW6PnYz2ipr8gbLE9FfHP-NcxFIQGyAIxGs/copy#gid=345400411)します。


シート「jwtGenerator」を開き、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/318d6a7a-4c3a-7c23-e163-b2a906652771.png)


「事前設定」のフィールドに先ほどコピーした
* **Client ID**
* **Client Secret**
* **Service Account**
* **Private Keyのファイル名** _(「private_2023xxxxxxxx.key」というような名称)_
* **OAuth Scopes**はそのまま
を、それぞれ入力します

#### Private KeyファイルをDriveにアップロードする
つぎに、先ほどLINE WORKS Developers Consoleからダウンロードした
**Private Keyファイル**を、「LINE WORKS 便利ツール」と同じGoogle Driveのロケーションに配置します。

ロケーションへの移動の仕方は以下

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/a5f2f2a8-c8f1-ed33-bc6b-d72517e65222.png">

ドラッグ＆ドロップで.keyファイルをアップロード


<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/ed63759c-63ce-93b5-83b2-9d3bc9d15141.png">

### 3. token発行のテスト

jwtGeneratorシートにもどり、
「トークンを発行」ボタンを押します

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/a6363ae5-dcc8-77b5-2d44-b34556f47b5c.png">


Access Token と Refresh Tokenに何やら文字列が表示されたら、テスト成功
以後はボタン押せばいつでもTokenを再発行できます
なおAccess Tokenの有効期限は24時間です

文字列がなにも表示されない場合は、
手順を最初から見直してみてください。

これでLINE WORKSのAPIを実行する準備ができました。

## 移動するユーザIDのデータを入力

Google Sheetの「userMove」シートを開きます

以下のガイドを参照し、移行対象のユーザのデータを入力します
externalKeyやDomainIDといった情報は[LINE WORKS Developers Consoleの組織設定](https://dev.worksmobile.com/jp/console/org/config/view) にて設定、参照できます。

<table>
  <caption>userMoveシートの項目説明</caption>
  <thead>
    <tr>
      <th></th> <th>項目名</th>　<th>説明</th>　<th>サンプル値</th>
    </tr>
  </thead>
  <tr>
    <td> A </td> <td>現在のID</td><td>移動元ドメインのログインID</td><td>user@domainA</td>
  </tr>
  <tr>
    <td> B </td> <td>移行後のID</td><td> 移動先ドメインのログインID </td><td> user@domainB </td>
  </tr>
  <tr>
    <td> C </td> <td>新しいドメインID</td><td>移動先ドメインのID。</td><td>1000xxxx</td>
  </tr>
  <tr>
    <td> D </td> <td>新しい職級</td><td> 移動先ドメインの職級のexternalKey。（任意） </td><td> level101 </td>
  </tr>
  <tr>
    <td> E </td> <td>新しい組織</td><td>移動先ドメインの組織のexternalKey。（任意）</td><td>orgUnit101</td>
  </tr>
  <tr>
    <td> F </td> <td>新しい役職</td><td> 移動先ドメインの役職のexternalKey。（任意） </td><td> position101 </td>
  </tr>
  <tr>
    <td> G </td> <td>旧いドメインID</td><td>移動元ドメインのID。</td><td>1000yyyy</td>
  </tr>
  <tr>
    <td> H </td> <td>旧い組織</td><td> 移動元ドメインの組織のexternalKey。これまでの組織およびトークルームに残りたい場合に指定する（任意）  </td><td> orgUnit201 </td>
  </tr>
  <tr>
    <td> I </td> <td>旧い役職</td><td>移動元ドメインの役職のexternalKey。これまでの組織に残りたい場合に指定する（任意） </td><td>position201</td>
  </tr>
  <tr>
    <td> J </td> <td>旧いドメインのemail</td><td> 移行元ドメインの所属組織の兼職emailアドレス。アドバンストプランで必須。@以前のIDパートのテナント内重複不可 </td><td> subuser@domainA </td>
  </tr>
  <tr>
    <td> K </td> <td>所属グループの維持</td><td>これまで所属していたグループのトークルームを維持するかどうか。falseにすると過去のグループのデータ閲覧不可</td><td>true</td>
  </tr>
</table>

:::note warn
移動先ドメインの所属組織と、移動元ドメインの所属組織は、それぞれ１つまで指定可能です
（例）
〇 B社営業部に異動し、A社営業部に籍を残す
✖ B社営業部と人事部に兼職し、A社営業部に籍を残す
✖ B社営業部に異動し、A社営業部と人事部に籍を残す
複数の組織に所属させたい場合は、実行後に手動で設定いただくか、適宜コードを改修してください。
:::

:::note warn
移動元ドメインで外部LINE連携を行っていた場合、移動先ドメインでも外部LINE連携が有効になっている必要があります。
:::

## 配置転換APIを実行


データが入力できたら、「配置転換実行」ボタンを押します

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/d6df0bb2-f508-f956-a270-98a79574f6d3.png">

ポップアップ→OK

<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/9eb37234-c08c-ce84-3c6c-8b275001bd2a.png">

成功

<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/1fdfe222-4411-f018-ba43-628154c35031.png">

エラー発生時は、エラーの内容を確認します
また、「log」シートに実行結果のログが保存されます

<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727469/226890e1-13d0-0297-081d-c920a078e178.png">


実行完了後、LINE WORKS の管理画面から、移行が正しく成功していることを確認してください。