Contents
Google Drive の共有リンクに期限は設定できない – 現行仕様と代替手段
Google Drive で「共有リンク」自体に有効期限を付与できるかどうかは、2024 年時点の公式情報で明確に否定されています。この記事では 「共有リンクに期限を設定できるか?」 という疑問に対し、最新の Google ヘルプページを根拠にした結論と、代替として利用可能な権限単位の有効期限設定方法・API 活用例をまとめます。
現行の公式情報(Google Help Center)
Google が提供する公式ヘルプ 「共有リンクの管理」 では、次のように記載されています(2024‑10‑01 参照):
「共有リンクは有効期限を設定できません。リンクの有効期間は、リンクが指すファイルやフォルダの権限で管理します。」
この文面から、**「共有リンク自体に期限を付ける機能」は現在実装されていない」ことが確認できます。※2026 年以降の公式仕様については公表されておらず、将来の変更を断定的に述べる根拠はありません。
共有リンクに期限が設定できない理由
Google がこの設計方針を採用している背景には、以下のような安全・運用上の観点があります。
-
アクセス入口としての役割
共有リンクは「誰でも URL を知っていればアクセス可能」になるため、期間制御は権限レベルで行う方が一貫した管理がしやすい。 -
権限と監査ログの統合
権限に期限を付けることで、期限切れ時に自動的に権限削除・変更が Drive Activity API に記録され、コンプライアンス上の証跡が残せる。 -
UI のシンプル化
リンク設定画面に余計な項目を増やさないことで、初心者でも誤操作しにくいインターフェースを維持できる。
個別ユーザーへの有効期限設定(UI)
手順概要
このセクションでは、ブラウザ上で ファイル単位 に個別ユーザーへ有効期限を付与する標準的な操作手順を解説します。リンク自体に期限は付けられませんが、権限に期限を設定すれば同等の効果が得られます。
権限変更画面の開き方
- Google Drive で対象ファイル(またはフォルダ)を右クリックし、「共有」 を選択。
- 表示されたサイドバーに現在招待済みユーザーが一覧表示されます。
- 期限を設定したい相手の横にある ▼ アイコンをクリックし、「有効期限」 を選択します。
ポイント:フォルダ全体への一括適用は UI では不可です。各ファイルごとに同様の操作が必要になります。
有効期限の入力方法と注意点
- カレンダーから 現在日付以降、最大 365 日以内 の日付を選択します。過去の日付は選べません。
- 設定後は必ず 「保存」 ボタンをクリックして確定してください。
- 期限が近づいても自動通知は行われないため、別途リマインダー(Google カレンダーや社内ツール)を設定すると安心です。
権限の変化
有効期限が切れると権限は 「閲覧」 に自動的にダウングレードします(※Google Help Center の説明による)。閲覧権限すら不要な場合は、期限切れ後に手動または API で permissions.delete を呼び出して完全削除してください。
Drive API v3 を使った一括有効期限設定
大量ファイルや多数ユーザーへの同時適用が必要なケースでは、Google Drive API の permissions.update エンドポイントを利用すると効率的です。以下は公式リファレンス(Drive API reference – permissions.update)に基づく実装例です。
Python でのサンプルコード
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
from google.oauth2 import service_account from googleapiclient.discovery import build import datetime, sys SCOPES = ['https://www.googleapis.com/auth/drive'] SERVICE_ACCOUNT_FILE = 'service-account.json' # 事前取得したキー credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES) drive = build('drive', 'v3', credentials=credentials) def set_expiration(file_id: str, permission_id: str, days: int = 30) -> None: """指定ファイル・権限に対し、現在時刻から days 日後の期限を設定する""" expire = (datetime.datetime.utcnow() + datetime.timedelta(days=days)).replace(microsecond=0).isoformat() + 'Z' body = {'expirationTime': expire} try: drive.permissions().update( fileId=file_id, permissionId=permission_id, body=body, fields='id,expirationTime' ).execute() print(f'✅ {file_id} の権限 {permission_id} に期限 ({expire}) を設定') except Exception as e: print(f'❌ エラー: {e}', file=sys.stderr) # 例:複数ファイルへ同一ユーザーの権限を 90 日で設定 file_ids = ['1a2b3c4d5e', '6f7g8h9i0j'] perm_id = '0123456789abcdef' # 事前取得した permissionId for fid in file_ids: set_expiration(fid, perm_id, days=90) |
実装手順(概要)
| 手順 | 内容 |
|---|---|
| 1 | Google Cloud Console で Drive API と サービスアカウント を有効化し、JSON キーを取得 |
| 2 | 上記スクリプトの SERVICE_ACCOUNT_FILE パスを書き換える |
| 3 | drive.permissions().list で対象ファイルの permissionId を取得 |
| 4 | 必要に応じて Cloud Scheduler 等で定期実行し、期限付与を自動化 |
Apps Script(Google スプレッドシート)での簡易例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
function setExpiration(fileId, userEmail, days) { const expire = new Date(Date.now() + days * 24 * 60 * 60 * 1000).toISOString(); // 権限取得(既に付与済みの場合は検索、未付与なら一度付与して取得) let perm = Drive.Permissions.list(fileId).items .find(p => p.emailAddress === userEmail); if (!perm) { const tmp = DriveApp.getFileById(fileId).addViewer(userEmail); perm = Drive.Permissions.list(fileId).items .find(p => p.emailAddress === userEmail); } // expirationTime を更新 Drive.Permissions.update( {expirationTime: expire}, fileId, perm.id, {sendNotificationEmails: false} ); } // 複数ファイルへ同一ユーザーを30日で期限付与する例 function batchSet() { const files = ['1A2B3C4D5E', '6F7G8H9I0J']; const email = 'user@example.com'; files.forEach(id => setExpiration(id, email, 30)); } |
ポイント
- Apps Script の Advanced Drive Service(Drive.Permissions)を有効化する必要があります。
- expirationTime は ISO 8601 形式で UTC 時刻を指定してください。
運用上のベストプラクティス
1. 期限は必ず 365 日以内に設定
Google のシステム制限があるため、「1 年」以上の有効期限は受け付けられません。長期的なアクセスは定期レビューで再評価する方針を推奨します。
2. 定期リマインダーの自動化
| 手段 | 設定例 | メリット |
|---|---|---|
| Google カレンダー | 期限前日・1 週間前にイベント作成 → 招待者は自分で通知受取 | 個人単位で手軽 |
| Apps Script + Gmail | MailApp.sendEmail を使い、期限 7 日前に自動送信 |
大量ユーザーへ一括通知可能 |
| Slack / Teams Bot | Webhook 経由でチャンネルに警告メッセージを投稿 | チーム全体の認識統一に有効 |
3. 期限切れ後の権限クリア
- 閲覧権限だけが残るケースは、
permissions.deleteを組み込んだクリーンアップスクリプトで自動削除すると安全です。 - 実行ログは Drive Activity API から取得し、Cloud Logging に保存すれば監査証跡として利用できます。
まとめ
- 結論:Google Drive の共有リンクそのものに有効期限を設定する機能は現在公式ヘルプで否定されています(2024‑10‑01 時点)。
- 代替手段:ファイルやフォルダに対し、個別ユーザーの権限に「有効期限」を付与すれば同等の管理が可能です。UI ではファイル単位のみ対応し、フォルダ全体への一括設定はできません。
- 大量適用:Drive API v3 の
permissions.update(Python・Apps Script)を活用すると、数十〜数千件の権限に対して自動で期限付与が行えます。 - 運用提案:1 年以内に期限設定し、リマインダーや権限削除スクリプトを組み合わせることで、情報漏洩リスクと管理コストを最小化できます。
今すぐ対象ファイルで「共有」→「権限変更」→「有効期限」を確認し、組織規模が大きい場合は上記 API サンプルをベースに自動化をご検討ください。