著者: Zidooka | ソースコード: https://github.com/Zidooka-dev/LLM-ChatWork-Reader-Writer
ChatWorkは日本のビジネス現場で広く使われていますが、APIを活用した自動化には独自の知識が必要でした。今回ご紹介する LLM-ChatWork-Reader-Writer は、私が開発・公開したCLIツールで、ChatWorkのメッセージをLLMフレンドリーな形式で読み書きできます。
リポジトリは https://github.com/Zidooka-dev/LLM-ChatWork-Reader-Writer で公開しています。
このツールでできること
ChatWork APIのラッパーとしてだけでなく、LLMパイプラインに最適化されたデータ処理を実装しています。
ChatWork特有のタグを自動除去し、構造化されたJSON出力を提供することで、後続の処理がしやすくなっています。
主な機能
なぜLLMパイプライン向けなのか
既存のChatWorkクライアントとの違いを整理しました。
通常のChatWorkクライアントでは難しい処理が、このツールでは簡単に実現できます。
たとえば、昨日以降のメッセージを取得して特定のキーワードでフィルタリングし、Claudeに要約させるパイプラインが構築できます。
インストール方法
# リポジトリをクローン
git clone https://github.com/Zidooka-dev/LLM-ChatWork-Reader-Writer.git
cd LLM-ChatWork-Reader-Writer
# 依存パッケージをインストール
npm install
APIトークンの設定
ChatWork APIトークンを環境変数に設定します。
$env:CHATWORK_API_TOKEN = "YOUR_API_TOKEN"
トークンの優先順位は以下の通りです。複数設定している場合、上から順に評価されます。
- –token コマンドライン引数
- CHATWORK_API_TOKEN 環境変数
- CHATWORK_TOKEN 環境変数(後方互換)
- –env-file で指定したファイル
基本的な使い方
アカウント情報の確認
node src/cli.mjs me
ルーム一覧の取得
# すべてのルームを表示
node src/cli.mjs rooms
# 特定のキーワードを含むルームを検索(JSON出力)
node src/cli.mjs rooms --contains support --json
メッセージの読み込み
# 特定ルームのメッセージを取得
node src/cli.mjs read --room 123456
# 最新50件、特定日以降のメッセージをJSONで出力
node src/cli.mjs read --room 123456 --limit 50 --since 2026-02-01 --json
# JSON Lines形式で出力(パイプライン処理向け)
node src/cli.mjs read --room 123456 --jsonl --strip-tags
メッセージの投稿
# 直接メッセージを投稿
node src/cli.mjs write --room 123456 --message "Daily report done."
# ファイルからメッセージを読み込んで投稿
node src/cli.mjs write --room 123456 --file ./message.txt --to 111,222
# パイプラインからメッセージを受け取って投稿
echo "Generated by LLM" | node src/cli.mjs write --room 123456
# リプライ形式で投稿
node src/cli.mjs write --room 123456 --message "Thanks." --reply-account 111 --reply-message 999999
実用的なユースケース
1. LLMによる会議の要約
昨日以降のメッセージを取得してClaudeに要約させます。
node src/cli.mjs read --room 123456 --since yesterday --strip-tags --jsonl | `
jq -r '.body' | `
claude --system "以下のChatWorkの会話を要約してください"
2. 特定キーワードの監視と通知
「緊急」を含むメッセージを検出して別ルームに通知します。
node src/cli.mjs read --room 123456 --jsonl | `
jq 'select(.body | contains("緊急"))' | `
node src/cli.mjs write --room 999999 --file /dev/stdin
3. 定期的なレポート自動投稿
日次レポートを生成して自動投稿します。
./generate-daily-report.sh | node src/cli.mjs write --room 123456
技術的なポイント
タグ除去の実装
ChatWorkのメッセージには以下のようなタグが含まれます。
[To:123456789] 山田さん
[rp aid=123 to=987654321-111]
[info][title]重要なお知らせ[/title]
内容です
[/info]
–strip-tags オプションを使用すると、これらのタグが自動で除去されます。
出力データの正規化
取得したメッセージは統一されたスキーマに変換されます。
{
"roomId": "123456",
"messageId": "987654321",
"sendTimeUnix": 1700000000,
"sendTimeIso": "2023-11-14T22:13:20.000Z",
"accountId": 123456789,
"accountName": "山田太郎",
"body": "加工後の本文",
"rawBody": "元の本文(比較・デバッグ用)"
}
body と rawBody を両方保持することで、必要に応じて元の形式も参照できます。
柔軟な時間指定
Unix時間だけでなく、人間が読みやすい形式も受け付けます。
# Unix時間
node src/cli.mjs read --room 123456 --since 1700000000
# 日付
node src/cli.mjs read --room 123456 --since 2026-02-01
# ISO8601
node src/cli.mjs read --room 123456 --since 2026-02-01T00:00:00Z
dry-runモード
本番投稿前に内容を確認できます。
node src/cli.mjs write `
--room 123456 `
--message "テスト" `
--to 111,222 `
--dry-run
出力:
[To:111]
[To:222]
テスト
まとめ
LLM-ChatWork-Reader-Writerは、ChatWorkのデータをLLMパイプラインに統合したい開発者に最適なツールです。
ChatWork特有のタグを除去し、構造化されたJSONを出力することで、jqやClaudeなどの標準的なCLIツールとの連携が容易になります。ぜひ実際に試してみてください。