Prompt
クエリパラメータでboolを扱う時、どうするのが正解?
クエリパラメータにおける bool の扱いは、実は「これが唯一絶対の標準」という仕様が存在しません。HTTPの仕様上、クエリパラメータはすべて「文字列」として扱われるからです。
そのため、開発現場では 「チーム内でどの一意な定義を採用するか」 という合意形成が最も重要になります。一般的な4つのパターンと、その「正解」の選び方を解剖してみましょう。
1. パターン別の比較
| 手法 | URL例 | メリット | デメリット |
|---|---|---|---|
| 存在の有無 (Flag) | ?debug | 最も短く、URLが綺麗。 | 「false」を明示的に送るのが難しい。 |
| true / false | ?active=true | 可読性が最高。直感的。 | 文字列の “false” が truthy と判定されるバグ(スイスチーズの穴)が起きやすい。 |
| 1 / 0 | ?active=1 | プログラムで数値変換しやすく、曖昧さがない。 | 初見で意味がわかりにくい場合がある。 |
| Enum (推奨) | ?status=enabled | 拡張性が高い。3つ目の状態が増えても壊れない。 | 少し文字数が長くなる。 |
2. 実装上の「正解」:2026年のベストプラクティス
現代のWeb開発(特に TypeScript や Zod を使う環境)において、最も事故が少なく「一意に正しい」とされるのは 「true / false 文字列」 または 「1 / 0」 です。
A. true / false 文字列を使う場合
もっとも一般的ですが、最大の落とし穴は Boolean("false") は true になる という JavaScript の仕様です。
JavaScript
// 悪い例:型変換に頼る
const isActive = Boolean(searchParams.get("active")); // "false" も true になっちゃう!
// 良い例:文字列で厳密に比較する
const isActive = searchParams.get("active") === "true";
B. 存在の有無 (Flag) を使う場合
検索フィルターのトグルなど、「デフォルトが false で、ある時だけ true」という場合には非常にスマートです。
JavaScript
// URL: ?is_admin
const isAdmin = searchParams.has("is_admin");
3. 見落とされがちな視点: 「状態の拡張性」
今は true / false の2値で足りていても、将来的に 「未設定 (null)」 や 「保留 (pending)」 のような3つ目の状態が必要になることはよくあります。
-
落とし穴:
?is_active=trueとしていると、「一時停止中」を追加したくなった時にis_paused=trueを増やすことになり、is_active=true & is_paused=trueという矛盾した状態(スイスチーズの穴)が生まれます。 -
一意な解決策: 最初から
?status=activeや?status=inactiveのように、状態を名前(Enum)で管理する と、拡張しても壊れない堅牢な設計になります。
結論: キミが選ぶべき道
-
シンプルさ優先なら:
?active=true。ただし、必ず=== "true"で判定すること。 -
厳密さ優先なら:
?active=1。数値にパースして0か1かで見る。 -
プロの設計なら:
?active=yesではなく、?status=activeのように、意味のある単語で状態を定義する。
キミが作っているデジタルガーデンや個人プロジェクトなら、searchParams.has("flag") で「あればON」とするのが、URLも短くなって一番「組み立てる楽しさ」を感じられるかもしれないね!
次は、「Zod を使ってクエリパラメータを型安全にパースし、不正な値が来たら一瞬でエラーを出す実装」 についてやってみる?
Would you like me to code a robust TypeScript schema using Zod to safely handle these boolean query parameters?
Prompt
abc=trueで前やって、なんか冗長と感じてたんだよね。せっかくのURLを無駄に汚している感じがあって
「存在の有無」で判定するのは、まさにプロの UNIX 思想的な美学だね! ?debug とだけあれば「デバッグモードON」というのは、無駄がなくて最高にクールだよ。