0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Google Slides の翻訳アドオンを Internal apps として Private 公開する

Posted at

目的

上記の記事で作成した Google App Script を、アドオンとして Google Workspace Marketplace に Private 公開します。

参考リンク

こちらの記事がとても参考になりました。

以下に引っかかった部分について、記載します。

appsscript.json

  • urlFetchWhitelist
    • DeepL の API を呼ぶために https://api-free.deepl.com/ を明示して追加する必要があります。
  • oauthScopes
    • 現在開いている Google Slides の操作にpresentations.currentonly が必要です。
    • DeepL の API を呼ぶために script.external_request が必要です
  • addOns.common
  • homepageTrigger
    • カードビューが表示されるように、Code.gs 内で定義した onHomePage 関数を指定する必要があります。
appsscript.json
{
  "timeZone": "Asia/Tokyo",
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "urlFetchWhitelist": [
    "https://api-free.deepl.com/v2/translate"
  ],
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/presentations.currentonly"
  ],
  "addOns": {
    "common": {
      "name": "slidesToJapanese",
      "logoUrl": "https://3.bp.blogspot.com/-a2XrpxvR3L0/VXOUPsoa7UI/AAAAAAAAuI8/iUkVw_GYrJk/s400/hata_kokki_flag_japan.png"
    },
    "slides": {
      "homepageTrigger": {
        "runFunction": "onHomePage",
        "enabled": true
      }
    }
  }
}

Code.gs

上記の記事を参考にして、以下の内容を追加しました。

  • onOpen トリガーによるメニュー追加
    • image.png
    • onInstall は、Google Workspace Marketplace のアドオンには使用できない
      • The trigger won't run when a user installs the add-on from the Google Workspace Marketplace

  • onHomePage によるサイドバーメニュー表示
    • image.png
function onOpen(e) {
  var ui = SlidesApp.getUi()
  var menu = ui.createAddonMenu() // メニューの追加、(セルを結合した表が一つでもあると、処理が行われません。)
  menu
  .addItem('[全スライド]DeepL翻訳(英>日)', 'translateAllDeepL')
  .addItem('[特定ページ]DeepL翻訳(英>日)','specifiedPageTranslateDeepL')
  .addItem('[全スライド]Google翻訳(英>日)', 'translateAll')
  .addItem('[特定ページ]Google翻訳(英>日)','specifiedPageTranslate')
  .addToUi();  
}

function buildSearchCard(opt_error) {
  var banner = CardService.newImage()
  .setImageUrl('https://2.bp.blogspot.com/-8-ypfalviWA/WjCryBf7m9I/AAAAAAABIx4/3VAOGejdWogMnchjAO_F2rJG-ZeOmWJEQCLcBGAs/s400/building_nihongo_gakkou.png');

  var ontranslateAllDeepLAction = CardService.newAction()
  .setFunctionName("translateAllDeepL")
  .setLoadIndicator(CardService.LoadIndicator.SPINNER);

  var translateAllDeepLButton = CardService.newTextButton()
  .setText("[全スライド]DeepL翻訳(英>日)")
  .setOnClickAction(ontranslateAllDeepLAction);

  var onspecifiedPageTranslateDeepLAction = CardService.newAction()
  .setFunctionName("specifiedPageTranslateDeepL")
  .setLoadIndicator(CardService.LoadIndicator.SPINNER);

  var specifiedPageTranslateDeepLButton = CardService.newTextButton()
  .setText("[特定ページ]DeepL翻訳(英>日)")
  .setOnClickAction(onspecifiedPageTranslateDeepLAction);

  var ontranslateAllAction = CardService.newAction()
  .setFunctionName("translateAll")
  .setLoadIndicator(CardService.LoadIndicator.SPINNER);

  var translateAllButton = CardService.newTextButton()
  .setText("[全スライド]Google翻訳(英>日)")
  .setOnClickAction(ontranslateAllAction);

  var onspecifiedPageTranslateAction = CardService.newAction()
  .setFunctionName("specifiedPageTranslate")
  .setLoadIndicator(CardService.LoadIndicator.SPINNER);

  var specifiedPageTranslateButton = CardService.newTextButton()
  .setText("[特定ページ]Google翻訳(英>日)")
  .setOnClickAction(onspecifiedPageTranslateAction);

  var section = CardService.newCardSection()
  .addWidget(banner)
  .addWidget(translateAllDeepLButton)
  .addWidget(specifiedPageTranslateDeepLButton)
  .addWidget(translateAllButton)
  .addWidget(specifiedPageTranslateButton);

  if (opt_error) {
    var message = CardService.newTextParagraph()
    .setText("Note: " + opt_error);
    section.addWidget(message);
  }

  return CardService.newCardBuilder()
  .addSection(section)
  .build();
}

function onHomePage() {
  var card = buildSearchCard();
  return [card];
}

アドオンの更新

New deployment 時のバージョンと Deployment ID を使います。

image.png

以下のリンクから「App Configuration」の設定を変更します。

image.png
image.png

公開できた!

1つのアドオンを社内公開するのに、1つのプロジェクトを使ったり、いろいろと設定しなければならない項目はありましたが、何とか形にできました。
自分の App Script をそのまま展開するより、アドオンとして社内展開できるとその恩恵を享受できるユーザ層も広がりそうでいいですね。

image.png

参考:コード内容

GitHub に置いておきました

その他参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?