Oracle APEX 26.1から、新機能「APEXlang」が導入されました。
APEXlangは、Oracle APEXアプリケーションの定義をすべてテキスト形式で表した言語です。人にもAIにも読み書きしやすいため、AI駆動開発の手段としても注目されています。
本記事は、APEXlangの導入、手動のアプリ開発、Claude Codeを活用した自動のアプリ開発の3フェーズで実施していきます。
本記事の手順とエラーメッセージは、すべて自分が実際に実行して確認したものです。
日本語の記事ではCodexで試したものが多かったため、本記事ではClaude Codeを使って試してみました。
この記事でわかること
- APEXlangを試すためのAutonomous AI Databaseの作成
- APEXlangの設定
- SQLclでの接続
- APEXlangの使い方
- Claude Codeを活用したアプリ開発
今回はエンジニアが大好きなHello Worldを出力するアプリを開発します。
1.環境構築
- Autonomous AI Databaseの作成
- APEXワークスペースを作成
- ウォレットのダウンロード
- SQLclで接続
Autonomous AI Databaseの作成
OCIコンソールからAutonomous AI Database(以下、ADB)を作成します。
ワークロード・タイプには「APEX」もありますが、「トランザクション処理」 を選びます。
「APEX」では、ADBにSQLNetでの接続ができません。APEXlangの操作にはSQLNetでの接続が必要になるため、「APEX」では作業が進められません。
なお、「トランザクション処理」を選んでも、Oracle APEXが有効化されているため問題なく使えます。
ADMINのパスワードを入力します。 入力後、「作成」ボタンをクリックし、プロビジョニングが完了するのを待ちます。
APEXワークスペースを作成
プロビジョニング後、データベースのコンソールから「データ構成」を開き、Oracle APEXのURLにアクセスします。
先ほど入力したADMINユーザーでサインインします。
右下にOracle APEXのバージョンが表示されます。26.1以上であれば、APEXlangが利用できます。
下記の通り、赤枠をクリックしていき、APEX内のワークスペースを作成します。
本記事では、ワークスペース名とユーザ名をHELLO_WORLDとしました。
ワークスペース作成後、ADMINからサインアウトし、HELLO_WORLDでサインインします。
言語を日本語に変更し、ワークスペースを選択します。
無事にワークスペースが作成できました。
ウォレットのダウンロード
OCIコンソールからウォレットをダウンロードします。ウォレットとは、ADBに安全に接続するための接続先の情報と証明書をまとめたzipファイルです。
また、TNS名も控えてください。TNS名は接続先の名前で、ウォレットの中のtnsnames.oraに、TNS名ごとの接続先(ホスト名やポート番号など)が記載されています。
今回はoracleapexlang_highを使用して接続します。
SQLclで接続
SQLclをダウンロードし、zipファイルを解凍します。
MacBook-Air:~ hayashi$ unzip -q ~/Downloads/sqlcl-latest.zip -d ~/Applications/
MacBook-Air:~ hayashi$ ~/Applications/sqlcl/bin/sql -V
SQLcl: リリース26.3.0.0 Production ビルド: 26.3.0.260.1620
フルパスではなく、sqlコマンドだけで起動できるように、PATHを通しておきます。
MacBook-Air:~ hayashi$ vi .bash_profile
MacBook-Air:~ hayashi$ cat .bash_profile
ーーー省略ーーー
# ~/Applications/sqlcl/bin:を追記
export PATH="$HOME/Applications/sqlcl/bin:/opt/local/bin:/opt/local/sbin:$PATH"
ーーー省略ーーー
MacBook-Air:~ hayashi$ . .bash_profile
まずは接続が可能か確認していきます。ADBに接続する際が最初のハマりどころです。
ワークスペースを作成すると、データベースに2種類のユーザーが作られます。
| ユーザー | 役割 | SQLclでの接続 |
|---|---|---|
HELLO_WORLD |
開発者アカウント(ワークスペース管理者)。App Builderにブラウザでサインインするためのユーザー | 不可(厳密には権限がない) |
WKSP_HELLOWORLD |
ワークスペースのスキーマ(パース・スキーマ)。アプリのテーブルなどを持つユーザー | 可能 |
SQLclから接続するのはWKSP_で始まるスキーマ側です。
最初は分からずにHELLO_WORLDで接続してしまい、下記のエラーが発生しました。
MacBook-Air:~ hayashi$ sql -cloudconfig /Users/hayashi/Desktop/Wallet_OracleAPEXlang.zip HELLO_WORLD@oracleapexlang_high
ーーー省略ーーー
接続に失敗しました
USER = HELLO_WORLD
URL = jdbc:oracle:thin:@oracleapexlang_high
エラー・メッセージ = ORA-01045: Login denied. User HELLO_WORLD does not have CREATE SESSION privilege.
WKSP_HELLOWORLDのパスワードは分からないため、ADMINでパスワードを再設定し、WKSP_HELLOWORLDスキーマにログインします。
また、SQLclにapexlang_helloの接続情報を保存しておきます。
MacBook-Air:apexlang-work hayashi$ sql -cloudconfig /Users/hayashi/Desktop/Wallet_OracleAPEXlang.zip ADMIN@oracleapexlang_high
ーーー省略ーーー
Copyright (c) 1982, 2026, Oracle. All rights reserved.
パスワード (**********?) *************
接続先:
Oracle AI Database 26ai Enterprise Edition Release 23.26.4.1.0 - Production
Version 23.26.4.1.0
SQL> alter user WKSP_HELLOWORLD identified by "<パスワード入力>" account unlock;
User WKSP_HELLOWORLDが変更されました。
SQL> conn -save apexlang_hello -savepwd -cloudconfig /Users/hayashi/Desktop/Wallet_OracleAPEXlang.zip WKSP_HELLOWORLD@oracleapexlang_high
パスワード (**********?) *************
名前: apexlang_hello
接続文字列: oracleapexlang_high
ユーザー: WKSP_HELLOWORLD
パスワード: ******
ーーー省略ーーー
接続しました.
SQL> select user from dual;
USER
__________________
WKSP_HELLOWORLD
SQL> select workspace from apex_workspaces;
WORKSPACE
______________
HELLO_WORLD
SQL> exit
Oracle AI Database 26ai Enterprise Edition Release 23.26.4.1.0 - Production
Version 23.26.4.1.0から切断されました
HELLO_WORLDが表示されれば、ワークスペースのスキーマに接続できています。
次回からはsql -name apexlang_helloだけで接続できます。
2.手動のアプリ開発
- APEXlangの雛形を作成
- Hello Worldを手動作成
- APEXlangの検証とインポート
APEXlangの雛形を作成
apex generateでAPEXlangの雛形を作成します。
MacBook-Air:~ hayashi$ mkdir apexlang-work
MacBook-Air:~ hayashi$ cd apexlang-work/
MacBook-Air:apexlang-work hayashi$ sql -name apexlang_hello
ーーー省略ーーー
SQL> apex generate -alias hello-world
ファイルが/Users/hayashi/apexlang-work/hello-worldに作成されました
SQL> exit
下記のファイルが作成されました。
MacBook-Air:apexlang-work hayashi$ ls -lah hello-world/
total 16
drwxr-xr-x@ 9 hayashi staff 288B 10月 24 20:59 .
drwxr-xr-x 4 hayashi staff 128B 10月 24 20:59 ..
drwxr-xr-x@ 3 hayashi staff 96B 10月 24 20:59 .apex
-rw-r--r--@ 1 hayashi staff 1.1K 10月 24 20:59 application.apx
drwxr-xr-x@ 3 hayashi staff 96B 10月 24 20:59 deployments
-rw-r--r--@ 1 hayashi staff 55B 10月 24 20:59 page-groups.apx
drwxr-xr-x@ 5 hayashi staff 160B 10月 24 20:59 pages
drwxr-xr-x@ 12 hayashi staff 384B 10月 24 20:59 shared-components
drwxr-xr-x@ 4 hayashi staff 128B 10月 24 20:59 supporting-objects
拡張子が.apxのファイルが、APEXlangで書かれたファイルです。これらのファイルを編集し、インポートすることでOracle APEXのアプリケーションを作成します。
| ファイル・フォルダ | 内容 |
|---|---|
application.apx |
アプリ全体の設定 |
pages/ |
ページ。1ページ=1ファイル(p00001-home.apxがホームページ) |
shared-components/ |
共有コンポーネント |
deployments/default.json |
インポート先の設定 |
supporting-objects/ |
内部のSQLスクリプト |
.apex |
内部メタデータ |
Hello Worldを手動作成
ホームページ(p00001-home.apx)に、下記を追加・変更します。
- タイトルを
&APP_TITLE.から「Hello World」に変更 - 「Create Oracle APEXlang」リージョンを追加
MacBook-Air:apexlang-work hayashi$ vi ./hello-world/pages/p00001-home.apx
MacBook-Air:apexlang-work hayashi$ cat ./hello-world/pages/p00001-home.apx
ーーー省略ーーー
region app-name (
name: Home
title: Hello World //編集した箇所
type: staticContent
ーーー省略ーーー
)
region create-apexlang ( //編集した箇所
name: Create Oracle APEXlang //編集した箇所
title: Create Oracle APEXlang //編集した箇所
type: staticContent //編集した箇所
layout { //編集した箇所
sequence: 20 //編集した箇所
slot: contentBody //編集した箇所
} //編集した箇所
appearance { //編集した箇所
template: @/standard //編集した箇所
templateOptions: #DEFAULT# //編集した箇所
} //編集した箇所
) //編集した箇所
)
APEXlangの検証とインポート
apex validateを実行すると、APEXlangの構文や設定値を確認できます。
その後、apex import -input <フォルダパス>を実行すると、アプリケーションとしてインポートされます。
では、作成したフォルダを検証してみましょう。
MacBook-Air:apexlang-work hayashi$ sql -name apexlang_hello
ーーー省略ーーー
SQL> apex validate -input ./hello-world
APEXlangコンパイル警告:
ファイル: pages/p00001-home.apx
行: 39
列: 12
タイプ: INVALID_LOV
警告: Invalid Slot value: layout - slot (STRING) : contentBody
Valid values are :
footer
-afterLogo
-afterNavigationBar
-beforeNavigationBar
-breadcrumbBar
-fullWidthContent
-dialogsDrawersAndPopups
-body
-topNavigation
-banner
-afterHeader
-beforeFooter
検証成功
slot句にcontentBodyという値が存在しないため、警告が出力されました。
試しに、このままインポートしてみましょう。
SQL> apex import -input ./hello-world
アプリケーションID: 101をワークスペース: HELLO_WORLDにインポートしています
APEXlangコンパイル警告:
ファイル: pages/p00001-home.apx
行: 39
列: 12
タイプ: INVALID_LOV
ーーー省略ーーー
インポートに成功しました。
警告があっても「検証成功」となり、apex importも実行できました。インポート後に修正するのも一つの手だと考えます。
上記の実行画面には何も表示されていませんが、下記の管理画面で確認すると、リージョン(create-apexlang)は作成されていたが無効な状態でした。
警告に表示されたslot句は、bodyに修正しました。
続けて、リージョンの中にテキストの入力欄(P1_MESSAGE)も追加しました。
MacBook-Air:apexlang-work hayashi$ vi ./hello-world/pages/p00001-home.apx
MacBook-Air:apexlang-work hayashi$ cat ./hello-world/pages/p00001-home.apx
ーーー省略ーーー
region create-apexlang (
name: Create Oracle APEXlang
title: Create Oracle APEXlang
type: staticContent
layout {
sequence: 20
slot: body //修正した箇所
}
appearance {
template: @/standard
templateOptions: #DEFAULT#
}
)
//ここから追記
pageItem P1_MESSAGE (
type: textField
label {
label: メッセージ
}
layout {
sequence: 10
region: @create-apexlang
slot: regionBody
}
appearance {
template: @/optional-floating
templateOptions: #DEFAULT#
}
)
//ここまで追記
)
再度検証を行い、インポートを実施します。
SQL> apex validate -input ./hello-world
検証成功
SQL> apex import -input ./hello-world
アプリケーションID: 103をワークスペース: HELLO_WORLDにインポートしています
インポートに成功しました
今度はエラーが出力されることなくインポートできました。
入力欄も正常に動作しています。
ここで、アプリケーションIDが103になっている点に注目してください。最初に警告ありでインポートした際は、アプリケーションIDが101でした。
インポートするたびに、アプリケーションが更新されず、新しく作成され続けています。
このままでは、インポートするたびに同じようなアプリケーションが増え、どれが最新か分からなくなります。
原因は、deployments/default.jsonが空のためです。インポート先のアプリケーションIDが決まっていないため、空いているIDが自動で割り当てられます。
今後同じアプリケーションIDで上書きするには、default.jsonにアプリケーションIDを記載します。
MacBook-Air:apexlang-work hayashi$ vi ./hello-world/deployments/default.json
MacBook-Air:apexlang-work hayashi$ cat ./hello-world/deployments/default.json
{
"app": {
"id": 101
},
"workspace": {
"name": "HELLO_WORLD"
}
}
3.Claude Codeを活用した自動のアプリ開発
- Claude CodeにSQLcl MCPサーバーの設定
- スキルの導入
- Hello Worldを自動作成
- Todoアプリを作成
Claude CodeにSQLcl MCPサーバーの設定
Claude Codeをインストールします。
MacBook-Air:apexlang-work hayashi$ curl -fsSL https://claude.ai/install.sh | bash
ーーー省略ーーー
✔ Claude Code successfully installed!
Version: 2.1.310
Location: ~/.local/bin/claude
ーーー省略ーーー
MacBook-Air:apexlang-work hayashi$ source ~/.bash_profile
MacBook-Air:apexlang-work hayashi$ claude -version
2.1.310 (Claude Code)
続いて、SQLclのMCPサーバーをClaude Codeに登録します。これにより、Claude CodeからADBを操作できるようになります。
MacBook-Air:apexlang-work hayashi$ claude mcp add --transport stdio --scope local sqlcl -- /Users/hayashi/Applications/sqlcl/bin/sql -mcp
Added stdio MCP server sqlcl with command: /Users/hayashi/Applications/sqlcl/bin/sql -mcp to local config
File modified: /Users/hayashi/.claude.json [project: /Users/hayashi/apexlang-work]
MacBook-Air:apexlang-work hayashi$ claude mcp list
sqlcl: /Users/hayashi/Applications/sqlcl/bin/sql -mcp - ✔ Connected
Connectedと表示されれば、登録完了です。
スキルの導入
Oracleが公開しているAIエージェント向けのスキル(作業手順書)を、SQLclから導入します。スキルを導入することで、Claude CodeがAPEXlangの書き方やSQLclのコマンドを理解した上で作業します。
MacBook-Air:~ hayashi$ sql -name apexlang_hello
ーーー省略ーーー
SQL> skills sync -skill-name apex,db
SUCCESS: DBToolsスキル・リポジトリを/Users/hayashi/.dbtools/skills/repositories/oracle-skillsバージョンlatestに同期しました(ーーー省略ーーー)。
SUCCESS: 6エントリをエージェント・スキルの場所にインストールしました。
ーーー省略ーーー
SQL> skills list
ーーー省略ーーー
| apex | INSTALLED | claude-code, codex, cursor |
| db | INSTALLED | claude-code, codex, cursor |
| fusion | AVAILABLE | なし |
| graal | AVAILABLE | なし |
| oci | AVAILABLE | なし |
ーーー省略ーーー
SQL> exit
MacBook-Air:~ hayashi$ ls ~/.claude/skills
apex db
apexとdbのスキルが、Claude Code向けにインストールされました。
Hello Worldを自動作成
claudeを起動し、下記の通り依頼します。
❯ Oracle APEXlangを使って、モダンなデザインの「Hello World」アプリを新しく作成してください。
作業フォルダは./hello-world-aiとしてください(既存の hello-world フォルダは変更しないでください)
デザインは、Oracle APEX標準のユニバーサル・テーマの部品だけで仕上げてください
DB接続は、SQLcl の保存済み接続 apexlang_helloを使ってください
apex validateで警告も含めて問題がないことを確認してから、apex importしてください
約3分で、アプリケーションID:104のHello Worldアプリが作成されました。
名前を入力して「あいさつする」ボタンを押すと、「こんにちは、〇〇 さん!」というメッセージが表示されます。
手動作成で30分以上かかりましたが、APEXlang × Claude Codeでさらに質の良いものを約3分で作成しました。
Todoアプリを作成
Hello Worldの次に作るものといえば、Todoアプリですね(エンジニアはみんな大好き)。
Hello Worldと異なり、データを保存するテーブルの作成が必要になるため、あわせて依頼します。
❯ Oracle APEXlang を使って、Todoアプリを新しく作成してください。
作業フォルダは todo-app としてください(既存のフォルダは変更しないでください)。
機能は、Todoの一覧表示、追加、編集、完了チェック、削除です。
デザインは、Oracle APEX 標準のユニバーサル・テーマの部品だけで、モダンに仕上げてください。
Todoを保存するテーブルやプロシージャ等のオブジェクトが必要な場合、私の確認なしで自動で実行してください。
DB接続は、SQLclの保存済み接続:apexlang_helloを使ってください。
apex validateで警告も含めて問題がないことを確認してから、apex importしてください。
アプリケーションID:105として、Todoアプリが作成されました。Todoを保存するTODOSテーブルも、Claude Codeが作成しています。
Todoの作成や更新も正常に動作しました。
さらに、カテゴリー機能の追加を依頼しました。
❯ ToDOにカテゴリー(分類)機能を追加してください。
カテゴリー機能の追加の際、apex validateで6件のエラーが発生しました。Claude Code自身も、一部は推測で記載したと報告してきました。
エラーを修正した後、無事にカテゴリー機能が追加されました。
手動でもAIでも、apex validateで検証することが重要です。
まとめ
Oracle APEXlangでアプリを作成する手順は、下記の通りです。
- ADBは「トランザクション処理」で作成する
- SQLclからは
WKSP_で始まるスキーマで接続する -
apex generateで雛形を作成する -
.apxファイルを編集する(手動、またはClaude Code) -
apex validateで警告も含めて検証する -
apex importでインポートする
手動で書くとAPEXlangの仕組みが理解でき、Claude Codeを活用すると短時間でアプリが作成できます。AIが作成した内容を確認するためにも、まずは手動でAPEXlangに触れておくことをおすすめします。
最後までご愛読ありがとうございました。


























