Windows でも Let's Chat で ChatOps
開発内コミュニケーション、どうしてますか? メールでなんてやってられませんよね。というわけでチャットツールの導入についてです。
で、以下のような条件で探したところ Let's Chat が候補に挙がったので導入方法の紹介です。
- クライアントソフトが不要
- Windows でサーバが動かせる
- ログが残せる
- Redmine や Jenkins との連携がある(といいな)
- サーバマシンの起動で自動的に起動する
Let's Chat には以下のような特徴があります。
- BYOS (bring your own server)
- LDAP / Kerberos 認証もサポート
- XMPP Multi-user chat (MUC)
- 複数のルームを作成可能
- デスクトップ通知(やり方わかってません)
- メンション
- 画像の埋め込み
- ファイルアップロード
- Hubot 連携
- REST-like API
- チャットの過去ログが閲覧可能
- MIT ライセンス
インストール
事前準備
まずは下回りとして以下をインストールします。
- Python 2.7
- MongoDB
- Node.js
Python と Node.js は適当にインストーラでインストールするだけなので省略します。
MongoDB のインストールは、MongoDB のインストールドキュメントを参照して、サービス起動できるようにします。
Let's Chat のインストール
https://github.com/sdelements/lets-chat から適当に Releases か Download ZIP なり、git で落とすなりして適当なフォルダに落としておきます。
起動まで
https://github.com/sdelements/lets-chat/wiki/Installation に書いてある通りにnpm install
してnpm start
すればOK・・・と思いきや、Windows ではちょっとトラブルがあるので対応します。具体的にはnpm start
の中で呼ばれる migroose コマンドが、カレントディレクトリにあるmigroose.js とぶつかっていて、node_modules.bin\migroose.cmd を呼びたいのに .\migroose.js を起動してしまうためです。
対策としては、環境変数 PATHEXT を修正するか、package.json を修正するかのどちらかになります。ここでは後者で対応します。
{
"scripts": {
"start": "node app.js",
"prestart": "migroose",
"migrate": "migroose"
}
}
{
"scripts": {
"start": "node app.js",
"prestart": "migroose.cmd",
"migrate": "migroose.cmd"
}
}
これで、npm start
で起動できます。
サービス化
Node.js の Windows でのサービス化って難しいのかと思っていたのですが、実はとても簡単でした。
winser というパッケージを使えば、npm start
するアプリを簡単にサービス化できるみたいです。
サービス化は管理者として実行したコマンドプロンプトでnpm install winser
して、winser -i
するだけで終わりです。これでサービス一覧に lets-chat が並びますので、普通に起動したり、PC の再起動をしたときに Let's Chat が起動するようになります。
インストールの後に
ファイルアップロード
デフォルトでは default.yml でアップロードが禁止されているので、settings.yml を書いて許可します。
files:
enable: true
provider: local
local:
dir: uploads
restrictTypes: false
restrictTypes を無効にしているので、何でもアップロードできるようになります。制限したい場合は、true (か、書かない)にすると defaults.yml に書かれている allowedTypes によって、jpeg/png/gif に制限されます。
それと、settings.ymlでhttp.host: 'localhost' としているので、この行を削除します。(削除しないとlocalhostからしかアクセスできません。
Hubot で各種ツールと連携
Redmine や Subversion、Jenkins といったツールとの連携を、Hubot を使って実現できるみたいです。まだ試してないので、試したら記事にする、かも?
運用面
投稿されたメッセージやアップロードしたファイルがずっと残るような気がします(実際にどうだかは調べてません)。定期的にスクリプトを実行して削除処理をかけないと、容量を食いつぶしてしまうかもしれません。