4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Oracle】APEXlang × Claude CodeのOracle APEXアプリAI駆動開発

4
Last updated at Posted at 2026-10-27

image.png

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を活用したアプリ開発

image.png

今回はエンジニアが大好きなHello Worldを出力するアプリを開発します。

1.環境構築

  • Autonomous AI Databaseの作成
  • APEXワークスペースを作成
  • ウォレットのダウンロード
  • SQLclで接続

Autonomous AI Databaseの作成

OCIコンソールからAutonomous AI Database(以下、ADB)を作成します。

1.jpg

ワークロード・タイプには「APEX」もありますが、「トランザクション処理」 を選びます。

「APEX」では、ADBにSQLNetでの接続ができません。APEXlangの操作にはSQLNetでの接続が必要になるため、「APEX」では作業が進められません。

なお、「トランザクション処理」を選んでも、Oracle APEXが有効化されているため問題なく使えます。

2.jpg

ADMINのパスワードを入力します。 入力後、「作成」ボタンをクリックし、プロビジョニングが完了するのを待ちます。

APEXワークスペースを作成

5.jpg

プロビジョニング後、データベースのコンソールから「データ構成」を開き、Oracle APEXのURLにアクセスします。

6.jpg

先ほど入力したADMINユーザーでサインインします。

右下にOracle APEXのバージョンが表示されます。26.1以上であれば、APEXlangが利用できます。

下記の通り、赤枠をクリックしていき、APEX内のワークスペースを作成します。

7.jpg
8.jpg
9.jpg

本記事では、ワークスペース名とユーザ名をHELLO_WORLDとしました。

10.jpg

ワークスペース作成後、ADMINからサインアウトし、HELLO_WORLDでサインインします。

13.jpg

言語を日本語に変更し、ワークスペースを選択します。

14.jpg

無事にワークスペースが作成できました。

15.jpg

ウォレットのダウンロード

OCIコンソールからウォレットをダウンロードします。ウォレットとは、ADBに安全に接続するための接続先の情報と証明書をまとめたzipファイルです。

17.jpg

また、TNS名も控えてください。TNS名は接続先の名前で、ウォレットの中のtnsnames.oraに、TNS名ごとの接続先(ホスト名やポート番号など)が記載されています。

今回はoracleapexlang_highを使用して接続します。

19.jpg

SQLclで接続

16.jpg

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も実行できました。インポート後に修正するのも一つの手だと考えます。

20.jpg

21.jpg

上記の実行画面には何も表示されていませんが、下記の管理画面で確認すると、リージョン(create-apexlang)は作成されていたが無効な状態でした。

22.jpg

警告に表示された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にインポートしています
インポートに成功しました

今度はエラーが出力されることなくインポートできました。

23.jpg

入力欄も正常に動作しています。

24.jpg

ここで、アプリケーション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アプリが作成されました。

名前を入力して「あいさつする」ボタンを押すと、「こんにちは、〇〇 さん!」というメッセージが表示されます。

25.jpg
26.jpg

手動作成で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が作成しています。

2.jpg

Todoの作成や更新も正常に動作しました。

3.jpg

さらに、カテゴリー機能の追加を依頼しました。

❯ ToDOにカテゴリー(分類)機能を追加してください。

カテゴリー機能の追加の際、apex validateで6件のエラーが発生しました。Claude Code自身も、一部は推測で記載したと報告してきました。

エラーを修正した後、無事にカテゴリー機能が追加されました。

28.jpg

手動でもAIでも、apex validateで検証することが重要です。

まとめ

image.png

Oracle APEXlangでアプリを作成する手順は、下記の通りです。

  1. ADBは「トランザクション処理」で作成する
  2. SQLclからはWKSP_で始まるスキーマで接続する
  3. apex generateで雛形を作成する
  4. .apxファイルを編集する(手動、またはClaude Code)
  5. apex validateで警告も含めて検証する
  6. apex importでインポートする

手動で書くとAPEXlangの仕組みが理解でき、Claude Codeを活用すると短時間でアプリが作成できます。AIが作成した内容を確認するためにも、まずは手動でAPEXlangに触れておくことをおすすめします。

最後までご愛読ありがとうございました。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?