GitHub(nextgroup2706/ken_nogi)は今後使わず自社Gitea運用に切替え。 NodeSrvは旧リポジトリの履歴を破棄しファイルのみ統合(Dokploy用サービスアカウントは 別途mygit-admin/NodeSrv.gitに履歴あり)。notepmエクスポート(12GB)とPleasanter インストーラzip(208MB)はサイズが大きいため.gitignoreで除外。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
4.7 KiB
4.7 KiB
lineworks-board-sync 仕様書
概要
- アプリ名: lineworks-board-sync
- 目的: LINE WORKS の掲示板(Board)から投稿および添付ファイルを取得し、ローカルに保存、必要に応じて外部サービスへアップロード/インデックス化する同期バッチ/APIサービス。
主要機能
- 指定掲示板の投稿一覧取得・投稿詳細取得
- 添付ファイル(PDF/画像等)のダウンロード
- 投稿をMarkdown化してローカルに保存(
board_posts_md/) - 添付ファイルをローカルに保存(
board_attachments/) - アップロード済みハッシュ管理による重複排除(
board-uploaded-hashes.json) - Rate Limit対策(スロットリング、429時のRetry)
- 長文の分割(条文形式の分割 / AI補助分割)
- 完了ファイルを
complete/に退避して再処理を防止 - AnythingLLM 等へのアップロード(オプション)とワークスペースへの埋め込み
動作フロー
- 認証トークンを取得(JWT assertion を用いた OAuth2.0)
- 対象掲示板を取得(
board-list.csvの flag=1 を優先、それ以外は利用可能全掲示板を取得) - 各掲示板について投稿一覧をページネーションで取得
- 各投稿について詳細を取得し、本文をHTML除去してテキスト化
- 重複チェック(投稿ハッシュ) → 未登録なら処理継続
- 添付一覧取得・添付ダウンロード → ローカル保存
- 投稿本文の分割ルールに従いMarkdownファイルに出力
- 必要に応じて外部APIへアップロード、埋め込み処理
- 成功したファイルは
complete/へ移動、ハッシュを保存
API / エンドポイント
/: 簡易応答(JSON: { app: 'lineworks-board-sync', status: 'ok' })/health: ヘルスチェック用(200 OK)
(主処理はCLI/バッチで動作。node lineworks-board-sync.js sync のようなコマンド実行を想定)
環境変数
- LW_CLIENT_ID
- LW_CLIENT_SECRET
- LW_SERVICE_ACCOUNT
- LW_PRIVATE_KEY または LW_PRIVATE_KEY_FILE
- LW_SCOPE (デフォルト: "board board.read")
- LW_REQUEST_DELAY_MS (ミリ秒、既定250)
- LW_MAX_RETRIES (429時の最大リトライ回数)
- ANYTHINGLLM_BASE_URL (任意)
- ANYTHINGLLM_API_KEY (任意)
- ANYTHINGLLM_WORKSPACE_SLUG (任意)
- EMBEDDING_BATCH_SIZE (任意)
- LMSTUDIO_CHAT_URL / LMSTUDIO_MODEL_NAME(AI分割を使う場合)
ディレクトリ構成(主要)
- apps/lineworks-board-sync/
- src/index.js
- package.json
- .env.example
- board-list.csv
- board_posts_md/
- complete/
- board_attachments/
- complete/
- board-uploaded-hashes.json
- SPEC.md
ローカル開発手順
cd apps/lineworks-board-sync
npm install
cp .env.example .env
# 必要な環境変数を .env に設定
npm run dev
# またはバッチ実行
node src/index.js # サーバ起動
# CLI(別スクリプト)
node lineworks-sync.js sync
Docker / 本番デプロイ
Dockerfileによるビルドを想定。Dokployでは Build Path をNodeSrv/apps/lineworks-board-syncに指定し、Port 3000 を合わせる。- 本番環境では
.envを管理画面で設定し、秘密鍵はLW_PRIVATE_KEYに直接入れずLW_PRIVATE_KEY_FILEを使うことを推奨。
レート制御とリトライ
- リクエスト間隔は
LW_REQUEST_DELAY_MSで制御 - 429レスポンス時は Retry-After ヘッダ優先、無ければ指数バックオフで再試行(上限
LW_MAX_RETRIES)
重複制御 / idempotency
- 投稿:
boardId + postId + 更新日時 + タイトル + 本文をSHA256ハッシュ化してboard-uploaded-hashes.jsonに保存 - 添付:
boardId + postId + attachmentIdをハッシュ化して管理
ロギング・監視
- コンソール出力で処理状況を表示。Dokploy環境ではログを集約する仕組みを利用すること。
- 重要な警告・例外は WARN/ERROR レベルで出力
セキュリティ
- 秘密鍵はリポジトリに直書きしない。
LW_PRIVATE_KEY_FILEまたは deploy 環境のシークレット管理を利用。 - 出力ファイルやハッシュファイルは適切なファイルパーミッションを設定すること。
テスト
- 単体: mock を使った API 呼び出しのスタブ化(fetch をモック)
- 結合: 少量の掲示板を対象にしたエンドツーエンドの同期検証
備考 / 今後の拡張
- スケジューラ(cron)連携により定期実行化
- Web UI で同期状況の可視化
- AnythingLLM 以外のアップロード先プラグイン化
作成日時: 2026-07-21