Edge ワークスペースを複製して他のユーザーに共有するPower Automate

# 前置き
Microsoft Edgeのワークスペース。みなさん使ってますか？
比較的新しい機能でなじみがない方もおられるかもしれないので、前置きとして簡単に触れておきます。

https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-workspaces

ワークスペースは開いてる複数のタブをウィンドウごと1つのセットとして保存できるような機能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/c8435d02-218f-8d6c-4aa5-281dc8328f69.png)

個人的な使用用途としても、作業ごとのまとまりとしてタブのセットを保存しておけるのはかなり便利です。
また、ワークスペースを閉じてしまっても、ちゃんと保存されていて特に期限の制約もなく、いつでも再度開けるところが気に入っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/ba640280-b15b-d62a-a20c-3e6d25f9433d.png)

そんなワークスペースですが、[招待]から同じ組織(テナント)のユーザーと共有することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/7ce6322f-e3ae-1f4b-86b4-4d0039ad15dd.png)

タブを新しく開いたり閉じたりしても、作業状況が共有したユーザーとしっかり同期されます。

…ん？
共有したタブを勝手に他の人に閉じられたら嫌じゃない…？

と、いうことで、作成したワークスペースを複製して共有するフローを作ってみました！

せっかく共有機能があるのだから、うまいこと使えないかな？と考えてみた結果です。

# フローの概要
今回は仕組みの解説のため、比較的シンプルな構造にしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/a5938db4-cd40-ea91-5936-829326b85dec.png)

あらかじめ作成しておいたワークスペースを対象に、実行時にユーザーを指定して複製したワークスペースを共有します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/54b721f4-240f-da65-576a-ffe2d47a8bc5.png)

共有されたユーザーには、ワークスペースを開くためのリンクつきチャットが届きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/ce76c1e1-8607-eeb3-376b-2bb75849f949.png)


# フローの解説
## トリガー
トリガーは簡単のため[手動でフローをトリガーします]を使用しています。
検証や実験に使いやすいお手軽トリガーですね。
ここでメールアドレスを指定できるように、入力を追加しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/3dbb0f7f-cc0f-1fca-bc14-4ea6fb8937c5.png)

## ワークスペースの複製
そもそもワークスペースはどこに保存されているのでしょう？
ワークスペースは同じ組織(テナント)のユーザーと共有できる機能があります。

共有できる個人の作成物といえば・・・？
そう、ワークスペースは作成者の**OneDrive for Business**に保存されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/29ac8a47-6c46-0f3a-4a75-c61f0eb1f435.png)

作成者というのは、Edgeのプロファイルでサインインしているアカウントを指します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/416e491b-5e4e-6479-cbe8-4bd72f767115.png)


OneDriveに保存されているということがわかれば複製は簡単ですね。
OneDriveコネクタの[**ファイルのコピー**]アクションを使用してコピーします。
ファイル名が重複しないよう、また誰に共有したファイルかわかるように、共有相手のmailNicknameを追加していますが、この辺りはお好みで変えてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/ac09ca45-82e7-2400-a28d-00b827515290.png)

コピー対象のワークスペースは、動的な値を使わずに単純指定しています。
共有したいファイルが固定ではない場合は、トリガーを[**選択したファイルの場合**]にして、ファイルを指定して実行できるようにするなど、運用に合わせて変えてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/08d464ce-2345-c08a-e7bf-46de328e5236.png)

## 共有リンクを作成する
ワークスペースの共有にもOneDriveの共有機能が使用されています。
ワークスペースの[招待]からリンクを発行すると同時に、OneDriveの方でも共有リンクが発行されるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/f59631c1-011b-9c74-52f6-9143ea2909df.png)

自動的に共有リンクが作成されますが、共有の種類は[**リンクを知っている <組織> 内のユーザー**]になっていました。
社外(テナント外)には共有されないようですね。いち情シスとしても安心しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/e09908e9-3bcc-ca61-7490-0cccecef84e8.png)

https://support.microsoft.com/ja-jp/office/onedrive-%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E3%81%AE%E5%85%B1%E6%9C%89-9fcc2f7d-de0c-4cec-93b0-a82024800c07

フローでも複製したワークスペースの共有リンクを作成します。
リンクの種類とスコープは、手動でワークスペースの共有を行った時と同様にしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/6ab00ca3-6db7-d086-2ffd-ea4f1cdc9763.png)

さて、この共有リンクですが、このリンクにアクセスしようとしても、ワークスペースを開くことができません。
「.edge」ファイルを、直接ファイルとして開こうとしてしまうようですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/1207fbeb-5d1e-ce20-ab87-55eeb5f7e991.png)

## ワークスペースとして開くためのリンクを発行する
一度、手動で招待した時のリンクを確認してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/2bb42f8e-d191-c9c7-2efb-5f837f308ae8.png)

コピーしたリンクを確認すると、"id="以降に謎の文字列が並んでいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/6550b55e-659a-0cd3-5922-2754955e0d41.png)

末尾の`%3D%3D`は少し書式が違う感じがするので、それを除いた黄色い部分をBase64でデコードしてみます。（[こちらのサイト](https://www.rapidtables.org/ja/web/tools/base64-decode.html)を使用しました）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/91c8c787-2de0-b568-ddbd-ab0c9adae7a6.png)

デコードするとURLが出てきましたね。
これはOneDriveで作成された共有リンクと同一です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/29390dfd-c35a-64a3-2786-a12cd410d1c6.png)

つまり、ワークスペースとして招待するためのURLには、**Base64でエンコードされたOneDriveの共有リンク**が含まれていたということですね。

ということで、フローでも同じことをします。
幸いPower Automate ではBase64でエンコードするための関数が用意されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/5d22387c-ddbf-8780-a8aa-2f7766621ef2.png)
```PowerFx:作成 inputs
https://aka.ms/edgeworkspaces/join?type=2&id=@{base64(outputs('共有リンクを作成する')?['body/WebUrl'])}&store=3
```

## チャットで招待リンクを送付する
ワークスペースとして開くためのリンクが作成できたので、最後にチャットで送ってフローは完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2572227/cac6d514-eaaf-494d-5e8f-70272750623a.png)

# おわりに
新機能であるワークスペース、僕個人としては自分1人で使う用途で活用していますが、せっかくの共有機能なので何かに使えないかと考えてみました。

想定する使用シーンとしては、例えば「新入社員お役立ち勉強サイト」なんかをまとめておいて、ワークスペースとして配布してあげる、といったものを考えています。
(リンク集作ればいいじゃんというのは無視しておいて…)

他にもみなさんでよい利用方法がありましたら、共有いただけると幸いです。