Skip to content

個人アカウント向けの招待方式(pendingOwner)と一括承諾を追加する - #26

Draft
pollenjp wants to merge 1 commit into
claude/google-drive-file-transfer-m8zsjofrom
claude/plantuml-output-directory-v76s8c
Draft

個人アカウント向けの招待方式(pendingOwner)と一括承諾を追加する#26
pollenjp wants to merge 1 commit into
claude/google-drive-file-transfer-m8zsjofrom
claude/plantuml-output-directory-v76s8c

Conversation

@pollenjp

Copy link
Copy Markdown
Member

概要

既定の直接譲渡(DriveApp.setOwner())は Google Workspace の同一ドメイン間でしか動きません。個人アカウント(gmail.com)宛て・別ドメイン宛ては「引数が無効です」「アクセスが拒否されました: DriveApp」で全件失敗します。

そこで、個人アカウント向けに Drive API v3 の pendingOwner を使った 「招待 → 承諾」の 2 段階フロー(招待方式) を追加しました。

このブランチは PR #22 のブランチ (claude/google-drive-file-transfer-m8zsjo) を base にしています(差分をこの機能だけに絞るため)。#25 で入れた図まわりの変更もこのブランチに含まれています。

変更内容

  • 設定シートに B5「譲渡方式」を追加: 直接譲渡(Workspace 同一ドメイン向け) / 招待方式(個人アカウント向け・ネイティブ形式のみ) の 2 択プルダウン(初期値は直接譲渡)。想定外の値は安全側(直接譲渡)に倒す
  • 送信側(招待方式): transfer.ts の譲渡処理を方式で分岐。招待方式では Drive.Permissions.create({ role:'writer', type:'user', emailAddress, pendingOwner:true }) で招待
    • 移転できるのは Google ネイティブ形式のファイルのみフォルダ・非ネイティブ形式(PDF/Office 等)は「対象外」として記録・スキップ(エラーにはしない)
  • 受信側(承諾): メニュー 「所有権の譲渡を承諾する」accept.ts を追加。台帳の「招待済み」かつ譲渡先 = 自分の行を読み、Drive.Permissions.update({ role:'owner' }, …, { transferOwnership:true }) で一括承諾。既に承諾済みの ID は除外するため再実行に安全。6 分制限に達したら残数を返し「再実行してください」と案内
  • 実行前の警告: 招待方式の確認ダイアログに「ネイティブ形式限定」「フォルダ・PDF・Office は対象外」「受信側の承諾が必要」を明示。本番の最終確認も方式に応じて文面を変更
  • 進捗・台帳の表示: 招待済み / 対象外 の件数を集計・表示
  • マニフェスト: appsscript.jsonenabledAdvancedServices で Advanced Drive Service(Drive v3)を有効化(スコープ .../auth/drive は既存)
  • ドキュメント更新: 付録 B(招待方式の使い方・制限・仕組み)、05 運用手順、07 スプレッドシート UI、04 コードリーディング(accept.ts 追加)、README

使い方(要約)

  1. 送信側: B5 で「招待方式」を選び、通常どおり「開始」を実行 → 対象に招待が付き、台帳に「招待済み」が記録される
  2. 受信側: 同じ共有スプレッドシートを開き、メニュー「所有権の譲渡を承諾する」を実行 → 招待された所有権をまとめて受領

検証

  • tsc --noEmit(strict)/ npm run build(dist に accept.js を含む 6 本 + manifest 出力)ともにエラーなし
  • 型は @types/google-apps-script の Drive v3(Drive.Permissions.create/list/update)で確認
  • 実 API を叩く動作確認は Google アカウント環境が必要なため、実機での招待→承諾は利用者側での確認になります(手順は付録 B)

既知の制限

  • 個人アカウントで移転できるのはネイティブ形式のファイルのみ(フォルダ・PDF・Excel 等は Google 側の仕様で移転不可)。それらの集約はコピーベース移行や共有ドライブを検討
  • 送信先に既存の共有権限がある場合、Permissions.create が競合しうる(その場合は台帳にエラーが記録される)

🤖 Generated with Claude Code


Generated by Claude Code

setOwner による直接譲渡は Workspace 同一ドメイン間でしか動かないため、
個人アカウント(gmail.com)向けに Drive API v3 の pendingOwner を使った
「招待 → 承諾」の 2 段階フローを追加する。

- 設定シートに B5「譲渡方式」(直接譲渡 / 招待方式)を追加
- 招待方式: ネイティブ形式のファイルのみ pendingOwner で招待し、
  フォルダ・非ネイティブ形式(PDF/Office 等)は「対象外」として記録・スキップ
- 受信側メニュー「所有権の譲渡を承諾する」を追加(accept.ts)。
  台帳の「招待済み」行を読み role=owner + transferOwnership で一括承諾(再実行に安全)
- 実行前ダイアログに招待方式の注意(ネイティブ限定・受信側の承諾が必要)を表示
- appsscript.json で Advanced Drive Service(Drive v3)を有効化
- 教科書(付録 B / 05 / 07 / 04 / README)を新機能に合わせて更新

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PG8YYqW1fQsT92uuEaY1M9
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants