Windows でも Let's Chat で ChatOps

  • 32
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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 を修正するかのどちらかになります。ここでは後者で対応します。

package.json修正前(関係あるものだけ)
{
  "scripts": {
    "start": "node app.js",
    "prestart": "migroose",
    "migrate": "migroose"
  }
}
package.json修正後(関係あるものだけ)
{
  "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 を書いて許可します。
yaml: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 を使って実現できるみたいです。まだ試してないので、試したら記事にする、かも?

運用面

投稿されたメッセージやアップロードしたファイルがずっと残るような気がします(実際にどうだかは調べてません)。定期的にスクリプトを実行して削除処理をかけないと、容量を食いつぶしてしまうかもしれません。