生JSON取得(siteSettingJsons/)と設定分解(configs/)の保存先を分離し、 仕様書・概要書はClaudeが読み解いて執筆する方式に統一(機械生成の generate-site-documentation.jsは不使用)。10サイト分のspec.md/ overview.mdを刷新し、サイト間連携をまとめたsite-relations_overview.md を新規追加、全docsをPDF化した。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
9.6 KiB
9.6 KiB
プリザンター サイト構成 取得・レビュー・反映ツール
全体の流れ
① 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 という
機械的なテンプレート処理での一括自動生成を試みましたが、サイト間の暗黙的な関連や業務的な類推までは反映できず
品質面の問題があったため、現在のワークフローでは使用していません(ファイル自体は後方互換のため削除せず残置)。
初回セットアップ
config.example.jsonをconfig.jsonにコピーBaseUrl/SiteId/ApiKeyを実環境の値に書き換えSiteIdは単一サイトなら数値(例:12345)、複数サイトをまとめて取得したい場合は カンマ区切りの文字列(例:"12345,23456,34567")で指定できます- APIキーの発行方法: https://pleasanter.org/manual/api-key
- APIキー発行にはテナント管理者権限が必要です(サイト設定の更新系APIを使う場合)
- 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}/getsitehttps://pleasanter.org/ja/manual/api-site-get (※/api/items/{SiteId}/getはアイテム一覧取得APIであり別物) - サイト全体更新:
POST {BaseUrl}/api/items/{SiteId}/updatesitehttps://pleasanter.org/manual/api-site-update - サイト設定部分更新:
POST {BaseUrl}/api/items/{SiteId}/updatesitesettingshttps://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等になります)。