「このcURL、コードに書くの面倒だな……」

ブラウザの開発者ツールで「Copy as cURL」したコマンド。ターミナルで叩く分にはいいけれど、自分のプログラム(PythonやJavaScript)に組み込もうとすると、ヘッダーやボディの書き方を調べ直すことになりませんか?

cURL コマンド変換 は、curlコマンドを貼り付けると各言語のHTTPリクエストコードに変換するツールです。ブラウザ内で完結するため、認証トークンを含むコマンドも外部に送信されません。

cURLをPython・JavaScriptコードに変換する方法

対応言語

const converters: Record<string, (curl: string) => string> = {
    python:     curlConverter.toPython,      // requests
    node:       curlConverter.toNodeFetch,
    javascript: curlConverter.toJavaScript,  // fetch
    go:         curlConverter.toGo,
    rust:       curlConverter.toRust,
    php:        curlConverter.toPhp,
    java:       curlConverter.toJava,
    r:          curlConverter.toR,
    elixir:     curlConverter.toElixir,
    dart:       curlConverter.toDart,
    json:       curlConverter.toJsonString,  // コードではなくリクエストの構造化データ
};

Python(requests)、JavaScript(fetch)、Go、Rust、PHP、Java、R、Elixir、Dartに対応しています。

使い方

  1. ブラウザの開発者ツールやAPIドキュメントからcURLをコピーする
  2. cURL コマンド変換 に貼り付ける
  3. 使いたい言語を選ぶ
  4. AuthorizationContent-Type、リクエストボディが正しく反映されているか確認する
curl -X POST "https://api.example.com/users" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Taro","role":"admin"}'

このコマンドにはPOSTメソッド・認証ヘッダー・JSONボディが含まれています。変換後のコードでは、これらがそれぞれライブラリの書き方に置き換わります。

なぜ正規表現ではなくパーサーが必要なのか

curlコマンドはシェルの構文で書かれています。

curl 'https://api.example.com/v1/items?q=a b' \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"name": "it'\''s"}'

シングル/ダブルクォートの入れ子、'\'' のエスケープ、行継続、環境変数、そして200個以上あるcurlのオプション——これを正規表現で扱うのは現実的ではありません。このツールが使っている curlconverter は、Bashの構文解析器でコマンドを構文木にしてから、リクエストの意味情報(メソッド・URL・ヘッダー・ボディ)を抽出し、各言語のコード生成器に渡しています。シェルとして正しく解析することが、変換精度の土台です。

隠れた便利機能:JSON出力

変換先に json を選ぶと、コードではなくリクエストの構造化データ(メソッド/URL/ヘッダー/ボディの分解結果)が出力されます。「このcurl、結局何を送っているのか」をレビューしたいときは、コードより分解結果のほうが読みやすいことがあります。

変換後に確認したいポイント

自動変換は移植の叩き台として優秀ですが、そのままコミットする前に見るべき点があります。

  • APIキーやトークンを環境変数に移す
  • URLを設定ファイルや定数に切り出す
  • タイムアウトを設定する
  • エラーレスポンスの処理を追加する
  • JSONパースや型定義を追加する
  • 本番用と開発用のエンドポイントを分ける

とくに Authorization ヘッダーを含むcURLは、コードに直書きしないことが大切です。動作確認では便利でも、実装時には秘密情報を環境変数やシークレット管理に移しましょう。

ブラウザで完結する意味

curlコマンドには Authorization ヘッダーやCookie、社内APIのURLが含まれがちです。変換のためにそれを外部サービスへ送るのは本末転倒なので、curlconverterをそのままクライアントサイドにバンドルし、入力が一切ネットワークに乗らない構成にしています。

よくある質問

Copy as cURLしたコマンドも使えますか?

使えます。Chrome DevToolsなどでコピーしたcURLを貼り付ければ、ヘッダーやCookieを含むリクエストをコード化できます。ただしCookieやトークンが含まれる場合は、共有前に必ずマスクしてください。

PythonのrequestsやJavaScriptのfetchに変換できますか?

はい。Python(requests)、JavaScript(fetch)、Go、Rust、PHP、Java、R、Elixir、Dartに対応しています。利用するプロジェクトの標準に合わせて出力形式を選んでください。

変換したコードがそのまま本番で使えますか?

動作確認の出発点としては便利ですが、本番実装ではエラー処理、タイムアウト、認証情報の管理を追加するのがおすすめです。生成コードを土台にして、プロジェクトの設計に合わせて整えましょう。

入力したcURLコマンドは外部に送信されますか?

いいえ。変換処理はすべてブラウザ内で完結し、curlconverterライブラリをクライアントサイドにバンドルしているため、コマンドがサーバーに送信されることはありません。

まとめ

  • curlコマンドの解析はシェルの構文解析が必要で、正規表現では破綻する
  • JSON出力は「このcurlは何を送るのか」の理解に効く
  • トークン入りのコマンドを扱うからこそブラウザ完結が重要
  • 生成コードは叩き台。認証情報の環境変数化とエラー処理は自分で追加する

API連携の初速を上げたいときに、ぜひどうぞ。