目的
上記の記事で作成した Google App Script を、アドオンとして Google Workspace Marketplace に Private 公開します。
参考リンク
こちらの記事がとても参考になりました。
以下に引っかかった部分について、記載します。
appsscript.json
-
urlFetchWhitelist
- DeepL の API を呼ぶために
https://api-free.deepl.com/
を明示して追加する必要があります。
- DeepL の API を呼ぶために
-
oauthScopes
- 現在開いている Google Slides の操作に
presentations.currentonly
が必要です。 - DeepL の API を呼ぶために
script.external_request
が必要です
- 現在開いている Google Slides の操作に
-
addOns.common
-
name
とlogoUrl
(サイドバーに表示される画像)が必須フィールドとして必要です。 - AddOns manifest resource | Apps Script | Google for Developers
-
-
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
トリガーによるメニュー追加- ※
onInstall
は、Google Workspace Marketplace のアドオンには使用できない-
The trigger won't run when a user installs the add-on from the Google Workspace Marketplace
-
-
onHomePage
によるサイドバーメニュー表示
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 を使います。
以下のリンクから「App Configuration」の設定を変更します。
公開できた!
1つのアドオンを社内公開するのに、1つのプロジェクトを使ったり、いろいろと設定しなければならない項目はありましたが、何とか形にできました。
自分の App Script をそのまま展開するより、アドオンとして社内展開できるとその恩恵を享受できるユーザ層も広がりそうでいいですね。
参考:コード内容
GitHub に置いておきました