絵文字生成する slack コマンド作成

先日、絵文字生成を行なうコマンドとサーバを作成したため、それに合わせて slack のコマンドを作成してみました。軽いツールの説明と導入手順を書いていきます。

## ツール説明

### 絵文字作成ツール

まず、絵文字作成ツールです。
https://github.com/komem3/wordimg

入力したテキストから絵文字を作成してくれるコマンドラインツールが欲しいと思い作成しました。 Go で作ったのでコマンドとサーバのどちらも作成してみました。サーバの URL は https://wordimg-otho5yxlgq-an.a.run.app/wordimg です。[絵文字ジェネレーター](https://emoji-gen.ninja) のコマンドライン版みたいのを作りたいなというモチベーションで作成しましたが、あちらの完成度が高いのでまだまだ改良の余地があるなと感じております。

ちなみに、`https://wordimg-otho5yxlgq-an.a.run.app/wordimg?text=helloworld` というURLを見ると以下のようになります。更新するたびに違う画像が表示されるはずです。

![hellworld](https://wordimg-otho5yxlgq-an.a.run.app/wordimg?text=helloworld)

### Slackbot

こちは先程の slackbot 版です。こちらも Go で書かれています。
https://github.com/komem3/wordimg/tree/main/slackbot

slack のコマンドを受けとり、その引数の絵文字を生成してくれる slackbot です。イメージ的には以下のような感じ。

```
/wordimg hello word
```

![image](https://user-images.githubusercontent.com/29977786/107849016-a8db4400-6e3b-11eb-8a36-be7c6a0162a4.png)

やっていることは文字をクエリとしてた URL をslack に返しているだけです。コード見ると slack の認証関係でぐちゃぐちゃやっていますが、基本的にはそれだけです。

## Slackbot 導入手順

せっかく作ったのでこの bot の導入手順を記していきます。この子は cloud function で動かすことを想定して作成したため、必要なものは以下になります。

- GCP プロジェクト
- gcloud sdk

### 0. コードのダウンロード

コードをクローンなどでローカルにダウンロードを行ない、`slackbot` ディレクトリに入ってください。

### 1. コードのデプロイ
スクリプトを実行し、自身の GCP プロジェクトにコードをデプロイして下さい。

```shell
./deploy.sh $your_projectID
```

### 2. 環境変数の設定

デプロイした関数の環境変数の「URL」に `https://wordimg-otho5yxlgq-an.a.run.app/wordimg` を設定してください。自身の環境に絵文字作成ツールをデプロイしている場合は、そちらの URL を指定してください。(ないと思うけど)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488897/fe4d21d4-0bf0-5c14-170d-77ce29fea817.png)

### 3. Slack アプリを新規作成

https://api.slack.com/apps こちらから、`Create New App` で新規作成ができます。

### 4. コマンドを登録
以下4つのコマンドを登録していきます。URLは先程デプロイした Cloud Function の URL になります。Cloud Function の URL は Cloud Function の詳細のトリガータブから見ることができます。

  - /wordimg
  - /wordimg1
  - /wordimg2
  - /wordimg3

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488897/4860054f-944c-9855-bac9-3a40e5884b68.png)

### 5. Slack への権限追加

ボットにチャットへの書き込み権限を与えます。こいつを与えないと slack に書きこめません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488897/4fbded57-627b-e583-472f-ce8293ff3abd.png)

### 6. Slack にインストール

その他、Bot の名前を入力したりアイコン付けたりする必要がありますが、 Bot 作成に必要な項目を全て入力すると `Install App` によってワークスペースにアプリがインストールできます。

### 7. シークレットマネージャーに追加

インストールを行なうと、API トークンが発行されるため、これと、`Basic Information` から見れる `Signing Secret` をシークレットマネージャーに追加します。
以下の名前でそれぞれ追加してください。

  - SLACK_SECRET :  `Signing Secret` の値
  - SLACK_APIKEY : 発行された API トークンの値

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488897/dbf77ac0-5fb9-dc80-89e6-39b104e5f7a4.png)

### 8. Cloud Function のサービスアカウントに権限付与

デフォルトの Cloud Function のサービスアカウントはシークレットへのアクセス権を持っていないため、権限を付与してシークレットにアクセスできるようにする必要があります。
サービスアカウントの名前は `プロジェクトID@appspot.gserviceaccount.com` のような名前のはずです。こいつに `Secret Manager Secret Accessor` 権限(日本語だと`シークレットアクセッサー`だったはず)を与えてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488897/7e69f855-b147-7892-925a-78c9329817db.png)

### 9. 好きなチャンネルに追加

適当なチャンネルに追加してください。なかなか画像がでかくていうざいので、まずは Bot に DM で色々試して雰囲気を掴んでもらうといいかもです。


## 総括
- Go は絵文字も作れてすごい。(めっちゃ作りにくかったけど)
- 512*512 の画像はでかくてうざい