Tutorial/PHP と Laravel

PHPとLaravelで為替レートを取得する

LaravelのHTTPクライアント、bearer認証、有限のタイムアウト、鮮度メタデータを使ってライブレートを取得・キャッシュする。

MMexchangerate.dev·Jul 17, 2026·6分で読了

小さなLaravelサービスでexchangerate.devを呼び出し、HTTPエラーを拒否し、完全なFX観測を60秒キャッシュできる。キーは設定に置き、レートとともにsourcemarket_sessiondata_updated_atを返す。

Key points
Laravel HTTPクライアントでbearer認証、タイムアウト、throw()を使う。
成功した完全な応答を60秒キャッシュする。
EXCHANGERATE_API_KEYからキーを読む。
正確な金額計算には10進数ライブラリを使う。

キャッシュ付きFXサービスを作る

このサービスはベースとソート済みシンボルから安定したキャッシュキーを作る。throw()がLaravelのキャッシュ書き込み前に実行されるため、失敗応答はレートとして保存されない。

php · app/Services/ExchangeRateService.phpcopy
<?php

namespace App\Services;

use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http;

final class ExchangeRateService
{
    public function latest(string $base, array $symbols): array
    {
        sort($symbols);
        $symbolList = implode(',', $symbols);
        $cacheKey = "fx:latest:{$base}:{$symbolList}";

        return Cache::remember($cacheKey, now()->addSeconds(60), function () use (
            $base,
            $symbolList,
        ): array {
            return Http::acceptJson()
                ->withToken(config('services.exchangerate.key'))
                ->timeout(5)
                ->get(
                    "https://api.exchangerate.dev/v1/latest/{$base}",
                    ['symbols' => $symbolList],
                )
                ->throw()
                ->json();
        });
    }
}

キーをソース管理外に設定する

php · config/services.php and .envcopy
// config/services.php
'exchangerate' => [
    'key' => env('EXCHANGERATE_API_KEY'),
],

// .env (never commit the real value)
EXCHANGERATE_API_KEY=exr_live_...

レートと観測フィールドを読む

$service->latest("USD", ["EUR", "GBP"])を呼び、$result["rates"]["EUR"]を読む。$result["source"]$result["market_session"]$result["data_updated_at"]も保持する。

エラーをレートとしてキャッシュしない
401はキーまたはヘッダーの誤り、429は要求上限超過を示す。失敗させ、以前の成功観測を残す場合は元の更新時刻も残す。
  • キャッシュキー作成前にシンボルをソートする。
  • 有限のHTTPタイムアウトを設定する。
  • JSONを読む前にthrowを呼ぶ。
  • APIレートではなく最終金額を丸める。
MM
exchangerate.dev
FXデータを扱う開発者向けの統合ガイド。

Keep reading

Guide1回の呼び出しで過去のFX時系列を取得するRead Referencesourceとmarket_sessionの読み方Read Guideインディケーティブレートと約定可能レートRead