CLIだけでSlackで使える日本語Reaction emojiをつくる

[絵文字 / Emoji Advent Calendar 2016 - Qiita](http://qiita.com/advent-calendar/2016/emoji) 13日目の記事です。
emojiというよりはSlackのReactionにこじ付けたテーマでやらせて貰いました。日本語リアクションなのでemojiですらない可能性もあるのでご了承ください🙇


## 日本語リアクションで爆速コミュニケーションの実現「コミュ障でも大丈夫👍」
皆さん、Slackのreaction（以下emoji）使っていますか？自分はめっちゃ使ってます。
emojiがあると文字では表現出来ないニュアンスも伝えられます。しかし、使いやすいemojiってなかなかないですよね。

![スクリーンショット 2016-12-13 0.45.44.png](https://qiita-image-store.s3.amazonaws.com/0/24124/ef374f1b-7137-3890-2e6a-8797e3213994.png)


使いやすいemojiはあるにはありますが、emojiを少し工夫すると***使いやすく、文字で表現出来るニュアンスも伝えることが出来るんです。***

それは日本語emojiです！(下のemojiは [oti/slack-reaction-decomoji](https://github.com/oti/slack-reaction-decomoji) のCustom emojiです)

![スクリーンショット 2016-12-13 0.38.28.png](https://qiita-image-store.s3.amazonaws.com/0/24124/b07e764d-d2d0-b32d-71b0-946f4207817d.png)

Slackにはcustom reactionといって、team毎に独自のemojiを導入することが出来ます。その機能を使って日本語emojiを導入することが出来ます。


**参考スライド**
[日本語Reactionｻｲｺｰ!! | oti](https://github.com/oti/slack-reaction-decomoji) 

## 日本語emojiの導入「やらない人は損してる👓」
[GitHub - oti/slack-reaction-decomoji: Custom icon collection for slack reaction](https://github.com/oti/slack-reaction-decomoji)
上のリポジトリの導入手順に則ると 2016/12/22 現在、109個のいい感じの日本語emojiを導入することが出来ます。めっちゃ便利です。

![スクリーンショット 2016-12-13 0.53.52.png](https://qiita-image-store.s3.amazonaws.com/0/24124/71356286-a911-e258-cea1-bb01429545c6.png)


## 作るのがめんどくさくなった結果「CLIで作るぞ🔥」
いい感じなemojiは上記の方法でなんとかなりますが、自分たちで新しいemojiを作ろうとすると少し面倒くさくなってきます。
リポジトリにはPhotoshop用の編集テンプレートが入っていますが、Photoshopは起動が遅く面倒に感じます。
また、Web上には [絵文字ジェネレーター](https://emoji.pine.moe) の様なWeb上でemojiを作れるようなツールもあるにはあるのですが、自分で色をいい感じにしないといけないので少々面倒です。

そこで、CLI上でemojiを作れれば便利じゃないか！と思ってしまって、CLI上で作れるようにしました。

https://github.com/mottox2/emoji-generator

![Group 3.png](https://qiita-image-store.s3.amazonaws.com/0/24124/1347b383-1f31-1bab-9d43-61d007c60e77.png)

emoji作成からSlackへのemoji登録を2つのRubyファイルで実現しています。

* Rmagicを使って画像を生成する部分
* mechanizeを使って無理やりSlackに画像をアップロードする部分

### 使い方
画像を取り扱うために使ったRMagickがImageMagickに依存しているのでImageMagickをインストールする必要があります。

homebrewをインストールしていれば`brew install imagemagick`でインストール出来ます。WindowsやLinuxの人は頑張ってインストールしてください。

rubyの実行環境は整っている前提です。

まだ5文字以上の文字の入力に対応してません…

```bash
git clone https://github.com/mottox2/emoji-generator.git
cd emoji-generator
bundle install
bundle exec emoji_image.rb [生成したい文字]
bundle exec import.rb [Slackに登録したい画像のパス]
（SlackTeam, Username, Password, emojiの名前の入力を求められます）
```

( ´-`).｡oO（作ってみたけど、作る方が圧倒的に面倒くさかったです。既存の方法の方が楽なのでは？）

しかも、作ったけどargs要求する感じで無作法な感じだった

### Rmagicで画像生成
Rmagicは画像をいい感じに扱うことの出来る[ImageMagick](https://www.imagemagick.org/script/index.php)をRubyから扱うことの出来るGemです。

```ruby
require 'RMagick'

image = Magick::Image.new(64, 64)
draw = Magick::Draw.new
d.annotate(image, 0, 0, 20, 20, 'sample text')
image.write('dest.png') 
```

だけで画像を作って、保存することが出来ます。
今回は64x64の画像を作って、入力された文字を画像上に配置して出力するようにしています。
文字色は[GoogleのMaterial Design](https://material.google.com/style/color.html#color-color-palette)のカラーパレットからランダムで１色選ぶようにしました。考える事が少なくなっていい気分です。

### mechanizeでemojiをアップロード
SlackでCustomReactionを使うにはemojiを登録する必要があります。APIを使ってあげたいところですが、登録するためのAPIはないので、スクレイピングが出来るGem 「mechanize」 を使ってブラウザの操作を再現してアップロードします。

例えばログインフォームであれば以下のコードを使ってログインが出来ます。

```rb
require 'mechanize'

page = agent.get(sign_in_url)
page.form.email = your_email
page.form.password = your_password
page.form.submit
```

今回は[oti/slack-reaction-decomoji](https://github.com/oti/slack-reaction-decomoji)でやってる処理を少しだけ書き換えて、指定したpathの画像をアップロードする様にしました。
先人に感謝の気持ちしか湧いてきませんね

## 感想「emoji以外の知見が凄い貯まる、日本語emojiで俺たちの戦いはこれからだ🔥🔥🔥」
手作業でやってたことをプログラム書いて代わりにやらせようとするとおもったより大変で出来ることが一気に増えます。
emojiを使うために努力したことでemoji以外の知見がすごく貯まりました。自動化の手法はわかったので自動化のコスパを考えることが次の目標です。

日本語emojiはビジネスの人がemojiを使うきっかけになるので、Slackの文化を広めるのに向いているので、導入を考えてみてください！