クラウド # PHPQUERY # エンジニア

この記事では、SQLコメントにUIアノテーションを記述し、Claude Projects(LLM)でPHPQUERYのHTMLテンプレート(独自形式)を自動生成する手法を紹介します。従来手動で作成していたHTMLテンプレートを、SQLの意図から自動生成することで、開発効率がどの程度向上するかを検証しました。
※ この記事の検証にはClaude Opus 4.1を使用しています。
PHPQUERYの簡単な紹介
PHPQUERYは、IBM i(AS/400)のDB2データをWeb UIで可視化するBIツールです。
PHPQUERYの実行画面
SQLの実行結果を直接HTMLテンプレートにバインドできる独自の機能を持っています。
例えば、以下SQLをバインドさせるために
SELECT P.PRODUCT_NAME, P.PRICE, C.CATEGORY FROM PRODUCTS P -- テーブル番号0 LEFT JOIN CATEGORIES C -- テーブル番号1 ON P.CAT_ID = C.ID
HTMLの要素に、id="フィールド名_テーブル番号"
の形式で記述します。
<!-- バインディング記法 --> <div id="PRODUCT_NAME_0"></div> <!-- メインテーブルのPRODUCT_NAME --> <span id="PRICE_0"></span> <!-- メインテーブルのPRICE --> <p id="CATEGORY_1"></p> <!-- JOIN先テーブルのCATEGORY -->
すると、SQLの結果が自動的にマッピングされます。
Claude Projects実行前の準備
Claude Projectsは、特定用途に特化したLLM環境を構築できます。今回はPHPQUERY HTMLテンプレート生成に特化したプロジェクトを作成し、チャットでSQLを渡すとそのSQLに対応したテンプレートページを生成するようにします。
このプロジェクトを実行するために、次の4つを準備します。
- SQLアノテーションのルールを記述したMarkdownファイル
- PHPQUERYのHTMLテンプレートのルールを記述したMarkdownファイル
- 生成されるHTMLのサンプル
- プロジェクトで使用するLLMに渡すシステムプロンプト(Markdown形式で記述)
準備内容の詳細
SQLアノテーション仕様
SQLを渡してHTMLテンプレートを出力させますが、SQLだけだとページ情報、フィールド詳細情報が足りないため
-- @page-title: 商品一覧 -- @style: modern SELECT -- @label: 商品名 P.P_NAME, -- @label: カテゴリ C.C_NAME, -- @label: 価格 -- @type: number -- @format: currency P.PRICE, -- @label: 在庫数 -- @type: number P.S_QTY, -- @label: 商品説明 P.P_DESC, -- @type: image -- @image-base-url: "" P.P_IMG FROM PRODUCTS P LEFT OUTER JOIN CATEGORIES C ON P.C_CODE = C.C_CODE ORDER BY P.P_CODE
上記の様にSQLコメントでアノテーションを入れられるようにしてみます。
# SQLアノテーション仕様 ## ページレベル設定 - @page-title: ページタイトル(表示用の見出し) - @layout: grid|card|table|form|dashboard(レイアウトパターン) - @style: modern|classic|minimal|glassmorphism(デザインスタイル) - @responsive: true|false(レスポンシブ対応) ## フィールドレベル設定 - @label: フィールドの表示ラベル - @type: text|number|image|badge|chip|progress(表示タイプ) - @format: currency|date|percentage(データフォーマット) - @hidden: 非表示フィールド - @image-base-url: 画像のベースURL
このようなアノテーションを定義することで、出力されるページやフィールドの詳細をユーザーが指定できるようになりました。
HTMLテンプレート仕様
HTMLテンプレートは独自形式なのでルールを簡単に記述してみます。簡単な基本ルール、記述形式を例を組み合わせて書いています。テーブル番号のルールはわかりにくいので独立して書いています。
# PHPQUERY HTMLテンプレート仕様書 ## 基本ルール 1. フィールド値はid="フィールド名_テーブル番号"
で埋め込む 2. _0はメインテーブル、_1以降はJOIN順 3. 複数行データはloop="true"
属性で自動繰り返し ## 記述形式 - テキスト表示:<span id="FIELD_NAME_0"></span>
- 入力フィールド:<input type="text" id="FIELD_NAME_0">
- 画像:<img img_url="画像のベースURL" img_id="IMAGE_FIELD_0" img_extension="jpg">
- img_url: 画像のベースURL - img_id: フィールド名_テーブル番号 - img_extension: 画像の拡張子(jpg, png, gif等) - 非表示フィールド:<input type="hidden" id="ID_0">
- 繰り返し要素(重要):<div class="product-card" loop="true"><!-- この中の要素が行数分繰り返される --><span id="PRODUCT_NAME_0"></span><span id="PRICE_0"></span></div>
## テーブル番号の割り当て FROM句のテーブル = _0 1番目のJOIN = _1 2番目のJOIN = _2
HTML出力サンプル
プロンプトや仕様だけでも動作しますが、より精度の高い出力を得るため、期待する出力サンプルもLLMに提供します。
プロンプト設計
プロンプトは一般的なHTMLの知識しか持たないLLMに、PHPQUERY特有の形式を正確に生成できるようにするため、具体例の提示と制約の明文化を意識して作成しました。
Claude Projectsの新規作成
Claude Projectsの新規作成は以下の手順で作成しました。
- Claude.aiにアクセスし、左サイドバーから「プロジェクト」を選択
- 「新規プロジェクト」をクリック
- プロジェクト名に
PHPQUERY HTMLテンプレート自動生成
、プロジェクトのテーマにはSQLからPHPQUERY用のモダンなHTMLテンプレートを自動生成する
を入力する - 準備したドキュメントを
ファイル
に追加する 手順
にシステムプロンプトをプロジェクトの指示
として設定します
動作検証
では実際に試してみます。Claude.aiのプロジェクト
で新規作成したプロジェクトを選択し、チャットで SQLアノテーション仕様
で記述したSQLを入力してみます。
無事出力されました!
この出力されたHTMLテンプレートをPHPQUERYの同じクエリに適用すると
上記の画面が表示されました。細かい調整が必要ないほど、完成度の高い出力が得られました。
※ デモで使用している商品画像はUnsplashのフリー素材を使用しています
今回の検証を通じて
今回作成したプロンプトの指示は比較的シンプルですが、LLMが文脈を適切に理解し、独自形式のテンプレートでも高い精度で生成できることが確認できました。
この手法により、以下の効果が期待できます。
- HTMLテンプレート作成時間の大幅短縮
- 人的エラーの削減
- デザインの一貫性確保
独自フォーマットを扱う他のシステムでも、同様のアプローチが応用可能だと考えています。
▼「PHPQUERRY」についての詳細は以下リンクをご覧ください。
https://phpquery.jp/
お問い合わせ・ご相談はこちら