読了 約 5 分
cURLコマンドをFetch APIに一瞬で変換!API開発・移植での記述ミスを防ぐ実装テクニックと変換の基本ルール
#development
執筆: デジタル道具屋 編集部
Web 開発・運用に従事するエンジニアとデザイナーで構成された編集チーム。記事は実務での使用経験と公式仕様(RFC・W3C・各ベンダードキュメント)を参照して執筆しています。
本記事の執筆方針と編集ポリシーについてはAbout ページをご覧ください。
APIテストや他社サービス連携で頻出する「cURL(カール)」という存在

「博士!外部サービス連携のドキュメントを読んでいたら、APIの叩き方の例として `curl -X POST -H ...` みたいな黒い画面(端末)用のコマンドが載ってたんだぜ!これをブラウザのJSプログラムに書き直して実行したいんだけど、どうやればいいのかわからないんだぜ…。」

「ふむ、それはWeb開発の現場で毎日のように行われている作業じゃな。cURL(Client URL)は、コマンドラインからさまざまなプロトコルを使ってデータ転送を行う超定番ツールじゃ。インフラやバックエンド開発では便利じゃが、フロントエンドのJavaScriptコード(Fetch APIやAxiosなど)に手動で翻訳しようとすると、ヘッダーの指定やボディの形式指定で記述ミスが多発しがちじゃぞい。」

「そうよね。特にJSONを送る時の
'Content-Type': 'application/json' の指定や、文字列へのシリアライズ処理(JSON.stringify)、クッキーや認証トークンの設定は、cURLのオプション(-d や -H)をどうJSのオブジェクト構造にマップするか理解していないと絶対バグるわよ!」1. cURLオプションとFetch APIパラメータの対応関係

「cURLコマンドの各オプションが、Fetch APIの第2引数(オプションオブジェクト)のどのキーに対応しているのかを把握することが第一歩じゃ。」

「対応表があるとわかりやすくて嬉しいぜ!」

「基本はこれよ!
- **リクエストメソッド**: `-X GET` や `-X POST` → `method: 'GET' | 'POST'`
- **HTTPヘッダー**: `-H "Authorization: Bearer xyz"` → `headers: { 'Authorization': 'Bearer xyz' }`
- **送信データ (Body)**: `-d '{"id":1}'` または `--data-raw` → `body: JSON.stringify({ id: 1 })`
- **クッキー**: `-b "session=123"` → `credentials: 'include'`(またはヘッダーへの手動セット)」
cURLからFetchへの書き換え例
- cURL:
curl -X POST https://api.example.com/users -H "Content-Type: application/json" -d '{"name": "Tarou"}' - Fetch:
fetch('https://api.example.com/users', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'Tarou' }) })
2. フロントエンド特有の障壁:CORS(クロスオリジンリソース共有)の罠

「cURLコマンドをFetchに移植した際、初心者が最もハマるのが『CORS(Cross-Origin Resource Sharing)エラー』じゃ。cURLはコマンドラインから実行するためブラウザのセキュリティ制限を受けんが、Fetch APIはブラウザから実行されるため、呼び出し先サーバーが適切なCORSヘッダーを返さないと通信が遮断されてしまうのじゃよ。」

「ええっ!『cURLだと正常に叩けるのに、JSに移植したら通信に失敗する』のはバグじゃなくてブラウザの安全対策だったのか!」

「その通りよ。この場合、クライアントサイドだけで解決するのは不可能だから、APIサーバー側に `Access-Control-Allow-Origin` ヘッダーを設定してもらうか、自分のバックエンドサーバーを経由する(プロキシする)といった対策が必要になるの。」
3. 移植ミスを防ぐ:cURL変換ツールの賢い使い方

「複雑なヘッダーが何十行もあり、大きなネストされたJSONボディを伴うcURLコマンドを手動でFetchに書き換えるのは、ただの時間の浪費でありミスの温床じゃ。実務では自動変換エンジンを使うのがベストプラクティスじゃな。」

「そんな便利な変換エンジンがあるのか?」

「もちろん!デジタル道具屋の『cURL変換ツール』を使えば、ドキュメントからコピーしたcURLコマンドをそのまま貼り付けるだけで、即座に綺麗にインデントされたJavaScriptの `fetch` コードや `axios` コードに自動変換されるわよ!これなら構文エラーも発生しないし、一瞬でデバッグ用コードが書けるわ。」
🚨 APIキーやトークンの「生書き」による流出リスク
cURLコマンドに含まれる -H "Authorization: Bearer YOUR_API_KEY" などの秘密のキーを、そのままクライアントサイドのJavaScriptファイルにハードコードして公開用リポジトリにコミットしないよう厳重に注意してください。フロントエンドのコードは第三者から容易に閲覧可能です。秘密情報は必ず環境変数(process.env)を使用し、サーバーサイド(Next.jsのAPI Routesやサーバーコンポーネント)で実行する設計にしてください。
まとめ:cURLとFetchを使い分け、API連携をスピーディに

「博士、cURLからJSのFetchコードへ移植する時のルールがよくわかったぜ!これで外部APIの実験も捗るな!」

「セキュリティやCORSの制限をしっかり意識した上で、変換ツールを使って賢く省力化していきましょうね。」

「うむ、開発において『単純作業を自動化する』ことは非常に重要じゃ。手動の書き換えに時間を使わず、ツールを活用して本質的なビジネスロジックの実装に集中するのじゃぞい。」
cURLコマンドは、シェルスクリプトやCI/CDパイプラインでの自動テスト用としても広く使われておる。cURLからFetchへの変換ロジックを理解しておけば、既存のインフラ監視用スクリプトをWebアプリのダッシュボードに簡単に移植できるようになるなど、開発の視野が大きく広がるぞい。ツールを開発のハブとして活用するのじゃぞい!