new URL('users', 'https://example.com/api/v1') の結果は、https://example.com/api/users です。v1 は残りません。
AIが書いたAPI呼び出しでは、new URL() を文字列の連結だと思うと、この違いを見落とします。今回は通信せず組み立て結果を比べます。
実測環境:macOS 27.2、Node.js v24.22.1、2026年11月10日。 ブラウザ・Windows・実APIの応答は試していません。各例を別々の .mjs に保存し node ファイル名.mjs で実行しました。
末尾の / がないと最後の区切りが置き換わる
console.log(new URL('users', 'https://example.com/api/v1').href);
console.log(new URL('users', 'https://example.com/api/v1/').href);
https://example.com/api/users
https://example.com/api/v1/users
HTTP(S)のURLで、users のような相対参照を渡すと、基準URLの最後の / までを基準に解決します。末尾が v1 なら、その部分を置き換えます。v1/ なら、その下へ進みます。
これはURLの構文上の扱いで、サーバー上のファイルやフォルダの存在は調べません。
渡す側が /users だと /api/v1/ は残らない
渡す値の先頭でも結果が変わります。
const base = 'https://example.com/api/v1/';
for (const input of ['users', './users', '/users', '../users']) {
console.log(input, new URL(input, base).href);
}
users https://example.com/api/v1/users
./users https://example.com/api/v1/users
/users https://example.com/users
../users https://example.com/api/users
/users はサイトのルートからの参照です。../users は一段上を基準にします。./users は現在の区切りからなので、今回の users と同じ結果です。
URLを作れたことと、目的のURLになったことは別
例外が出なくても、意図したパスになるとは限りません。完成URLも照合します。
import assert from 'node:assert/strict';
const apiBase = 'https://example.com/api/v1/';
const target = new URL('users', apiBase);
assert.equal(target.href, 'https://example.com/api/v1/users');
console.log(target.href);
https://example.com/api/v1/users
確認できたのは固定文字列からの組み立てだけです。通信の成功や自由入力の安全性は保証しません。
絶対URLを渡すと、基準URLの配下にも制限されません。
console.log(new URL('https://other.example/users',
'https://example.com/api/v1/').href);
https://other.example/users
自由入力なら送信先の制限は別途必要です。ここでは固定の users を使います。
AIへの修正依頼も、基準URL・渡す値・期待する完成URLを一組で渡すと確認条件が明確になります。
基準は
https://example.com/api/v1/、渡す値はusersです。完成URLをhttps://example.com/api/v1/usersと照合するコードも示してください。
参考:Node.js公式の new URL(input[, base])、WHATWG URL Standard。
未経験者向けの体験版を公開しています
- ▶ ライブデモ(インストール不要・無料)→ https://trial-web-ayies128s-projects.vercel.app/?ref=qiita
- 無料体験版(git clone して手元で動かす・⭐ Star もよろしくお願いします)→ https://github.com/ayies128/next-ai-camp-trial
- YouTube『AIエンジニア情報局』(AI×開発ニュースを1本5分で)→ https://www.youtube.com/channel/UC1rXVD9WYsQPQEWZyd-A1KA/?ref=qiita
※ 中上級者には易しすぎる内容なので、初心者の知り合いへの紹介や社内研修の参考としてどうぞ。