ken_nogi/ClaudePleasanter/MSS回覧板システム/.claude/skills/pleasanter-site-spec/SKILL.md
Kenichiro NOGI 88a402ce0f up
2026-07-10 18:13:30 +09:00

15 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を行う。また、技術仕様書とは別に業務担当者向けの概要書docs/site-{SiteId}_overview.mdを作成し、md-to-pdf.jsでPDF化する。「仕様書を作って」「サイト仕様書」「SiteSettingsをドキュメント化」「スクリプトを抜き出して」「プロセス設定を直して反映して」「概要書を作って」「PDFにして」「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 などのラベル定義ハッシュが {})は 「標準ラベルのまま」として仕様書に明記し、存在しないかのように省略しない。
  • 表形式を基本とし、箇条書きより表を優先する(今回のレビューで「編集画面レイアウトは項目名とラベル名を併記」との 指摘を受けた経緯があるため、内部名とラベル名は必ず併記する)。
  • 出力言語は日本語。
  • 複数サイトが関連する仕様書(「関連するテーブルと合わせて」等の依頼)を作る場合は、対象サイトのLinks設定だけでなく、 ServerScripts内でitems.Get(masterTableId)のように直接SiteIdをハードコードして参照している「正式なLinks設定に現れない 暗黙的なテーブル参照」も洗い出し、別セクションとして明記する。あわせてParentIdを辿ってサイトツリー上の位置関係も 簡潔に図示するとレビューしやすい。

概要書(業務担当者向け機能説明)の生成

技術仕様書spec.mdとは別に、「概要書を作って」「機能的な説明がほしい」等の依頼があった場合は、 ColumnNameClassA, DateB, Class001等の内部コードやJSON設定値・スクリプト実装といった技術的要素を一切排除し、 ラベル名と業務フローのみで構成した概要書を作成する。

出力ファイル

./docs/site-{SiteId}_overview.mdconfigs/ではなくdocs/フォルダに置く。configs/は秘密情報を含み得るため .gitignore済みだが、docs/配下の概要書・PDFは共有物としてGit管理対象にする想定docs/フォルダが無ければ作成する。

概要書の構成

# 概要書:{Title}

- 技術仕様(項目のシステム上の名称・設定値等)は [{spec.mdへのリンク}](../configs/site-{SiteId}_spec.md) を参照。
  本書は業務担当者向けに、機能面のみを平易に説明するものです。

## 1. これは何か
業務的にこのサイトが何のためのものかを2〜4文で

## 2. 登場する情報(入力項目)
(分類/項目(ラベル名のみ)/内容 の表。ColumnNameは記載しない。Hide項目でも
  業務上意味のあるもの(自動反映される裏項目等)は「内容」欄で触れる)

## 3. 業務の流れ(ボタン操作)
(操作/状態の変化(ラベル値同士、例:「新規作成→図確回覧」)/説明 の表。
  Processesの内部処理・スクリプト名には触れず、「何が起きるか」を業務言葉で説明する

## 4. 通知される場面
Notificationsを「◯◯時に誰に何が届くか」という箇条書きに変換。メール本文・件名の技術的書式は転記しない

## 5. 関連する仕組み(マスタ連携)
Links・暗黙的テーブル参照を「◯◯マスタ何を自動反映するか」という業務目線の箇条書きに変換。
  SiteIdやColumnNameは書かず、サイト名Titleとその役割のみ記載。
  兄弟サイト同じ設計パターンの別サイトがあれば、違いを1文で触れる

作成時の注意

  • 表内の「項目」列は必ずラベル名LabelTextのみ。ラベル未設定の項目は概要書には載せない業務上意味を説明できないため
  • Statusの遷移は内部コード100/300/900等を書かず、ラベル値新規作成完了 等)同士の矢印で表現する。
  • スクリプト内で見つけた秘密情報APIキー等は概要書には一切転記しないそもそも概要書はスクリプト実装に触れない
  • 複数サイト分をまとめて依頼された場合、共通する業務フローは重複して書いてよいが、各サイト固有の違い(段階数の違い、 追加の管理項目など)を各概要書の末尾で明示し、他サイトとの差分が一目で分かるようにする。

PDF化

概要書または他のMarkdownをPDF化する依頼があった場合は、プロジェクトルートの md-to-pdf.js を使う。

node md-to-pdf.js ./docs/site-{SiteId}_overview.md
  • 追加npmパッケージ非依存本プロジェクトにpackage.jsonが無いことに合わせた設計。Markdown→HTML変換は スクリプト内の簡易パーサ(見出し/表/太字/リンク/箇条書き/水平線/段落で行い、PDF化はOS標準のMicrosoft Edge 無ければGoogle Chromeのヘッドレス印刷機能を使う。
  • 出力は入力と同じフォルダに{同名}.pdf中間HTMLは一時フォルダに作成し、変換後に自動削除
  • 複数ファイルを一度に渡せる(node md-to-pdf.js ./docs/*.md)。
  • 既知の落とし穴: フォルダパスに#を含む場合(例: #GitHub)、素朴にfile:// + パス文字列を連結すると #以降がURLフラグメントと誤認識され、無関係なページが開かれてPDFの中身が空別物になる。 md-to-pdf.jsurl.pathToFileURL()で正しくエンコードしているため通常は問題にならないが、 同種のブラウザ自動化コードを新たに書く場合は同じ罠に注意する。

関連ツール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 済みだが、誤ってコミットしないよう注意喚起する。