2026年6月8日月曜日

Oracle APEX 26.1のBlueprintの生成とインポートを試してみる

2026年5月14日にOracle APEX 26.1がリリースされました。APEX 26.1の新機能については、リリース・ノートで紹介されています。

Oracle APEX 26.1, Release Notes
2. New Features

26.1の一つ前の24.2のリリースから1年半程度の期間が経過しているためか、数多くの新機能が追加されています。

その中でBlueprintsが目に止まりました。

2.30 Blueprints

APEX now supports a new Markdown-based blueprint format for Spec-Driven Development (SDD) with AI coding assistants. With SDD, the specification becomes the durable source of truth: it describes what the application should do, what the database means, and how users should work with the data. An AI assistant can use those specifications to generate an inspectable APEX application design artifact that can be reviewed before creating the application.

For more information on blueprint support, see https://github.com/oracle/apex.

Importing an Application Blueprint

Application Blueprints can be imported directly through the App Builder Import page.

何を説明しているのか分からなかったので(Markdownをインポートしてアプリケーションを作成する?)、リンクが貼られているGitHubから内容を確認してみました。

GitHubのapexのリポジトリを開きます。blueprintsは26.1の新機能なので、ブランチとして26.1を選択します。フォルダblueprintsが現れます。

README.mdファイルに、スペックからAPEXのblueprintsを生成するフローが説明されています。


記述が抽象的で実際に何を行えばSDD(スペック駆動開発)ができるのか、よく分かりません。

スペックからAPEX Blueprintを生成してインポートするまでの具体的なステップが、QUICKSTART.mdに記述されています。

作業内容としては、生成AIでOrder Entryのアプリケーションのブループリントを生成し、APEXのワークスペースにインポートしてAPEXアプリケーションを作成しています。


実際に、このQUICKSTART.mdに記載されている作業を実施してみます。作業はMacbook Pro、データベースはローカルのコンテナ環境で実行しているOracle AI Database 26ai Freeを使用します。CodexとGPT-5.5を使って、APEX Blueprintを生成します。

作業ディレクトリとしてblueprintを作成し、そのディレクトリに移動します。

mkdir blueprint
cd bluerpint

最初にGitHubのリポジトリapexをクローンします。フォルダblueprintsを含むように、ブランチとして26.1を指定します。

git clone -b 26.1 https://github.com/oracle/apex.git

blueprint % git clone -b 26.1 https://github.com/oracle/apex.git

Cloning into 'apex'...

remote: Enumerating objects: 6382, done.

remote: Counting objects: 100% (527/527), done.

remote: Compressing objects: 100% (238/238), done.

remote: Total 6382 (delta 387), reused 324 (delta 286), pack-reused 5855 (from 1)

Receiving objects: 100% (6382/6382), 449.49 MiB | 7.62 MiB/s, done.

Resolving deltas: 100% (3112/3112), done.

blueprint % 


QUICKSTART.mdの作業に必要なファイルは、apex/blueprints/examples/order-entry以下に含まれます。このフォルダをCodexのプロジェクト・フォルダとします。

cp -r apex/blueprints/examples/order-entry .
ls order-entry

blueprint % cp -r apex/blueprints/examples/order-entry .

blueprint % ls order-entry 

database-objects README.md screenshots skills-input skills-output

blueprint % 


APEXのワークスペースを作成します。

ローカルのAPEX環境をUC Local APEX Devで作成しているため、添付のスクリプトを実行して、APEXワークスペースとしてblueprint、スキーマblueprint、管理者ユーザーとしてblueprintを作成します。

local-26ai.sh create-user blueprint

blueprint % local-26ai.sh create-user blueprint


loaded .env file


SQLcl: 月 6月 08 14:27:11 2026のリリース26.1 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


接続先:

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0



USER    

_______ 

SYS     


[中略]


接続先:

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0



USER         

____________ 

BLUEPRINT    


名前: local-26ai-blueprint

接続文字列: localhost:1521/FREEPDB1

ユーザー: blueprint

パスワード: ******


PL/SQLプロシージャが正常に完了しました。


Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0から切断されました

>>>>

saved sqlcl connection

connect with 'sql -name local-26ai-blueprint'

blueprint % 


後で実行するblueprintのインポートが失敗しないように、データベース・ユーザーBLUEPRINTから、ロールSELECT_CATALOG_ROLEを外します。

sql -name local-26ai-sys
revoke select_catalog_role from blueprint;
exit

blueprint % sql -name local-26ai-sys


SQLcl: 月 6月 08 14:28:20 2026のリリース26.1 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


接続先:

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0


SQL> revoke select_catalog_role from blueprint;


Revokeが正常に実行されました。


SQL> exit

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0から切断されました

blueprint % 


作成されたスキーマBLUEPRINTに、Order Entryアプリケーションが使用するデータベース・オブジェクトの作成や、サンプル・データの投入を行います。

スクリプトには19c向けと26ai向けがあります。今回は26ai向けを実行します。

ls order-entry/database-objects

blueprint % ls order-entry/database-objects 

order-entry-schema-19c.sql order-entry-seed-data-19c.sql

order-entry-schema-26ai.sql order-entry-seed-data-26ai.sql

blueprint % 


sql -name local-26ai-blueprint
@order-entry/database-objects/order-entry-schema-26ai.sql
@order-entry/database-objects/order-entry-seed-data-26ai.sql
exit

blueprint % sql -name local-26ai-blueprint


SQLcl: 月 6月 08 14:34:20 2026のリリース26.1 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


接続先:

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0


SQL> @order-entry/database-objects/order-entry-schema-26ai.sql


View OREN_ORDERS_DVが削除されました。



Table OREN_ORDER_ITEMSが削除されました。



Table OREN_ORDERSが削除されました。



[中略]


Table OREN_ORDER_ITEMSが変更されました。



Table OREN_ORDER_ITEMSが変更されました。



Table OREN_ORDER_ITEMSが変更されました。



Table OREN_ORDER_ITEMSが変更されました。


SQL> @order-entry/database-objects/order-entry-seed-data-26ai.sql


0行削除されました。



0行削除されました。



0行削除されました。



0行削除されました。


[中略]



Table OREN_PRODUCTSが変更されました。



Table OREN_ORDERSが変更されました。



Table OREN_ORDER_ITEMSが変更されました。


SQL> exit

Oracle AI Database 26ai Free Release 23.26.1.0.0 - Develop, Learn, and Run for Free

Version 23.26.1.0.0から切断されました

blueprint % 


リポジトリapexからコピーしたorder-entry/skills-output/order-entry-blueprint.mdが、生成済みのOrder EntryアプリケーションのAPEX blueprintです。

このファイルをorder-entry/skills-input以下にあるスペックと、apex/blueprints/prompt以下にあるプロンプトにより出力することが、いわゆるスペック駆動開発ということになります。

生成済みのblueprintを削除し、同じファイルをCodexに出力させます。生成AIがorder-entry/skills-input以下にあるスペックを適切に解釈できるのであれば、ほぼ同じファイルが作成されるだろうと期待できます。元のファイルはフォルダapex以下に残っているため、後で比較もできます。

rm order-entry/skills-output/order-entry-blueprint.md

blueprint % rm order-entry/skills-output/order-entry-blueprint.md

blueprint % 


フォルダorder-entryに移動します。

cd order-entry

DBとAPEXのスキルをロードします。私の好みでMicrosoft APMを使用します。SQLclでskills syncコマンドを実行しても良いでしょう。

以下の内容のファイルをapm.ymlとして作成します。
name: order-entry
version: 1.0.0
description: order entry blueprint
author: Yuji
dependencies:
  apm:
    # Oracle Database Skills
    - git: https://github.com/oracle/skills
      path: db
      ref: main
    # Oracle APEXlang Skills
    - git: https://github.com/oracle/skills
      path: apex
      ref: main
今回はCodexを使用するため、以下のコマンドを実行してCodex向けにスキルをインストールします。

apm install --target codex

order-entry % apm install --target codex

[>] Installing dependencies from apm.yml...

[>] Resolving skills-db...

[>] Resolving skills-apex...

[i] Targets: codex  (source: --target flag)

  [+] github.com/oracle/skills/apex#main #main @55679630

  |-- Skill integrated -> .agents/skills/

  [+] github.com/oracle/skills/db#main #main @55679630

  |-- Skill integrated -> .agents/skills/

[i] Added apm_modules/ to .gitignore


[*] Installed 2 APM dependencies in 1.2s.

ynakakoshi@Ns-Macbook order-entry % 


必ずしも必要ではないと思いますが、MCPサーバーなどの設定を.codex/config.tomlに記述します。
[mcp_servers.oracle-apexdev]
command = "/opt/homebrew/Caskroom/sqlcl/26.1.2.132.1334/sqlcl/bin/sql"
args = [ "-R", "4", "-mcp" ]

[sandbox_workspace_write]
network_access = true
以上でCodexを呼び出すところまでは準備できました。

Codexのデスクトップ・アプリを使用して、blueprintを生成してみます。

新規チャットを開始します。

新規プロジェクトの既存のフォルダとして、先ほど作成したフォルダorder-entryを使用します。使用するモデルとしてGPT-5.5を選択しています。


QUICKSTART.mdには、以下の文書をインストラクションとして与えることが記載されています。

Using the prompt and icon allowlist files:
- prompt/blueprint-prompt.md
- prompt/apex-fa-icons-allowlist.txt

Generate and overwrite:
- <full-path-to-output-blueprint.md>

Using:
- examples/order-entry/skills-input/order-entry-functional-requirements.md
- examples/order-entry/skills-input/order-entry-schema-metadata.md

Don't read any other files unless directed by the prompt.

プロンプトとなるblueprint-prompt.mdapex-fa-icons-allowlist.txtは、添付ファイルとして与えることにします。


これらのファイルはapex/blueprint/prompt以下に置かれています。


プロンプトとして以下を与え、APEX blueprintを生成します。
添付したファイルblueprint-prompt.mdおよびapex-fa-icons-allowlist.txtより、Oracle APEXのblueprintをskills-output/order-entry-blueprint.mdとして生成してください。
以下のファイルの内容だけが、生成するAPEX blueprintの要求仕様になります。
skills-input/order-entry-functional-requirements.md
skills-input/order-entry-schema-metadata.md


 30分程度でorder-entry-blueprint.mdが出力されました。

APEX向けの成果物なので、まずローカルのAPEXスキル手順と入力ファイルを確認します。あわせて、指定されたプロンプト雛形とアイコン許可リストは作業フォルダ外にあるため、読めるか確認しながら進めます。

入力仕様はかなり具体的で、ページ構成・ナビゲーション・SQL由来の表示列まで決まっています。次に、生成フォーマット側の指示と残りの要求を読み切って、blueprintとして矛盾なくまとめます。

blueprint生成ルール側は、ページ・リージョン・SQL・リンクをすべて完全に出す前提のフォーマットです。今は「どの見出し・項目名で出力するか」を確認して、生成後に機械的に欠けがないか点検できる形にします。

出力フォーマットの核は把握できました。これからblueprint本文を作成し、最後にアイコン許可リスト・必須ページ・主要な要求(Order Line IDやメニュー制約など)を照合します。

これから skills-output/order-entry-blueprint.md を新規作成します。かなり大きい成果物になるので、要求されたページ・リージョン・フォーム・LOV・メニューをコンパクトなblueprint形式に落とし込みます。

1 件のファイルを作成中 • 447行を書き込み中
再接続中 /5
1 件のファイルを作成中 • 376行を書き込み中
再接続中 /5
1個のファイルを作成しました

ファイルを作成しました。最後に、必須ページ・メニュー項目・Order Line IDの扱い・アイコン許可リストに対して軽く点検しています。

点検で、ページ数は17、リージョン数は39で、指定された主要ページは入っています。アイコン照合の抽出方法にファイル名が混ざってしまったので、そこだけ正しい抽出で再確認します。

LINE_ITEM_ID や行番号由来の識別子は出ていないことを確認しました。アイコン照合は許可リスト側の行末形式の影響で完全一致検索が効いていないようなので、別の方法で確認します。

生成しました: skills-output/order-entry-blueprint.md

確認した点:

  • 17ページ、39リージョンを出力
  • 指定のトップメニュー順を反映
  • Order Line IDOREN_ORDER_ITEMS.ORDER_ITEM_ID 由来で、LINE_ITEM_ID や行番号由来の識別子は未使用
  • 使用アイコンは apex-fa-icons-allowlist.txt 内に存在することを確認済み
order-entry-blueprint.mdドキュメント・MD
15:50

生成されたskills-output/order-entry-blueprint.mdをAPEXワークスペースにインポートします。作成済みのAPEXワークスペースblueprintにサインインします。

アプリケーション・ビルダーよりインポートを実行します。


インポートするファイルとしてskills-output/order-entry-blueprint.mdを選択します。ファイル・タイプアプリケーション・ブループリントです。

へ進みます。


ブループリント・インポート・エラーが発生しました。copy the full error log to the clipboardをクリックし、エラー・ログをクリップボードにコピーします。


Codexに貼り付けて、修正を依頼します。


修正も30分程度の時間がかかりました。

添付の検証エラー内容に沿って、skills-output/order-entry-blueprint.md を修正しました。

主な修正:

  • List of Values / Lists / Breadcrumb の構造を blueprint 文法どおりに修正
  • Calendar の Render AsstartDateCol / supplementalInfo に修正
  • Map の Render AslatitudeCol / longitudeCol / tooltip / hidden に修正
  • hidden列に残っていた不正な Format Mask を削除
  • Modal Forms ページグループを Forms に変更して参照も統一
  • Calendar SQL内の禁止されやすい order by を除去

確認済み:

  • 17ページ、39リージョンのまま維持
  • 使用アイコンは allowlist 内
  • LINE_ITEM_ID / ROWNUM / ROW_NUMBER は未使用です。
order-entry-blueprint.mdドキュメント・MD
16:24

再度、blueprintのインポートを実行ます。

blueprintのインポートですが、インポートが完了するとAPEXアプリケーションが作成されています。

作成されたアプリケーションを実行してみます。


アプリケーションのサインイン後にエラーが発生しました。


このエラーもCodexに貼り付けて、修正を依頼しました。

サインイン後にホームページを開く際に、以下のエラーが発生しました。 Failed to parse SQL query! ORA-20999: Failed to parse SQL query! ORA-06550: line 20, column 10: ORA-22848: cannot use BLOB type as comparison key
16:29

原因はHome Dashboardの「Top 5 Revenue Products Last 12 Months」カードSQLでした。PRODUCT_IMAGE がBLOBなのに GROUP BY に含まれていて、Oracleが ORA-22848 を出していました。

skills-output/order-entry-blueprint.md (line 523) を修正済みです。売上集計を内側のサブクエリで PRODUCT_ID 単位に行い、外側で OREN_PRODUCTS をJOINして画像BLOBを取得する形にしました。

確認済み:

  • PRODUCT_IMAGEGROUP BY / ORDER BY / WHERE / JOIN条件 に使われていません。
  • 画像表示用のSELECT列としては維持しています。
order-entry-blueprint.mdドキュメント・MD
16:30

修正されたblueprintを、再度インポートしました。

アプリケーションにサインイン後、Home Dashboardが表示されました。


Customer Order Detailsのページです。


Orders Workbenchのページです。


Orders Calendarのページです。


Store Command Mapのページです。


Management Hubのページです。


QUICKSTART.mdに記載されている作業は以上で完了です。

Markdown形式で記述されたAPEXアプリケーションを、blueprintとしてAPEXワークスペースにインポートできることは確認できましたが、Markdownの書式の説明がどこに記載されているのか、なぜCodexでblueprintが生成できたのかは、今のところ不明です。

リポジトリapexのblueprint関連のコミッターがNeil Fernandezさんなので、2026年7月9日にあるAPEX Office Hours、Part 7: What's new in Oracle APEX 26.1にて、この機能が紹介されるのではないかと期待しています。

今回の記事は以上になります。