claspを使用したGASアプリのデプロイ完全ガイド

Google Apps Script（GAS）アプリケーションの開発において、claspツールを使用すると、VSCodeなどのローカル環境からコードを管理・デプロイできます。この記事では、claspを使ったGASアプリのデプロイ方法を詳しく解説します。


## 1. claspによるデプロイの基本
### デプロイとは
GASアプリのデプロイとは、スクリプトを実行可能な状態で公開することです。ウェブアプリケーション、APIエンドポイント、Googleワークスペースのアドオンなど、様々な形式でデプロイできます。

### 前提条件
デプロイの前に以下の準備が必要です：

- claspのインストール: npm install -g @google/clasp
- Googleアカウントでのログイン: clasp login
- プロジェクトの作成または既存プロジェクトのクローン
- コードの作成とプッシュ: clasp push

## 2. デプロイの種類と設定
### デプロイの主な種類
claspでは以下のデプロイタイプがサポートされています：
1. ウェブアプリケーション（Web App）
    - ブラウザからアクセス可能なウェブページとして公開
    - URLを通じて誰でもアクセス可能（権限設定による）
    <br>
2. APIエンドポイント（API Executable）
    - 外部アプリケーションから呼び出し可能なAPIとして公開
    - OAuth2認証を使用してアクセス
    <br>
3. アドオン（Add-on）
    - Googleドキュメント、スプレッドシートなどに統合されるアドオン

### デプロイ設定の指定
`appsscript.json`ファイルでデプロイの詳細設定を指定できます：
```json 
{
  "timeZone": "Asia/Tokyo",
  "dependencies": {},
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "webapp": {
    "access": "ANYONE",
    "executeAs": "USER_DEPLOYING"
  }
}
```

主な設定オプション：

- `access`: アクセス権限
    - MYSELF: 自分のみ
    - DOMAIN: 同じドメインのユーザーのみ
    - ANYONE: ログインユーザーのみ
    - ANYONE_ANONYMOUS: 誰でも（認証不要）
    <br>
- executeAs: 実行ユーザー
    - USER_DEPLOYING: デプロイしたユーザーとして実行
    - USER_ACCESSING: アクセスしたユーザーとして実行

## 3. 初回デプロイと更新デプロイの違い
### 初回デプロイ（新規デプロイ）
初めてアプリをデプロイする場合は、シンプルにclasp deployコマンドを使用します：

```bash 
clasp deploy --description "初回デプロイ"
```
このコマンドを実行すると：

- 新しいバージョンが作成されます
- 新しいデプロイIDが生成されます
- 新しいウェブアプリURLが生成されます

出力例：
```
Created version 1.
Created deployment ID: AKfycbw123456789...
- Web app URL: https://script.google.com/macros/s/AKfycbw123456789.../exec
```
**重要**: このデプロイIDは必ずメモしておきましょう。更新時に必要になります。

### 更新デプロイ（既存デプロイの更新）
コードを変更した後、既存のデプロイを更新する場合は、デプロイIDを指定します：
```bash 
clasp deploy --deploymentId AKfycbw123456789... --description "機能追加"
```
このコマンドを実行すると：

- 新しいバージョンが作成されます
- 指定したデプロイIDのデプロイが更新されます
- **ウェブアプリのURLは変わりません**

出力例：
```
Created version 2.
Updated deployment ID: AKfycbw123456789...
- Web app URL: https://script.google.com/macros/s/AKfycbw123456789.../exec
```
### 重要な違い
`clasp deploy`（デプロイID指定なし）: 毎回新しいデプロイが作成され、URLも変わる
`clasp deploy --deploymentId ID`（デプロイID指定あり）: 既存デプロイが更新され、URLは変わらない
実務では、通常は既存のデプロイを更新する方法（`--deploymentId`指定）を使用することが多いです。これにより、ユーザーに新しいURLを通知する必要がなく、ブックマークなども有効なままです。

## 4. デプロイの管理とベストプラクティス
### デプロイの一覧表示
現在のデプロイ一覧を確認するには：

```bash 
clasp list-deployments
```
出力例：
```
2 Deployments.
- AKfycbw123... @HEAD (web app)
- AKfycbx456... @12 (web app)
```

各デプロイの情報が表示されます：

- デプロイID
- 関連付けられたバージョン（@HEADは最新バージョン）
- デプロイタイプ

### デプロイの削除
不要になったデプロイを削除するには：
```bash 
clasp delete-deployment AKfycbw123...
```
### 複数環境の管理
開発環境、テスト環境、本番環境など複数の環境を管理する場合：

```bash 
# 開発環境用のデプロイを更新
clasp deploy --deploymentId DEV_ID --description "開発環境更新"

# テスト環境用のデプロイを更新
clasp deploy --deploymentId TEST_ID --description "テスト環境更新"

# 本番環境用のデプロイを更新
clasp deploy --deploymentId PROD_ID --description "本番環境更新"
```

### デプロイIDの管理
デプロイIDを安全に管理するためのベストプラクティス：

1. プロジェクトのREADMEファイルに記録する
2. 環境変数として保存する
3. チームで共有する設定ファイルに保存する
4. デプロイIDに意味のある名前を付ける（メモとして）

例：
```
デプロイID一覧
開発環境: AKfycbw123...
テスト環境: AKfycbx456...
本番環境: AKfycby789...
```
### 特定バージョンのデプロイ
特定のバージョン番号をデプロイする場合：

```bash 
clasp deploy --deploymentId AKfycbw123... --versionNumber 5 --description "バージョン5のデプロイ"
```

## 5. トラブルシューティング
よくある問題と解決策
1. デプロイ権限エラー
    - 問題: 「You do not have permission to deploy」というエラー
    - 解決: clasp loginで再認証、またはプロジェクトの権限を確認
    <br>
2. デプロイIDが見つからない
    - 問題: 「Deployment not found」というエラー
    - 解決: clasp list-deploymentsで正しいIDを確認
    <br>
3. ウェブアプリにアクセスできない
    - 問題: デプロイ後にURLにアクセスすると「アクセス権限がありません」と表示される
    - 解決: appsscript.jsonのアクセス設定を確認、適切な権限に変更後、再デプロイ
    <br>
4. 古いバージョンが表示される
    - 問題: 更新をデプロイしたのに古い内容が表示される
    - 解決: ブラウザのキャッシュをクリア、または?v=timestampパラメータをURLに追加

## まとめ
claspを使用したGASアプリのデプロイは、コマンドラインから効率的に行えます。初回デプロイでは新しいデプロイが作成され、更新時には既存のデプロイIDを指定することで同じURLを維持できます。

デプロイIDを適切に管理し、環境ごとに異なるデプロイを作成することで、開発からテスト、本番環境への移行をスムーズに行うことができます。

claspによるデプロイを活用することで、GASアプリケーションの開発・運用ワークフローが大幅に改善され、チーム開発やバージョン管理との統合も容易になります。