改修・設計メモ
プリザンター本体に無い機能を追加・改修する場合の設計調査です。現行の実装(1.5.8.1)を読んだうえで、どこに手を入れれば実現できるか、どんな制約があるかをまとめています。
元になった調査の全文は 調査ドキュメント(GitHub) で公開しています。
ここにあるのは本体の標準機能ではありません。本体を改修する場合は AGPL の条件と、バージョンアップ時の追従コストに注意してください。
ページ一覧
- API 専用ユーザー(画面ログイン不可・API キーのみ) — 運用での対処、管理者による API キーの代理発行、UserSettings への ApiOnly フラグ追加の比較
- 権限グループ(管理画面の操作範囲・サイト設定 API の制限)の設計 — サイト管理者が使えるタブやサイト設定 API をグループ単位で制限する改修
- 特権ユーザの削除・編集の制限(改修案) — テナント管理者が特権ユーザを削除・編集できないようにする改修
- API 認証への JWT・OAuth 2.0 の追加 — 自前で発行する JWT と外部 IdP の JWT の検証を追加する改修箇所と段階的な導入
- Windows 認証とローカル認証の併用(Windows+Local) — IIS の SSO を残したままローカル DB へフォールバックする Provider の追加
- iCal フィード(カレンダー購読 URL)の設計 — 推測できない URL・実行ユーザー・タイムゾーンと終日判定・ビューのフィルタでサイトを .ics 配信する
- 拡張ライブラリで外部公開カレンダーを作る(設計) — フォーム機能と同じ GUID の URL で、サイト・ビュー・項目を絞ったカレンダーをログインなしで見せる
- RSS / Atom フィード配信の設計 — サイトの新着・更新を RSS 2.0 / Atom 1.0 で配信する。件数制限とキャッシュ制御
- Webhook 通知(送信)の改修案 — 現行 HttpClient 通知の制約と、本文テンプレート・認証方式を持つ Webhook 種別の追加
- 通知のプレースホルダの改修案 — リンク先の項目(
ClassA~1234,ClassB)を通知に出す案と、書式行の Prefix などの{Url}を展開する案の比較 - リマインダーの改修案(日付の項目なし・タイムゾーン) — ビューの条件だけで送るリマインダーと、TimeZoneDefault に依存しない送信時刻の計算
- 外部 Webhook 受信の設計 — テナント単位の受信口、レート制限、実行ユーザー、サーバースクリプトでの後続処理
- iPaaS・フローエディタ連携の実現可能性 — 外部 iPaaS に任せる案・本体に組み込む案・Drawflow でエディタを載せる案の比較
- 短縮 URL 機能の設計 — リンクコピーボタンと統合した短縮 URL、有効期限と定期削除、オープンリダイレクト対策
- 画面操作へのレート制限の追加 — API 用の日次上限を画面のレコード操作にも掛ける改修と、ASP.NET Core のレートリミッターを自前で組み込む設計
- POP 受信の本体組み込み(Quartz タイマー・テナント設定)の設計 — テナントごとの受信設定、UID による重複防止、項目の対応付けとフィルタ
- 複数インスタンス間のマスターデータ同期の設計 — DB を直接読み書きする外部アプリで、ID の対応付け・変更検出・削除・競合・添付ファイルを扱う
- 添付ファイルのウイルススキャン — スキャンエンジンと組み込み方の比較、1.5.8.1 での挿入箇所、運用上のリスク
- 添付ファイルの拡張子制限 — 現行の拒否リスト(フォームのみ・大文字小文字を区別)と、項目ごとの許可・拒否リストの追加
- 検索を外部の検索エンジンに外出しする — Elasticsearch などの候補と .NET クライアント、Indexes の改修箇所、権限・日本語解析の扱い
- テナント・組織・グループ・ユーザーの管理画面に設定タブを足す — SiteSettings 列の追加による一覧・エディタ・履歴設定の保存と外せない列
- 拡張スクリプト・スタイルの条件指定とファイル単位の配信(改修案) —
.js.json/.css.jsonで条件を付け、条件付きのものをファイルごとに配信する - 多言語の言語定義を設定ファイルで管理する(改修案) — 固定の 7 言語を
Languages.jsonにまとめる段階的な改修と、Display JSON を言語単位にする案の比較 - パラメータを差分の JSON だけで持つ —
CodeDefiner mergeの問題点、C# の既定値 + 変更した項目だけの JSON などの比較、既定値の変更をバージョンアップ時に知らせる方法 - 情報公開の有効化をテナント設定で切り替える(改修案) —
ContractSettings.Extensionsの Publish に加え、TenantSettingsとテナント管理画面で有効にする - パラメータの差分を DB に持つ — テナント ID 付きのテーブルに差分の JSON を持ち、環境変数 → DB → ファイル → 既定値の順に読む。Rds はファイルだけ
- MariaDB・TiDB で動かす(互換性と対応案) — MySQL 用の実装で使った場合の全文索引の非互換と、
Dbmsに値を足す場合の改修箇所 - SQL Server のインメモリ OLTP を使う(CodeDefiner の改修案) — 対象テーブルの選び方、Rds.json の設定案、通常のテーブルとの切り替え
- セッションストアの改修案 — Redis との不整合の修正、UPSERT への置き換え、古いセッションの削除のバックグラウンド化、KVS の抽象化
- DB アクセスの性能改善案 — 接続プール、ループ内の個別クエリ、クエリ結果のキャッシュ、トランザクションのタイムアウト、デッドロックの記録
- 添付ファイルの本文を本体で抽出して検索する(改修案) — 保存時にテキストを抽出して Items.FullText に載せる案と、外部エンジン・RDBMS 拡張との比較
- テナント管理画面に変更履歴を付ける(改修案) — 履歴タブとコントローラーのアクション、復元・削除の追加
- フォルダでサーバースクリプトを動かす — フォルダ(Sites)の作成・更新・削除・画面表示の前でもサーバースクリプトを動かす改修
- ビューごとのスタイルをサーバースクリプトで指定する — カレンダー・カンバンなどにもサーバースクリプトから CSS クラスを付ける改修
- columns で変更できるプロパティを増やす — 正規表現チェック・入力ガイド・数値の最小値などを columns で変えられるようにする改修
- 拡張計算式に無い Excel 関数 — Excel の主な関数との比較と、足す候補
- サーバースクリプトを Python で書けるようにする — IronPython 3 の採用、スクリプトごと・サイトごとの言語切り替え、4 層のサンドボックスと残るリスク
- C# スクリプト(Roslyn)をサーバースクリプトに使う — ScriptOptions・構文木・セマンティック検査で防げるものと防げないもの、V8・IronPython との比較
- サーバースクリプトに使える言語の比較 — TypeScript を既存の V8 で動かす設計と、Lua・Ruby・PHP・PowerShell などの評価
- バックグラウンドで C# の DLL を実行する — httpClient・Quartz ジョブ・Process.Start・プラグインの 4 方式の比較とセキュリティ
- バックグラウンドサーバースクリプトに cron 式を直接指定する — cron 式の入力、cronstrue による説明文と次回実行日時のプレビュー、検証
- 自動ポストバックでのセクション表示切り替え — siteSettings.Sections の Hide を自動ポストバックでも反映させる改修と CodeDefiner のテンプレート
- 一覧の「モーダルで開く」を新規作成にも使う — 新規ボタン・ダイアログの作成ボタン・Create の応答・作成後の動作の改修箇所
- ブラウザ標準ダイアログ(alert・confirm・離脱警告)の置き換え — 本体の alert・confirm・beforeunload の使用箇所と、jQuery UI Dialog・ui-modal への置き換え
- ページゲート(開く前の確認・合い言葉)の標準機能化 — サイト設定・ゲートの出力・通過 API・ユーザー単位のセッションでのスキップ管理
- 複数項目の組み合わせでの重複禁止 — 現行の重複チェック SQL と、項目連携と同じ UI で複合の重複禁止を足す改修
- 日付項目の入力モードと表示形式の拡張 — 年月・年だけの入力、入力できる日付の範囲、一覧の任意の表示書式
- サイト画像を正方形(透過の余白付き)にする — 現行のリサイズの計算と ResizeMode.Pad による改修
- プロフィール画像とトリミング — ユーザー・グループ・組織の画像と、アップロード前に切り抜くモーダル
- 添付ファイルのサムネイル付き一覧(ライブラリ表示) — アップロード時のサムネイル作成、サムネイルの配信、拡張子からのアイコン
- 一覧のページネーション(ページ切り替え) — スクロールで読み足す一覧をページ番号の切り替えに変える改修と、ページ番号を URL・Ajax・セッションのどこで持つかの比較
- 一覧の行に操作ボタン(参照コピー・コピー・移動・削除)を付ける — 専用の操作列、権限による出し分け、行クリック・一覧編集モードとの関係
- カレンダーへの祝日表示の標準機能化 — 記録テーブルを祝日マスタにし、標準カレンダーは日付セルのクラス、FullCalendar は背景イベントで出す
- サイトメニューに任意のリンクを追加する — 記録テーブルのマスタから nav-site 形式のパネルを出し、組織・グループ・ユーザーで出し分ける
- サイトメニューにテーブルのロック状態を出す(本体改修) — Menu() の取得列にロック情報を足し、パネルに locked クラスと鍵のアイコンを付ける
- 複数テーブルの統合ビュー — 新しいサイト種別 IntegratedView、JSON 定義と拡張 SQL の 2 モード、結合前・結合後の 2 段階のフィルタ・ソート
- Markdown フィールドの拡張(Mermaid・独自記法) — 拡張スクリプトでビューアを後処理する方法と、marked.use()・DOMPurify の設定を変えるビルドの改修
- エディタの画像形式を増やす(WebP・BMP・SVG・AVIF) — リッチテキストエディタと Markdown エディタの差、サーバー側の画像チェック、形式ごとの改修範囲
- テナントごとの Favicon — 固定の favicon.ico と、テナントのロゴ画像と同じ作りで Favicon を切り替える改修
- アクセシビリティテーマの追加(ハイコントラスト・Okabe-Ito など) — v2 テーマの CSS 変数とテーマの解決の仕組み、4 つのテーマの配色案
- 日付項目の和暦・多暦表示 — Intl.DateTimeFormat と flatpickr の altInput で、保存は西暦のまま和暦で表示・入力する
- 画面のアイコンを Material Symbols に揃える — jQuery UI のアイコンとの対応表と改修の範囲
- レコードの移動を API・サーバースクリプトから行う — 画面にしかない移動を Move API・
$p.apiMove・items.Moveとして足す改修と、移動先の検証 - ApiKey なしでも ApiVersion を反映する改修 —
Compatibility_1_3_12の ApiKey 条件を外した場合の影響をリクエストの型ごとに確認 - コメントだけを追加・編集・削除する — コメント専用の API・サーバースクリプト・スクリプト関数の追加と、JSON 配列での同時書き込みの問題
- MCP エンドポイントのブラウザアクセス対策 — ブラウザで
/mcpを開いたときに JSON のエラーではなく標準のエラー画面を返すミドルウェアなどの比較 - スレッド型メッセージング(新しいサイト種別 Threads)の設計 — チャンネル・スレッド返信・リアクション・メンション・既読管理を新しいサイト種別として足す
- 拡張 SQL の先頭の AND・OR を本体で取り除く(改修案) — OnSelectingWhere の本文の先頭の AND で一覧が SQL エラーになる問題と、本体で取り除く改修