前置き
前回に続き、PleasanterのAI活用の実践例を紹介します。
やりたいこと
AI(ChatGPT/有料版)に 業務要件のみ を伝え、Pleasanterのテーブルを生成 してもらいます。
どうやるか
2025年12月時点で、PleasanterにはAIによるテーブル生成機能はありません。
そこで今回は、サイトパッケージを軸にアプローチしてみます。
サイトパッケージには、テーブルを構成するための設定情報が含まれています。テーブルを複製する目的などで
既存サイト → エクスポート → 別環境へインポート
という使い方が一般的です。
しかし、仕様を理解していれば、
業務要件 → サイトパッケージ(JSON)を直接生成 → Pleasanter にインポート
というフローも可能なはずです。
そこで今回の方針は:
サイトパッケージの仕様を ChatGPT に学習させ、業務要件からサイトパッケージを自動生成させる
というものです。
補足:
サイトパッケージの仕様はかなり複雑です。公開されている情報だけでは把握しきれない部分も多く、「この指定は受け付けるが、こちらの書き方だとエラーになる」といったグレーゾーンも少なくありません。今回紹介する方法も、あくまで今回の検証環境で確認できたパターンの一例だと捉えていただければと思います。
プロンプトの準備
まずはサイトパッケージの仕様を整理し、ChatGPT に与えるプロンプトを作ります。
…とはいえ、Pleasanter のテーブル設定項目は膨大です。すべてを扱うのは現実的でないため、今回のスコープは 画面項目の定義・並び・レイアウトに絞りました。
こだわったポイントは以下。
これらを理解したうえで項目レイアウトしてもらうことを目指します。
以下が今回準備したプロンプトです。(力作・長いです)
# サイトパッケージ仕様整理
## サイトパッケージとは
プリザンターのテーブル設定情報をまとめてjson形式のテキストファイルに落としたもの。同じテーブルの設定を別のところへコピーして使いたい場合、サイトパッケージのエクスポート→インポートでテーブルを複製できる。
## サイトパッケージの形式
- json形式
# サイトパッケージ編集に必要なプリザンターの前提情報
## テーブルの種類
|種類|概要|
|:--|:--|
|期限付きテーブル|タスク管理など期限を管理するためのテーブル|
|記録テーブル|期限管理のない、情報を管理・共有するためのテーブル|
## 基本的な画面構成
### 一覧画面
テーブルに登録済のデータを一覧・表形式で表示する。
~~画面イメージ~~
### 編集画面
一覧画面から編集したいデータをクリックすると編集画面へ遷移する。入力フォームの形で、データを入力・更新できる。
~~画面イメージ~~
## 項目について
### 基本項目
|項目ID|項目名|内容|期限付きテーブル|記録テーブル|
|:--|:--|:--|:-:|:-:|
|ResultId|「ID項目」| 記録レコードの一意なID | | ✓ |
|IssueId|「ID項目」| 期限付きレコードの一意なID | ✓ | |
|Ver|「バージョン項目」| レコードのバージョン番号 | ✓ | ✓ |
|Title|「タイトル項目」| レコードを識別するための文字列 | ✓ | ✓ |
|Body|「内容項目」|レコードの内容を示す文字列 | ✓ | ✓ |
|StartTime|「開始項目」|作業の開始を示す日時 |✓| |
|CompletionTime|「完了項目」|作業の期限を示す日時 |✓| |
|WorkValue|「作業量項目」| 作業の量を示す数値 |✓| |
|ProgressRate|「進捗率項目」| 作業の進捗率(0~100%)を示す数値|✓||
|RemainingWorkValue|「残作業量項目」|作業量と進捗率から自動計算される数値|✓||
|Status|「状況項目」|作業の状況(ステータス)を示す数値|✓|✓|
|Manager|「管理者項目」| 作業の管理者であるユーザ|✓|✓|
|Owner|「担当者項目」| 作業の担当者であるユーザ|✓|✓|
|Lock|「ロック項目」| レコードへの書き込み禁止スイッチ|✓|✓|
|Comments|「コメント項目」|レコードに対するコメントを示すフリーテキスト|✓|✓|
|Creator|「作成者項目」| レコードの作成者であるユーザ|✓ |✓|
|Updator|「更新者項目」| レコードの更新者であるユーザ|✓ |✓|
|CreatedTime|「作成日時項目」|レコードの作成日時|✓|✓|
|UpdatedTime|「更新日時項目」|レコードの更新日時|✓|✓|
※チェック(✓)がついているテーブルで使用可能
### 基本項目以外
|項目ID|項目名|内容|期限付きテーブル|記録テーブル|
|:--|:--|:--|:-:|:-:|
|ClassX|分類X|フリーテキスト形式、もしくは選択形式の入力項目|✓|✓|
|NumX|数値X|フリーテキストで数値を入力可能な入力項目|✓|✓|
|DateX|日付X|フリーテキストまたはカレンダーから日付と時刻を入力可能な入力項目|✓|✓|
|CheckX|チェックX|チェックボックスの入力項目|✓|✓|
|DescriptionX|説明X|フリーテキストで複数行にわたる文字を入力可能、また、マークダウンやリッチテキスト形式での入力、画像の貼り付けが可能のな入力項目|✓|✓|
|AttachmentsX|添付ファイルX|添付ファイルをアップロード/ダウンロード可能な入力項目|✓|✓|
※各項目の「X」には、A~Zまでの値が設定され、1テーブルあたり・項目ごとにそれぞれ最大26個まで使用可能。
※チェック(✓)がついているテーブルで使用可能
### 付加要素
|種類|概要|
|:--|:--|
|見出し|画面入力のわかりやすさを目的とし、セクションで項目配置を分割・整理する|
|タブ|画面にタブを追加し、項目を複数ページに振り分け整理する|
~~見出しの画面イメージ~~
~~タブの画面イメージ~~
# サイトパッケージに設定されるパラメータ
## Sites.Title
- テーブル名称を業務に合わせわかりやすく指定する。
## Sites.SiteSettings.GridColumns
- 一覧画面に表示される項目を文字列の配列で指定する
## Sites.SiteSettings.EditorColumnHash
- 編集画面に表示される項目を定義する
|EditorColumnHash以下のパラメータ|概要||
|:--|:--|:--|
|General|編集画面の「全般」タブに表示する項目を文字列の配列で指定する、見出しを指定したい場合は指定する|
|_Tab-X|編集画面に任意で追加したタブに表示する項目を文字列の配列で指定する、見出しを指定したい場合は指定する、XはタブのIDが設定される、詳細は後述|
|Tabs|タブの設定を指定する、詳細は後述|
|TabLatestId|タブの設定に関するID、詳細は後述|
|Sections|見出しの設定を指定する、詳細は後述|
|SectionLatestId|セクションの設定に関するID、詳細は後述||
### タブについて
- EditorColumnHash.Tabs以下にオブジェクト配列で指定する
#### パラメータ
|パラメータ|概要|
|:--|:--|
|Id|Tabs内でユニークなID|
|LabelText|タブに表示する文字列|
#### TabLatestIdについて
Tabsの中でIDの最大値を指定する
#### _Tab-Xについて
Tabsに指定したIDを指定する
### 見出しについて
- EditorColumnHash.Sections以下にオブジェクト配列で指定する
#### パラメータ
|パラメータ|概要|
|:--|:--|
|Id|Sections内でユニークなID|
|LabelText|見出しに表示する文字列|
|AllowExpand|見出しの折り畳みを許可する場合はtrue、しな場合はfalseを指定|
|Expand|見出しの折り畳みを許可した上で、初期状態を閉じたい場合、false、開く場合はtrueを指定|
#### SectionLatestIdについて
Sectionsの中でIDの最大値を指定する
#### 編集画面への反映について
- EditorColumnHash.General、EditorColumnHash._Tab-Xの文字列配列の中で、各見出しを挿入したい位置に以下の要件で設定する
|設定値|概要|
|:--|:--|
|_Section-X|XはSectionsで指定したID|
## Sites.SiteSettings.Columns
- 画面表示項目の詳細を設定する
|パラメータ|概要|備考|
|:--|:--|:--|
|ColumnName|項目IDを指定||
|LabelText|画面表示名を指定||
|ChoicesText|選択形式の場合、選択肢を設定|設定要領は前述のとおり、設定可能な項目は、状況項目、分類項目のみ|
|FieldCss|ワイドスタイルを適用したい場合、"field-wide"を指定する|
|NoWrap|ノーマルスタイルの項目を強制的に改行表示させたい場合、"true"を指定する|
### 選択形式の入力項目
#### 分類Xへの設定
分類Xの項目は選択形式の選択肢を任意で設定可能。サイトパッケージへの設定方法は、以下のとおり
|対象パラメータ|設定例|概要|
|:--|:--|:--|
|Sites.SiteSettings.Columns|"リンゴ\nメロン\nスイカ"|リンゴ、メロン、スイカが選択肢としてプルダウンに設定される|
#### 状況項目への設定
状況項目については特殊で、以下のように設定される。
"100,未着手1,未,status-new\n150,準備,準,status-preparation\n200,実施中,実,status-inprogress\n300,レビュー,レ,status-review\n900,完了,完,status-closed\n910,保留,留,status-rejected"
要件は以下のとおり
- 上記はデフォルト値で特段設定をしない場合、適用される
- 改行コード(\n)までが1つの選択肢情報として扱われる
- カンマ区切りでそれぞれ意味があり詳細は以下表のとおり
- 値、表示名、短縮名は任意で変更可能
- システムとして900以上は完了、未満は未完了として扱われる
|No|値|表示名|短縮名|スタイル|
|:----|:----|:----|:----|:----|
|1|100|未着手|未|status-new|
|2|150|準備|準|status-preparation|
|3|200|実施中|実|status-inprogress|
|4|300|レビュー|レ|status-review|
|5|900|完了|完|status-closed|
|6|910|保留|留|status-rejected|
※他機能とも連動し、システム的な制御がかかるため、重要な状況管理にはこの状況項目を利用することを推奨
## 画面レイアウト
### 画面項目のスタイル
各画面入力項目のスタイルは、ノーマルとワイドがあり、各項目の対応は以下のとおり
|項目ID|項目名|ノーマルワイド|
|:--|:--|:--|
|ResultId|ID項目|ノーマル|
|IssueId|ID項目|ノーマル|
|Ver|バージョン項目|ノーマル|
|Title|タイトル項目|ワイド|
|Body|内容項目|ワイド|
|StartTime|開始項目|ノーマル|
|CompletionTime|完了項目|ノーマル|
|WorkValue|作業量項目|ノーマル|
|ProgressRate|進捗率項目|ノーマル|
|RemainingWorkValue|残作業量項目|ノーマル|
|Status|状況項目|ノーマル|
|Manager|管理者項目|ノーマル|
|Owner|担当者項目|ノーマル|
|Lock|ロック項目|ノーマル|
|Comments|コメント項目|その他|
|Creator|作成者項目|その他|
|Updator|更新者項目|その他|
|CreatedTime|作成日時項目|ノーマル|
|UpdatedTime|更新日時項目|ノーマル|
|ClassX|分類X|FieldCssで指定、未設定の場合ノーマル|
|NumX|数値X|FieldCssで指定、未設定の場合ノーマル|
|DateX|日付X|FieldCssで指定、未設定の場合ノーマル|
|CheckX|チェックX|FieldCssで指定、未設定の場合ノーマル|
|DescriptionX|説明X|ワイド|
|AttachmentsX|添付ファイルX|ワイド|
※「その他」については専用のエリアに表示されるため考慮不要
### 項目のスタイルを前提とした画面レイアウト配置
前述のスタイルの上で、
- ノーマルスタイル
入力フォームエリアの左上から右下にかけて並ぶ
並ぶ数はブラウザのサイズに合わせて可変・改行する、"NoWrap": trueが指定されている場合は、その項目から強制的に改行する
- ワイドスタイル
1行で入力フォームエリアいっぱいに表示
そのうえで、General、_Tab-Xに指定したタブに対し、配列の順番で画面上に配置される、見出しも指定した順番で挿入される
~~画面イメージ~~
また、レイアウトは文章だけでは伝わりにくいため、画面イメージ もプロンプトに添付しました。
あわせて、実際のサイトパッケージ JSONも読み込ませています。
プロンプトのチェック
作成したプロンプト・サンプル JSON・画面イメージをチャットに投げ、ChatGPT に「これで要件は伝わるか?」をレビューしてもらいます。
以下回答
仕様とサンプルサイトパッケージで不整合があったようです。単純にプロンプトの記述ミスです。
仕様に記載のなかったパラメータについて。仕様をしっかり確認すれば不要な要素もあるかもしれませんが、いったん、サンプルの構成のまま維持してもらう方向で進めます。
ということで、指摘に回答します。
問題なさそうなので次へ。
サイトパッケージ生成
いよいよ本番。業務要件を伝えて、サイトパッケージを作ってもらいます。
作ってくれました。ちょっと時間はかかりますね。
では、Pleasanterへインポートしてみます。
エラーなく無事インポート成功!!
一覧画面、それらしい項目が並んでいます。
編集画面、見出しの使い方も自然です。
この時点で、まずは「成功」と言えるレベルです。
応用編:Excel テンプレートから生成させてみる
せっかくなので、もう一段試したかったことがあります。
Excel 帳票を読み込ませて、そこから Pleasanter テーブルを自動生成できるのか?
Office公式テンプレートから請求書テンプレートを 1 つ選び、これをもとにサイトパッケージ生成を依頼します。
以下の請求書のテンプレートを使ってみます。明細部をどう表現するか気になります。
ChatGPT への指示内容:
ChatGPT の判断:
ヘッダ部と明細部を 2テーブル構成 に分割する案を提案されました。この判断力はなかなか驚きです。
他案として1テーブルに無理やり押し込む方法なども提示してくれましたが、ここは2テーブル構成案で進めます。
生成されたサイトパッケージをインポート
しかしここでエラー発生…
原因は次の2点:
- 2テーブル分を 1 つのサイトパッケージに記述していたのが NG
- Permissions と PermissionIdList のパラメータ指定が NG
ChatGPT が生成した JSON(NG例):
"Permissions": [],
"PermissionIdList": []
Pleasanter では以下のように構造を持つ必要があります(OK例):
"Permissions": [
{
"SiteId": 12345,
"Permissions": []
}
],
"PermissionIdList": {
"DeptIdList": [],
"GroupIdList": [],
"UserIdList": []
}
なお、本記事では割愛していますが、検証の過程で原因が特定しきれない「再現性のないエラー」にも遭遇しています。プロンプトや JSON の内容を少しずつ調整しながらトライ&エラーを繰り返し、最終的に紹介している形に落ち着いた、というのが実情です。記事に載っているのは「うまくいったパス」のみであり、その裏にはそこそこ泥臭い試行錯誤があることも補足しておきます。
問題点を伝え、再生成してもらったところ…今度は 無事インポート成功!
請求書テーブルと請求書明細テーブルの2テーブル構成です。
※リンクは手動で設定しました(仕様を伝えていないため)
画面を見てみます。
- 請求書
- 請求書明細
見出しやワイドスタイルの使い方も自然で、業務でも十分使えそうな出来です。
やってみて
今回は「項目を定義し並べる」というシンプルな領域だけを扱いましたが、それでも AIでサイトパッケージ生成させる仕組みはかなり実用的と感じます。
今後、サイトパッケージ仕様の理解をさらに深めていけば、より複雑な構成にも対応できるようになる可能性があり、業務アプリ構築の効率化に大きく貢献できるアプローチだと思います。
注意事項
最後に、実際に試してみる際の注意点です。
サイトパッケージ経由でテーブル定義をいじる行為は、通常の画面操作に比べて破壊力が大きく、書き方を誤ると意図しない状態になるリスクがあります。今回の検証でも、想定外のエラーで一時的にテーブルやフォルダが正常に扱えなくるなどの場面がありました。
この記事の内容を実施される場合は、
- 本番とは切り離した検証環境(検証用サイト)で試す
- 事前に対象サイトやフォルダのバックアップ/エクスポートを取得しておく
- おかしくなった場合に戻せる手段を用意してから実行する
といった対策を強くおすすめします。
また、記事内のプロンプトも利用いただいて構いませんが、記事のとおり不備もあるためその点をふまえて利用ください。




















