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. 視覚的なパラメータエディタ

昔、こういうURL見て悩んだことあるでしょ:
flag=1
→ これって「ON」?それとも「OFF」?type=2
→ 管理者?サブ管理者?それともカピバラ?
EchoAPIなら:
✅ キー / 値 / 説明をGUIでポチポチ追加
✅ 表形式でスッキリ確認
✅ 意味不明パラメータとはおさらば
まるで「パラメータに名札をつける」感覚。
2. 名前補助ツールで getListV2Final_New
とか卒業しよ?

命名…それはすべての開発者の宿命。
眠い深夜2時、タイプした serchQuerry
を気づかず本番リリース…
あの羞恥、もう味わいたくないよね?
EchoAPIは:
- 命名を自動補完
- 変な綴りやケーシングも修正
- 一貫性のあるAPI名を提案
例:
usr_iid
→userId
srch_querry
→searchQuery
まるで辞書マニアのPMが、横で入力チェックしてくれる感じ。
コードレビューで赤面する回数、確実に減るよ。
3. パラメータ辞書で uid
vs user_id
論争終了

プロジェクトAでは userid
Bでは user_id
Cでは uid
Dでは…u
もうやめよう、その不毛な戦争。
EchoAPIでは、共通のパラメータ辞書が使える。
一度 userId: string
と定義すれば、以後すべてのエンドポイントで再利用可能!
最後に:パラメータは、ただのデータじゃない
APIとは、コードのやり取りというよりも、「システム同士の会話」だ。
クエリパラメータは、その会話を「明確に、再現可能に、デバッグしやすく」してくれる語彙。
EchoAPI を使えば、ただエンドポイントを作るだけじゃない。
開発者体験そのものをアップデートできる。
URLがぐちゃぐちゃ、エンドポイントがカオス?
今すぐ EchoAPI をチェック!
読みやすく、
再利用できて、
誇れるパラメータを。