Tutorial/JavaScriptクイックスタート

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

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

MMexchangerate.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 res = await fetch("https://api.exchangerate.dev/v1/latest/USD");
const data = await res.json();

console.log(data.rates.EUR);        // 0.87531
console.log(data.source);           // ecb_daily
console.log(data.market_session);   // open

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

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

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

javascript · authenticated call with error handlingcopy
const API = "https://api.exchangerate.dev/v1";
const KEY = "exr_live_...";   // free key at https://exchangerate.dev/signup

async function getLatest(base = "USD") {
  const res = await fetch(`${API}/latest/${base}`, {
    headers: { Authorization: `Bearer ${KEY}` },
  });

  if (!res.ok) {
    const err = await res.json().catch(() => ({}));
    throw new Error(`exchangerate.dev ${res.status}: ${err.message ?? res.statusText}`);
  }

  return res.json();
}

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

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

金額を換算する

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

javascript · convert 100 USD to EURcopy
const res = await fetch(`${API}/convert/USD/EUR/100`, {
  headers: { Authorization: `Bearer ${KEY}` },
});
const data = await res.json();

console.log(data.rate);       // 0.87572
console.log(data.converted);  // 87.57

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

sourceとmarket_sessionを理解する

すべてのレスポンスには、レートの鮮度と種別を示す2つのフィールドがある。sourceはデータの種別を示す:liveは取引週を通じて約60秒ごとに更新される集約スポットのコンセンサス値、ecb_dailyは欧州中央銀行が営業日1回16:00 CET頃に公表する参照フィックス、fred_dailyは米連邦準備制度の日次系列。market_sessionopenweekend、既知の平日休場を示すinterbank_closedのいずれかになる。

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

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

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

無料枠の上限

無料キーは月10,000コール・毎分12リクエスト。登録にカードは不要。毎分の上限を超えるとAPIは429を返すので、バックオフしてリトライする。月間クォータは課金起算日にリセットされる。

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

Keep reading

TutorialPythonで為替レートを取得する方法Read Guide過去の為替レートと時系列を1コールでRead Referencesourceとmarket_sessionの読み方Read
他の比較exchangerate.dev vs Fixerexchangerate.dev vs Open Exchange Ratesexchangerate.dev vs Currencylayer
学ぶReading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB reference rates, explained
ライブレートEUR/USDGBP/USDUSD/JPY