【Googleドキュメント】Apps Scriptで翻訳結果をSlackに投稿!ローカライズ通知の自動化

【Googleドキュメント】Apps Scriptで翻訳結果をSlackに投稿!ローカライズ通知の自動化
🛡️ 超解決

Googleドキュメントで作成した文書の翻訳を、手動で行うのは時間がかかります。翻訳結果をチームに共有するために、いちいちコピーしてSlackに貼り付けていませんか。この記事では、Apps Scriptを使って翻訳を自動化し、結果をSlackに投稿する方法を解説します。コード例とともに、設定手順を詳しく説明しますので、初心者の方でも簡単に導入できます。

【要点】Apps ScriptとSlack Webhookで翻訳通知を自動化する

  • LanguageApp.translate() 関数: ドキュメント内のテキストを指定言語に翻訳します。Googleの翻訳エンジンをそのまま使えます。
  • SlackのIncoming Webhook: 外部サービスからSlackにメッセージを送信するためのエンドポイントです。URLを発行してスクリプトに組み込みます。
  • トリガー設定(onEditなど): ドキュメントの編集や時刻指定でスクリプトを自動実行できます。手動実行も可能です。

ADVERTISEMENT

Apps ScriptとSlack連携の仕組み

Apps ScriptはGoogleドキュメントに組み込まれたJavaScriptベースのスクリプト環境です。Googleの各種サービス(翻訳、メール、スプレッドシートなど)を操作できるAPIが用意されています。今回使用するLanguageAppサービスは、テキストを翻訳するための機能を提供します。

Slackへのメッセージ送信には、Incoming Webhookという仕組みを使います。SlackのワークスペースにWebhook用のアプリを作成し、発行されたURLに対してHTTP POSTリクエストを送ると、指定したチャンネルにメッセージが投稿されます。Apps ScriptのUrlFetchApp.fetch()メソッドで簡単に実現できます。

この自動化により、ドキュメントが更新されるたびに翻訳結果がSlackに通知されるようになります。ローカライズの進捗管理や、多言語チームでの情報共有に役立ちます。

翻訳結果をSlackに自動投稿する手順

1. SlackのIncoming Webhookを作成する

  1. Slack APIページを開く
    ブラウザで https://api.slack.com/apps にアクセスし、「Create New App」をクリックします。
  2. アプリの基本情報を入力
    アプリ名(例:「翻訳通知ボット」)と開発用ワークスペースを選択し、「Create App」をクリックします。
  3. Incoming Webhookを有効にする
    左メニューから「Incoming Webhooks」を選び、スイッチをONにします。画面下部の「Add New Webhook to Workspace」をクリックし、投稿先のチャンネルを選択して許可します。
  4. Webhook URLをコピーする
    発行されたURL(https://hooks.slack.com/services/…)をメモします。このURLをスクリプト内で使用します。

2. GoogleドキュメントでApps Scriptを書く

  1. スクリプトエディタを開く
    翻訳したいドキュメントを開き、メニューから「拡張機能」→「Apps Script」を選択します。
  2. プロジェクト名を設定
    左上の「無題のプロジェクト」をクリックし、わかりやすい名前(例:「TranslateToSlack」)に変更します。
  3. コードを記述する
    エディタに以下のコードを貼り付けます。YOUR_WEBHOOK_URL は実際のURLに置き換えてください。
function postTranslationToSlack() {
  // SlackのWebhook URL
  var webhookUrl = 'YOUR_WEBHOOK_URL';
  
  // ドキュメントの内容を取得
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var text = body.getText();
  
  // 翻訳元言語と対象言語を指定(ここでは日本語→英語)
  var translatedText = LanguageApp.translate(text, 'ja', 'en');
  
  // Slackに送信するメッセージを構築
  var message = '【翻訳通知】' + doc.getName() + '\n\n元のテキスト:\n' + text + '\n\n翻訳結果(英語):\n' + translatedText;
  
  // SlackにPOST
  var payload = {
    'text': message
  };
  var options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(payload)
  };
  UrlFetchApp.fetch(webhookUrl, options);
}
  1. スクリプトを保存する
    Ctrl+Sを押すか、フロッピーディスクアイコンをクリックして保存します。

3. トリガーを設定して自動化する

  1. トリガー画面を開く
    スクリプトエディタの左メニューから「トリガー」(時計アイコン)をクリックします。
  2. 新しいトリガーを追加
    右下の「トリガーを追加」をクリックします。
  3. トリガーの条件を設定
    「実行する関数」で「postTranslationToSlack」を選択します。「イベントのソース」は「時間主導型」または「ドキュメントの編集時」を選びます。編集時に実行する場合は「ドキュメントのオープン時」でも可能ですが、誤操作を防ぐため時間主導型(例:1時間おき)がおすすめです。
  4. トリガーを保存
    設定が完了したら「保存」をクリックします。初回実行時に権限の承認を求められるので、内容を確認して許可します。

注意点とよくあるトラブル

翻訳が正しく行われない場合

LanguageApp.translate()は、テキストが空の場合や、翻訳元言語の指定が誤っているとエラーになります。事前にgetText()で取得したテキストが空でないことを確認してください。また、翻訳元言語のコード(‘ja’など)はISO 639-1に準拠しています。英語なら’en’、中国語なら’zh’などです。

Slackにメッセージが届かない場合

Webhook URLが正しくないか、権限が不足している可能性があります。Slack Appの設定画面でWebhook URLが正しいか確認しましょう。また、URLが公開されていないか注意してください。Webhookは外部からアクセス可能ですが、URLを知っている人のみが利用できます。誤って共有しないようにしてください。

スクリプト実行時のエラーと対処法

スクリプトがエラーで停止した場合、Apps Scriptの「表示」→「ログ」で詳細を確認できます。よくあるエラーとして、翻訳APIの使用制限(1日あたりの文字数制限)があります。大量のテキストを翻訳する場合は、文字数を減らすか、翻訳対象を絞ってください。また、UrlFetchApp.fetch()がタイムアウトする場合は、送信メッセージのサイズを小さくしましょう。

ADVERTISEMENT

手動翻訳と自動投稿の比較

項目 手動翻訳・手動投稿 Apps Scriptによる自動化
操作の手間 毎回コピー&ペーストが必要 一度設定すれば自動実行
翻訳品質 手動で修正可能だが個人差あり Google翻訳エンジンで一定品質
通知の確実性 投稿忘れのリスクあり トリガー通りに確実に通知
カスタマイズ性 自由に編集可能 コード次第で柔軟に拡張可能

まとめ

この記事では、GoogleドキュメントのApps ScriptとSlackのIncoming Webhookを連携して、翻訳結果を自動的にSlackに投稿する方法を解説しました。LanguageApp.translate()でテキストを翻訳し、UrlFetchApp.fetch()でSlackにメッセージを送信します。

設定後は、ドキュメントの内容が更新されるたびに翻訳結果がSlackに届くようになります。ローカライズ作業の効率化や、多言語チームでの情報共有に活用できます。さらに応用として、翻訳対象言語を複数に増やしたり、翻訳結果をGoogleスプレッドシートに保存して履歴を残すことも可能です。ぜひ実際の業務で試してみてください。


ADVERTISEMENT

📄
Googleドキュメントトラブル完全解決データベースこの記事以外にも、書式・共有・Apps Script・引用など様々な困りごとへの解決策をまとめています。逆引きに活用してください。
この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。

SPONSORED