GitHub で使用されている Bot フレームワーク。
デフォルトは Campfire
という Web チャットアプリケーションで動作するようになっているが,
アダプターという別のモジュールを組み合わせることで IRC や Twitter, Yammer といった
外部のサービスとも連携することが出来る。
GitHub 上にてオープンソースで公開されており,Hubot 用のプラグインもオープンソース で様々な人が作成して,公開している。
Heroku にデプロイできるためサーバを構築しないでも設定を書いたりプログラムを書くだけで Hubot を利用できるというメリットがある。
Ubuntu(ウブントゥ)とは、Debian GNU/Linuxをベースとしたオペレーティングシステム (OS)。 Linuxディストリビューションの一つであり無償で提供されている。
ちなみに Ubuntu Server 12.04 の Linux Kernel のバージョンは 3.2 である。
Wikipedia より
Node.js はイベント化された入出力を扱うUnix系プラットフォーム上の サーバーサイドJavaScript環境である(V8 JavaScriptエンジンで動作する)。
公式ドキュメントのトップページ(和訳)より - node.js
Node.jsは高速でスケーラブルなネットワークアプリケーションを 簡単に構築するためにChrome の JavaScript 実行環境上に 構築されたプラットフォームです。 Node.jsはイベント駆動とノンブロッキング I/O モデルを使用することにより 軽量・効率的で、分散されたデバイスにまたがるデータ集約的なリアルタイム アプリケーションに最適です。
Node.js のライブラリマネージャーとして npm や,Ruby on Rails のような Web アプリケーションフレームワークとして express などのソフトウェアがある.
Ubuntu にインストールするためには apt コマンドを使う。
$ sudo apt-get install nodejs nodejs-dev
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
上記のソースを hello_server.js
として保存して node
コマンドで起動する
$ node hello_server.js
Server running at http://127.0.01:1337/');
公式ドキュメントの概要(和訳) - node.js
スレッドベースではないめ省メモリで効率的
Node は、 1接続ごとに2MBのスタックメモリを割り当てるスレッドベースのシステムに比べて、 高負荷時にとても良いメモリ効率を実現します。 さらに、Node のユーザはプロセスのデッドロックの 心配から開放されました。 Node にはロックがないのです。 Node には直接 I/O を実行する関数がほとんど無いため、 プロセスは決してブロックされません。 ブロックがないため、 エキスパートではないプログラマであっても高速なシステムを開発することができるのです。
言語自体がイベントループ機能を持っている
Node は、Ruby の Event Machine や Python の Twisted の影響を受けており、よく似たデザインになっています しかし、Node はイベントモデルをさらに推し進めています すなわち、イベントループをライブラリとして提供するのではなく、 言語自体に組み込まれた構成として提供しています Node 以外のシステムでは、イベントループを開始する際に必ずブロック呼び出しが存在します それらのシステムでは、一般的にスクリプトの先頭でコールバックを通じて行う動作を定義し、 スクリプトの最後で EventMachine::run() のような ブロック呼び出しを行ってサーバを開始させています Node では、そのような「イベントループの開始」呼び出しはありません Node は入力されたスクリプトを実行し終えると、 そのままイベントループに入ります そして動作すべきコールバックがなくなるとイベントループから抜け出します こういった挙動は、ブラウザ上の JavaSciprt と同じです すなわち、イベントループはユーザからは隠匿されているのです
Wikipedia より
CoffeeScript はプログラミング言語のひとつである。コードはJavaScript のコードに変換される。 Ruby や Python、Haskell [1] から影響を受けたシンタックスシュガーの導入により、 JavaScript に比べ簡潔さと可読性を向上させたほか、配列内包 (Array comprehensions) やパターンマッチといった機能を追加している。
インストールには npm コマンドを使う
$ sudo npm install coffee-script
CoffeeScript
cubes = (math.cube num for num in list)
JavaScript
cubes = (function() {
var _i, _len, _results;
_results = [];
for (_i = 0, _len = list.length; _i < _len; _i++) {
num = list[_i];
_results.push(math.cube(num));
}
return _results;
})();
hello_world.coffee
のように拡張子を coffee
にして,下記のように実行する。
$ coffee hello_world.coffee
JavaScript にコンパイルする際は -c
オプションを使用する
$ coffee -c hello_world.coffee # hello_world.js が生成される
Node.js を書いたり,jQuery のコードを書いたりする時に使用される。
既存の JavaScript のソースを CoffeScript に変換する js2coffee
というものもある。
$ sudo npm install js2coffee
オンラインでも試せる。
オープンソースの KVS (データベース) Hubot がデータを保存するために使用する。
Ubuntu には下記コマンドでインストールする。
$ sudo apt-get install redis-server
$ sudo npm install hubot -g
$ hubot -c <hubot> # -c でプロジェクト作成オプション <hubot> はプロジェクト名
出来あがったら /var/lib/
以下に移動しておく
$ sudo mv ./hubot /var/lib/hubot
発言に対して反応するスクリプトの例
$ vi /var/lib/hubot/scripts/hello.coffee
module.exports = (robot) ->
robot.respond /こんにちは/i, (msg) ->
msg.reply 'こんにちは!'
robot.hear /(失礼|しつれい)(いた|致|)します/i, (msg) ->
msg.send 'お疲れ様でした!'
$ sudo service hubot restart
- robot.hear - 全ての発言に対して反応
- robot.respond - 'hubot 命令' のように話しかけられた時に反応
- msg.send - メッセージを発言
- msg.reply - 話しかけた人に返答する
社内プロキシの設定を読み込ませることが出来ず,外部ネットワークと通信できない Issue #287: Hubot behind a proxy - github/hubot
Issue はあるが解決されず close されている状態
- 多分底辺のライブラリに直接プロキシサーバの設定を埋めればいけるかも?
- Ruby で書いて stdin/stdout でのみやり取りする形でも困らないからそれでも良いのではないか
- 簡単にスクリプトが開発できるようにする(Cakefile のタスクをもっと便利に, あとドキュメント)
- 仕事を Hubot のスクリプト化して仕事を楽にしていきたい