☆PSGSuiteでPowerShellからG Suite APIを触っちゃお☆

## ☆PSGSuiteとは☆
>Powershell module for Google / G Suite API calls wrapped in handy functions.

（https://github.com/SCRT-HQ/PSGSuite より引用）
## ☆何ができる☆
例えば……こんなスクリプトをPowerShellで実行してみるよ☆

```powershell
New-GSCalendarEvent "☆ミーティング☆" -LocalStartDateTime (Get-Date "21:00:00") -LocalEndDateTime (Get-Date "22:00:00")
```
そしたらGoogle カレンダーを見てみるよ(。`・∀・´)

すると……
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/cdf9fc8a-b4fe-da32-e8d8-7bb5ce683275.png)
今日の21:00-22:00に ☆ミーティング☆ 入ってるじゃない！！！！！！
びっくり～(*゜0゜)
## ☆セットアップ☆
この章の内容は基本的にドキュメントに書いてあるものを色々はしょって和訳したものだよ～
（原文: https://psgsuite.io/Initial%20Setup/ ）
必要最低限の内容をなるべく簡単に書いたつもりだけど、もしうまくいかないところがあったら、原文に詳しく書いてあるかも～(・ρ・*)
### ☆必要なもの☆

- PowerShell 4.0以上 あるいは PowerShell Core 6.0以上
- G Suite アカウント（全機能を使うには管理者アカウントが必要だよ）
    - （でも普通のアカウントでもけっこう色々できるので、今回は普通のアカウントを対象にするよ～）

### ☆インストール☆
#### ☆PowerShellGetのアップデート☆
PowerShell Galleryから取ってくるのが一番簡単だから、その方法を紹介するよ(。`・∀・´)
ただ、この方法はPowerShellGetコマンドレットが最新版じゃないといけなくて、しかも初めてこのコマンドを使う人は、ほとんどの場合バージョンが1.0.0.1で止まってます(*゜0゜)
Windows 10 かつ PowerShell 5.0以上なら簡単で
https://blog.shibata.tech/entry/2017/12/18/004105
に書いてあるとおりにすれば大丈夫です

というのも

```powershell
Install-Module PowerShellGet -Scope CurrentUser -Force -AllowClobber
```
これでおしまいです！ヾ(@>▽<@)ノ
#### ☆PSGSuiteのインストール☆
一瞬です(*゜0゜)

```powershell
Install-Module -Name PSGSuite -Scope CurrentUser
```
おわり(*゜0゜)
### ☆認証情報の設定☆
PSGSuiteでは管理者アカウントじゃなくても以下のAPIが使えるよ☆

- Contacts API
- Gmail API
- Google Calendar API
- Google Docs API
- Google Drive API
- Google Sheets API
- Google Slides API
- People API (new Contacts API)
- Tasks API

このAPIを使うために、ここから認証情報の設定をしていきますよ～∈(´__________｀)∋[^1]
[^1]: 原文が書かれたときからいくらか時間が経っているのか、Google Developer Console君のUIが、軽微ながら現在と違っていました。やや不便に思ったので、ここからの解説は執筆時点でのUIをもとに、スクショ多めで冗長性を持たせてあります(。`・∀・´)
#### ☆プロジェクト作成☆
[ここをクリック](https://console.developers.google.com/flows/enableapi?apiid=contacts,calendar,gmail,docs.googleapis.com,drive,sheets.googleapis.com,slides.googleapis.com,people.googleapis.com,tasks)すると、こんな感じの画面に飛びます！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/bb2da7f2-58b2-588f-1060-3c99aeb580a4.png)
「続行」と書かれた青いボタンを押してね～(。`・∀・´)
（ドロップダウンメニューはそのままで大丈夫だよ～ん）
#### ☆同意画面の設定☆
次の画面はたぶんこんな感じ～
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/262ef894-76ce-d97c-fbe2-3299575c6148.png)
これは認証情報のセットアップお助けウィザード君なんですけど、スキップしちゃいます(*゜0゜)
画面上部、青文字の「クライアントID」をクリックです！(。`・∀・´)

次の画面はこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/ca35d116-e9f4-341d-654f-8fb4ff1c7fda.png)
「同意画面を設定」と書かれた青いボタンを押しますよ～

次のUser Typeを選ぶ画面ですが、組織に属していない個人アカウントに「内部」は選べないので、必然的に「外部」を選ぶことになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/7a975aee-a846-d004-2ea2-97f94b62ba00.png)
選択したら青の「作成」ボタン！

次は同意画面の内容を決めます
設定すべきところは二か所あって

1. アプリケーション名を「PSGSuite」に設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/48110a98-f59a-f57f-cd96-3a199e9235fc.png)

2. 少し下にある「スコープを追加」ボタンを押すと……
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/36e69915-2ff3-8a43-e68e-4ee9dc114f95.png)
ポップアップが出てくるので、左上のチェックボックスをチェックして、右下の「追加」を押します！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/64312121-4d42-55fc-03bc-6b178a60956c.png)
ポップアップが閉じたら一番の「保存」ボタンをクリックします
これで同意画面の設定はおわりです！☆

#### ☆クライアントIDの取得☆
まず、左のメニューから「認証情報」タブを選びます(。`・∀・´)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/de567e6c-e362-c406-64d4-159d55c6ab02.png)
画面上部の「+ 認証情報を作成」をクリックするとドロップダウンが開くので、そこから「OAuth クライアント ID」をクリックします！

次の画面でアプリケーションの種類を聞かれます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/43ca1ded-043e-077e-05c3-1e7b4e698520.png)
「デスクトップアプリ」が適切です！

選択すると、クライアントの名前を何にするか聞かれます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/b8fe02cc-b68d-1a07-798a-33d849a681f4.png)
例えば「PSGSuite」としておくと、後々わかりやすいと思います！

「作成」ボタンを押すとクライアントIDの出来上がり☆
クライアントIDとクライアントシークレットがポップアップされたはずです

ポップアップを閉じて認証情報タブに戻ります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/68421590-2605-8dcd-1460-cd12ea3a92a3.png)
さっき決めた名前でクライアントが登録されているのが見えますか？(・ρ・*)
その右端にある矢印アイコンをクリックすると、クライアントIDやクライアントシークレットが含まれたJSONがダウンロードされます！
好きなフォルダに移して大丈夫ですが、次のステップで必要なのでパスを控えておいてください

これでGoogle Developer Console側の設定はおわりです！ヾ(@>▽<@)ノ
### ☆PSGSuite Configuration Fileの作成☆
まずPowerShellにコマンドをimportします(。`・∀・´)

```powershell
Import-Module PSGSuite
```
そして、PSGSuiteと、さっきのJSONを紐づけてあげます

```powershell
$ConfigName = "MyConfig"
$ClientSecretsPath = "C:\Keys\client_secret.json"
$AdminEmail = "mypersonalinbox@gmail.com"
Set-PSGSuiteConfig -ConfigName $ConfigName -SetAsDefaultConfig -ClientSecretsPath $ClientSecretsPath -AdminEmail $AdminEmail
```
- `$ConfigName`に適当な名前
- `$ClientSecretsPath`にJSONのパス
- `$AdminEmail`にメールアドレス

を入れて実行すれば完了です！
### ☆初回認証☆
最後に、ブラウザーで認証を済ませます
任意のコマンドを実行すると認証プロセスに入ります！(。`・∀・´)

```posh
Get-GSGmailProfile -Verbose
```

#### Windows PowerShellを使っている場合
- 自動でブラウザが立ち上がるよ
- 認証を済ませると先ほど打ったコマンドが実行されて完了だよ☆

#### PowerShell Coreを使っている場合

- リンクが表示されるので手動で踏みます
- 認証を済ませると認証コードが発行されるので、ターミナルにコピペしてね
- Enterを押すと先ほど打ったコマンドが実行されて完了だよ☆

参考までに、PowerShell 7 での実行結果のスクショを置いておきます∈(´__________｀)∋
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611062/66ae51ff-f9b7-3780-08cf-17cd3469bf73.png)
## ☆参考☆
- ドキュメントページ
    - https://psgsuite.io/