"Hello, World."の次としてのチャットボット

この記事はGMOペパボ Advent Calendar 2017の3日目の記事です。

最近はプログラミング教育必修化の流れなどもあり、プログラミングに興味を持つ非エンジニアの方も増えているのではないでしょうか。 自分もそうだったのですが、プログラミングを始めた初期の壁として「何を作ればいいか思いつかない」問題があると思います。 環境構築は出来た、”Hello, World.“も表示できた、でも次に作りたいものがない、という方におすすめするのがチャットボット作成です。

チャットボット作成がおすすめなn個の理由

チャットボットの作成が初心者におすすめな理由として以下のことがあると思っています。

  • チャットというインターフェイスが既に用意されているので機能の開発に集中できる
  • シンプルなボットなら入門書を読み終えた程度の知識で簡単に作れる
  • 簡単に作れるので達成感を得やすい
  • チャットルームに投入するだけなので使ってもらうためのハードルが低い(なのでフィードバックも貰いやすい)

プログラミングの勉強のためにRailsチュートリアルなどを利用することも非常に効果的ですが、Webアプリの開発はボリュームが大きいため、達成感も大きい反面、挫折する人も多いように感じています。 その点チャットボットなら、サクッと作れてそれなりに役に立つので学習初期の成功体験という意味でも、MVP(Minimum Viable Product)の観点からもうってつけの題材ではないでしょうか。

自作ボットのご紹介

私もキーワードに反応してダイスを振ってくれるLINE BOTをプライベートで運用しているのでご紹介します。 このボットは友人たちとやっているテーブルトークRPGのオンラインセッション用に作ったBOTで、グループルームに常駐させています。 Skype通話でセッションをしているのですが、ダイスの出目をLINE上で皆がすぐに共有できるので友人たちからはそれなりに好評をもらっています。

テーブルトークRPG用のボットなので単純なダイスロールではなく以下の機能を実装しています。

  • 任意の個数、任意の面のダイスを振る
    • “20d100”と発言すると20個の100面ダイスを振ります
  • 出目修正
    • “1d6 + 4”と発言するとダイスの出目に4加算します
  • 成功判定
    • “1d100 <= 60”と発言すると出目が60以下かどうかを判定します

実際の画面

dicebot

このボットは以下のように非常に単純な仕様なので、入門書程度の知識があればすぐに作れます。

  1. 正規表現で発言をパースして要素に分解
  2. 乱数生成で指定のダイスを振って合計を出す
  3. 修正値があれば合計を修正する
  4. 成功判定があれば合計値と目標値で判定する
  5. 結果を返す

ソースコードをGitHubで公開したのでよろしければご覧ください。

おわりに

プログラミングはPCさえあれば非常に手軽に始められる上にとてもクリエイティブで楽しい活動です。 せっかく興味を持ったのに”Hello, World.“だけで終わってしまうのはもったいないので、手軽なボット作成をきっかけにプログラミングの楽しさを知る人が増えれば嬉しいなと思います。