/DevHub

プログラマの為の開発支援コミュニケーションツール。作業中メモをリアルタイム共有する。

Primary LanguageJavaScript

DevHub

プログラマの為の開発支援コミュニケーションツール。作業中メモをリアルタイム共有する。

2015-08-19 23 56 39

やりたいこと

  • 開発中に開発メンバとの情報共有を促進したい
  • URLとかをさくっと共有したい
  • ソースの断片とかも気軽に共有したい
  • チャットを書きこんでも緩めに通知したい
  • Jenkins や SVN へのコミットの通知も一元化したい
  • なんか使っていて楽しい感じにしたい
  • みんな一緒に開発していて繋がっている感じを実感したい

いまのところできること

  • リアルタイムチャット(複数部屋)
  • 共有リアルタイムメモ帳(複数枚)
  • メモの履歴差分表示(最新のいくつか)
  • メモのカレンダー表示
  • 外部サービスからの通知API
  • DBへチャット履歴の保存
  • ファイルのドロップによるアップロード(画像は表示される)
  • 共有メモをブログとして保存
  • モバイル対応(フリックによるチャット⇔メモ切り替え)

デモ

http://dev-hub.herokuapp.com/

Deploy

インストール

必要なもの

  • node
  • mongoDB
$ git clone git@github.com:volpe28v/DevHub.git
$ cd DevHub
$ npm install 

起動

$ node app.js -p 3000 -d devhub_db -t title
  • -p ポート番号(default 3000)
  • -d データベース名(default devhub_db)
  • -t タイトル(default '')

Basic認証をかける

$ BASIC_AUTH_USER=user BASIC_AUTH_PASS=pass node app.js -p 3000 -d devhub_db -t title
  • BASIC_AUTH_USER ユーザ名
  • BASIC_AUTH_PASS パスワード

ビルド

jsやcssを変更した場合はビルドが必要

開発向け

$ npm run dev

リリース向け

$ npm run rel

操作ヒント

チャット

  • ユーザ名をクリックで宛先指定
  • 画像、その他ファイルをドロップでアップロード
  • 画像をクリップボードからペーストでアップロード
  • 話題・チームによって部屋を使い分ける(設定から部屋数変更可能)
  • / でキーワード検索モード
  • ユーザ名をShift+クリックで指定ユーザ発言の絞り込み
  • m: でメンション絞り込み。 mo: でメンション+自発言で絞り込み
  • チャットタブのドラッグ&ドロップで並び替え

共有メモ

  • メモ欄の任意の場所をダブルクリックで指定箇所の編集開始
  • 編集中に Ctrl-Enter またはダブルクリックで編集終了
  • MarkDown に一部対応
"#, ##, ###, ####" -> h1, h2, h3, h4
"- [ ]" -> チェックボックス
行末に #red -> 一行色付け
  • 画像、その他ファイルをドロップでアップロード
  • 画像をクリップボードからペーストでアップロード
  • 見出しに日付形式が存在するとカレンダー上にマッピング
## 2016/05/24 凄い機能のリリース
### 5/25 打ち上げ
#### 5/25-27 旅に出る
  • カレンダー上の任意日(複数可)を選択でイベント追加
  • メモタブのドラッグ&ドロップで並び替え

その他記法の詳細はWiki参照

通知

  • チャットメッセージをポップアップでデスクトップ表示
  • Settings にて通知を有効にする

アバター

  • ユーザ名の代わりにお好きなアイコンを表示
  • Settings にてアバターアイコンを設定する

外部連携

Hubot

https://github.com/hashrock/hubot-devhub

Redmine, GitHub, Gitlab, GitBucket

https://github.com/hashrock/DevhubHook

ChromeExtension

DevHubNotifier

  • ログインなしに複数のDevHubからチャット通知を受けられる ChromeExtension.
  • GitHub

汎用通知API

チャットへの通知

  • クエリーとして以下が必須
  • name : サービス名
  • msg : メッセージ
  • avatar : アバター画像URL(省略可能)
  • room_id : 部屋番号(1〜. 省略した場合は1)

Jenkins

  • Post build task プラグインをインストール
  • 以下のスクリプトを実行するようにする
RESULT=`curl ${BUILD_URL}api/xml | perl -le '$_=<>;print [/(.+?)[0]'`
wget http://XXXXX:3000/notify?name=Jenkins&msg="($JOB_NAME): $RESULT"

Subversion

  • hooks/post-commit に以下を記述する
NAME=`svnlook author $REPOS -r $REV | nkf -w`
CHANGE=`svnlook changed $REPOS -r $REV | nkf -w`
LOG=`svnlook log $REPOS -r $REV | nkf -w`
wget http://XXXXX:3000/notify?name=SVN&msg="($NAME): $LOG"

メモへの通知

  • name : サービス名
  • text : 通知テキスト
  • no : メモNo(省略した場合は No.1)
  • line : 行数(省略した場合は先頭)

その他Tips

メニューバーにリンクを追加する

  • よく行くサイトのリンクをDevhubの上部メニューに表示しておくことができる。
  • /lib/menu_links.json を追加する。
[
  {"name": "Google", "url": "https://www.google.co.jp/"},
  {"name": "FaceBook", "url": "https://www.facebook.com/"}
]

部屋名を変更する

チャットから、room_name:部屋名 を打ち込むと部屋名を変更できる。 部屋数は設定から変更可能。

組み込み bot を追加する

/lib/bots 配下に js ファイルを追加する。実装例は david.js を参照。

var util = require('../util');
module.exports.action = function(data, callback){
  if (data.msg.match(/David/i)){ //自分の名前が呼ばれたら
    // 返答を生成
    var reply = {
      name: "David",
      date: util.getFullDate(new Date()),
      msg: "@" + data.name + "さん ん、なんか用かい? 俺は今ホームパーティーで忙しいんだ。出来れば後にしてくれないか。"
    };

    // 1秒後に返答する
    setTimeout(function(){
      callback(reply);
    },1000);
  }
};

License

(The MIT License)

Copyright (c) 2012 Naoki KODAMA naoki.koda@gmail.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.