POSTS

Gmail のメールのパーマネント ID を簡単にコピーできる Chrome 拡張を作りました

Gmail で開いているメールのパーマネント ID(変わらない ID)をワンクリックでコピーできる Chrome 拡張「Gmail Message Link」を作りました。コピーした ID を AI エージェントに渡せば、「このメールについて」と頼むだけで、AI が Gmail API でそのメールを開けます。

なぜ作ったか

Gmail でメールを開くと、アドレスバーはこんな形になります。

https://mail.google.com/mail/u/0/#search/<検索語>/FMfcgzXXXXXXXXXXXXXXXXXXXXXXXXXX

末尾の FMfcgz... は Gmail の画面だけで使う ID です。この URL を AI エージェントに渡しても、Gmail API ではメールを特定できません。

API で使える ID を手で取り出すこともできます。メールの「︙」から「メッセージのソースを表示」を開くと、その URL に permmsgid=msg-f:<10進数> が入っています。ただ、毎回メニューを開いてソースのページを表示するのは手間です。そこで、ボタン一つでコピーできるようにしました。

できること

ツールバーのボタンで、開いているメールの ID をコピー

Gmail でメールを開いた状態で、ツールバーの拡張のボタンを押すと、ID がクリップボードにコピーされます。ポップアップにも同じ内容が表示されます。

スレッドに複数のメールがあるときは、表示されているうちの最後のメール(たいてい最新)の ID をコピーします。

右クリックで、スレッドの中の好きなメールの ID をコピー

スレッドの途中のメールを指したいときは、そのメールの上で右クリックして「このメールの ID をコピー」を選びます。右クリックしたメールの ID がコピーされ、画面の下に「ID をコピーしました。」と表示されます。

コピーされる内容

件名: 【サンプル】ご注文ありがとうございます
差出人: shop@example.com <shop@example.com>
Gmail API message id: 1234567890abcdef
permmsgid: msg-f:1311768467294899695
Gmail API thread id: 1234567890abcdef
thread: thread-f:1311768467294899695

メールの ID とスレッドの ID を、Gmail API の形(16進数)と Gmail の内部の形(msg-f: / thread-f:)の両方でコピーします。件名と差出人も付くので、AI が開いたメールが合っているかを、人も AI も確かめやすくなります。

メールが1通だけのスレッドでは、メールの ID とスレッドの ID が同じ値になります。また、件名はスレッドの見出しから取るので、返信のメールでも Re: は付きません。

AI エージェントに渡してみた

コピーした値を、Claude Code の Gmail コネクタに渡して試しました(2026-10-17)。

渡した値使ったツール結果
16進数の message idget_message開けた
16進数の thread idget_thread開けた
msg-f:<10進数>get_message開けた
msg-a:r<10進数>(自分が送ったメール)get_message開けた
10進数だけget_messageInvalid id value

コピーした内容をそのまま貼り付けて「このメールを要約して」のように頼めば、AI がメールを開いてくれます。

権限は最小限

メールを扱う拡張なので、権限はできるだけ小さくしました。

  • 権限は clipboardWrite(コピー)と contextMenus(右クリックメニュー)だけです。
  • 外への通信はしません。Gmail の OAuth も使いません。
  • ID・件名・差出人は Gmail の画面(DOM)にすでに入っているので、それを読んでコピーするだけです。メールの本文は読みません。

仕組み

Gmail でメールを開くと、ID が要素の属性として DOM に入っています。拡張は、ここから ID・件名・差出人を読みます。

  • 件名の要素: h2[data-thread-perm-id="thread-f:…"] と h2[data-legacy-thread-id="<16進数>"]。件名は、この要素の文字列から取ります。
  • メールの要素: div[data-message-id="#msg-f:…"] と div[data-legacy-message-id="<16進数>"]。差出人は、この中の span[email] の name と email の属性から取ります。

Gmail は画面を切り替えても受信トレイの一覧を DOM に残しているので、checkVisibility() で画面に見えている要素だけに絞っています。

受信したメールでは、msg-f の10進数を16進数にすると Gmail API の ID になります(BigInt("1311768467294899695").toString(16) → "1234567890abcdef")。

既にある拡張との違い

似た拡張はすでにあります(2026-10-17 に Web で検索した範囲)。

どれも RFC822 の Message-ID 系の値を扱います。Gmail Message Link は、AI エージェントがそのまま Gmail API に渡せる ID を、件名・差出人と一緒にコピーするところが違います。

制限

  • 受信トレイの一覧からはコピーできません。 Gmail は一覧の行の右クリックメニューを自前のメニューに置き換えているので、拡張の項目が出ません。メールを開いてから使ってください。
  • Gmail の内部の属性に頼っています。 属性名は非公開なので、Gmail の更新で動かなくなるかもしれません。
  • 複数のアカウント(/u/1/)ではまだ試していません。

今後

  • 日付と RFC822 の Message-ID(rfc822msgid)もコピーできるようにする。
  • 一覧で選んだメールの ID も、ツールバーのボタンでコピーできるようにする。

入手方法

GitHub で公開しています。

個人で作った拡張なので、ご利用は自己責任でお願いします。

Chrome ウェブストアには出していないので、パッケージ化されていない拡張機能として読み込みます。

  1. リポジトリをクローンするか、ZIP でダウンロードして展開する。
  2. Chrome で chrome://extensions を開き、右上の「デベロッパー モード」をオンにする。
  3. 「パッケージ化されていない拡張機能を読み込む」を押し、リポジトリのフォルダを選ぶ。
  4. すでに開いている Gmail のタブは、再読み込みする。