Tutorial/JavaScriptクイックスタート

JavaScriptとNode.jsによる通貨換算

グローバルfetch APIでライブ為替レートを取得し、JavaScriptで金額を換算する。Node 18+、Deno、Bun、モダンブラウザで動作。キーなしで始められ、無料枠は月10,000コール。

ERexchangerate.dev·Jun 19, 2026·5分で読了

JavaScriptで為替レートを取得する最短ルートは、fetch/v1/latest/USDにGETすることだ。レスポンスは31通貨のレートと2つの鮮度フィールド(sourcemarket_session)を含むプレーンなJSONで返る。最初のコールにAPIキーは不要。

Key points
グローバルfetchはNode 18+、Deno、Bun、ブラウザで追加依存なしにそのまま使える。
/v1/latest/{base}への1回のGETで31通貨のレートとsourcemarket_sessionが返る。
キーはAuthorization: Bearer exr_live_...で渡す。Authorizationを設定できないプラットフォームではX-API-Keyを使う。
無料枠は月10,000コール・毎分12リクエストで、カード登録は不要。
レートはインディケーティブ値で、参照と分析専用 — ディーリングクォートではない。

最初のコール — キー不要

Node 18やモダンブラウザにはfetchが最初から入っている。EURレートを読むにはawait 1回で足りる:

javascript · no keycopy
const response = await fetch("https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP", {
  signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
const data = await response.json();
console.log(data.rates.EUR);
console.log(data.sources.EUR, data.effective_at.EUR);
console.log(data.market_session);

匿名コールはIPアドレスごとに上限があるため、簡単な試験を超えたら無料キーに移行する。

キーとエラーハンドリングを追加する

キーはAuthorizationヘッダーのベアラートークンとして渡す。res.okを確認し、異常ステータスではthrowしてエラーを早期に表面化させる:

javascript · authenticated call with error handlingcopy
// Node.js server only. Never put an account key in browser code.
const KEY = process.env.EXCHANGERATE_API_KEY;
if (!KEY) throw new Error("Set EXCHANGERATE_API_KEY on your server");

async function getLatest(base = "USD") {
  const response = await fetch(`https://api.exchangerate.dev/v1/latest/${encodeURIComponent(base)}`, {
    headers: { Authorization: `Bearer ${KEY}` },
    redirect: "error",
    signal: AbortSignal.timeout(10_000),
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
  return response.json();
}

const data = await getLatest("USD");
console.log(data.rates.GBP, data.effective_at.GBP);

X-API-Key: exr_live_...ヘッダーも受け付けられる。Authorizationヘッダーを設定できないプラットフォーム(一部のサーバーレスランタイム、Zapierなどのノーコードツール)向けだ。

金額を換算する

直接換算するには/v1/convert/{from}/{to}/{amount}を呼ぶ。レスポンスは1往復でレートと換算額の両方を返す:

javascript · convert 100 USD to EURcopy
// Node.js server only.
const KEY = process.env.EXCHANGERATE_API_KEY;
if (!KEY) throw new Error("Set EXCHANGERATE_API_KEY on your server");
const response = await fetch("https://api.exchangerate.dev/v1/convert/USD/EUR/100", {
  headers: { Authorization: `Bearer ${KEY}` },
  redirect: "error",
  signal: AbortSignal.timeout(10_000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}; Retry-After: ${response.headers.get("Retry-After")}`);
const data = await response.json();
console.log(data.rate, data.converted);

convertエンドポイントもlatestと同じsourcemarket_sessionフィールドを返すため、レートの種別とインターバンクの取引週が開いているかをユーザーに示せる。

sourceとmarket_sessionを理解する

表示する通貨については、sources[currency]でデータの種類、effective_at[currency]で観測時刻を確認してください。sourceはレスポンス全体で最も更新頻度の低いデータを表します。market_sessionは市場の取引時間帯、timestampはレスポンスの生成時刻であり、価格の観測時刻ではありません。

フィールド値意味動くタイミング
source: live集約されたスポットのコンセンサス値取引週の日中(約60秒間隔)
source: ecb_daily欧州中央銀行の参照フィックス営業日に1回(16:00 CET頃)
source: fred_daily米連邦準備制度の日次系列営業日に1回
market_session: weekend土曜または日曜(インターバンク休場)参照フィックスは金曜値を維持、ライブフィードは停止

data_updated_atフィールドは元のレートが最後に書き込まれた時刻を示す。timestampはレスポンスが生成された時刻だ。この2つを合わせて、値のキャッシュ方法と表示方法を決められる。

インディケーティブレートのみ
これらのレートは参照、分析、表示向けに公開されている。ディーリングクォートではなく、取引や送金の決済に使ってはならない。すべてのレスポンスのnoticeフィールドにその旨が記載されている。

無料枠の上限

月間利用枠は毎月1日00:00 UTCにリセットされます。429の場合はRetry-Afterに従って再試行してください。

  • 月10,000コール
  • 毎分12リクエスト
  • クレジットカード不要
  • /v1/latest/v1/convert/v1/range/v1/{date}/{base}をカバー
ER
exchangerate.dev
FXデータを扱う開発者向けの統合ガイド。

関連記事

TutorialPythonで為替レートを取得する方法読む Guide過去の為替レートと時系列を1コールで読む Referencesourceとmarket_sessionの読み方読む
他の比較Fixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.dev
学ぶReading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB参照レートの解説
ライブレートEUR/USDGBP/USDUSD/JPY