という、話だったそうじゃ

ニュートラルに生きるWebエンジニアの日記

Slackでヘタクソな日本語/英語の校正をしてくれる「Botlint」を作ってる

この記事はSpeee Advent Calendar 2017 17日目の記事です。

前日は@yoppiによる「Amazon ECS上のタスクをGolangで操作する」でした。

次回は@mncによる「Webアプリケーションのパフォーマンス改善について」です。お楽しみに!


年の瀬12月、皆様はいかがお過ごしでしょうか。

突然ですが

私は告白します。

私は日本語も英語も苦手です。日常会話や仕事のやり取りで困らない程度にはコミュニケーションを取れると思っているんですが、得意な方ではないです。 自然言語が得意でないとどのようなことでツマヅクと思いますか?私は、仕事でWebエンジニアとしていろいろとコードを書く機会がありますが、大事なことはなんでしょうか。

頭の中、伝えづらいことをいかにして、文字・言葉・図として表現して、他人(それは1ヶ月後の自分でもある)に伝え残すかです。

問題解決を破綻した考え方によって進められていないか。その考え方は効率よく他の人が理解できる形になっているのか。 それは自分ひとりだけでは確認できないので、同僚だったり上長にその正しさを理解してもらう必要があると思うのです。(例えば、コードレビューをしてもらうなど)

防げるミスは防ぐ。気づかせてくれる。

人に伝える上で、相手に理解されづらいコミュニケーションってなんでしょう。

  • 相手と自分の理解している度合いの違い。例えば、オートマのクルマに乗っている人に、渋滞のときのクラッチをつなぐ行為が大変である、と伝えるのは難しいです。
  • 言葉の使い方。例えば、「いくらが零れ落ちそうなほど大量のおにぎりを食べてる。」という言葉を伝えたとき、大量のおにぎりの話をしているのか。大量のいくらが乗ったおにぎりの話をしているのか。しかし、大量のおにぎりを食べても、いくらが零れ落ちることはないから、それはありえないな...と。理解するのに時間がかかってしまう。
  • 誤字脱字や常用漢字外の言葉で表現しているとき。「遙か彼方に小形飛行機が見える」とは、分かるけど使い方が間違っている。

私は、言語を扱う専門家ではないので、経験則による感覚の話になりがちですが、「誤字脱字や常用漢字外の言葉で表現しているとき。」というのは、まあそうだろうなと合点いただける人が多いのではと思うのです。

Slackで日本語/英語を校正してくれる「Botlint」を作った

というわけでこの度、その問題を解決すべく「Botlint」という、Slack上で発生したコミュニケーションの誤りを校正してくれるBOTを作ってみました。 どういうものかというと、

  • このBOTがジョインしているチャネルで発言された内容をすぐに校正して、秘密裏に教えてくれるBOT。そして、コソッと edit するなど。
  • Yahoo!の日本語校正サービスや、Textlintを用いる
  • Textgearsで英語校正もしてくれる。Google Translateで、正しい英語を使っているかの裏付けをする。

というものです。実際にどのように伝えてくれるかというと...

f:id:bino98ty:20171216140659p:plain

こんな感じです。

Botlintから返される校正は、その発言を行った人しか返されないです。 したがって、色々な人がいるチャネルでも、このBOTを仕込ませておいて、文章のコーチングをしてくれる環境を実現できます。

どうなっているのか

Botlintは、Botkitをベースに、文章検出時にリアルタイムに下記とのやり取りを行っています。

普段仕事で、Reactを使うことが多いので、ES6とFlowtype、ESlintなどを導入。テストはまだないので、avaで書こうかなと思っているところです。コードもそれほど記述量がないので、技術的なことは直接コードを読んでいただくほうが早いと思います。

試し方

ここからは、実際にBotlintを試す方法についてです。今回は、Google App Engine で動作するように設計してあります。必要なことはそれほど多くありません。

  • ./app.yaml.sample を基に、Slackのトークンと、Textgears / Yahoo / Googleトークンを設置します。ちなみに、すべてのtokenを持ってくるのがめんどくさい方は、Slackのtokenさえ設定いただければ、Textlintによる校正だけを行ってくれます。tokenを取得する細かな方法は割愛しますが、 GOOGLE_TOKEN を取得した際の、プロジェクトには、 Google Translate APIAPIを有効化しておいてください。また、API Keyとして取得をして、記述してください。
  • Google Cloud Platform上に、適当なプロジェクトを作り、gcloud コマンドで操作できるようにしてください。そして、 google app deploy を実施してください。
  • Slackのtokenを取得する際に、BOTの名前を設定すると思います。そのBOTを任意のチャネルにジョインさせ、適当な日本語を書いてみてください。先程のスクリーンショットのように、校正してくれると思います。

採用経緯

今回、4つのサービス、アプリケーションで校正を支援してくれていますが、それぞれを採用した意図は下記の通りです。

  • Textlintは、最小限の準備でbotlintを扱えるように。
  • Yahoo!の校正支援APIは、Textlintでは校正できない、高度なサジェストを期待して導入。
  • Textgearsは、そうですね。英語の校正をしてほしいと思ったとき、APIでその結果を受け取れるサービスがここ以外見つけられなかった...という経緯もあります。 本当は、grammarlyとか使いたい...。
  • Google Translateは、僕だけかもしれないんですけど、英語で文章を書いたあと、それが正しい意味になっているかを確認するために、よくGoogle翻訳に掛けているのですが、それを自動でやってくれるようにした。

という具合です。

実際に使ってみたときの様子

f:id:bino98ty:20171216144602p:plain 英語の校正と翻訳をしてくれているときの様子。

f:id:bino98ty:20171216144303p:plain 実験しているときの様子1

f:id:bino98ty:20171216145216p:plain 実験しているときの様子2

自分の分報チャネルにbotlintを導入したら、皆様が使っていただきました。ありがとうございます。

所感

日本語の校正支援に関しては、日本語を操る日本人にとってはもう少し、高度な校正を期待しつつ、もしかしたら日本語を習う外国の人であれば有意義かもしれないなぁと思ってたりします。 英語に関しては、Google Translateと、TextGearによる掛け合わせは結構いい感じで、Gitのコミットコメントなどを書くときに重宝しますし、先日海外の方とAirbnbでやり取りをしてたのですが、その際もどんな文章を掛けばいいのかそのヒントになったりしました。 普通のGoogle TranslateやGrammaryなどの校正サービスを単体で利用するときとくらべて優位なのは、

  • Slackのパブリックチャネルなど見えるところで文章を書けば、人間校正もしてくれたりしないか、、、そんな甘い期待ができる
  • どんな文章を書いたか、ログが残る。英語ができるようになった実感も持てるのでは?
  • 「この英語正しいんだっけ?」という不安を、英語によるコミュニケーションを行うときに低減できる。すなわち、話の内容に集中できるかも

という感じですかね。 ぜひbotlintを導入して、良さそうだなと思ったら、Github star をつけていただけると嬉しいです。

長文観ていただいてありがとうございました。