リアクションエンジニアがいると雑誌原稿も書ける！

<b><font color="red">$\huge{元氣ですかーーーーッ！！！}$</font></b>

https://qiita.com/advent-calendar/2022/works-hi-1


# はじめに

**リアクションはチームの雰囲気を良くしてくれます！**

@taka-fujita さんの記事を読みました。

https://qiita.com/taka-fujita/items/2f6c9b5816c423abf2d0

**リアクションエンジニア**というエンジニア像を定義されています。

![スクリーンショット 2022-12-11 10.53.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131808/6388127e-3de0-db93-444c-be6ec9593519.png)


すごいです！
人は名前、定義により認識するのです。適切な名前が付くことで認知が広がります。
「ゆるキャラ」の広がりとおなじです。

> 「幼い子は『知らない人について行かない』と教育を受けているから、知らないキャラについて来ないんですよ」と"ゆるキャラ"の不遇の時代を伝えた。

> その当時、「誰も握手もしないし、これはかわいそう」と同情したというみうら氏。「"キャラ"は有名なこと。ミッキーとかミニーちゃんのことなのに、大きい枠に入れられているから所在ないんだと思って、"ゆるいキャラ"で"ゆるキャラ"という世界さえあれば、堂々と生きていけるだろうと思って付けた名前だったんです」「所在なさ気な人の居場所ですよね」と命名に込めた思いを語った。

（「[みうらじゅん、"ゆるキャラ"命名に込めた思い語る - 最近の注目は"ゆる人"](https://news.mynavi.jp/article/20150208-a049/)」 より）

そして認知が広がり、その行き着く先は、命名者本人も知らないところでさまざまな語りがなされます。
ゆるキャラの場合は、大学の偉い先生なんかが「あの形状は、日本土着の民族信仰と結びついていて……」なんて説明がもっともらしくされているそうです。独自の解釈がいろいろ産まれているのです。それでいいのです！
これこそがブームの正体です。

**リアクションエンジニア**の話をします。

# 私も同じことをおもっていました

**リアクションエンジニア**という言い得て妙なネーミングは、はじめて知りました。

行動のみは、1年前から行っていました。

https://qiita.com/torifukukaiou/items/74567d2c3302a5d574ab

こちらの記事中「[② とにかくメッセージが書き込みがあったら良リアクションをつける](https://qiita.com/torifukukaiou/items/74567d2c3302a5d574ab#-%E3%81%A8%E3%81%AB%E3%81%8B%E3%81%8F%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%81%8C%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%81%8C%E3%81%82%E3%81%A3%E3%81%9F%E3%82%89%E8%89%AF%E3%83%AA%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E3%81%A4%E3%81%91%E3%82%8B)」です。

当時、6名で雑誌の執筆をしていました。みなそれぞれが別々の会社に所属しています。会社も違えば生活スタイルも違うので、執筆に割り当てている時間はバラバラです。原稿の締め切り間際でなんだかチャンネルがどんよりしていました。私が勝手にそう感じていただけかもしれません。それでメッセージの書き込みに対して良リアクションをつけるということを手動でしていました。しかしながら面倒くさくなってきたし、時間帯もあわないので「そうだ！ ボット:robot:に任せよう」とボットに任せてみました。

これが功を奏したのかどうかは不明です。果たして原稿は、締め切りに間に合い、無事雑誌に掲載されました！ :tada::tada::tada: 

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">We, <a href="https://twitter.com/tamanugi?ref_src=twsrc%5Etfw">@tamanugi</a> <a href="https://twitter.com/torifukukaiou?ref_src=twsrc%5Etfw">@torifukukaiou</a> <a href="https://twitter.com/the_haigo?ref_src=twsrc%5Etfw">@the_haigo</a> <a href="https://twitter.com/mokichi_s12m?ref_src=twsrc%5Etfw">@mokichi_s12m</a> including me, wrote featured articles for WEB+DB PRESS Vol.127 about Elixir and Phoenix! It&#39;s being published on 24, Feb.<a href="https://t.co/UPNiVU1zG9">https://t.co/UPNiVU1zG9</a></p>&mdash; 栗林健太郎 (@kentaro) <a href="https://twitter.com/kentaro/status/1489441847130746880?ref_src=twsrc%5Etfw">February 4, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<font color="purple">$\huge{全人類のみなみなさま！！！}$</font>
**ぜひお手にとって、お楽しみください!!!**

私たちが担当したのは、**作って学ぶPhoenix**です。
[Phoenix](https://www.phoenixframework.org/)というのは、[Elixir](https://elixir-lang.org/)でWebアプリケーション開発を楽しめるフレームワークです。

https://gihyo.jp/magazine/wdpress/archive/2022/vol127

[WEB+DB PRESS Vol.127](https://gihyo.jp/magazine/wdpress/archive/2022/vol127)

# リアクションエンジニア

初出はいつなのでしょうか。
Qiitaの中を検索してみました。

![スクリーンショット 2022-12-11 10.18.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131808/d20bd1e2-28c1-ee15-5ce2-b137a4cf5f8e.png)

https://qiita.com/sasamamo/items/082764df7a48062bb84c

2019年12月27日の記事です。
これよりも前から提唱されていた言葉なのかもしれません。
私にはそこんところわかっていません。

# 「[リアクションエンジニア](https://qiita.com/tags/%e3%83%aa%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%8b%e3%82%a2)」タグ!!!

「[リアクションエンジニア](https://qiita.com/tags/%e3%83%aa%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%8b%e3%82%a2)」タグがありました。

---

# リアクションボット:robot: の制作とイゴかし方

ここではPythonを使って制作を楽しみます。
はじめての方は、[Bolt 入門ガイド](https://slack.dev/bolt-python/ja-jp/tutorial/getting-started)をまずそのまま実施されてみることをオススメします。
この記事では、[Bolt 入門ガイド](https://slack.dev/bolt-python/ja-jp/tutorial/getting-started)を一通り理解されていることを前提とします。

https://slack.dev/bolt-python/ja-jp/tutorial/getting-started

## ソースコード

さっそくソースコードです。
のちほど[Docker](https://www.docker.com/)でイゴかすことを楽しみます。

ちなみに「イゴかす」は「動かす」の意味です。おそらく、西日本の方言です、たぶん。少し古いオートレースの映像ですが、実況アナウンサーが「針イゴきます」とはっきり言っています。

https://autorace.jp/race_info/Ondemand/asx/iizuka/2018-01-07_8/0/1

さらにちなみに「針」とは、大時計の針のことです。針がイゴいてある地点まで到達すると選手はスタートを切って良い発走の合図となります。針がイゴきはじめると(おそらく)選手は緊張するし、スタートはその後のレース展開に大きく影響するので、車券を握りしめている観客たちがもっとも緊張する瞬間ですので、先の尖った鋭いものを連想させる針は緊張の暗喩としても言い得て妙なわけです。 

ちなみにちなみにちなみに、上記レース映像は一般社会で最も有名な元SMAPの **[森且行](https://autorace.jp/race_info/Profile/2529)選手** が一着を決めるレース映像を選んでいます。

余計な話が続きました。
**いよいよこの記事の一丁目一番地、レゾンデートル、一番大事なところです。**

```python:app.py
import os
import random
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler

# ボットトークンとソケットモードハンドラーを使ってアプリを初期化します
app = App(token=os.environ.get("SLACK_BOT_TOKEN"))

@app.event("message")
def handle_message_events(body, logger, client):
    logger.info(body)
    ts = body['event']['ts']
    channel = body['event']['channel']
    icons = ['thumbsup', 'tada', 'rocket']

    client.reactions_add(
        channel=channel,
        name=random.choice(icons),
        timestamp=ts)


# アプリを起動します
if __name__ == "__main__":
    SocketModeHandler(app, os.environ["SLACK_APP_TOKEN"]).start()
```

```dockerfile:Dockerfile
FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./app.py" ]
```

```text:requirements.txt
slack_bolt
```

## Slackアプリの設定

[Bolt 入門ガイド](https://slack.dev/bolt-python/ja-jp/tutorial/getting-started)の「[アプリを作成する](https://slack.dev/bolt-python/ja-jp/tutorial/getting-started#create-an-app)」をご理解いただいていることを前提とします。
設定のポイントのみを示しておきます。

### Socket modeをON

Socket modeをONにしておきます。

### Event Subscriptions

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131808/82096c8c-b49e-ebe1-a764-f55c1dcfb482.png)

### OAuth & Permissions Scopes

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131808/b8fbb379-d8fb-95ff-b393-df2bb4327729.png)

### トークン

Slackアプリの設定画面から以下２つのトークンを控えておきます。

- アプリレベルトークンと呼ばれる `xapp-`で始まるトークン
- ボットトークンと呼ばれる `xoxb-` で始まるトークン


## ビルド

ビルドします。
`torifuku/reaction-man`はお好きな値にしてください。
最後の`.`を忘れないようにしてください。`Dockerfile`の位置を示しています。

```
docker build -t torifuku/reaction-man .
```

もしpipインストールで失敗する場合は、`--network=host`をつけるといいかもしれません。
[Time4VPS](https://www.time4vps.com/)で動かしているUbuntu 22.04、Docker 20.10.22で問題に遭遇しました。

```
docker build --network=host -t torifuku/reaction-man .
```



## 実行

イゴかします。
2つのトークンは、Slackのアプリ設定から取得した値を使ってください。
`torifuku/reaction-man`はビルドのときに指定した値を指定してください。

```
docker run -e SLACK_BOT_TOKEN="xoxb-xxxx" -e SLACK_APP_TOKEN="xapp-yyyy" -d --rm --network=host torifuku/reaction-man
```

もし、`Failed to send a request to Slack API server: <urlopen error [Errno -3] Temporary failure in name resolution>`でコンテナ実行後すぐに停止する場合は`--network=host`をつけるといいかもしれません。
[Time4VPS](https://www.time4vps.com/)で動かしているUbuntu 22.04、Docker 20.10.22で問題に遭遇しました。


```
docker run -e SLACK_BOT_TOKEN="xoxb-xxxx" -e SLACK_APP_TOKEN="xapp-yyyy" -d --rmtorifuku/reaction-man
```

## ワンポイント

`icons = ['thumbsup', 'tada', 'rocket']`はどのワークスペースでもデフォルトで使えるものにしました。
たとえば、 `toukon` 等のご自身で追加された絵文字も入れておくとよいとおもいます。

![toukon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131808/21914ed7-448e-351a-7f2f-485d1b463911.png)




# コラム

この記事ではランダムに絵文字を選ぶだけの動作となっています。
流行りのAIを活用して、人間らしい振る舞いというか、人間以上のリアクションをしてくれるボットの出現はそう遠くない話なのかもしれません。

---


# まとめ

身の回りの困りごと（Slackチャンネルのどんよりとした空気感）を、ボット:robot:開発そのものを楽しんで、楽しく解決しました。

ところで、チャンネルという空間に感情を読み取ることができるのはギリギリ現代人だけの感覚なのかもしれません。１００年後の人類は、「昔の人は会ってもいないのに雰囲気とか感じとっていたらしいよ、すげぇくない！？」と驚きをもってこの記事を読まれることであろうとおもいます。１００年後の人類がこれをどう読むのか楽しみです。

「楽しむ」というのは尊いのです。素晴らしいのです。知・好・楽で最上のものとされています。これを知るものはこれを好むものに如かず、これを好むものはこれを楽しむものに如かず（論語）。楽しむものにはかなわないということです。

いろいろ書きましたが、結局は詰まるところ畢竟**元氣**なのだとおもいます。
**元氣**があればなんでもできるのです。その通りなのですが、そのやる氣、元氣、氣力は時にしぼんでしまうことがあります。
「志は氣の帥なり」とは、孟子の言葉です。
「志」がやる氣、元氣、氣力を支える将帥なのです。
「志」とは当世風に言えば、夢、ビジョン、大いなる目的、ゴールです。
「志」が元氣を支え、「元氣」が実行のエンジンとなり、実現へと至るのです。

このへんの話は、「[闘魂Elixirシリーズ](https://qiita.com/advent-calendar/2022/elixir)」と名付けて連載しています。
東洋道徳(闘魂)と西洋芸([Elixir](https://elixir-lang.org/))を一日一話形式で楽しんでいただけます。

「[闘魂Elixirシリーズ](https://qiita.com/advent-calendar/2022/elixir)」は、[Elixir Advent Calendar 2022](https://qiita.com/advent-calendar/2022/elixir)のカレンダー3です。
興味のある方は、ぜひご購読ください。

https://qiita.com/torifukukaiou/items/3b65e5c04fa8c55f526e

https://presidentstore.jp/item/008105.html

---

# さいごに

さいごにわたしからみなさんに、みなさまに、メッセージをおくりたいとおもいます。
人は、歩みを止めたときに、そして挑戦を諦めたときに、年老いていくのだとおもいます。

この道を行けば
どうなるものか
危ぶむなかれ
危ぶめば道はなし
踏み出せば
その一足が道となり
その一足が道となる
迷わず行けよ
行けばわかるさ

---

[1998.4.4 燃える闘魂アントニオ猪木 引退試合(VS ドン・フライ）](https://njpwworld.com/p/s_series_00151_1_01)

https://njpwworld.com/p/s_series_00151_1_01

試合後の05:40くらいから引退セレモニーがはじまります。
ぜひ！　猪木さんの声で、あなたもぜひお聞きになってください。
きっと元氣をもらえます。

<b><font color="red">$\huge{元氣があればなんでもできる！}$</font></b>

---

https://qiita.com/torifukukaiou/items/5e96f4e9f12ec3c4b3f4

https://qiita.com/torifukukaiou/items/b6361f98194f3687a13c

https://qiita.com/torifukukaiou/items/4c35ace6db3f02ac3897

https://qiita.com/torifukukaiou/items/17d55cf896c24b13350e

https://qiita.com/torifukukaiou/items/833a54ec1064b9027eee

https://qiita.com/torifukukaiou/items/44db8a4997812518730a