コメントを英語で書くときに注意するべきこと

API ドキュメント作成ガイドライン | Rails ガイド」がすごくいい

API ドキュメント作成ガイドライン | Rails ガイド

Rails/Ruby以外にも通用すると思う。

すごく参考になった。

チャットボット開発のためのライブラリをGoで書いた話

Chatroomといいます。

github.com

これはAizu Advent Calendarの16日目の記事です。(遅れてすみません)

動機

これまでだと、リクエストが来るたびに該当ユーザーのState情報を取り出し、今の文脈で条件分岐して返答、State情報の更新という一連の流れを行っていたと思います。

これはチャットボットのバックエンドとして基本的なものであり、大規模なものにも必ず含まれているロジックです。

しかし、チャットボットブームと言える今の時代、ネタや実験的に軽くチャットボットを作成したいという需要もあります。

そういったときに毎度State管理から実装するのはちょっと面倒...ということで、このライブラリを作成しました。

で、具体的には?

こんな感じでチャットボットのロジック部分が書けます。

今までだとState管理が必要だった対話的なUIが、State的な部分を意識せずに書けていることがおわかりでしょうか。

しかし実際のコードはこれだけではなく、もっとあります。

というのも、Chatroomは以下の面倒を見てくれません。

  • ユーザーごとの情報の保存(State)
  • LINEやFacebookといったチャットサービスAPIとの通信
  • ユーザーID等による処理の分岐

話が違うじゃねぇか!という声が聞こえてきそうですが、Chatroomがやってくれるのは以下だけです。

  • トリガとなるメッセージごとのモジュール(Topic)の呼び出し
  • Topicへのメッセージの配送・受け取り

上記以外のことは自分で実装する必要があります。(もう少し詳しいことがREADMEに書いてあるよ!)

まとめ

このライブラリで中規模程度のチャットボットも書いていますのでちょっと使ってみてくださると嬉しいです。

(はやくAPI Reference書かなきゃ)

2016/12/28追記: 書いたよ。

地元の人に聞いた平日夜に熱海で日帰り入浴できる場所3つ

- 大湯温泉

- 駅前温泉

- 福島屋

だけらしい。ホテルはもう宿泊客向けのみになってて、それ以外の日帰り温泉は16時ころで終業。福島屋がよさげだけどその日は休業してたので駅前温泉に行った。

 

すごく熱かった。さすが熱海←

 

ありがとう八百屋のおばさん。

バスの一番後ろに初めて座ったんだけど

椅子が自由に倒せていいね。

 

結局倒してないんだけど。

 

高校時代の「小論文」について

ただの思い出なのだけれど、ふと思い出したので書く。

受験対策の時期、もしくはそれ以前でも高校時代にはたくさん小論文を書かされた。もちろん、入試対策。大学によっては、二次試験で小論文を持ってくるところがあったから。僕はこの小論文の練習が、割と好きだった。

文章を書くことが特に好きだったわけではない。読書感想文なんかは大の苦手。でも、この、自分の意見を誰にも邪魔されずに組み立て、練り、そして表現するという時間が好きだったのかもしれない。

ところで、この「小論文」というものは推奨される書き方、構成、手順みたいなものがある程度かっちりと決まっており、最初の段落で「私は筆者の〜という主張に賛成/反対です」と立場を明確にしておくことが(大抵)良しとされていた。

僕は必ず「反対」と書いた。

ひどい時は、設問を読み切る前から。

なんでかって、その方が簡単だったし、そもそも「賛成」の時の書き方がよくわからなかった。賛成しちゃったら、「あなたと意見は一緒です」の一文で終わっちゃうじゃないか! とか考えてた。割と今でも思ってるけど。

とにかく、必ず僕は反対の立場として小論文を書いた。僕は「基本普通、ただハマるとすごく良い」というタイプだったようで、大抵人並みかそれ以上に添削されて戻ってくるけど、たまーにほぼ添削なしの高得点という採点結果をもらった。

そんな感じで日々楽しく小論文を書いていたのだが、ある日、どうしても小論文が書けない、ということがあった。

設問は文書を読んであなたの考えを書け、というお決まりのタイプ。書けない理由は単純だった。「反論が思い浮かばない」

どうしても自分で納得のいく反論が思い浮かばなかった。何度文章を読んでも穴が見つからなかった。

書けなくて、終了時間を過ぎても書けなくて、職員室に移動してその隅で居残った。

でも書けない。その時の設問の文章というのは、鷲田清一さん著のものだった。鷲田清一さんというのは哲学者の方で、論理的なんだけれども、情緒的で詩のように非常に緻密に編まれた文章を書く人だ(と当時は思っていた)。

僕は鷲田さんの本を何冊か読んでいた。そして、彼の文章が好きだった。その小論文の設問も同じだった。その文章を読んだ時があるわけではなかったのだけれど、非常にその文章に納得してしまっていた。その文章に共感されているような感じだった。

だから僕は、とうとうつぎはぎだらけで、悲惨な小論文しか書き上げることができなかった。先生に提出し終えた時には開始から3時間が経っていた。先生がその場で読み始めるので、僕は耐え切れずにそそくさとカバンを持ち、帰るしかなかった。

「Bot合宿」資料を公開します

7/23に学内で「Bot合宿」を開催しました。

「合宿」と名が付いていますが、勉強会に近いです。

ただし、普通の勉強会と違って、今回は講師が前に立つことはありませんでした。

代わりに、教材として事前に「ドットインストールのような動画」を用意しておきました。

なぜ動画にしたか?

それは、「進みの速い人が、遅い人に合わせる(もしくはその逆)」という状況を作りたくなかったからです。

今回は初心者向けのハンズオンであり、理解度にも差が出ると予想したため、このような形式にしてみました。

なのでもくもくとそれぞれで進めることになります。

質問があれば答えます。

早く終わった人は自由に作りたいものを作ってもらい、最後に成果発表をします。

RDBを使って「歌詞Bot」作っていた人がいてすごかった。

使用した動画を公開します

github.com

今回参加できなかった方や、Bot作ってみたいけど何から始めていいかわからない...という方にも有用じゃないかということで、一般に公開いたします。

HerokuやLINEの設定から説明しているので、高度すぎてわからない! ということはないと思います。

動画は以下の12個です。

  • GO言語でHello, worldと環境変数の設定
  • Herokuでアプリケーションを作成する
  • FIXIEを設定しよう&LINE APIのCallback URLを設定する
  • 自分のLINEアカウントの鍵情報をHerokuの環境変数に設定する
  • LINEからのリクエストを受け取ってみる
  • 受け取った文字列を表示してみる
  • 返信してみる
  • リファクタリングをする1
  • クイズを出題してみる
  • クイズを増やす
  • ユーザーごとにStateを分ける
  • リファクタリングをする2

最後まで進めると「クイズボット」が作成できます。

動く状態を保ちながら、少しずつ書き足していく、という方式を意識しています。動かしながら実装をすることで「進んでる!」という実感を持つことができ、モチベーションの維持に繋がります。

反省点

動画は全体的に好評だったのですが、Go言語自体やHeroku Toolbeltの環境設定の動画を撮っている暇がなく、結果的に省くことになってしまいました。

なので、そこは個々で調べてもらって設定してもらうという形をとりました。

また、勉強会開始時点で動画が半分程度しか完成しておらず、進みの速い参加者には迷惑をかけました。

徹夜で作り続けたので、動画が最後になるにつれて声に覇気がなくなっていますw

最後に

動画中のPCの操作は私(伊藤)、声と動画編集は山本くんがやってくれたのですが、駄目出しばっかりしてすみませんでした。

最後まで高いクオリティで動画を作成してくれました。山本くんがいなければ今回の合宿はもっと違うものになっていたでしょう。

勉強会中に僕らが動画作成に追われていたため、一人で参加者の対応をしてくれたのが黒金くんでした。

彼は技術的にも素晴らしいリア充なので、安心して参加者を任せられました(すみませんでした)

最後に、参加してくださったみなさん、本当にありがとうございました。

一緒にこれからも頑張っていきましょう。

この資料がどなたかの役に立てば幸いです。

7Botやってみた

会社で席についたら目の前に7Botというものがあったので、なんとなく触ってみました。

http://7bot.cc/

一言で言うとアームです。腕です。手もつけられるみたいですね。

わりとまとまったドキュメントがなくてちょっと苦労したので残しておきますね。

以下の操作はUnofficialなものらしいので責任は負えません。本来は「公式SDKが出るまで開発は待ってね!」ということらしいです。(ドキュメントがない原因その1)

自分の環境はUbuntu 15.10でした。SketchではなくArduinoでやりました。

Arduinoのインストール

僕はArduino触るの初めてでした。aptでやったらバージョン古すぎて何も出来なかったので公式サイトからダウンロードしてきましょう。OpenJDKだとうまく行かないという話もあるのでOracleが安全なんじゃないかな。

Arduino - Home

Linuxユーザーはsudo addgroup [user] dialoutして一度ログアウト/ログイン。

ボード用パッケージのインストール

"ツール" -> "ボード" -> "ボードマネージャ"と選択して、"Arduino SAM Board"というものをインストール。7Botに組み込まれているArduino DueがAtmel SAM3X8E ARM Cortex-M3というCPUを使っているためにそれ用のパッケージが必要みたい。詳しくはわかんない。

7Bot用のライブラリ/スケッチをインストール

github.com

github.com

二つをダウンロード。前者はZipでダウンロードしたらそのまま"スケッチ" -> "ライブラリをインクルード" -> ".ZIP形式のライブラリをインストール..."でファイルを選択すればOK。

後者は一度解凍して、中のArm7BotというフォルダだけをArm7Bot.zipというファイル名で圧縮してから同様にインストール。ファイル名が中のフォルダ名と違うとインストールに失敗するので注意。もしそれでも失敗するようならExampleとSrcというフォルダ名を全部小文字に変えるとうまく行くという夢を昨日見た。

サンプル実行

さて開発の準備は整いました。"ファイル" -> "スケッチの例" -> "Arm7Bot"からサンプルファイルを開くことが出来ます。

いくつか眺めればだいたいの書き方はつかめると思います。こちらもUnofficialなドキュメントしかなく、またこれから変更される可能性もあるので、ガッツリ書くなら関数でラップして使ったほうが良いかもしれませんね。

参考:

7Bot: a $350 Robotic Arm that can See, Think and Learn! by 7Bot — Kickstarter