LoginSignup
7
3

はじめに

新たにリリースされたOracle APEX24.1の新機能、APEX AIアシスタントを使用して、自然言語でアプリケーションを作成します。

APEX AIアシスタントは、OpenAIなどの生成AIサービスを使用し、ユーザーが入力したテキスト(自然言語)からPL/SQLCSSHTMLJavaScriptのコードを記述します。

自然言語で指示をするだけで、APEXアシスタントがコードを記述してくれます。その他にも、PL/SQL、CSS、HTML、JavaScriptについての説明や、バグの修正を行う事が出来るので、コーディングに費やす時間を大幅に削減する事が出来ます。

本記事ではAPEXアシスタントを使用し、SQLクエリを記述したいと思います。

【前提条件】

  • Oracle APEXのワークスペースが作成済みであること
    (ワークスペースの作成方法はこちらをご参照ください。)
  • 使用可能なOpenAI、若しくはCohereのAPIキーが作成済みであること
    (OpenAIのAPIキー取得方法はこちらをご参照ください。)

Oracle APEXの生成AIサービスは、2024年6月現在、OpenAIとCohereをAIプロバイダーとして使用することが出来ます。現時点ではOCI Genarative AIは、APEX_AIパッケージのみで使用可能です。

【所要時間】
20分程

1. 生成AIサービスの作成

APEXアシスタントの機能を使用するため、APEX上で生成AIサービスを作成します。

既にAPEX上で生成AIサービスを作成済みの場合は再度作成いただく必要はありません。2. サンプルアプリケーションの作成へスキップします。

  1. 作成したAPEXのワークスペースにログインし、アプリケーション・ビルダーをクリックします。
    1.png

  2. ワークスペース・ユーティリティをクリックします。
    2.png

  3. 生成AIをクリックします。
    3.png

  4. 作成をクリックし、生成AIサービスを作成します。
    4.png

  5. 以下の通りに記入し、作成をクリックします。

    • AIプロバイダ - OpenAI(CohereのAPIを使用する場合は、Cohereを選択します)
    • 名前 - 任意(本記事では、OpenAI Demoとしています)
    • アプリケーション・ビルダーで使用 - トグルをオン
    • APIキー - 取得したAPIキー
      5.png

  6. 生成AIサービスを作成する事が出来ました。
    image.png

2. サンプルアプリケーションの作成

APEXアシスタントの機能を試すために、アプリケーションとデータセットが必要です。

APEXのワークスペース上に、サンプルデータセットをロードし、新しいアプリケーションを作成します(既にEMP表、DEPT表をダウンロードし、アプリケーションを作成済みの場合は3. APEXアシスタントを使ってみるへスキップして下さい。)。

  1. 画面上部の検索をクリックし、検索フィールドにサンプルと入力します。検索結果に表示されるサンプル・データセットをクリックします。
    21.png

  2. アプリケーションの作成に必要なデータをインストールします。本記事では、EMP/DEPTというサンプル・データセットをインストールします。インストールをクリックします。
    2.png

  3. 言語を日本語へ変更し、をクリックします。
    3.png

  4. データセットのインストールをクリックします。
    4.png

  5. データセットのインストールが終了しました。アプリケーションの作成をクリックします。
    5.png

  6. 設定はそのままにし、アプリケーションの作成をクリックします。
    6.png

  7. これで、アプリケーションの作成が終わりました。SQLワークショップをクリックし、インポートしたEMP表とDEPT表を確認します。
    7.png

  8. オブジェクト・ブラウザをクリックします。
    8.png

  9. 先程インポートしたEMP表とDEPT表が表示されています。それぞれの表にどの様なデータが格納されているか確認します。

    EMP表には従業員の氏名や職種、給与等の情報が格納されており、DEPT表には部署のID、名前、所在地が格納されている事が分かりました。また、EMP表のDEPTNOはDEPT表の主キーであるDEPTNOを参照している事が分かりました。

    データセットの確認が終わったら、アプリケーション・ビルダーへ戻ります。
    9.png

3. APEXアシスタントを使ってみる

生成AIサービス、サンプルアプリケーションの用意ができたので、APEXアシスタントを使用してみましょう。

  1. 先ずは、作成したアプリケーションを確認してみます。アプリケーションの実行をクリックします。
    31.png

  2. ログイン画面が表示されるので、ワークスペースのユーザー名とパスワードを入力します。
    32.png

  3. アプリケーションにログインする事が出来ました。従業員と書いてあるページをクリックします。
    33.png

  4. このページには、従業員の氏名、部署名、入社日(Hired)などの情報が表示されています。

    「入社してから何年経過しているか」、「どの支部で働いているか(部署の所在地)」という2つの情報を追加したいと思います。

    画面下部にあるページ3をクリックします。
    34.png

  5. 従業員ページのページ・デザイナで編集を行います。

    Employeeというクラシック・レポートをクリックし、ソース>タイプSQL問合せへ変更し、その下に表示されるSQL問合せのコード・エディタを開きます。
    35.png

  6. コード・エディタにAPEXアシスタント機能があるので、クリックします。

    生成AIサービスが作成されていない場合は表示されません。まだ生成AIサービスを作成していない場合は、1. 生成AIサービスの作成をご参照ください。
    36.png

  7. 先ずは従業員ページの表に、それぞれの従業員が「どの支部で働いているか(部署の所在地)」表示させたいと思います。

    インポートしたデータセットを確認した際に、所在地はLOCという列に格納されている事を確認したので、「LOCの情報も追加してください」と入力してみます。
    37.png
    すると、表を結合してLOC列を表示するSQLクエリを生成してくれました。挿入をクリックし、SQLクエリをアップデートします。

  8. 次に、従業員が「入社してから何年経過しているか」というデータも表示させたいと思います。表示するフォーマットも指定します。
    38.png

    指定した通りのフォーマットで「入社してから何年経過しているか」というデータを表示するSQLクエリを生成してくれました。クエリを挿入し、保存と実行のボタンをクリックします。

    参考:
    「1年前」といった形式で表示してくださいと指定しただけですが、1年に満たない場合は「1年未満」と表示するようにクエリを生成してくれました。以下がAPEXアシスタントが生成したクエリです。

         select emp.empno,
                emp.ename,
                emp.job,
                emp.mgr,
                emp.hiredate,
                emp.sal,
                emp.comm,
                emp.deptno,
                dept.loc,
                CASE
                    WHEN months_between(sysdate, emp.hiredate) < 12 THEN '1年未満'
                    ELSE TRUNC(months_between(sysdate, emp.hiredate) / 12) || '年前'
                END as years_since_hire
           from emp
    
  9. 編集した内容が反映されているか確認します。Locという列に「どの支部で働いているか(部署の所在地)」というデータが表示、Years Since Hire列に、「入社してから何年経過しているか」というデータを表示する事が出来ました。
    スクリーンショット 2024-06-26 110519.png


  10. 次に、画面上部のナビゲーション・バーからダッシュボードをクリックし、ダッシュボードページを確認します。

    ダッシュボードページ下部にある部署ごとの総給与と、職種ごとの合計給与を、それぞれ平均給与に変更したいと思います。画面下部、開発者ツール・バーのページ2をクリックします。
    310.png

  11. ダッシュボードページのページ・デザイナで、部署ごとの総給与と職種ごとの合計給与のグラフを編集します。

    先ずは、部署ごとの総給与シリーズ1をクリックします。ソース>タイプSQL問合せへ変更します。その下に表示されるSQL問合せのコード・エディタを開きます。
    311.png

  12. コード・エディタでAPEXアシスタントをクリックし、プロンプトからAPEXアシスタントへ指示を出します。先程は列名を明記して指示を出しましたが、今回は列名を出さずに指示を出してみます。

    部署ごとの平均給与のグラフに変更したいので、部署ごとの平均給与と指示を出します。
    スクリーンショット 2024-06-26 132823.png


  13. 部署ごとの平均給与を出すことの出来るSQLクエリを生成してくれました。挿入をクリックし、SQLクエリをAPEXアシスタントが生成したものに変更します。

    生成してくれたクエリがどいったものなのか解説をお願いしてみます。クエリー・ビルダーをクリックし、一般的なサポートへ切り替えます。
    スクリーンショット 2024-06-26 112242.png


  14. 一般的なサポートで、説明の選択をクリックします。
    スクリーンショット 2024-06-26 112309.png


  15. 説明の選択をクリックすると、自動でAPEXアシスタントへ指示が送られ、APEXアシスタントがSQLクエリの説明を行います。

    説明を確認したら、チャットのクリアを押してみます。
    スクリーンショット 2024-06-26 112333.png


  16. 今までの会話履歴がクリアされました。

    次は、向上の選択をクリックし、現在のSQLクエリを改善するにはどうすれば良いか聞いてみます。
    スクリーンショット 2024-06-26 113840.png

  17. 向上の選択をクリックすると、自動でAPEXアシスタントへ指示が送られました。APEXアシスタントが、どの様にしてクエリを改善することが出来るか提案、提案に沿ったSQLクエリの修正を行ってくれました。
    スクリーンショット 2024-06-26 113943.png


  18. 提案内容を確認し、修正後のクエリを挿入します。

    修正後のクエリの説明や、クエリの向上を再度行いたい場合、他に何か質問などある場合は、プロンプトにメッセージを入力します。このままで良い場合は、右下にあるOKボタンをクリックし、SQLクエリの変更を保存します。
    スクリーンショット 2024-06-26 114047.png


  19. 列のマッピング>値AVERAGE_SALARYと変更します。

    APEXアシスタントが生成したSQLクエリによって値の列名は変わるので、ご注意下さい(本記事では、給与の平均をAVERAGE_SALARYという列別名で表しているため、AVERAGE_SALARYを選択しました)
    321.png

  20. 識別>名前部署ごとの平均給与と変更し、画面上部にある保存と実行ボタンをクリックします。
    322.png

    その他、一般的なサポートモードで出来ること:

    • SQLに関する一般的な質問 - SQLに関する質問をする事が出来ます。
      300.png

    • バグの修正 - 「この修正のヘルプ」をクリックするだけで、どこにバグがあるのかすぐに突き止め、修正済みのSQLクエリを記述してくれます。
      301.png


  21. 変更が反映されているのが確認できます。部署ごとの平均給与が一目で分かり、会計の部署の平均給与が一番高いということが分かります。

    「職種ごとの合計給与」のグラフも同様に、APEXアシスタントを使用し「職種ごとの平均給与」のグラフに変更してみて下さい。
    323.png

  22. 「職種ごとの平均給与」のグラフは以下の様になります。
    324.png

これで本記事は終了です。
AIがAPEX上でアプリケーション開発支援をしてくれる様になり、より素早くより簡単にアプリケーション開発を行う事が出来る様になりました。是非、APEXアシスタントをご活用ください。

参考資料

7
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
7
3