【GAS修行⑥】文章翻訳Slack Botを作成して、世界横断技術者を目指す。

- **※2021/01/31 slack APIの取得やGASのUI変更に伴い、この記事も大幅に修正**

・GAS熟練者への道。
・先人達のコードの「写経＆コピー」の駆使の成果物のまとめ。
・第六弾
・[第一弾](https://qiita.com/t_o_d/items/a29b4ba6eacad77b3690)・[第二弾](https://qiita.com/t_o_d/items/7dcc5637ab06996c8eaa)・[第三弾](https://qiita.com/t_o_d/items/8763b7e84bafc83caa5c)・[第四弾](https://qiita.com/t_o_d/items/eb03325f37e837de44ea)・[第五弾](https://qiita.com/t_o_d/items/75d9f10d674a096b3ab3)はこちら。

## 経緯
・「六回目か。もうそろそろ個人的に必要な実用アプリも揃ってきたな。」
・「いや、まだあれが残っていた。」
・「あれさえあれば、今後の世界展開計画も、思うがまま。」
→そういうわけで、今回もサンプルアプリと仏様サイトを発見。
https://qiita.com/shohei-y/items/6784ae87ca180c7c5157
→「また参考（※マルコピ）に作るか。」
→取り組み開始。

## 概要
- 文章を言語を指定して投稿すると、翻訳して返してくれる。  
- 多言語はもちろん、複数行翻訳もしてくれる。

## 結果
・実際の画面はこちらです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/b06bab8c-ceab-7f37-517a-b17432289736.png)



## 作成環境
1. Google App Script
2. Slack API
3. Outgoing Webhook
※Slackがない場合は、一人用のSlackを開設しましょう。（何かと役に立つ。）

## 手順

### Google Apps Scriptの設定
-  Googleドライブからスクリプトエディタを起動。  
- 起動したプロジェクトに名前をつける   
→保存。（最初の３行のままで良い。）
- 保存後、上部の**デプロイ**から**新しいデプロイ**をクリック。
- 種類選択**ウェブアプリ**を選択して、下記の項目を追加する。
    - プロジェクトバージョン：New(変更内容は任意)
    - 次のユーザーとしてアプリケーションを実行：自分（アドレス）
    - アクセスできるユーザー：全員（匿名ユーザーを含む）
- 設定後、「デプロイ」ボタンをクリック。作成されるウェブアプリケーションURLをメモしておく。「OK」ボタンをクリック。
- 一旦置いておく。

### Slack APIの設定  
- Slack APIのトークンを発行。  (※基本的には[こちら](https://qiita.com/ykhirao/items/3b19ee6a1458cfb4ba21)を参考)
    - [Slack API](https://api.slack.com/apps)にアクセス。
    - ページ内の「Create New App」をクリックして、下記の情報を入力。
        - 「App Name」: アプリの名前（作成内容がわかりやすい名前）
        - 「Development Slack Workspace」: アプリを追加するチャンネル
    - 入力後、「Create App」をクリックして、作成。
    - 作成後に表示されるページの左サイドメニューの「Basic Information」から「Install your app to your workspace」から「Pemission Scope」をクリック。
    - 以下のようにscopeを選択

![slack2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/0aa94a09-5436-c8de-b2d3-ef3e6442e3f0.png)

- 表示されるtokenを両方メモしておく。

![slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/cb1ca4a2-2c22-ddc4-710d-b5cd1b2aa762.png)


### 発信Webフックの設定  
- Slack APIのトークンを発行。
    - Slack内のアプリを追加したいチャンネルに行き、アプリ名をクリックして、「アプリを追加する」をクリック。
    ![image.png](https://qiita-image-store.s3.amazonaws.com/0/336499/697a089b-33ec-5188-b16f-578dce721a9c.png)  
    - 「Appディレクトリ」ページの検索欄に`web`と入力して、出てくる「**Outgoing Webhook**」をクリック。
    ![image.png](https://qiita-image-store.s3.amazonaws.com/0/336499/dedad22d-09f0-2dcc-c796-3ce1dce7aa59.png)
    - Outgoing Webhookページの「設定を追加」をクリックして、下記の項目を入力。
        - 「引き金となる言葉」: honyaku
        - 「URL」: Google Apps ScriptのURL（※先程メモしたもの。）

![tst.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/575024d8-9488-6886-025f-fcdb6f98dd03.png)



### コード
- スクリプトエディタに、下記のコードをコピーして、保存。
 
```JavaScript:slack-translate.gs
function doPost(e) {
  // 必須情報
  const URL = "https://slack.com/api/chat.postMessage"
  const TOKEN = "slackAPIトークン"  // xoxbで始まるもの。
  const CHANNEL_ID = "slackチャンネルID" // https://app.slack.com/client/ワークスペース名/チャンネルID

  const body = e.parameter.text.replace(/(\w+)\s/,'');
  const tmpSplit = body.split(" ",2);
  const original_lan = tmpSplit[0]         // 原文の言語
  const convert_lan = tmpSplit[1]          // 翻訳先の言語
  let response;

  if (original_lan == "help") {
    response = `【コマンド】
    honyaku 翻訳元 翻訳先 対象文
    【例】honyaku ja en こんにちは

    言語は下記から調べよう
    https://cloud.google.com/translate/docs/languages
    `
  } else {
    response = body.replace(/(\w+)\s(\w+)\s/,'');
    response = LanguageApp.translate(response, original_lan, convert_lan);
  }

  // slack送信処理
  const payload = {
    "token" : TOKEN,
    "channel" : CHANNEL_ID,
    "text" : response
  };
  const params = {
    "method" : "post",
    "payload" : payload
  };
  UrlFetchApp.fetch(URL, params);
}
```
 ※以下の項目を自分のものに変えるのを忘れない。
　　　・TOKEN（先程**Slack APIの設定**でメモしたもの。）
　　　・CHANNEL_ID（投稿したいslackチャンネルID）

- 自分のコードに書き換えて保存。
- 保存後、先程の要領で、「デプロイ」をクリック。
- プロジェクトバージョンを最新のものにして、更新をクリック。  
<font color="Red">※更新をしないと、反映されない。</font>
- 実際にSlackへ行き、動作確認。（例：「honyaku ja en こんばんは」）
- 正常に動けば、完了。

## まとめ
- 今回はSlack Botということで、更に幅が広がった。
- 国際的技術者への道がどんどん開拓さているのでは、十八番のうぬぼれに浸る。
- これを見てくださるエンジニアの皆様、「自分はこれで世界交流をしてるぞ」とか「そんなんじゃ、まだまだ道は遠いな」等の意見を何卒お待ちしております。

## 参考
- https://qiita.com/shohei-y/items/6784ae87ca180c7c5157   
→このサイトを丸々参考（マルコピ）にしました。大変お世話になりました。
- https://qiita.com/ykhirao/items/3b19ee6a1458cfb4ba21  
→Slack APIはここを参考にしました。大変お世話になりました。
- https://qiita.com/soundTricker/items/43267609a870fc9c7453  
→ライブラリはこちらを参考にしました。大変お世話になりました。今後も使用していこうと思います。