日本語から英語・韓国語・中国語を同時に翻訳できたらコミュニケーションが楽になる場面があったので、GAS(Google Apps Script)で4言語の翻訳APIを作ってみました。

この記事は2023年に公開したあと、2026年9月に見直しました。当時ふりがな付与に使っていた gooラボAPI は2025年3月にサービスが終了しており、そのままでは動きません。代替の実装に差し替えたうえで、当時の設計にあった誤りも訂正しています。

▼この記事の訂正点

  • gooラボAPI(labs.goo.ne.jp)は2025年3月3日にAPI提供を終了し、エンドポイントは現在つながりません
  • そのAPIは日本語をひらがな・カタカナに変換するもので、韓国語や中国語に適用しても、意図していた「読みのカタカナ」は得られません

ふりがなは日本語側に付ける形へ直し、韓国語・中国語の読みについては何が必要かを別途書きました。

日英韓中国語 4言語翻訳APIの仕様

このAPIは、1つの言語を送信すると、他の3言語に自動翻訳してレスポンスしてくれるようにします。

もともとは韓国語・中国語のレスポンスにカタカナの読みを付けるつもりでしたが、ふりがなAPIは日本語専用のため、この設計では実現できません。現在は次のように整理しています。

  • 日本語:ふりがなAPIで読みを付けられる
  • 韓国語・中国語:ふりがなではなく「音写(トランスリテレーション)」が必要で、別の仕組みになる

日英韓中国語 4言語翻訳APIの実装例

GASで作成したAPI全体のコードは以下の感じです。

function translateText(text, targetLanguage) {
  const apiKey = "YOUR_GOOGLE_TRANSLATE_API_KEY"; // あなたのGoogle翻訳APIキーをここに入力してください
  const sourceLanguage = "auto"; // 入力言語を自動検出する

  const response = UrlFetchApp.fetch(
    "https://translation.googleapis.com/language/translate/v2?key=" + apiKey +
    "&q=" + encodeURIComponent(text) +
    "&source=" + sourceLanguage +
    "&target=" + targetLanguage
  );

  const json = response.getContentText();
  const data = JSON.parse(json);
  const translatedText = data.data.translations[0].translatedText;

  return translatedText;
}

function addFurigana(text) {
  const appId = "YOUR_YAHOO_CLIENT_ID";

  const payload = {
    id: "1",
    jsonrpc: "2.0",
    method: "jlp.furiganaservice.furigana",
    params: { q: text, grade: 1 }
  };

  const response = UrlFetchApp.fetch("https://jlp.yahooapis.jp/FuriganaService/V2/furigana", {
    method: "post",
    contentType: "application/json",
    headers: { "User-Agent": "Yahoo AppID: " + appId },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  });

  const data = JSON.parse(response.getContentText());
  return data.result.word.map(w => w.furigana || w.surface).join("");
}

function toKatakana(hiragana) {
  return hiragana.replace(/[\u3041-\u3096]/g, function (ch) {
    return String.fromCharCode(ch.charCodeAt(0) + 0x60);
  });
}

function main(inputLanguage, inputText) {
  const languages = ["en", "ko", "zh"]; // 対象の翻訳言語
  const responses = {};

  for (const targetLanguage of languages) {
    if (targetLanguage === inputLanguage) {
      continue; // 入力言語は翻訳しない
    }
    responses[targetLanguage] = translateText(inputText, targetLanguage);
  }

  // ふりがなは日本語の入力に対して付ける
  if (inputLanguage === "ja") {
    responses["ja_furigana"] = toKatakana(addFurigana(inputText));
  }

  return JSON.stringify(responses);
}

 

次に、使用している関数の解説をしていきます。

translateText関数: 言語の翻訳

translateText関数: Google翻訳APIを呼び出してテキストを翻訳する関数です。

function translateText(text, targetLanguage) {
  const apiKey = "YOUR_GOOGLE_TRANSLATE_API_KEY"; // あなたのGoogle翻訳APIキーをここに入力してください
  const sourceLanguage = "auto"; // 入力言語を自動検出する

  const response = UrlFetchApp.fetch(
    "https://translation.googleapis.com/language/translate/v2?key=" + apiKey +
    "&q=" + encodeURIComponent(text) +
    "&source=" + sourceLanguage +
    "&target=" + targetLanguage
  );

  const json = response.getContentText();
  const data = JSON.parse(json);
  const translatedText = data.data.translations[0].translatedText;

  return translatedText;
}

 

addFurigana関数: カタカナのふりがなの追加

結論:日本語テキストにふりがなを付ける関数です。gooラボAPIが終了したため、Yahoo!の「ルビ振りWeb API」を使う形に書き換えました。

こちらはPOSTでJSONを送る形式なので、GASでは UrlFetchApp.fetch にオプションを渡します。

function addFurigana(text) {
  const appId = "YOUR_YAHOO_CLIENT_ID"; // Yahoo!デベロッパーネットワークで取得

  const payload = {
    id: "1",
    jsonrpc: "2.0",
    method: "jlp.furiganaservice.furigana",
    params: {
      q: text,
      grade: 1
    }
  };

  const response = UrlFetchApp.fetch("https://jlp.yahooapis.jp/FuriganaService/V2/furigana", {
    method: "post",
    contentType: "application/json",
    headers: { "User-Agent": "Yahoo AppID: " + appId },
    payload: JSON.stringify(payload),
    muteHttpExceptions: true
  });

  const data = JSON.parse(response.getContentText());

  // 単語ごとに読みが返るので、つなげて1つの文字列にする
  return data.result.word
    .map(w => w.furigana || w.surface)
    .join("");
}

 

返ってくるのは単語ごとの配列です。gooラボAPIのように変換済みの文字列が1つ返ってくるわけではないので、join() でつなげる処理が要ります。furigana が無い単語(記号や数字など)は surface(元の表記)で埋めます。

grade は対象学年の指定で、1 にすると漢字にほぼすべて読みが付きます。数字を上げるほど、その学年までに習う漢字には読みが付かなくなります。

ふりがなはひらがなで返ります。カタカナにしたい場合は自分で変換してください。

function toKatakana(hiragana) {
  return hiragana.replace(/[\u3041-\u3096]/g, ch =>
    String.fromCharCode(ch.charCodeAt(0) + 0x60)
  );
}

 

APIのメイン関数

APIのメイン処理を行う関数です。

function main(inputLanguage, inputText) {
  const languages = ["en", "ko", "zh"];
  const responses = {};

  for (const targetLanguage of languages) {
    if (targetLanguage === inputLanguage) {
      continue; // 入力言語は翻訳しない
    }
    responses[targetLanguage] = translateText(inputText, targetLanguage);
  }

  // ふりがなは日本語に対して付ける(入力が日本語のとき)
  if (inputLanguage === "ja") {
    responses["ja_furigana"] = toKatakana(addFurigana(inputText));
  }

  return JSON.stringify(responses);
}

 

公開時のコードでは、韓国語と中国語の翻訳結果に addFurigana を通していました。これは誤りです。ふりがなAPIは日本語を解析するものなので、ハングルや簡体字を渡しても読みは返りません。上のコードでは、ふりがなを日本語の入力そのものに付ける形に直しています。
 

まとめ

GASを使って、日本語から英語・韓国語・中国語へ同時に翻訳するAPIを作りました。

作ってみて分かったのは、「読み方を付ける」は翻訳とは別の問題だということです。ふりがなAPIは日本語の形態素解析を前提にしているため、他言語には使えません。韓国語や中国語の読みをカタカナで出したい場合は、音写(トランスリテレーション)に対応した仕組みを別に用意する必要があります。

外部APIに依存する実装は、サービス終了で止まります。この記事のgooラボAPIがまさにそれで、2025年3月に終了しました。個人で使うツールなら作り直せば済みますが、人に渡すものなら、どのAPIに依存しているかを控えておくと復旧が早くなります。

GASでの外部API呼び出しは PHPで文字列を出力する方法で扱ったデバッグの考え方と同じで、まずレスポンスをそのままログに出して構造を確認するのが近道です。

▼HTML/CSS/JavaScriptの学習本を探してる方はこちらの記事をどうぞ

2023年版 Webコーディングにオススメの学習本【HTML/CSS/JavaScript】
Webコーディングにオススメの学習本4冊【HTML/CSS/JavaScript】WebコーディングのおすすめHTML/CSS/JavaScript学習本4冊を、著者・出版社・刊行年まで明記して紹介。HTML Living Standard準拠かどうかを基準に選ぶ理由と、floatだけで段組みを説明する古い本を避ける判断方法もまとめました。...

 

ABOUT ME
りん
このブログでは、Web開発やプログラミングに関する情報を中心に、私が日々感じたことや学んだことをシェアしています。技術と生活の両方を楽しめるブログを目指して、日常で触れた出来事や本、グルメの話題も取り入れています。気軽に覗いて、少しでも役立つ情報や楽しいひとときを見つけてもらえたら嬉しいです。