Posted at

Slackを使って英語力を継続的に伸ばしている話

More than 1 year has passed since last update.

こんにちは、@iwashi86 です。本記事は、NTTコミュニケーションズ Advent Calendar 20日目の記事です。

本記事では、Slackを使いつつ英語力を上げていくために、社内ハッカソンで作ったbotについて述べます。大きく以下の3点について述べます。


  1. 経緯: そもそもの発端

  2. 解決方法: botを使ってどのようにするのか

  3. おまけ: botの実装Tips


そもそもの発端

英語力を上げるためには、継続的に勉強していく必要があります。これに関してはいわずもがなで、なんとなく直感的に同意いただけるかと思います。

英語力の中でも、特にボキャブラリーの豊富さは非常に有効で、知らない表現に出会ったときのプチフリーズ/諦めを防げます。そもそも表現を知らないと、その単語やフレーズ自体のリスニングに失敗することもあり、とにかく知っていることが重要です。

ボキャブラリー増強の手段として私は普段、NHK実践ビジネス英語を聴いて、英語を勉強しています。そこで出会った未知の表現を、メモっておいて、後から覚えようという作戦です。具体的なメモの方法として、 Slackの #language チャネルに投稿1しています。たとえば、こんな感じで書いています:

image.png

Slackに書くことで、多少のアウトプット効果もあり、やや記憶に定着するのは事実なのですが、実際に数日後に覚えていられるのは非常にレアで、99%の単語/熟語は、翌日に忘れてしまっているのが実態でした。ボキャブラリーを増やしたいのに、これでは困ります。


では、どうすればいいのか?

個人的に子育てなどもあり、プライベートでまとまった時間を捻出するのが難しいので、スキマ時間を狙って復習する作戦でいきました。スキマ時間とはたとえば、次の打合せまでの3分間や、電車の乗り換えの5分間などを想定しています。前述のとおり、英語は継続的に勉強するのが重要なので、とにかく空いた時間でこまめに&手軽に勉強する作戦です。

そこで、エンジニアとして生活していく中で、絶対に触れるツールであるSlackを使うことにしました。特別なアプリケーションを作ってしまうと、それをOpenするという行為すら忘れそうなので、ほぼいつも開いているSlackだと、都合が良いのです。

Slackで任意の機能を付けようとすると、もちろんbotなので、社内ハッカソンでサクッと作ってみました。


どのように動くのか?


単語・熟語の登録

スマートフォンから文字を打つのはつらいので、登録時はキーボードからやります。キーボードから入力された文字をbotが拾って、バックエンドのデータベース(今回はFirebaseを使用)に保存します。2

add.gif

単語・熟語の登録が正常に成功すると、botが :white_check_mark: リアクションを返してくれます。


単語・熟語を覚える

覚えるときは、手軽さを徹底重視して、スマートフォンからやります。とにかく気楽にやりたいので、スマフォからタイプする文字は、s(Startの略)だけにしました。実際にsを打ち込むと、データベースに保存されている英語表現とリアクション2種類(:white_check_mark: 知っているか、知らないか)が表示されます。英語表現は、データベースの中からランダムで表示します(デフォルト5題)。

利用者(覚えたい人)は、出題された英語表現を覚えていれば :white_check_mark: をタップ、覚えていない場合はもう一方のリアクションをタップします。

具体的な動作は以下のようになります。3

rem.gif

どちらかのリアクションをタップすると、即時フィードバックとして正答の日本語表現も表示されます。これで、自身が正しく覚えられていたかどうか、を確認できます。

最終的に暗記できたかどうかの判定は、3回連続で正解すること、で実施しています。仮に3回連続で成功すると、以下のように、botが 大変よくできました マークを付与し、データベース上から該当の表現を削除します2

fin.gif

ちなみに、反対に覚えていないほうのリアクションをタップすると、連続成功回数は0にリセットされるので、再度3回連続で正解する必要があります。


動き方のまとめ

以上のように、スマートフォン上の暗記時の操作を、徹底的に簡易化することで、復習しはじめるときのハードルを極限まで下げてみました。


実装Tips

(ほぼおまけですが、)bot実装上のTipsを2つほど述べます。


リアクションの実装

botが発言して、リアクションを付与するコードはこんな感じでした:


controller.hears('^s$', 'direct_message', async (bot, message) => {

// Firebaseから問題を取得
const questions = await fetchQuestions();

if (questions.length === 0) {
bot.reply(message, '登録語数が0だから、まず登録してね');
}

// 出題&リアクションを表示
questions.forEach((question) => {
bot.reply(message,
`Q: ${question.id}`,
(err, res) => {
bot.api.reactions.add({
name: 'white_check_mark',
channel: message.channel,
timestamp: res.message.ts,
});
bot.api.reactions.add({
name: 'negative_squared_cross_mark',
channel: message.channel,
timestamp: res.message.ts,
});
});
});
});


開発時の注意点

実装は特に難しくないのですが、一つだけ困ったことがありました。今回は開発時にnodemonを使って、ファイル変更を検知して開発していたのですが、頻繁に変更すると以下のエラーをもらうことがありました。

info: ** Using custom storage system.

info: ** API CALL: https://slack.com/api/rtm.connect
Error: Rate limit exceeded ← APIを高頻度で叩きすぎ
at Request._callback
at Request.self.callback
at emitTwo (events.js:125:13)

そのため、もう少しAPIに優しい叩き方で作ったほうが結果的に良かったです。(今回のケースでは、nodemonを使わないほうが良かったです)


まとめ

本記事では、botを使って英語力を継続的に伸ばしている話について書きました。Slackのように日常的に触れるツールに、英語学習を混ぜ込んでいくと、自然と英語に触れる機会が増えるのでオススメです。





  1. メンバへの共有が主な目的ですが、副次的な効果として、チームにいるネイティブから何か補足があれば教えてくれることも。 



  2. 入力先頭に a(add) を付与すると、bot が単語・熟語の登録と解釈します。 



  3. キャプチャの都合上、デスクトップから録画していますが、本来はスマートフォン上でやります。