技術
約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を使った翻訳ツールをラボに作成した。ブラウザから直接試せる。