適用場面
- サーバー間アクセス — ユーザーの操作なしでアプリが Sheets にアクセス
- 自動化システム — バックグラウンドジョブ、cron タスク、自動レポート
- 固定スプレッドシート — 特定のスプレッドシートを制御
- 本番環境 — ユーザー同意フローなしで確実に動作
前提条件
- Google Cloud Console プロジェクト
- Google Sheets API と Google Drive API を有効化
- プロジェクト管理者権限
セットアップ
Google Cloud プロジェクトを作成
- Google Cloud Console にアクセス
- 新規プロジェクトを作成または既存を選択
- プロジェクト ID をメモ
Service Account を作成
- APIs & Services > Credentials に移動
- Create Credentials > Service Account をクリック
- Service Account の詳細を入力:
- Service account name: 説明的な名前(例:「Laravel Sheets App」)
- Service account ID: 自動生成
- Description: オプション
- Create and Continue をクリック
- オプションの両セクションはスキップして Done をクリック
Service Account キーを生成
- Credentials ページで作成した Service Account をクリック
- Keys タブに移動
- Add Key > Create new key をクリック
- キー形式は JSON を選択
- Create をクリック
- JSON ファイルが自動ダウンロードされます
JSON ファイルを保存
- ダウンロードした JSON ファイルを
storage/app/に移動 google-service-account.jsonに名前を変更- 重要:
.gitignoreに追加してバージョン管理から除外
スプレッドシートを共有
各 Google Sheets スプレッドシートについて:
- Google Sheets で開く
- 共有 ボタンをクリック
- JSON ファイルの
client_emailフィールドをコピー - このメールアドレスに共有(例:
[email protected]) - 権限を選択:
- 閲覧者 — 読み取り専用
- 編集者 — 読み書き
- 所有者 — フルアクセス(非推奨)
使用方法
設定完了後、Service Account が自動的に使用されます。アクセストークンの設定は不要です。セキュリティベストプラクティス
1. Service Account 権限を制限
- 必要なスプレッドシートのみ共有
- 所有者 ではなく 編集者 を使用
- 定期的にアクセス権限を監査
2. キーの安全な保管
- Service Account キーはバージョン管理に含めない
.gitignoreで確実に除外- 本番環境では web root 外の安全な場所に保存
- 定期的にキーをローテーション
3. 本番環境への展開
追加のセキュリティ対策:- JSON キーを web root 外の安全な場所に保存
- 環境ごとに異なる Service Account を使用(開発・ステージング・本番)
- Google Cloud Console でこれらのアカウントの利用状況を監視
- 疑わしいアクティビティをログ記録・アラート
環境変数リファレンス
| 変数 | 説明 | 例 |
|---|---|---|
GOOGLE_SERVICE_ENABLED | Service Account 認証を有効化 | true |
GOOGLE_SERVICE_ACCOUNT_JSON_LOCATION | JSON ファイルのパス | storage/app/google-service-account.json |
高度な設定
JSON 文字列を環境変数に保存
JSON ファイルを個別ファイルとして保存する代わりに、JSON 文字列を環境変数として保存できます。GitHub Actions などの CI/CD 環境に適しています。 Step 1:.env に JSON 文字列を追加
config/google.php で JSON 文字列をデコード
トラブルシューティング
よくあるエラー
「caller does not have permission」エラー- スプレッドシートが Service Account メールアドレスで共有されているか確認
- 書き込み操作の場合、権限が 編集者 以上か確認
- JSON ファイルのパスが正しいか確認
- ファイルが存在し、web サーバーが読み取れるか確認
- Google Cloud Console で Google Sheets API と Google Drive API が有効か確認
- API 有効化後、数分待つ
- JSON キーファイルが有効で破損していないか確認
- Service Account が削除または無効化されていないか確認
- プロジェクト ID が Google Cloud プロジェクトと一致しているか確認