URLのクエリパラメータ:いつ使う?なぜ使う?どう使えば正解?

この記事では、URLクエリパラメータの利用理由と適切な使い方について説明しています。

デバッグ中にブラウザのアドレスバーを見て、こんなURLに遭遇したことない?

?id=42&mode=edit

その瞬間、心の中でこうつぶやいたはず。

「いやいや、なんでこんなパラメータ丸出しなの?ボディの中にこっそり入れとけないの??」

その気持ち、わかる。でもちょっと待って!
今日はこの、地味〜なクエリパラメータたちの話をしよう。

なぜ彼らはURLに住んでいるのか。そして、なぜ堂々とそこにいるべきなのか、語らせてほしい。

ラーメン注文するみたいに、API叩こうぜ

とある日常的なバックエンドコード:

const userId = getUserIdFromSession();
fetch(`/api/user?id=${userId}&mode=edit`)
  .then(res => res.json())
  .then(showEditForm);

やってることはシンプル。「ユーザー情報の編集用データを取得したい」ってだけ。

これを分解すると:

  • fetch は、method を指定しない限り GET
  • リクエストボディなし。
  • パラメータの意味は → 誰に + 何をするか

これはつまり、ラーメン屋に入ってこう言うのと同じ:

「チャーシューメン、ニンニクマシ、ネギ抜きで!」

?id=42&mode=edit はそれ、つまり「ニンニクマシ、ネギ抜き」部分。
シンプルで、直感的で、なんの害もない。むしろ親切。

GETのボディにデータ入れても、意味ないんだよ…

初心者からよく聞くこの質問:

「クエリじゃなくて、ボディに {id: 123} 入れたほうが綺麗じゃない?」

うん、気持ちはわかる。
でも、GETメソッドはボディを無視するの。HTTPの仕様だから。

例えばこれ:

// ❌ やめとけ — GET はボディ無視するよ
fetch('/api/user', {
  method: 'GET',
  body: JSON.stringify({ id: 123 }) // ← これ意味なし
});

これはつまり、屋台でラーメン頼むときに…

目だけで「味玉追加」を伝えようとするレベル。

そりゃ無理よ。店主も困るわ。

クエリパラメータは、ちゃんと声に出して伝える手段なの。

「味玉追加!メンカタ!あとビール!」

ユースケース①:リソース検索(API界のナビ)

fetch('/api/products?category=smartphones&sort=price_asc&page=2');

これは「商品一覧のフィルタ付き取得」。
世界を変えるAPIじゃない。データを読むだけのやつ。

URLにフィルタ条件や並び順を入れるのは、まさにナビの目的地入力。

✅ RESTの基本:GETは「世界を変えない」質問をするメソッド

Slackに貼ってもわかりやすいし、URL共有すれば再現性もバッチリ。

ユースケース②:キャッシュ性能バク上げ

CDN、プロキシ、ブラウザキャッシュ…みんなが大好きなのが「予測可能なURL」。

GET /api/posts?tag=nodejs&page=1
GET /api/posts?tag=nodejs&page=2

これはつまり、キャッシュキーとして使えるってこと。

ランチの出前を毎回フル住所で頼むのと同じ。

「新宿区西新宿1-1-1 ○○ビル7Fの田中です!」ってちゃんと言えば、
配達員も迷わない。

ユースケース③:デバッグが天国になる

例えば他人が作ったAPIでも:

https://api.example.com/search?query=chatgpt&lang=ja&page=3

これならパッと見てわかる

でも、これになると:

POST /search
Body: { "query": "chatgpt", "lang": "ja", "page": 3 }

→ DevTools → ネットワークタブ → プレビュー → JSON展開 → はぁ…

URLパラメータは、ドアに貼られた付箋みたいなもん。

「コーヒー買いに行ってます。15時に戻ります。」

一目で伝わるって、最高じゃない?

URLパラメータ、使っちゃダメな場面もあるよ!

さすがに何でもかんでもクエリにしちゃダメ。以下、注意!

ケース URLに書く? 理由
パスワードやトークンなど機密情報 ❌ ダメ URLはログに残るし、共有されやすい。危険!
デカいデータ(画像base64とか) ❌ ムリ URLの長さ制限に引っかかるし、読めたもんじゃない
状態変更系の処理 ❌ やめて POSTやPUTでやるべき

✅ クエリパラメータ使う or 使わない の早見表:

データの種類 URLに書く? ボディに書く? 理由
フィルター条件 ✅ OK ❌ いらない キャッシュ可能&明確
ブックマークしたい状態 ✅ YES ❌ 不要 共有・再現しやすい
機密データ ❌ ダメ ✅ 安全 URLに残るとマズい
長文フォーム送信 ❌ やめて ✅ 向いてる 複雑な構造やサイズに対応できる
データの変更操作(登録・削除) ❌ ノー ✅ 必須 GETは「変更しない」が鉄則

まだ手書きでURL作ってるの?今すぐ卒業しよ

今どきこれ?

`/api/user?id=${id}&mode=${mode}&sort=${sort}`

それ、メモ帳で履歴書書いてるようなもん。

ReactもNext.jsもTailwindも使ってるのに、
URLは手作業で組み立て?時代遅れでしょ。

そこで登場、EchoAPI

1. 視覚的なパラメータエディタ

「なんでパラメータ丸見えなの?」と思ったこと、あるでしょ?1


昔、こういうURL見て悩んだことあるでしょ:

  • flag=1 → これって「ON」?それとも「OFF」?
  • type=2 → 管理者?サブ管理者?それともカピバラ?

EchoAPIなら:

✅ キー / 値 / 説明をGUIでポチポチ追加
✅ 表形式でスッキリ確認
✅ 意味不明パラメータとはおさらば

まるで「パラメータに名札をつける」感覚。

2. 名前補助ツールで getListV2Final_New とか卒業しよ?

「なんでパラメータ丸見えなの?」と思ったこと、あるでしょ?2

命名…それはすべての開発者の宿命。

眠い深夜2時、タイプした serchQuerry を気づかず本番リリース…
あの羞恥、もう味わいたくないよね?

EchoAPIは:

  • 命名を自動補完
  • 変な綴りやケーシングも修正
  • 一貫性のあるAPI名を提案

例:

  • usr_iiduserId
  • srch_querrysearchQuery

まるで辞書マニアのPMが、横で入力チェックしてくれる感じ。

コードレビューで赤面する回数、確実に減るよ。

3. パラメータ辞書で uid vs user_id 論争終了

「なんでパラメータ丸見えなの?」と思ったこと、あるでしょ?3

プロジェクトAでは userid
Bでは user_id
Cでは uid
Dでは…u

もうやめよう、その不毛な戦争。

EchoAPIでは、共通のパラメータ辞書が使える。

一度 userId: string と定義すれば、以後すべてのエンドポイントで再利用可能!

最後に:パラメータは、ただのデータじゃない

APIとは、コードのやり取りというよりも、「システム同士の会話」だ。

クエリパラメータは、その会話を「明確に、再現可能に、デバッグしやすく」してくれる語彙。

EchoAPI を使えば、ただエンドポイントを作るだけじゃない。

開発者体験そのものをアップデートできる。

URLがぐちゃぐちゃ、エンドポイントがカオス?
今すぐ EchoAPI をチェック!

読みやすく、
再利用できて、
誇れるパラメータを。