Zidooka

ChatWorkをLLMパイプラインに統合できるCLIツールを作りました

※ この記事の内容について、業務・開発上お困りの場合は個別に対応できます(5,000円〜)。

著者: 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"

トークンの優先順位は以下の通りです。複数設定している場合、上から順に評価されます。

  1. –token コマンドライン引数
  2. CHATWORK_API_TOKEN 環境変数
  3. CHATWORK_TOKEN 環境変数(後方互換)
  4. –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": "元の本文(比較・デバッグ用)"
}

bodyrawBody を両方保持することで、必要に応じて元の形式も参照できます。

柔軟な時間指定

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ツールとの連携が容易になります。ぜひ実際に試してみてください。

参考リンク

Zidooka
Zidooka

この記事の内容、60分で一緒に解決できます。

「詰まって進めない」「社内で対応できない」など、状況を聞いて最短ルートを提案します。

初回5,000円〜/事前見積りで安心。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

あわせて読みたい記事