Docker で CLI for Microsoft 365 を使用しアプリカタログサイトを作成する

# はじめに

この記事は、**CLI for Microsoft 365** を Docker コンテナー上で使用し、SharePoint Online (SPO) のアプリカタログサイトを作成します。

## 環境

- **OS**: macOS Catalina バージョン 10.15.6
- **Docker Desktop**: 2.3.0.4

![スクリーンショット 2020-08-31 0.08.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/e15f4dd9-a581-6241-5f53-92bad4d39150.png)

![スクリーンショット 2020-08-31 0.09.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/b24903b4-2c7d-30a9-e26b-a24ea72e767d.png)


# 環境構築

任意のディレクトリに移動し、Dockerfile を作成します。

```dockerfile:Dockerfile
FROM node:12.18.3

RUN npm i -g @pnp/cli-microsoft365

VOLUME /usr/src
WORKDIR /usr/src

CMD /bin/bash
```

docker-compose.yaml を作成します。

```yaml:docker-compose.yaml
version: '3'

services:
  app:
    build: .
    container_name: m365-cli
    tty: true
    volumes: 
      - ./src:/usr/src
    working_dir: "/usr/src"
```

`docker-compose up -d --build`でコンテナーを起動します。

```zsh
docker-compose up -d --build
```

Docker コンテナーを起動したら、`docker ps`でコンテナー ID を確認します。

```zsh
docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES
db0427614c8f        docker-m365cli_app   "docker-entrypoint.s…"   22 seconds ago      Up 21 seconds                           m365-cli
```

上記の例では、`db0427614c8f`がコンテナー ID になるため、この ID を使用してコンテナーにログインします。
コンテナー ID は、自分のものに置き換えて実行してください。

```zsh
docker exec -it db0427614c8f /bin/bash
```

コンテナーにログインしたら、**CLI for Microsoft 365** を起動しましょう。

```shell
m365 login
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code CMPFXKTBD to authenticate.
```

コマンドを実行すると、ログインページと認証コードの情報が表示されるので、指定 URL に遷移し、認証コードを送信の上、Microsoft 365 で SharePoint の管理権限があるアカウントでログインを行います。

ログインが完了したら、接続状況を確認しましょう。ログイン時に使用したアカウント情報が表示されれば OK です。

```shell
m365 status
connectedAs: <ログインに使用したアカウントのメールアドレス>
```


# アプリカタログサイトの作成

以下のコマンドを実行し、テナントの SharePoint Online アプリカタログサイトを作成します。

```shell
m365 spo tenant appcatalog add --url <テナントのアプリカタログサイトとする URL> --owner <サインインに使用したメールアドレス> --timeZone 20 --wait
```

`m365 spo tenant appcatalog add --help`で、コマンドのオプションを確認できます。ただし、`timeZone`オプションについては、詳細の記載がありません。`timeZone`オプションについては、PowerShell の PnP で以下のコマンドを実行した結果を参考にしてください。

```powershell
Install-Module SharePointPnPPowerShellOnline
Get-PnPTimeZoneId
```

```powershell:timeZone一覧
Id Description                                        Identifier
-- -----------                                        ----------
 0 None                                               No:ne
 2 GREENWICH MEAN TIME DUBLIN EDINBURGH LISBON LONDON UTC
 3 BRUSSELS COPENHAGEN MADRID PARIS                   UTC+01:00
 4 AMSTERDAM BERLIN BERN ROME STOCKHOLM VIENNA        UTC+01:00
 5 ATHENS BUCHAREST ISTANBUL                          UTC+02:00
 6 BELGRADE BRATISLAVA BUDAPEST LJUBLJANA PRAGUE      UTC+01:00
 7 MINSK                                              UTC+02:00
 8 BRASILIA                                           UTC-03:00
 9 ATLANTIC TIME CANADA                               UTC-04:00
10 EASTERN TIME US AND CANADA                         UTC-05:00
11 CENTRAL TIME US AND CANADA                         UTC-06:00
12 MOUNTAIN TIME US AND CANADA                        UTC-07:00
13 PACIFIC TIME US AND CANADA                         UTC-08:00
14 ALASKA                                             UTC-09:00
15 HAWAII                                             UTC-10:00
16 MIDWAY ISLAND SAMOA                                UTC-11:00
17 AUKLAND WELLINGTON                                 UTC+12:00
17 AUKLAND WELLINGTON                                 UTC+12:00
18 BRISBANE                                           UTC+10:00
19 ADELAIDE                                           UTC+09:30
20 OSAKA SAPPORO TOKYO                                UTC+09:00
21 KUALA LUMPUR SINGAPORE                             UTC+08:00
22 BANGKOK HANOI JAKARTA                              UTC+07:00
23 CHENNAI KOLKATA MUMBAI NEW DELHI                   UTC+05:30
24 ABU DHABI MUSCAT                                   UTC+04:00
25 TEHRAN                                             UTC+03:30
26 BAGHDAD                                            UTC+03:00
27 JERUSALEM                                          UTC+02:00
28 NEWFOUNDLAND AND LABRADOR                          UTC-03:30
29 AZORES                                             UTC-01:00
30 MID ATLANTIC                                       UTC-02:00
31 MONROVIA                                           UTC
32 CAYENNE                                            UTC-03:00
33 GEORGETOWN LA PAZ SAN JUAN                         UTC-04:00
34 INDIANA EAST                                       UTC-05:00
35 BOGOTA LIMA QUITO                                  UTC-05:00
36 SASKATCHEWAN                                       UTC-06:00
37 GUADALAJARA MEXICO CITY MONTERREY                  UTC-06:00
38 ARIZONA                                            UTC-07:00
39 INTERNATIONAL DATE LINE WEST                       UTC-12:00
40 FIJI ISLANDS MARSHALL ISLANDS                      UTC+12:00
41 MADAGAN SOLOMON ISLANDS NEW CALENDONIA             UTC+11:00
42 HOBART                                             UTC+10:00
43 GUAM PORT MORESBY                                  UTC+10:00
44 DARWIN                                             UTC+09:30
45 BEIJING CHONGQING HONG KONG SAR URUMQI             UTC+08:00
46 NOVOSIBIRSK                                        UTC+06:00
47 TASHKENT                                           UTC+05:00
48 KABUL                                              UTC+04:30
49 CAIRO                                              UTC+02:00
50 HARARE PRETORIA                                    UTC+02:00
51 MOSCOW STPETERSBURG VOLGOGRAD                      UTC+03:00
53 CAPE VERDE ISLANDS                                 UTC-01:00
54 BAKU                                               UTC+04:00
55 CENTRAL AMERICA                                    UTC-06:00
56 NAIROBI                                            UTC+03:00
57 SARAJEVO SKOPJE WARSAW ZAGREB                      UTC+01:00
58 EKATERINBURG                                       UTC+05:00
59 HELSINKI KYIV RIGA SOFIA TALLINN VILNIUS           UTC+02:00
60 GREENLAND                                          UTC-03:00
61 YANGON RANGOON                                     UTC+06:30
62 KATHMANDU                                          UTC+05:45
63 IRKUTSK                                            UTC+08:00
64 KRASNOYARSK                                        UTC+07:00
65 SANTIAGO                                           UTC-04:00
66 SRI JAYAWARDENEPURA                                UTC+05:30
67 NUKU ALOFA                                         UTC+13:00
68 VLADIVOSTOK                                        UTC+10:00
69 WEST CENTRAL AFRICA                                UTC+01:00
70 YAKUTSK                                            UTC+09:00
71 ASTANA DHAKA                                       UTC+06:00
72 SEOUL                                              UTC+09:00
73 PERTH                                              UTC+08:00
74 KUWAIT RIYADH                                      UTC+03:00
75 TAIPEI                                             UTC+08:00
76 CANBERRA MELBOURNE SYDNEY                          UTC+10:00
77 CHIHUAHUA LA PAZ MAZATLAN                          UTC-07:00
78 TIJUANA BAJA CALFORNIA                             UTC-08:00
79 AMMAN                                              UTC+02:00
80 BEIRUT                                             UTC+02:00
81 MANAUS                                             UTC-04:00
82 TBILISI                                            UTC+04:00
83 WINDHOEK                                           UTC+02:00
84 YEREVAN                                            UTC+04:00
85 BUENOS AIRES                                       UTC-03:00
86 CASABLANCA                                         UTC
87 ISLAMABAD KARACHI                                  UTC+05:00
88 CARACAS                                            UTC-04:30
89 PORT LOUIS                                         UTC+04:00
90 MONTEVIDEO                                         UTC-03:00
91 ASUNCION                                           UTC-04:00
92 PETROPAVLOVSK KACHATSKY                            UTC+12:00
93 COORDINATED UNIVERSAL TIME                         UTC
94 ULAANBAATAR                                        UTC-08:00
```

作成が完了したら、以下のコマンドを実行して結果を確認しましょう。テナントのアプリカタログサイトの URL が表示されるので、実際にアクセスしを行い、作成されたことを確認しましょう。

```shell
m365 spo tenant appcatalogurl get
```