技術 約3分で読めます

MyMemory API: 無料で使える翻訳API

ブラウザから直接叩ける無料の翻訳APIを探していて、MyMemory APIを見つけた。登録不要で使えて、CORSも許可されているので、静的サイトのJavaScriptから直接呼び出せる。

MyMemory APIとは

MyMemoryは、世界最大の翻訳メモリデータベースを提供するサービス。人間による翻訳データと機械翻訳を組み合わせて翻訳結果を返す。

主な特徴:

  • 登録不要で利用可能
  • RESTful API
  • CORSに対応(ブラウザから直接呼び出し可能)
  • 多言語対応

API仕様

基本エンドポイント

GET https://api.mymemory.translated.net/get

パラメータ

パラメータ必須説明
q翻訳するテキスト(最大500バイト)
langpair言語ペア(例: `en
de-メールアドレス(制限緩和用)
mt-機械翻訳の有無(0で無効)

リクエスト例

https://api.mymemory.translated.net/get?q=Hello&langpair=en|ja

レスポンス例

{
  "responseData": {
    "translatedText": "こんにちは",
    "match": 1
  },
  "responseStatus": 200
}

使用制限

MyMemory APIには1日あたりの文字数制限がある。

利用方法制限判定基準
匿名(deパラメータなし)5,000文字/日IPアドレス
メール指定(deパラメータあり)50,000文字/日メールアドレス

匿名利用の場合

deパラメータを指定しない場合、リクエスト元のIPアドレスで使用量が追跡される。個人利用なら十分な量。

メール指定で制限緩和

deパラメータにメールアドレスを指定するだけで、制限が10倍に緩和される。登録フォームやメール認証は不要。

https://api.mymemory.translated.net/get?q=Hello&langpair=en|ja&de=your@email.com

Webアプリでの運用

静的サイトからクライアントサイドJavaScriptでAPIを叩く場合、各ユーザーのIPアドレスで判定される。つまり、訪問者ごとに5,000文字/日の枠が与えられる形になる。

メールアドレスをハードコードすると全ユーザーで50,000文字/日を共有することになるので、匿名モードで運用する方が効率的なケースが多い。

JavaScript実装例

基本的な翻訳関数

async function translate(text, sourceLang, targetLang) {
  const params = new URLSearchParams({
    q: text,
    langpair: `${sourceLang}|${targetLang}`
  });

  const response = await fetch(
    `https://api.mymemory.translated.net/get?${params}`
  );
  const data = await response.json();

  if (data.responseStatus === 200) {
    return data.responseData.translatedText;
  }
  throw new Error(data.responseDetails || 'Translation failed');
}

// 使用例
const result = await translate('Hello, world!', 'en', 'ja');
console.log(result); // こんにちは、世界!

エラーハンドリング付き

async function translateWithFallback(text, sourceLang, targetLang) {
  try {
    const params = new URLSearchParams({
      q: text.slice(0, 500), // 500バイト制限
      langpair: `${sourceLang}|${targetLang}`
    });

    const response = await fetch(
      `https://api.mymemory.translated.net/get?${params}`
    );

    if (!response.ok) {
      throw new Error(`HTTP error: ${response.status}`);
    }

    const data = await response.json();

    if (data.responseStatus !== 200) {
      throw new Error(data.responseDetails || 'Translation failed');
    }

    return {
      success: true,
      text: data.responseData.translatedText,
      match: data.responseData.match
    };
  } catch (error) {
    return {
      success: false,
      error: error.message
    };
  }
}

言語コード

主要な言語コードの一覧。

言語コード
日本語ja
英語en
中国語(簡体字)zh-CN
中国語(繁体字)zh-TW
韓国語ko
フランス語fr
ドイツ語de
スペイン語es
イタリア語it
ポルトガル語pt
ロシア語ru

全言語コードはISO 639-1に準拠。

まとめ

MyMemory APIは、登録不要・CORS対応で、静的サイトから直接利用できる翻訳API。無料枠でも個人利用には十分で、Webアプリに組み込みやすい。

LibreTranslateのようなセルフホスト型と比較すると、サーバー運用が不要な点がメリット。ただし、外部サービスへの依存と1リクエスト500バイトの制限がある点は考慮が必要。

実際に試す

このAPIを使った翻訳ツールをラボに作成した。ブラウザから直接試せる。

テキスト翻訳ツール

参考リンク