ken_nogi/ClaudePleasanter/files/.claude/skills/pleasanter-site-spec/SKILL.md
Kenichiro NOGI 88a402ce0f up
2026-07-10 18:13:30 +09:00

10 KiB
Raw Blame History

name description
pleasanter-site-spec Pleasanterのサイト設定JSONget-site-config.js / api-site-get の getsite レスポンスから、SiteSettingsを読み解いたMarkdown仕様書を生成し、Scripts/Styles/ServerScripts/Processesの抽出・編集・反映extract-site-config.js / build-desired-config.js / apply-site-config.jsを行う。「仕様書を作って」「サイト仕様書」「SiteSettingsをドキュメント化」「スクリプトを抜き出して」「プロセス設定を直して反映して」「site-spec」等の依頼で使う。

Pleasanter サイト仕様書生成

./configs/site-{SiteId}_latest.jsongetsite APIレスポンス、Response.Data 配下にサイト情報)を読み解き、 ./configs/site-{SiteId}_spec.md として日本語のMarkdown仕様書を出力する。

入力の特定

  1. ユーザーがJSONファイルパスやSiteIdを指定した場合はそれを使う。
  2. 指定がなければ ./configs/site-*_latest.json を探す。複数ある場合はユーザーに確認する。
  3. ./configs/site-{SiteId}_latest.json が無ければ、先に node get-site-config.js の実行を提案する (エンドポイントは /api/items/{SiteId}/getsite を使うこと。/api/items/{SiteId}/get はアイテム一覧取得APIであり別物なので注意

出力ファイル

./configs/site-{SiteId}_spec.md(既存があれば上書きしてよい)。

仕様書の構成(この順番・見出しレベルを踏襲する)

# サイト仕様書:{Title}SiteId: {SiteId}

- 取得元データ: [site-{SiteId}_latest.json](./site-{SiteId}_latest.json)
- 取得日時: {UpdatedTime}(サイト更新日時)/設定バージョン `Ver: {Ver}`

## 1. サイト基本情報
TenantId, Title, ReferenceType, ParentId, InheritPermission, Publish,
  DisableCrossSearch, Creator/Updator, CreatedTime, SiteSettings.Version を表形式で)

## 2. アクセス権限Permissions
Permissions配列を 種別/対象ID/権限レベル の表に分解。
  「権限値はビットフラグの加算方式のため正確な意味は環境のロール定義に依存する」旨を注記)

## 3. 画面構成
### 3.1 一覧画面GridColumns
GridColumns配列を 順番/列名/表示ラベル の表に。ラベルはColumns配列から解決、
  無ければ「項目種別の判定ルール」のデフォルト名を使う)

### 3.2 編集画面レイアウトEditorColumnHash / Sections
EditorColumnHashの各タブ配列を 順番/項目名(内部名)/ラベル名 の表に。
  `_Section-N` はラベル名欄に「―(セクション「{LabelText}」開始)」と記載。
  続けてSections配列を Id/ラベル/AllowExpand/Expand の表で示す)

### 3.3 タイトル表示TitleColumns / TitleSeparator
TitleColumns配列をTitleSeparatorで連結した式を明記

## 4. 項目定義Columns
Columns配列を 列名(内部)/種別/表示ラベル/説明・入力ガイド/備考 の表に。
  種別は下記「項目種別の判定ルール」で推定。
  備考にはNoWrap, FieldCss, ExtendedHtmlAfterControlの有無などを記載

### 4.1 項目ごとの補足HTMLExtendedHtmlAfterControl
(該当項目があれば 列名/色styleやclassから読み取れれば/内容 の表。無ければこの節は省略)

## 5. 作成・更新権限(フィールド単位)
PermissionForCreating / PermissionForUpdating を表で。無ければ「設定なし」と明記)

## 6. 集計設定Aggregations
存在する場合のみ。Id/GroupBy/Type/Target を表で)

## 7. 他サイト連携Links / ルックアップ)
(存在する場合のみ。起点列/参照先SiteId/参照先の値→自コピー先/JsonFormat を表で。
  「参照先サイトの{From}列の値を、このサイトの{To}列にコピーする」という関係性を文章でも補足)

## 8. プロセス設定Processes
(存在する場合のみ。定義ファイルへのリンク configs/site-{SiteId}_{サイト名}/processes.json を明記した上で、
  Id/Name・DisplayName/実行条件(CurrentStatus→ChangedStatus)/動作(OnClick等)/成功メッセージ を表で)

## 9. スタイルStyles
存在する場合のみ。Id/Title/適用範囲(New/Edit/Index等のフラグ)/ファイルへのリンクを表で。
  CSS本体はMarkdownに貼らず、抽出済みファイルへのリンクのみとする

## 10. スクリプトScriptsサーバースクリプトServerScripts
存在する場合のみ。Id/Title/適用画面/ファイルへのリンクを表で。
  スクリプト本体はMarkdownに貼らず、抽出済みファイルへのリンクのみとする。
  概要は「何をするスクリプトか」を1〜2行で要約。
  本文中にAPIキー・Webhook URL・パスワード等の秘密情報らしき文字列`API_KEY`, `SECRET`, `Bearer `,
  URLに埋め込まれたトークン等を見つけた場合は、値そのものをMarkdownに転記せず、
  「気になる点」に必ずセキュリティ上の指摘として記載する)

## 11. その他設定
NoDisplayIfReadOnly, HideLink, SectionLatestId, 各種ガイド文の設定有無, Commentsの使用有無など

---

## 気になる点(レビュー観点)
(プレースホルダーらしき文言、権限設定の偏り、項目単位の権限の抜け、
  未設定のガイド文など、気づいた点を箇条書きで)

項目種別の判定ルールColumns内 ColumnName のプレフィックスから推定)

プレフィックス/名前 種別
ClassA〜Z 文字列(分類)
Class001〜040等3桁連番 文字列(拡張分類)。Hide: trueの場合が多く、他項目のルックアップ先の値を裏で保持する用途が多い
NumA〜Z 数値
DateA〜Z 日付
DescriptionA〜Z 説明(複数行文字列)
CheckA〜Z チェックボックス
AttachmentsA〜Z 添付ファイル
Owner, Manager, Assignee等 ユーザー選択
Status 状態
{対象}IdResultId, IssueId等 自動採番ID
Title タイトル
Comments コメント欄

注意事項

  • SiteSettingsに存在しない項目・空の設定例: ClassHash, NumHash などのラベル定義ハッシュが {})は 「標準ラベルのまま」として仕様書に明記し、存在しないかのように省略しない。
  • 表形式を基本とし、箇条書きより表を優先する(今回のレビューで「編集画面レイアウトは項目名とラベル名を併記」との 指摘を受けた経緯があるため、内部名とラベル名は必ず併記する)。
  • 出力言語は日本語。

関連ツールScripts/Styles/ServerScripts/Processesの抽出・編集・反映

仕様書化とは別に、「スクリプトを個別ファイルに分けて」「プロセス設定を直して反映して」等の依頼では、 以下のツールチェーンを使う(詳細は README.md 参照)。

  1. node get-site-config.jsconfigs/site-{SiteId}_latest.json を取得し、続けて自動的に抽出も行う extract-site-config.js が内部から呼ばれ、configs/site-{SiteId}_{サイト名}/ に以下を分割保存する。未取得なら先にこれを実行)
    • scripts/{Id}_{Title}.js(クライアントスクリプト本体)
    • styles/{Id}_{Title}.css(スタイル本体)
    • serverscripts/{Id}_{Title}.js(サーバースクリプト本体)
    • html/{GuideName}.htmlGridGuide等のガイドHTML。SiteSettingsではなくサイトデータ直下の項目
    • processes.jsonSiteSettings.Processes の定義ファイル、1ファイルにまとめる。分割しない
    • manifest.json上記ファイルとId/Titleの対応表。再構成に必須
    • 抽出だけをやり直したい場合(latest.jsonは既に取得済み)は node extract-site-config.js を単独実行してもよい
  2. ユーザーの指示に従い、scripts/*.js 等の中身を直接編集する(manifest.json のId/メタ情報は変更しない)。 新規追加の場合は manifest.json に対応エントリ(Idは既存と重複しない値、File名)を追加してからファイルを作成する。
  3. node build-desired-config.js site-{SiteId} … 分割ファイルを再構成し desired_config.json を生成(送信なし)。 フォルダ名はサイト名まで含む正式名(site-{SiteId}_{サイト名})だが、site-{SiteId} の前方一致指定でも configs/配下から自動解決される
  4. node apply-site-config.js … ドライラン確認差分・送信Body・curlコマンド表示のみ、送信なし
  5. 内容をユーザーに確認してもらい、問題なければ表示されたcurlコマンドをユーザー自身が手動実行する

厳守事項(安全設計)

  • apply-site-config.js は常にドライラン。Claude自身がAPIへ実送信することはしない ENABLE_ACTUAL_SEND を有効化する改修や、curlコマンドの代理実行も行わない。 反映の最終実行はユーザー自身に委ねる。
  • build-desired-config.js が作る desired_config.jsonMode:"partial"updatesitesettings)専用。 Scripts/Styles/ServerScripts/Processes以外のサイト設定には触れない。
  • ガイドHTMLhtml/*.html)は updatesitesettings では反映できない(サイト直下の項目のため)。 反映が必要なら Mode:"full"updatesite用の別JSONが要ることをユーザーに伝える。自動生成はしない。
  • 抽出したスクリプト・サーバースクリプトの中に APIキーやWebhook URL等の秘密情報がハードコードされている場合がある (実例あり)。抽出・編集作業でこれらの値を見つけたら、チャット上にそのまま貼り付けず、ユーザーに直接ファイルを確認してもらう。 また configs/ フォルダと config.json.gitignore 済みだが、誤ってコミットしないよう注意喚起する。