AI活用

Claudeに投げるURLが長すぎる問題、日本語は1文字約9文字に膨らむのでNotionに全文を逃がした

Claudeに投げるURLが長すぎる問題、日本語は1文字約9文字に膨らむのでNotionに全文を逃がした

Photo: Claude(Anthropic) (紹介目的で使用) via claude.com

おはようございます。まさきんです。

スマホに届く通知に「Claudeに投げる」ボタンを付けています。押すとその内容でClaudeのチャットが開く仕組みです。ところが日本語の長い文だと、URLに収まりきりませんでした。今日はその回避策として、全文をNotionに逃がした話を書いておきます。

※記事公開時点の情報です。最新の条件は公式サイトでご確認ください。

POINT
  • 日本語はURLエンコードで1文字あたり約9文字に膨らみます。
  • 僕の環境では2,000前後を目安にし、長い案内文は短くして通しました。
  • 長文はNotionに全文を置き、ボタンにはページIDと冒頭だけを載せています。
  • claude.ai/new?q= のWeb版は、公式ドキュメントで確認できませんでした。
  • デスクトップ版は claude://claude.ai/new?q= が公式ヘルプに載っています。

通知を読むだけで終わっていた

我が家では、家の定期レポートや障害通知をTelegramで受け取っています。自動化の結果がスマホに次々と届く形ですね。以前、毎晩のカード利用をAIにチェックさせる仕組みも書きました。

ただ、通知は読んだらそれで終わりがちでした。「これどうしよう」と思っても、Claudeを開いて貼り付けるのが少し面倒です。なので、通知そのものに相談の入り口を付けることにしました。

ボタンの仕組み

通知には「🤖 Claudeに投げる」というボタンが付いています。中身は claude.ai/new?q=<依頼文> というURLです。押すと依頼文が入った状態でClaudeのチャットが開きます。

ボタンにはTelegramのInlineKeyboardButtonを使っています。公式のBot APIでは、url欄に「HTTPかtg://のURL」を指定できるとされています。一方で、押したときにボットへ送る callback_data は1〜64バイトの制限があります。今回はURLを開くだけなので、url欄だけで足ります。

項目公式の仕様僕の使い方
textボタンの表示文字🤖 Claudeに投げる
urlHTTPかtg://のURLclaude.ai/new?q=…
callback_data1〜64バイト使っていない
通知の本文1〜4096文字レポートや障害の内容

日本語は1文字9文字に膨らむ

ここで最初の壁に当たりました。日本語をURLに入れると、文字数が一気に増えます。

URLに使える文字は決まっています。それ以外はパーセントエンコードという形に置き換えます。RFC 3986では、1バイトを「%」と16進数2桁の3文字で表すと定めています。

日本語の文字は、UTF-8ではふつう3バイトです。RFC 3629の表でも、この範囲は3バイトの並びになっています。3バイトがそれぞれ3文字になるので、1文字で約9文字です。例えば「あ」は %E3%81%82 になります。

文字の種類UTF-8のバイト数エンコード後の文字数
半角英数字1バイト1文字(そのまま)
ひらがな・漢字の多く3バイト約9文字
記号の一部1〜3バイト3〜9文字

仕組みがわかると、なるほどという感じでした。日本語200文字で、URLは2,000文字近くになる計算です。

当初の案内文だけで2,000を超えた

最初は、依頼文の頭に長めの案内文を付けていました。「これは家の自動通知です」のような前置きですね。ところがその案内文だけで、エンコード後に2,000を超えてしまいました。

なので、案内文をぐっと短くして通しました。とはいえ本文が長いと、また同じ問題にぶつかります。ここで別の置き場所が必要だと感じました。

URLの長さに一律の上限はない

では、URLは何文字まで入るのか。調べてみると、一律の上限はないようです。

HTTPの仕様であるRFC 9110では、少なくとも8,000オクテットのURIに対応することを推奨しています。ただ、これは下限の推奨です。上限を決めているわけではありません。長すぎると、サーバーは「414 URI Too Long」を返すこともあります。

ブラウザやアプリ、途中のサービスごとに扱える長さは違います。なので、僕の環境では2,000前後を目安にしました。この数字は、どこでも通る保証ではありません。

+と%が化けた

もうひとつ、地味にハマったのが記号です。?q= に渡す文で「+」と「%」が化けました。正しくエンコードしても、表示される文が崩れたんです。

URLの世界では「+」を空白として読む慣習があります。WHATWGのURL標準でも、フォーム形式の解析で「+」を空白に置き換える手順があります。どこで化けているかは、ここでは断定しません。

対策はシンプルにしました。送る前に「+」と「%」を全角の「+」「%」に置き換えています。人が読む依頼文なので、全角でも困る場面は少ないと思います。

長文はNotionに退避した

本題の回避策です。長い文はURLに入れるのをやめました。

代わりに、Notionの「Claude受け渡し」というデータベースに全文を書きます。ボタンのURLには、そのページIDと冒頭だけを載せます。Claude側は、そのIDでNotionのページを読みに行きます。

比べる点短文長文
URLに載せるもの依頼文そのものページIDと冒頭
全文の置き場所URLの中Notionのページ
Claudeの動きそのまま読むNotionを読みに行く
動作確認送って確認した送って確認した

短文も長文も、実際に送って動くことを確かめました。

Notion APIでできること

Notionの公式APIでは、データベースの下にページを作れます。既存のページかデータソースを親に指定する形です。

読む側では、ページIDを指定してページの情報を取り出せます。ただ、ページの本文は別の窓口です。「ブロックの子要素を取得する」APIで読むと公式に書かれています。

もうひとつ、制限にも気をつけたいところです。公式のリクエスト制限では、リッチテキスト1つの中身は2,000文字までとされています。長文を1つのブロックに詰めるのではなく、分けて書くのが無難かもしれません。

Claude側から読むには、Notionのコネクタを接続しておく必要があります。コネクタは、Claudeが外部サービスのデータにアクセスする仕組みです。権限は接続した人のものを引き継ぐと、公式ヘルプに書かれています。

手順の流れ

僕の仕組みを、流れとして並べるとこうなります。

  1. 通知スクリプトが、通知の本文と依頼文を用意する。
  2. 依頼文の「+」と「%」を全角に置き換える。
  3. エンコード後の長さが目安以内か確かめる。
  4. 短ければ、そのまま ?q= に入れてボタンを作る。
  5. 長ければ、Notionの受け渡しDBに全文を書く。
  6. ページIDと冒頭だけを ?q= に入れてボタンを作る。
  7. Telegramに通知とボタンを送る。

擬似コードにすると、だいたいこんな形です。

文 = 依頼文の「+」「%」を全角に置換
if エンコード後の長さ <= 目安:
    q = 文
else:
    ID = Notion受け渡しDBに全文を保存
    q = "Notionページ " + ID + " を読んで。冒頭: " + 文の先頭
ボタンURL = "https://claude.ai/new?q=" + エンコード(q)

ボタン作りは別スクリプトに分けた

最初は、通知送信のスクリプトの中でURLを組み立てていました。ただ、置換や長さの判定が増えて見通しが悪くなりました。

なので、ボタンURLを作る処理を小さな別スクリプトに分けました。通知を送る側は、できたURLを受け取るだけです。通知の種類が増えても、同じ部品を使い回せます。

自動化の裏側の話はCloudflare Workers無料枠のCron上限の記事にも書いています。小さく分けておくと、あとで直すときに楽ですね。

Macのデスクトップアプリでの違い

MacのClaudeデスクトップアプリでも試しました。claude://new?q= だと、アプリが起動するだけでした。文面は渡りませんでした。

一方で、claude://claude.ai/new?q= なら文面が渡りました。公式ヘルプにも、この形の書式が載っています。ヘルプには、q の文は約14,000文字で切り詰められるとも書かれています。すべての値はURLエンコードが必要ともあります。

なお、Telegramのボタンのurl欄は公式にはHTTPかtg://のURLです。claude:// をボタンに直接入れる使い方とは別の話として見てください。

注意

Web版の claude.ai/new?q= は、公式ドキュメントでは確認できませんでした。いまは動いていますが、将来変わるかもしれません。デスクトップ版の claude:// は公式ヘルプに書式が載っています。

スマホ1台で家の用事を回すなら、通信費も見直しておきたいところです。通知やAIとのやりとりが増えるほど、スマホは生活の窓口になりますね。

契約しなくても必ず100ポイントもらえるシミュレーション 楽天モバイルの料金を確かめてみる

押すと楽天のログインページが開きます。ログイン後にキャンペーン内容が表示されます。

よくある失敗・落とし穴

この仕組みは「通知を読むだけで流してしまう人」に向いていると思います。「自動化の結果をAIに相談したい人」にも合うかもしれません。一方で、つまずきやすい点もいくつかありました。

特にトークンの件は気をつけたいところです。URLは履歴や共有で人目に触れやすいです。受け渡し用のページIDだけを載せるのが安心ではないでしょうか。

受け渡しページの整理は、僕もまだ途中です。7日経ったら自動でアーカイブする処理は未実装です。ルールを決めても守られない話は164件のタスクを数えた記事でも書きました。仕組みで片付けるまでが宿題かな。

始める前に確認すること

よくある質問

Q. なぜ日本語だとURLが長くなるの?

日本語の多くの文字は、UTF-8で3バイトになります。URLでは1バイトを「%XX」の3文字で表します。なので1文字あたり約9文字に膨らみます。

Q. URLは何文字まで入れられる?

一律の上限はないようです。HTTPの仕様では、8,000オクテット以上への対応を推奨しています。ただ、実際の上限はブラウザやサービスで違います。僕の環境では2,000前後を目安にしました。

Q. claude.ai/new?q= は公式の機能?

Web版については、公式ドキュメントで確認できませんでした。いまは動いていますが、将来変わるかもしれません。デスクトップ版の claude://claude.ai/new?q= は公式ヘルプに載っています。

Q. 「+」や「%」はなぜ化けるの?

URLでは「+」を空白として読む慣習があります。ただ、僕の環境でどこで化けたのかは断定していません。対策として、送る前に全角に置き換えています。

Q. Telegramのボタンに長いデータを持たせられない?

callback_data は1〜64バイトの制限があります。長い文を持たせる用途には向きません。なので、全文はNotionに置く形にしました。

Q. Notionに置いた全文をClaudeはどう読むの?

ClaudeにNotionのコネクタを接続しておきます。URLに載せたページIDを手がかりに、Claudeがページを読みに行きます。短文と長文の両方で、実際に動くことを確かめました。

Q. 受け渡しページは溜まらない?

溜まります。7日経ったら自動でアーカイブする処理は、まだ作れていません。いまの残課題のひとつです。

参考にした公式情報

まとめ

通知に「Claudeに投げる」ボタンを付けると、相談までの距離がぐっと縮まります。ただ、日本語はURLの中で約9倍に膨らみます。短文はそのまま、長文はNotionに逃がす形に落ち着きました。

残っている宿題は、受け渡しページの片付けです。通知を読んで流してしまいがちなら、ボタンをひとつ足してみるのはいかがでしょうか。

契約しなくても必ず100ポイントもらえるシミュレーション 楽天モバイルでスマホ代を見直してみる

押すと楽天のログインページが開きます。ログイン後にキャンペーン内容が表示されます。

本記事にはアフィリエイト広告を含みます。当サイトのリンクを経由して商品・サービスへお申し込みいただいた場合、提携先企業から成果報酬を受け取ることがあります。 また、運営者は楽天グループに所属する社員であり、紹介プログラムを通じた報酬を受け取る場合があります。記事内容・評価は広告の有無にかかわらず、運営者の実体験と調査に基づき作成していますが、 上記の関係性をご理解のうえお読みください。詳しくは免責事項・アフィリエイト表記をご覧ください。

楽天モバイルの通信エリア・電波状況について気になることがある方は、公式の電波改善・調査依頼フォームからご相談いただけます。

ABOUT THE AUTHOR
まさきん

楽天グループ勤務・デジタルマーケター(FP資格保有)

40代前半、共働き・四児の父。楽天グループでデジタルマーケターとして勤務するかたわら、ファイナンシャルプランナー(FP)の資格を活かして家計管理と資産形成にも力を入れている。

プロフィールを見る

関連記事

RELATED
Gemini(Google AI Pro)のファミリー共有は家族5人まで。設定手順と範囲 AI活用

Gemini(Google AI Pro)のファミリー共有は家族5人まで。設定手順と範囲

Google AI Proは管理者のほか家族5人まで共有できます。Geminiアプリとストレージは共有でき、YouTube Premium Liteは管理者のみ。Flowの上限は家族で分け合います。設定手順と子どものアカウントの扱いを公式ヘルプで整理しました。

2026.10.13 · 読了 13分
AIサブスクの請求日と家計簿がずれる3つの理由|Claudeはアップグレードで請求日が変わる AI活用

AIサブスクの請求日と家計簿がずれる3つの理由|Claudeはアップグレードで請求日が変わる

Claudeは月の途中でMaxへ上げると請求サイクルがリセットされ、その日が新しい請求日になります。ドル建ての円換算はカード会社にデータが届いた時点で決まり、明細や家計簿の反映は数日遅れます。領収書メールを正本に月を決める5つの手順をまとめました。

2026.10.13 · 読了 13分
freee会計の未処理明細を月1回の消込便に。毎月5日7:30・3区分・上限15件で人に回す設計 AI活用

freee会計の未処理明細を月1回の消込便に。毎月5日7:30・3区分・上限15件で人に回す設計

freee会計の未処理明細が18件ほど、週次の確認6回ぶん動かないまま残っていました。毎月5日の朝7:30に自宅Macで動かす消込便の設計と、確定できる分は月1件・迷う明細は1件ずつ上限15件で人に回す線引きをまとめます。

2026.10.12 · 読了 13分
楽天モバイルに乗り換えで最大14,000ポイント 契約しなくても必ず100ポイントもらえるシミュレーション →
いますぐエントリー →