93
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

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

  1. 経緯: そもそもの発端
  • 解決方法: botを使ってどのようにするのか
  • おまけ: 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 が単語・熟語の登録と解釈します。 2

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

93
76
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
93
76

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?