# プリザンター サイト構成 取得・レビュー・反映ツール ## 全体の流れ ``` ① node get-site-config.js → siteSettingJsons/site-{SiteId}_latest.json に構成(生JSON)を保存 → 続けて自動的に extract-site-config.js が実行され、 Scripts / Styles / ServerScripts / Processes / ガイドHTML が configs/site-{SiteId}_{サイト名}/ 配下に個別ファイルとして分割保存される → config.json の SiteId をカンマ区切りにすると、複数サイトをまとめて①の処理でループ取得する ② Claudeに「仕様書を作って」と依頼 → siteSettingJsons/site-{SiteId}_latest.json と configs/site-{SiteId}_{サイト名}/ を Claudeが読み解き、docs/site-{SiteId}_{サイト名}_spec.md として仕様書化 (機械的なテンプレート処理ではなく、Claudeが構成内容をレビューしながら執筆する) ③ configs/site-{SiteId}_{サイト名}/ 配下のファイルを直接編集、 またはClaudeに「このスクリプトを◯◯に直して」等と修正を指示 ④ node build-desired-config.js site-{SiteId} → 分割ファイルを再構成し、desired_config.json を生成(送信は行わない) ⑤ node apply-site-config.js → 実際には送信せず、差分・送信予定Body・curlコマンドのみ表示(常にドライラン) ⑥ 内容を確認し、問題なければ表示されたcurlコマンドを手動実行 --- (任意:非エンジニア向けドキュメントが必要な場合) --- ⑦ Claudeに「概要書を作って」と依頼 → 技術仕様書とは別に、ColumnName等の内部コードを含まない業務向け概要書を docs/site-{SiteId}_{サイト名}_overview.md として生成(siteSettingJsons/・configs/とは異なりGit管理対象) ⑧ 複数サイトが連携する場合、Claudeに「全体の関連図を作って」と依頼 → docs/site-relations_overview.md として、サイトツリー・明示的連携(Links)・ 暗黙的連携(ServerScriptsのハードコード参照)を1枚にまとめたドキュメントを生成 ⑨ node md-to-pdf.js ./docs/*.md → docs/ 配下の全Markdown(spec.md / overview.md / site-relations_overview.md)を 同名の .pdf に一括変換 ``` `extract-site-config.js` は `node get-site-config.js` の中から自動実行されるため、通常は個別に実行する必要はありません (取得済みの `latest.json` から抽出をやり直したい場合のみ、単独で `node extract-site-config.js` を実行してください)。 仕様書・概要書(②⑦⑧)はClaudeが対話的に読み解いて執筆するものです。過去に `generate-site-documentation.js` という 機械的なテンプレート処理での一括自動生成を試みましたが、サイト間の暗黙的な関連や業務的な類推までは反映できず 品質面の問題があったため、**現在のワークフローでは使用していません**(ファイル自体は後方互換のため削除せず残置)。 ## 初回セットアップ 1. `config.example.json` を `config.json` にコピー 2. `BaseUrl` / `SiteId` / `ApiKey` を実環境の値に書き換え - `SiteId` は単一サイトなら数値(例: `12345`)、複数サイトをまとめて取得したい場合は カンマ区切りの文字列(例: `"12345,23456,34567"`)で指定できます - APIキーの発行方法: https://pleasanter.org/manual/api-key - APIキー発行にはテナント管理者権限が必要です(サイト設定の更新系APIを使う場合) 3. Node.js 18以降がインストールされていることを確認(組み込みfetchを使用、追加パッケージ不要) ## ファイル構成 | ファイル | 役割 | |---|---| | `config.json` | 接続情報(BaseUrl/SiteId/ApiKey)※Git管理・共有厳禁 | | `config.example.json` | 上記のテンプレート | | `get-site-config.js` | サイト構成取得(`getsite`) → `siteSettingJsons/site-{SiteId}_latest.json` に保存し、続けて `extract-site-config.js` を自動実行。`SiteId` をカンマ区切りにすると全サイトを1回の実行で順次取得 | | `extract-site-config.js` | `latest.json` から Scripts/Styles/ServerScripts/Processes/ガイドHTML を `configs/site-{SiteId}_{サイト名}/` に個別ファイル分割(`get-site-config.js` から自動呼び出し、または単独実行も可) | | `build-desired-config.js` | 分割ファイルを再構成し `desired_config.json` を生成(**送信は行わない**) | | `apply-site-config.js` | 希望構成JSONとの差分表示・送信内容確認(**送信は行わない**) | | `generate-site-documentation.js` | **未使用(レガシー)**。仕様書・概要書を機械的なテンプレート処理で一括自動生成する旧スクリプト。品質面の問題から現在のワークフローでは使用しない。後方互換のため削除はしていない | | `md-to-pdf.js` | Markdownファイルを同名の`.pdf`に変換(追加npmパッケージ非依存、OS標準のEdge/Chromeヘッドレス印刷を利用) | | `desired_config.json` | Claude、または `build-desired-config.js` が生成する「希望構成」 | | `siteSettingJsons/site-{SiteId}_latest.json` | 直近取得した現状構成の生JSON(Claudeへのアップロード対象。`.gitignore`対象) | | `configs/site-{SiteId}_{サイト名}/manifest.json` | 分割ファイルの一覧(Id/Title/ファイル名の対応表) | | `configs/site-{SiteId}_{サイト名}/scripts/*.js` | クライアントスクリプト本体(1ファイル=1スクリプト) | | `configs/site-{SiteId}_{サイト名}/styles/*.css` | スタイル本体 | | `configs/site-{SiteId}_{サイト名}/serverscripts/*.js` | サーバースクリプト本体 | | `configs/site-{SiteId}_{サイト名}/html/*.html` | ガイドHTML(GridGuide等。値が空でないもののみ) | | `configs/site-{SiteId}_{サイト名}/processes.json` | プロセス設定(`SiteSettings.Processes` の定義ファイル) | | `docs/site-{SiteId}_{サイト名}_spec.md` | SiteSettingsを読み解いたMarkdown技術仕様書(Claudeが執筆。Git管理対象) | | `docs/site-{SiteId}_{サイト名}_overview.md` | 業務担当者向けの概要書(ColumnName等の内部コードを含まない機能説明。Git管理対象) | | `docs/site-relations_overview.md` | 複数サイトの全体関連図(サイトツリー・明示的/暗黙的連携をまとめたもの。Git管理対象) | | `docs/*.pdf` | 上記各Markdownに対応するPDF版 | ## Scripts/Styles/ServerScripts/Processes の反映について - `build-desired-config.js` が生成する `desired_config.json` は `Mode:"partial"`(`updatesitesettings`)です。 Scripts / Styles / ServerScripts / Processes の4項目のみを対象とし、それ以外のサイト設定(GridColumns等)には触れません。 - ガイドHTML(`html/*.html`)はSiteSettingsではなく**サイトデータ直下**の項目のため、`updatesitesettings` では反映できません。 反映したい場合は `Mode:"full"`(`updatesite`)用の別の `desired_config.json` を用意し、`Title`/`ReferenceType` 等の必須項目とあわせて指定してください。 - 抽出(`extract-site-config.js`)はその時点のスナップショットです。抽出後に元サイトが他の人・画面から変更されている可能性がある場合は、 反映前に `node get-site-config.js` → `node extract-site-config.js` を再実行し、最新状態を取り直してから編集してください。 ## 参照した公式API仕様 - サイト情報取得: `POST {BaseUrl}/api/items/{SiteId}/getsite` https://pleasanter.org/ja/manual/api-site-get (※ `/api/items/{SiteId}/get` はアイテム一覧取得APIであり別物) - サイト全体更新: `POST {BaseUrl}/api/items/{SiteId}/updatesite` https://pleasanter.org/manual/api-site-update - サイト設定部分更新: `POST {BaseUrl}/api/items/{SiteId}/updatesitesettings` https://pleasanter.org/ja/manual/api-update-sitesettings ## 安全設計について - `apply-site-config.js` は **常にドライラン** です。デフォルトでは実際のAPI呼び出しコード自体に到達しないようガード(`ENABLE_ACTUAL_SEND = false` 固定)しています。 - 反映する際は、表示されたcurlコマンドをご自身で実行するか、内容を確認の上でスクリプトを改修してください(Claudeが安全策なしに自動実行することはありません)。 - APIキーは `config.json` にのみ保持し、Claudeにアップロードする `latest.json` には含まれません(get時のレスポンスにAPIキーは含まれないため)。念のためアップロード前に目視確認することをおすすめします。 - `siteSettingJsons/` と `configs/` はいずれもScripts/ServerScripts本文に秘密情報がハードコードされている場合があるため `.gitignore` 対象です。`docs/` 配下の仕様書・概要書・PDFのみがGit管理対象です。 ## 注意事項 - プリザンターのバージョンにより `get` レスポンスの構造(`Response.Site.SiteSettings` の位置など)が異なる場合があります。初回実行時にコンソールへ出力されるキー構造を確認してください。 - サイト設定の更新系APIは **テナント管理者権限のAPIキー** が必要です(一般ユーザーのAPIキーでは403等になります)。