ブラウザとターミナルでアクセスされるlocalhostが違った話

はじめに
仕事で、社内ネットワーク越しにGHESなどにアクセスするのでzshにproxyを設定している。
あまり深く考えずproxyを使っていたので、(考えたら当たり前なのだが)最近になって色々「アレ?」ってなる経験をしたのでまとめる。
ブラウザでlocalhostにアクセスできるのにcurlだとできない
APIを開発していたときのこと、
curlでcurl http://localhost/hoge?fuga=piyo
みたいに打って動作確認をしようとしたが、エラーになりアクセスできない。
でもブラウザで
http://localhost/hoge?fuga=piyo にアクセスすると実装どおりのjsonが返る。アレ?
しばらく悩んだが、よくよく考えたらterminalはproxyを設定しているので、社内ネットワーク上の
hoge?fuga=piyoを見に行こうとしていたぽい。ブラウザはproxy関係ないのでイメージ通りPCのローカルにアクセスできてたぽい。
axiosで、Node.jsからだとアクセスできるのにBunだとアクセスできない
次、開発したAPIをTypeScriptから使おうとしたが、これまた挙動がおかしい。
proxy設定をaxiosに渡すようコードを書いて、
bun run hoge.ts
で実行したが、うまく動かない。
ts-node hoge.ts
だと動く。
アレ?
調べていると、bunのランタイムだとaxiosが独自実装されているらしく、proxyの設定を無視するんだとか。
なぜだ…ts動かすのに楽ちんで好きだったのに…。
fetchだとどちらもうまくいくっぽいけど、クライアントがaxiosで実装されていたのでどうすることもできず。
仕方ないから
http_proxy= https_proxy= bun run hoge.ts
と一時的にproxy解除して実行することで解決した。
まとめ
ネットワーク系の知識を付けましょう。

![iPadでプログラミング開発環境構築の努力と2023年個人的ベストプラクティス[Blink+VSCode+Codespaces]](/images/covers/coding-with-ipad.jpg)
