DeepL APIを使ってスプレッドシートで自然な翻訳を実現する方法
過去の記事で、Google翻訳を使った一括翻訳の方法をご紹介しましたが、手軽に利用できる反面、文脈に合わない不自然な翻訳になったりして、修正に時間がかかることも…。
簡単な翻訳ならGoogle翻訳で十分ですが、細かいニュアンスまで英語に翻訳したい場合はDeepLを使うと便利です。
DeepLは翻訳精度が高く、ビジネス用途などの自然な表現が求められる場面で活躍します。
DeepL API を利用することで、スプレッドシート内でDeepL翻訳ができるようになります。
この記事では、DeepL APIとGoogle Apps Script (GAS) を使って、スプレッドシート内で精度の高い翻訳を実現する方法をご紹介します。
Google翻訳とDeepLの違い
- メリット
手軽で無料、汎用性が高い - デメリット
一部の言語や文脈では、直訳的でぎこちない翻訳になる場合がある
- メリット
文脈を考慮した自然な翻訳。専門的な文章やビジネス文書で高評価 - デメリット:
API利用には無料プランだと制限がある(500,000文字/月)
完成イメージ
大量のテキストを一括で翻訳でき、時間短縮
DeepLの高精度な翻訳で手作業の見直し回数を減らせる
今回のスクリプトは日本語→英語への翻訳となります。
手順
DeepL APIキーの取得
GASを実行するにあたって、DeepL APIキーが必要となります。
DeepL APIキーの取得方法についてはこちらの記事をご参照ください。
スプレッドシートの準備
- A列に翻訳したい日本語テキストを入力
- 1行目はヘッダー行として使用
スプレッドシートを開いて、A列に翻訳したいテキストを入力します。
なお、今回のスクリプトは現在開いているアクティブなシートを対象とします。
別のシート名を指定したい場合は、スクリプトを調整する必要があります。
GASの実行
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function translateText() {
// スクリプトプロパティからAPIキーを取得
const properties = PropertiesService.getScriptProperties();
const DEEPL_API_KEY = properties.getProperty('DEEPL_API_KEY');
if (!DEEPL_API_KEY) {
throw new Error('APIキーが設定されていません。スクリプトプロパティにDEEPL_API_KEYを設定してください。');
}
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const range = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1); // A列のデータ範囲
const texts = range.getValues();
const results = texts.map(row => {
const response = UrlFetchApp.fetch('https://api-free.deepl.com/v2/translate', {
method: 'post',
payload: {
auth_key: DEEPL_API_KEY,
text: row[0],
target_lang: 'EN' // 翻訳先の言語コード(例:'EN' = 英語)
}
});
const json = JSON.parse(response.getContentText());
return [json.translations[0].text];
});
const outputRange = sheet.getRange(2, 2, results.length, 1); // B列に結果を出力
outputRange.setValues(results);
}
スクリプトの説明
- APIキーの取得
-
const properties = PropertiesService.getScriptProperties(); const DEEPL_API_KEY = properties.getProperty('DEEPL_API_KEY');
- Google Apps Script の
PropertiesService
を使用してスクリプトプロパティに保存されたDEEPL_API_KEY
を取得します。 - もしスクリプトプロパティにキーが設定されていない場合、次の
if
文でエラーをスローします。
- Google Apps Script の
- スクリプトプロパティが未設定の場合のエラーハンドリング
-
if (!DEEPL_API_KEY) { throw new Error('APIキーが設定されていません。スクリプトプロパティにDEEPL_API_KEYを設定してください。'); }
DEEPL_API_KEY
が取得できなかった場合にエラーを発生させ、実行を中断します。- APIキーが未設定であることを明確に伝えるためのメッセージを表示します。
- スプレッドシートのデータ範囲取得
-
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const range = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1); // A列のデータ範囲 const texts = range.getValues();
- アクティブなスプレッドシートを取得し、A列のデータ(2行目から最終行まで)を読み取ります。
getValues()
でセルの値を配列として取得します。- A列の1行目はヘッダー行として使用されることを想定。
- 2行目以降を翻訳対象としています。
- DeepL APIへのリクエスト
-
const results = texts.map(row => { const response = UrlFetchApp.fetch('https://api-free.deepl.com/v2/translate', { method: 'post', payload: { auth_key: DEEPL_API_KEY, text: row[0], // 翻訳するテキスト target_lang: 'EN' // 翻訳先の言語(ここでは英語) } }); const json = JSON.parse(response.getContentText()); return [json.translations[0].text]; });
- A列の各行のテキストをDeepL APIに送信し、翻訳結果を取得します。
- DeepL APIのエンドポイント
https://api-free.deepl.com/v2/translate
を利用。 payload
に必要なパラメータを指定してPOSTリクエストを送信します。auth_key
: スクリプトプロパティから取得したAPIキー。text
: 翻訳するテキスト。target_lang
: 翻訳先の言語コード(ここでは英語)。
- 翻訳結果をスプレッドシートに出力
-
const outputRange = sheet.getRange(2, 2, results.length, 1); // B列に結果を出力 outputRange.setValues(results);
- 翻訳結果をB列(2行目以降)に出力します。
results.length
は翻訳結果の行数、1
は列数を指定。- A列に対応するB列のセルに翻訳結果が表示されます。
- 翻訳対象のテキストが多い場合でも、一括で出力可能です。
スクリプトを書いたら、名前を付けて保存します。
(例:「DeepL翻訳」)
スクリプトを実行してA列のテキストを翻訳します。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
B列に英訳されたテキストが出力されます。
注意点
DeepL APIの無料プランでは1か月に50万文字までの制限があります。
有料プランでは文字数制限がなくなるため、大量に翻訳する場合は有料プランをご検討ください。
まとめ
DeepL APIとGASを組み合わせることで、スプレッドシートで簡単に高精度な翻訳が実現できます。
最終的には手作業で調整する必要がありますが、その負担を大幅に減らすことができます。
時間を大幅に節約しつつ質の高い結果を得られる強力な方法です。
翻訳が必要な時にぜひご活用ください!
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント