9ura00

drive.file と複数の Google アカウント——「シートを表示できません」の本当の原因はアカウントの取り違えだった

Sheet Widget2026年10月4日

Sheet Widget は、Google の drive.file という権限で、利用者が選んだスプレッドシートだけを読んでいます(この権限を選んだ理由)。

drive.file は、ほかのファイルが見えないぶん安心な権限ですが、複数の Google アカウントを持っている人では、思わぬ形でシートが読めなくなることがありました。

drive.file の許可は「アカウントごと・ファイルごと」

drive.file で許可されるのは、「どの Google アカウントで」「どのファイルを」選んだか、の組み合わせです。

  • アカウント A でファイル X を選ぶ → アカウント A のログイン情報で、ファイル X を読める
  • アカウント B のログイン情報では、同じファイル X は読めない(B では選んでいないので)

Sheet Widget では、ファイルを選ぶ画面(Google Picker)を、アプリ本体のログインとは別の、Web のログインで開いています(理由はこちらの記事)。この2つのログインはつながっていないので、アプリにはアカウント A でログインしているのに、Picker ではアカウント B を選んでしまう、ということが起こります。そうすると、選んだシートは、アプリが持っている A のログイン情報では読めません。

エラー文が、利用者を逆方向に案内していた

最初、シートを読めなかったときのウィジェットのエラー文は、「ファイルが削除されたか、名前が変わった可能性があります」という内容を主な原因として案内していました。

ところが、実際に読み込みに失敗したときの傾向を調べると、ほとんどがアカウントの取り違えでした。ファイルの削除や名前の変更は少数で、エラー文は利用者を見当違いの方向に案内していたことになります。

そこで、エラー文を次のように書き直しました。

  • まず「別の Google アカウントで選んでいないか」を確認してもらう
  • 「+」から、正しいアカウントでシートを選び直してもらう

ゴミ箱に移されたファイルは、Google Drive の API で別に判定して、その場合だけ専用のメッセージを出しています。

選んだときに気づけるようにした

エラー文を直すだけでなく、シートを選んだ時点で取り違えに気づけるようにもしました。

  1. Picker のページで、ファイルを選んだときに、そのときログインしていた Google アカウントのメールアドレスも取得して、アプリに返す
  2. アプリは、そのメールアドレスが、アプリに登録されているアカウントに含まれているかを確認する
  3. 含まれていない、かつ実際にシートの読み込みに失敗した場合だけ、「別のアカウントで選んだようです」という案内を表示する

「登録されていないアカウント」というだけで案内を出すと、問題なく読めている場合にも出てしまうことがあります。実際に読み込めなかったときだけに絞って、誤った警告を出さないようにしました。

案内のボタンは、プランによって分けています。

プラン 案内に出すボタン
Pro(複数アカウントに対応) 「〈選んだアカウント〉を追加」。押すと、そのメールアドレスを候補にしてログインし、成功したらシートを読み直す
無料(アカウントは1つ) Pro の説明。無料版は、アカウント1つで使う前提のため

無料版は、Picker にアカウントのヒントを渡す

無料版では、アプリに登録できる Google アカウントは1つだけです。そこで、Picker を開くときに、アプリでログインしているアカウントのメールアドレスをヒントとして渡し、最初からそのアカウントが選ばれるようにしています。これで、取り違え自体が起きにくくなりました。

Pro では、複数のアカウントを使い分ける前提なので、ヒントは渡さず、Picker の中でアカウントを選べる状態のままにしています。

まとめ

  • drive.file の許可は「アカウント × ファイル」の組み合わせ
  • ファイル選択とアプリ本体のログインが別になっていると、アカウントの取り違えが起きる
  • エラー文は、実際の失敗の傾向を確かめてから書く(思い込みで書くと、逆方向に案内してしまう)
  • 選んだ時点のアカウントを確かめて、実際に失敗したときだけ案内する
  • アカウントが1つの前提なら、Picker にヒントを渡して取り違えを防ぐ

Sheet Widget は App Store で公開しています。

← ブログの一覧へ