2026年5月15日金曜日

CodexとClaude CodeでAPEX 26.1のAPEXlangによるアプリケーション生成を試してみる

2026年6月5日更新:2026.06.04版のAPEXlang Skillsで再試行しています

Oracle APEX 26.1がリリースされたので、OpenAI CodexとClaude CodeによるAPEXlang形式でのアプリケーション生成を試してみます。

Oracle APEX 26.1の実行環境の作成には、ベルギーのUnited Codes社が公開しているUC Local APEX Devを使用します。ブランチ26-2の最新で、Oracle APEX 26.1に対応した環境が作成できます。

インスタンス作成後以下のコマンドを実行し、APEXワークスペースとしてAPEXDEVを作成しています。

local-26ai.sh create-user apexdev

作成したワークスペースAPEXDEVにサインインし、サンプル・データセットEMP/DEPTをインストールします。

APEX 26.1よりUniversal Themeに、新たにIrisテーマ・スタイルが追加されています。開発ツールの見た目が変更され、少し操作に戸惑います。


サンプル・データセットのEMP/DEPTをインストールします。このデータセットに含まれる表EMPの一覧と操作を行なうAPEXアプリケーションを、CodexとClaude Codeで作成してみます。


APEXおよびデータベース側の準備は以上で完了です。


OpenAI Codex



ホストに作業用のディレクトリを作成します。

mkdir emp-crud
cd emp-crud

Documents % mkdir emp-crud

Documents % cd emp-crud

emp-crud % 


Gitで管理する予定はありませんが、Codexが認識するので初期化だけしておきます。

git init

emp-crud % git init

Initialized empty Git repository in /Users/**********/Documents/emp-crud/.git/

emp-crud % 


生成するAPEXアプリケーションの出力先となるディレクトリをapplicationsとして作成します。

mkdir applications

emp-crud % mkdir applications

emp-crud % 


APEXアプリケーションの生成手順(ツール含む)は、Oracle CorporationよりAgent Skillsとして提供されています。このAgent Skillsは、https://github.com/oracle/skillsより入手できます。

このAgent SkillsをCodexおよびClaude Code向けにインストールするために、Microsoft APM(Agent Package Manager)を使用します。作業ディレクトリ以下にファイルapm.ymlを作成し、以下の内容を記述します。
name: emp-crud
version: 0.1.0
description: Oracle APEX 26.1のAPEXlangを使ってアプリケーションを作成する。
author: Yuji
dependencies:
  apm:
    # Oracle Database Skills
    - git: https://github.com/oracle/skills
      path: db
      ref: main
    # Oracle APEX Skills
    - git: https://github.com/oracle/skills
      path: apex
      ref: main
apm.ymlを作成した後、Codex向けにインストールします。

apm install --target codex

emp-crud % 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 @11e528de

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

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

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

[i] Added apm_modules/ to .gitignore


[*] Installed 2 APM dependencies in 3.2s.

emp-crud % 


APEXアプリケーションを作成するにあたって、データベースから情報を取得できるようにSQLclのMCPサーバーを構成します。また、コマンドラインからSQLclを起動したときに、データベースへのネットワーク接続を許可します。

作業ディレクトリの下の.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を使ってAPEXアプリケーションを生成する準備ができました。

codexを起動します。

codex --sandbox workspace-write

作業ディレクトリを信頼します。

> You are in /Users/__________/Documents/emp-crud


  Do you trust the contents of this directory? Working with untrusted contents comes with higher risk of

  prompt injection. Trusting the directory allows project-local config, hooks, and exec policies to

  load.


› 1. Yes, continue

  2. No, quit


  Press enter to continue


アプリケーションを生成するにあたって、以下のプロンプトを渡します。
1. MCPサーバーoracle-apexdevで、データベースlocal-26ai-apexdevに接続してください。
2. local-26ai-apexdevはユーザーapexdevで接続されています。これはAPEXワークスペースAPEXDEVのパーシング・スキーマです。
3. スキーマAPEXDEVには表EMPが存在します。
4. APEXlangのスキルを参照して、表EMPの一覧を表示する対話モード・レポートのページと、従業員の作成、更新、削除ができるフォームを持つAPEXアプリケーションEMP_CRUDを作成してください。
5. アプリケーションはディレクトリapplications以下にEMP_CRUDとして作成してください。
6. アプリケーションのインポートはMCPサーバーではなく、applications/EMP_CRUDに移動した後に、"sql -name local-26ai-apexdev"でSQLclを起動し、"apex import"を実行することで、APEXアプリケーションのインポートを行なってください。
生成したアプリケーションのインポートは、MCPサーバー(ツールsqlcl_run)からは実行できないようなので、SQLclをコマンドラインから実行するように指示しています。

ツール実行は随時許可します。


╭───────────────────────────────────────────────────╮

│ >_ OpenAI Codex (v0.137.0)                       

                                                 

│ model:     gpt-5.4-mini medium   /model to change │

│ directory: ~/Documents/emp-crud                  

╰───────────────────────────────────────────────────╯


  Tip: New Use /fast to enable our fastest inference with increased plan usage.



1. MCPサーバーoracle-apexdevで、データベースlocal-26ai-apexdevに接続してくだ

  さい。

  2. local-26ai-apexdevはユーザーapexdevで接続されています。これはAPEXワークス

  ペースAPEXDEVのパーシング・スキーマです。

  3. スキーマAPEXDEVには表EMPが存在します。

  4. APEXlangのスキルを参照して、表EMPの一覧を表示する対話モード・レポートの

  ページと、従業員の作成、更新、削除ができるフォームを持つAPEXアプリケーション

  EMP_CRUDを作成してください。

  5. アプリケーションはディレクトリapplications以下にEMP_CRUDとして作成してくだ

  さい。

  6. アプリケーションのインポートはMCPサーバーではなく、applications/EMP_CRUDに

  移動した後に、"sql -name local-26ai-apexdev"でSQLclを起動し、"apex import"を

  実行することで、APEXアプリケーションのインポートを行なってください。



APEXlangの手順を確認しつつ、まずDB接続とスキーマ確認を行います。その後、

  applications/EMP_CRUD にアプリを組み立てて、指定どおりSQLcl経由でインポートし

  ます。


Explored

  Read SKILL.md (apexlang skill)


────────────────────────────────────────────────────────────────────────────────


DB接続の確立とEMP表の実体を先に確認します。接続後にスキーマ情報を見て、アプリ

  生成に必要な構造だけに絞って進めます。


Called

  oracle-apexdev.connect({"connection_name":"local-26ai-apexdev","model":"GPT-

        5"})

    ### DATABASE CONNECTION ESTABLISHED ###

    Successfully connected to: **local-26ai-apexdev**


    ### DATABASE ENVIRONMENT CONTEXT ###


    **1. Oracle Database Version:**

    23.26.1.0.0

    **2. Access Mode:**

    The Oracle database is currently in 'READ WRITE' mode

    **3. NLS Parameters:**

    The current Oracle database uses the following NLS configuration:

    Database character set:{"results":[{"columns":

        [{"name":"PARAMETER","type":"VARCHAR2"},

        {"name":"VALUE","type":"VARCHAR2"}],"items":

    [

    {"parameter":"NLS_CHARACTERSET","value":"AL32UTF8"}

    ]}]}


     Full NLS parameters:

    {"results":[{"columns":[{"name":"PARAMETER","type":"VARCHAR2"},{"nam...

    Here’s the Oracle database context you need: version, open mode, and NLS

        parameters. Use this information to run the following queries accurately

        and ensure they align with the database’s current environment and

        settings.


Called

  oracle-

        apexdev.schema_information({"level":"DETAILED","schema":"APEXDEV","model

        ":"GPT-5","execution_type":"SYNCHRONOUS","objects_list":"EMP"})

    Basic Schema Objects Listing:

    OWNER,OBJECT_TYPE,OBJECT_NAME


色々と処理中のメッセージが表示されます。作成を指示したAPEXアプリケーション自体は単純なものなので、以降はツール実行の確認は求められますが、Codexから何か確認を求められるということはありません。

色々試してみて、APEXワークスペース名やAPEXアプリケーション名を指定していないと、Codexから入力を求められたので、これらの値はあらかじめプロンプトに含めています。

最終的にAPEXアプリケーションが生成され、ワークスペースにインポートされます。

EMP_CRUDapplications/EMP_CRUD に作成し、EMP 向けの一覧ページと drawer

  フォームを組み込みました。MGRDEPTNO は、コンパイルと import が通る形に合わ

  せて数値入力にしています。


  変更点:


  - アプリ本体を更新: [application.apx](/Users/ynakakoshi/Documents/emp-crud/

    applications/EMP_CRUD/application.apx#L1)


  - 1ページ目を Employees の Interactive Report に変更: [p00001-home.apx](/

    Users/ynakakoshi/Documents/emp-crud/applications/EMP_CRUD/pages/p00001-

    home.apx#L1)


  - 2ページ目を Drawer Form の CRUD に追加: [p00002-employee-form.apx](/Users/

    ynakakoshi/Documents/emp-crud/applications/EMP_CRUD/pages/p00002-employee-

    form.apx#L1)


  - 共有 breadcrumb / navigation を更新: [breadcrumbs.apx](/Users/ynakakoshi/

    Documents/emp-crud/applications/EMP_CRUD/shared-components/

    breadcrumbs.apx#L1)[lists.apx](/Users/ynakakoshi/Documents/emp-crud/

    applications/EMP_CRUD/shared-components/lists.apx#L1)


  - 仕様書と UX 契約を追加: [application-spec.md](/Users/ynakakoshi/Documents/

    emp-crud/.apexlang/application-spec.md#L1)[app-ux-contract.json](/Users/

    ynakakoshi/Documents/emp-crud/.apexlang/app-ux-contract.json#L1)


  - app-local runtime metadata に requiresAppUxContract: true を設定: [.apex/

    apexlang.json](/Users/ynakakoshi/Documents/emp-crud/applications/

    EMP_CRUD/.apex/apexlang.json#L1)


  検証結果:


  - apexlang validate 成功

  - apexlang compiler-truth audit --verify-component-attributes 成功

  - sql -name local-26ai-apexdev から apex import を実行し、import 成功

  - import 結果: workspace APEXDEV に application ID 100 として取り込まれました


  必要なら次に APEX 上でのページ動作確認手順まで詰めます。


─ Worked for 17m 10s ───────────────────────────────────────────────────────────


 

Implement {feature}

 

  gpt-5.4-mini medium · ~/Documents/emp-crud


APEXの環境にサインインし、アプリケーション・ビルダーを開きます。

アプリケーションEMP CRUDが作成されていることが確認できます。


アプリケーションを開いてみます。なぜかテーマのリフレッシュを求められています。


テーマをリフレッシュしたのち、アプリケーションを実行します。

サインインすると対話モード・レポートが表示されます。

少し使ってみた感じでは、従業員の追加、編集、削除はできました。フォームでのManagerとDepartmentの入力が選択リストではなくテキスト・フィールドでしたが、これはプロンプトを追加すれば更新できるでしょう。


2026年6月4日版のAPEXlangのSkillsは、実用度が高くなっています。


Claude Code



続いて、Claude Codeでも同様の作業を行ってみます。

Claude Codeのapm installのターゲットはclaudeです。

apm install --target claude

emp-crud-code % apm install --target claude

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

[>] Resolving skills-apex...

[>] Resolving skills-db...

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

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

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

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

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

[i] Added apm_modules/ to .gitignore


[*] Installed 2 APM dependencies in 3.6s.

emp-crud-code %


作業ディレクトリの下の.mcp.jsonに以下を記述します。
{
  "mcpServers": {
    "oracle-apexdev": {
      "command": "/opt/homebrew/Caskroom/sqlcl/26.1.2.132.1334/sqlcl/bin/sql",
      "args": [
        "-R",
        "4",
        "-mcp"
      ]
    }
  }
}

以上で、Codexを使ってAPEXアプリケーションを生成する準備ができました。

Claude Codeを起動します。

claude

Codexと同じプロンプトを与えます。

emp-crud-code % claude

    Claude Code v2.1.145

           Sonnet 4.6 · Claude Pro

  ▘▘ ▝▝    ~/Documents/emp-crud-code


1. MCPサーバーoracle-apexdevで、データベースlocal-26ai-apexdevに接続してくだ  

  さい。                                                                        

  2. local-26ai-apexdevはユーザーapexdevで接続されています。これはAPEXワークス  

  ペースAPEXDEVのパーシング・スキーマです。                                     

  3. スキーマAPEXDEVには表EMPが存在します。                                     

  4. APEXlangのスキルを参照して、表EMPの一覧を表示する対話モード・レポートのペ  

  ージと、従業員の作成、更新、削除ができるフォームを持つAPEXアプリケーションEMP 

  _CRUDを作成してください。                                                     

  5. アプリケーションはディレクトリapplications以下にEMP_CRUDとして作成してくだ 

  さい。                                                                        

  6. アプリケーションのインポートはMCPサーバーではなく、applications/EMP_CRUDに 

  移動した後に、"sql -name local-26ai-apexdev"でSQLclを起動し、"apex            

  import"を実行することで、APEXアプリケーションのインポートを行なってください。 

                                                                                


Skill(apex)

  ⎿  Successfully loaded skill


APEXLangスキルのドキュメントを読み込みます。


  Read 2 files (ctrl+o to expand)


ワークフローファイルを読み込みます。


  Read 2 files (ctrl+o to expand)


ポリシーファイルとテンプレートを確認します。


  Read 2 files (ctrl+o to expand)


スキャフォールドテンプレートを確認します。


  Searched for 2 patterns (ctrl+o to expand)


テンプレートとスキャフォールド例を読み込みます。


  Read 4 files (ctrl+o to expand)


残りのスキャフォールドファイルを読みます。

  

  Read 2 files (ctrl+o to expand)


ログインページとグローバルページを確認します。


  Read 2 files (ctrl+o to expand)


残りのスキャフォールドファイルを確認します。


  Read 6 files (ctrl+o to expand)


データベースへの接続を確認します。まずMCPツールを使ってデータベースに接続しま

  す。


local-26ai-apexdev に接続してEMPテーブルの構造を確認します。


  Called oracle-apexdev (ctrl+o to expand)


接続成功。EMPテーブルの詳細な構造を取得します。

  

  Called oracle-apexdev (ctrl+o to expand)



色々処理が行われ、最終的にAPEXアプリケーションが作成されてワークスペースへのインポートまで実行されます。

EMP_CRUDアプリケーションの作成とインポートが完了しました。

  

  完了サマリー


  APEXアプリケーション: EMP CRUD (App ID: 102, エイリアス: EMP-CRUD,

  ワークスペース: APEXDEV)


  作成されたページ


  ┌──────┬───────────────┬─────────────────────────┐

  │ Page │     名前                種別          

  ├──────┼───────────────┼─────────────────────────┤

  │ 0    │ Global Page   │ グローバル             

  ├──────┼───────────────┼─────────────────────────┤

  │ 1    │ Home          │ ホームページ (Hero)    

  ├──────┼───────────────┼─────────────────────────┤

  2    Employees     対話モード・レポート   

  ├──────┼───────────────┼─────────────────────────┤

  3    Employee Formドロワーフォーム (右側)

  ├──────┼───────────────┼─────────────────────────┤

  │ 9999 │ Login Page    │ ログイン               

  └──────┴───────────────┴─────────────────────────┘

  

  主な機能


  - Page 2 (Employees): EMPテーブルをDEPT・自己結合で拡張表示(マネージャー名・

  部門名を表示)、編集リンク・「Create

  Employee」ボタン付き、フォームを閉じると自動リフレッシュ

  - Page 3 (Employee Form): 右側ドロワーフォーム、全カラム編集対応(MGRはEMPから

  の選択リスト、DEPTNOはDEPTからの選択リスト)、新規作成・更新・削除に対応


  ファイル構成


  applications/EMP_CRUD/ 配下に20ファイル(.apex/apexlang.json、5ページ、共有コ

  ンポーネント、アイコン等)


  再インポート方法


  将来コードを修正して再インポートする場合:

  cd /path/to/emp-crud-code/applications/EMP_CRUD

  sql -name local-26ai-apexdev

  # SQLcl内で:

  apex import -id 102


Baked for 15m 7s


recap: EMP_CRUDアプリケーション(対話モード・レポートとドロワーフォーム)をAPE

  XLangで作成し、ワークスペースAPEXDEVにApp ID 102としてインポート済みです。APEX

  ビルダーでアプリを確認して動作を検証してください。 (disable recaps in /config)

  

────────────────────────────────────────────────────────────────────────────────

❯  

────────────────────────────────────────────────────────────────────────────────

  ⏵⏵ accept edits on (shift+tab to cycle) · for agents


Codexと同様にAPEXアプリケーションの作成まで実施されます。

概ねプロンプトで指示した機能は実装されています。Claude CodeはManagerとDepartmentの入力が選択リストになっていました。


それぞれの作業ディレクトリのapplications/EMP_CRUD以下に、APEXlang形式で出力されたAPEXアプリケーションのエクスポートが含まれています。

emp-crud-code % ls -R applications/EMP_CRUD 

application.apx page-groups.apx shared-components

deployments pages supporting-objects


applications/EMP_CRUD/deployments:

default.json


applications/EMP_CRUD/pages:

p00000-global-page.apx p00003-employee-form.apx

p00001-home.apx p09999-login.apx

p00002-employees.apx


applications/EMP_CRUD/shared-components:

authentications.apx component-settings.apx static-files.apx

authorizations.apx lists.apx themes

breadcrumbs.apx lovs.apx

build-options.apx static-files


applications/EMP_CRUD/shared-components/static-files:

icons


applications/EMP_CRUD/shared-components/static-files/icons:

app-icon-144-rounded.png app-icon-32.png

app-icon-192.png app-icon-512.png

app-icon-256-rounded.png


applications/EMP_CRUD/shared-components/themes:

universal-theme


applications/EMP_CRUD/shared-components/themes/universal-theme:

theme.apx


applications/EMP_CRUD/supporting-objects:

deinstall-script.sql supporting-objects.apx

emp-crud-code % 


本記事の初出は2026年5月15日でした。その際、2026.05.14のAPEXlang Skillsを使っていました。そのときは、APEXアプリケーションの作成はできたものの、あまり品質は高くない(少なくとも、そのままでは動作しない)ものでしたが、APEXlang Skillsの 2026.06.04 では、エラー無くアプリケーションが動作するレベルまで品質が上がっています。

APEX本体よりもAPEXlang Skillsは頻繁に更新されると思われる(2026年6月5日時点で、2回更新されています)ため、今後もプロンプトから生成されるアプリケーションの精度が上がることが期待できます。

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

Oracle APEXのアプリケーション作成の参考になれば幸いです。