tamuraです。
Lisp Meet Up presented by Shibuya.lisp #26 に行ってきましたので、まとめたメモを公開いたします。 今回はClojureの回となっております。
Clojureのチャットボットフレームワーク
by athos0220さん
いろいろある?チャットボットフレームワーク
- Hubot
- GitHub製
Ruboty
- Rubyで作られている
背景
- ChatOpsがはやっている
- 実行結果もbotがつぶやいてくれる
フレームワークのアーキテクチャ
- ロボット
- アダプターとスクリプトの仲介
- (でかい)
- アダプター
- 個別チャットサービスの差異の吸収
スクリプト
どのメッセージにどう反応するか記述
[adapter] <-> [robot] <-> [script]
parabola 今回作ったClojure製のチャットボットフレームワーク
複数アダプターの並列実行
- アダプターは基本的にイベントループで動く
- 複数動かすにはマルチスレッドで実行
- アダプターから別のアダプターへメッセージを流すことも可能に
- core.asyncで複数のスレッドからのメッセージを直列化
リロード可能なアダプター/スクリプト
- アダプター/スクリプトへの変更を反映させるためにリロードさせたい
- ファイルのリロードの前後で正しい順で行う
- スレッドの起動/停止
- チャットサービスへの接続/切断
- Componentライブラリ
- 整合性のとれたリロードの実現を支援するシンプルなライブラリ
関数ベースで記述できるスクリプト
- スクリプトは基本的に関数で書く
- ミドルウェアで機能を拡張する
Typed Clojure
by にだーさん
Clojureの良し悪し
- 関数言語らしい文法
- シーケンスをベースにした
- 動的型付け
- 実行時エラー
Typed Clojure
- Clojureに漸進的型付けを実現
- 実行時の挙動には影響しない
- Lintのように使える
- 現在は core.typed になっている
- Leiningenで導入できる
例 数値を受け取って数値を返す
(ann plus [Num -> Num])
(defn plus [x] (+ x 1))
(check-ns)
※チェックに通らないとすごい怒り方をする
例 複数の型を取りうる型を記述できる
(ann plus2 [(t/U Num String) ->String])
(defn plus2 [x]
(if (string? x)
(str x 1)
(str (+ x 1))))
メリットデメリット
利点
- プログラムの信頼性の向上
- assertと違い実行時にコストを消費しない
欠点
- 型を書くコストが大きい
- 外部ライブラリも型記述が必要
Clojure開発環境Nightcodeについて
by haijuさん
- gameライブラリ play-cljの作者
- 初心者向けのClojure開発環境
使っている人があまりいない
なにぶん情報がないのでわからないことが多い
感想
TypedClojureに一番興味を覚えました。 Lispはあまり大人数では組まないことが多いと思うのですが、仕事で使うとなると誰がそのコードを使うかわからないので、そういう時に役に立つんではないかと思ったりします。 SIerがClojureの方向を向いてくれると仕事でも使えるのではないかと思います。