Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Oracle APEX - 普通の人々のためのコーディング

Oracle APEX - 普通の人々のためのコーディング

Oracle Developer Days 2019でのAPEXのセッションで使用した資料で、その後、改訂したもの。

oracle4engineer

October 18, 2019
Tweet

More Decks by oracle4engineer

Other Decks in Programming

Transcript

  1. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 1 Oracle APEX 中越祐治 APEXユーザーグループ@東京 日本オラクル株式会社 2019年10月18日 普通の人々のためのコーディング
  2. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 2 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。 また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことは できません。以下の事項は、マテリアルやコード、機能を提供することをコミット メント(確約)するものではないため、購買決定を行う際の判断材料になさらない で下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期 については、弊社の裁量により決定されます。 OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国にお ける登録商標です。 文中の社名、商品名等は各社の商標または登録商標である場合があります。
  3. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | はじめに Oracle APEXの製品紹介 3
  4. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 5 データベースで動作するWebアプリケーション開発フレームワーク Oracle APEX デクストップ向けと モバイル向けの Webアプリ開発 データベースにある データの 可視化と保守 SQLのスキルや データベースが提供 する能力を活用
  5. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 6 利用の一例 Oracle APEX 簡易アプリケーション、 セルフ・サービス・アプリ ケーションの開発 エンタープライズ・アプリ ケーションの拡張 ファイルを使ったアプリや、 クライアント・サーバー・アプ リのWebへの移行
  6. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 7 差別化要因 Oracle APEX 開発環境は Webブラウザ 特別なクライアント ソフトウェアは不要 アプリケーション定義 をデータ ベースにメタデータとして保存 宣言的 – コード生成はしない 一回のリクエストに対して、 ページ全体を効率良く 一つのレスポンスとして生成 データ処理はデータベース 内部で実行
  7. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 9 米国特許 – 1999年9月出願 Method and apparatus for dynamically rendering components at run time US6507833B1 Method and apparatus for using meta data to dynamically generating display page to solicit input from a user US6493704B1
  8. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 10 RAD Stack: REST (ORDS) – APEX – Database • 構成要素 • Oracle REST Data Services (ORDS) • Oracle APEX • Oracle Database • 利用可能な環境 • 無償検証環境 apex.oracle.com • Free Tier – Free Autonomous Database • クラウド環境(OCI Database, Autonomous Database – ADW/ATP) • OnP環境 Oracle EE, SE2, Exadata, ODA, XE
  9. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 12 Oracle Databace 18c Express Edition • CPUの上限は2つ(2スレッド) • ユーザー・データの上限は12GB • メモリ(SGA+PGA)の上限は2GB • シングル・インスタンスでの利用のみ • RAC, Data Guardといった機能は利用不可 • 有償サポートは提供されません https://www.oracle.com/jp/database/technologies/appdev/xe.html
  10. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 13 Oracle REST Data Services (ORDS) https://www.oracle.com/jp/database/technologies/appdev/rest.html ORDS 19.1 から、データベースの運用管理操作、パフォーマンス 監視のためのREST APIも提供(デフォルトは無効)。
  11. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 14 Oracle APEX https://apex.oracle.com/ja/
  12. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 15 Oracle Cloud Free Tier https://oracle.com/ja/cloud/free/
  13. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 16 Oracle APEXのミッション “Deliver the most modern and complete integrated development platform with the most robust components, with the fastest performance, secured by default, and continuously innovated. ” - Michael Hichwa, SVP, Software Development, Oracle Corporation • 無償環境の継続提供 (Oracle Database Express Edition, apex.oracle.com) • 速度、セキュリティ、最新であることを追求 • 年2回のリリース • クラウド、オン・プレミス、Mac/PCのどこでも実行可能
  14. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 19 3層アーキテクチャー アプリケーションの 構成情報 静的ファイルと リクエストの受付 HTTPS JDBC
  15. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 20 リクエストのフロー GET /pls/apex/f?p=123:5:234553… f(p => ‘123:5:234553…’)
  16. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 21 処理のフロー https://apex.oracle.com/architecture/ URL f?p=アプリ:ページ:セッション:... 例えば f?p=103:4:32320892:… リクエストはステートレスで、セッション番 号はURLに必ず含まれる。 ページがアクセス対象で、画面定義と処 理はページに記載される。
  17. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 22 処理のフロー https://apex.oracle.com/architecture/ Application Definition アプリケーションに定義した設定をセッ ションに反映させる。
  18. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 23 処理のフロー https://apex.oracle.com/architecture/ Authentication & Authorization 認証と認可の処理を行う。 認証、認可ともに組み込み済みのロジッ クと、PL/SQLによるカスタム・ロジックによ る実装が可能。
  19. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 24 処理のフロー https://apex.oracle.com/architecture/ Session State セッションに紐づいた情報をデータベー スからリストアする。
  20. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 25 処理のフロー https://apex.oracle.com/architecture/ Processes 開発者によって定義された処理を行う。 大抵は、データベースから、画面に表示 するためのデータを取り出す処理が行わ れる。
  21. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 26 処理のフロー https://apex.oracle.com/architecture/ Regions, Buttons, Items ページとして定義された情報を元に、画 面をレンダリング – HTMLの生成 – を行う。
  22. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 27 処理のフロー https://apex.oracle.com/architecture/ Dynamic Actions 定義に従って、生成されるHTMLに JavaScriptのコードを挿入する。 JavaScriptは、ブラウザ上で実行される。
  23. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 28 処理のフロー https://apex.oracle.com/architecture/ Application Definition GETのパスと同様の処理を行う。 Authentication & Autorization Session State
  24. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 29 処理のフロー https://apex.oracle.com/architecture/ Computations フォームのPOSTで引き渡される値に後処 理を行う。 例えば、大文字に変換する、など。
  25. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 30 処理のフロー https://apex.oracle.com/architecture/ Validations POSTで渡される値を検証する。 例えば、 1 – 100 の間の数値 10文字以下 といった設定。
  26. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 31 処理のフロー https://apex.oracle.com/architecture/ Processes 開発者によって定義された処理を行う。 大抵は、フォームのポストで受け取った データにて、データベースの操作を行う。 (行の挿入、更新、削除)
  27. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 32 処理のフロー https://apex.oracle.com/architecture/ Branch POSTを処理結果を表示するページに遷 移する。
  28. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 33 データベース・サーバー Data APEX engine Database • レイテンシのないデータ・アクセス • ネットワークを経由しない • ミリ秒以下のSQL実行コスト • メタデータ主導 • コード生成はしない; メタデータが実装 • 宣言的; 抽象化された実装 • アップグレードの際に再生成不要 • 全てデータベースに保存 • データベースの運用=アプリケーションの 運用 • データベースの機能をそのまま利用 • Autonomous, RAC, Data Guard, JSON, Analytics, MVRC, ACID transaction, Row Locking, Flashback, In Memory, Multitenant, Database Vault…
  29. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 34 レイテンシのないデータアクセス 問: PL/SQLからデータベース の表の問い合わせを行うの に要する時間は? 答: 約 0.000091秒 (apex.oracle.com 上で計測)
  30. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 35 APEXアーキテクチャー 問 答 どうしてAPEXをデータベースに 実装したのですか? そこにデータがあるから 高速なデータ・アクセス (1/10000秒の単位) 容易な記述(SQL) 容易な管理、モニター、アップグレード(データベースのツールを使用)
  31. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | アプリケーション開発 No Code – Low Code – High Control 36
  32. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 38 Forresterによるロー・コードの定義 Low code platforms enable rapid delivery of business applications with a minimum of hand- coding and less upfront investment in setup, training, and deployment. Forrester Wave 2016
  33. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 39 ロー・コード vs ハイ・コントロール JavaScript APEX ロー・コード ハイ・コントロール Oracle APEXによる開発は、ハンド・コーディングと比較して、10倍は生産性が高い。
  34. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 40 Oracle APEXによるアプリケーション開発 アプリケーションの定義 ページの定義 リージョンの定義 ページ・アイテムの定義 動作の定義 宣言による指定 コードによる記述
  35. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 41 Oracle APEXで使用するコード SQL レポート、チャートのデータソースを定義 PL/SQL サブミットされたフォームの処理を定義 JavaScript ブラウザ上で実行されるUIの動作を拡張 CSS ブラウザ上でのUIの見かけを拡張
  36. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 42 データソースの定義 - SQL ノー・コード チャートのデータとして使 用する表を選択する。 ロー・コード チャートのデータをSQLに て問い合わせる。 例えばチャートの定義
  37. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 43 フォームの処理 – PL/SQL ノー・コード タイプとして”フォーム – 行の自動処理(DML)”を 選んで、フォーム・リー ジョンを指定。 ロー・コード begin if :REQUEST = 'CREATE' then insert into DEMO_CUSTOMERS( CUSTOMER_ID,CUST_FIRST_NAME,CUST_LAST_NAME,CUST_STREET_ADDRESS1,CUST_STREET_ADDRESS2, CUST_CITY,CUST_STATE,CUST_POSTAL_CODE,CUST_EMAIL,PHONE_NUMBER1,PHONE_NUMBER2, URL,CREDIT_LIMIT,TAGS ) values ( :P22_CUSTOMER_ID,:P22_CUST_FIRST_NAME,:P22_CUST_LAST_NAME,:P22_CUST_STREET_ADDRESS1,:P22_CUST_STREET_ADDRESS2, :P22_CUST_CITY,:P22_CUST_STATE,:P22_CUST_POSTAL_CODE,:P22_CUST_EMAIL,:P22_PHONE_NUMBER1,:P22_PHONE_NUMBER2, :P22_URL,:P22_CREDIT_LIMIT,:P22_TAGS ); elsif :REQUEST = 'SAVE' then update "DEMO_CUSTOMERS" set "CUSTOMER_ID" = :P22_CUSTOMER_ID, "CUST_FIRST_NAME" = :P22_CUST_FIRST_NAME, "CUST_LAST_NAME" = :P22_CUST_LAST_NAME, "CUST_STREET_ADDRESS1" = :P22_CUST_STREET_ADDRESS1, "CUST_STREET_ADDRESS2" = :P22_CUST_STREET_ADDRESS2, "CUST_CITY" = :P22_CUST_CITY, "CUST_STATE" = :P22_CUST_STATE, "CUST_POSTAL_CODE" = :P22_CUST_POSTAL_CODE, "CUST_EMAIL" = :P22_CUST_EMAIL, "PHONE_NUMBER1" = :P22_PHONE_NUMBER1, "PHONE_NUMBER2" = :P22_PHONE_NUMBER2, "URL" = :P22_URL, "CREDIT_LIMIT" = :P22_CREDIT_LIMIT, "TAGS" = :P22_TAGS where "CUSTOMER_ID" = :P22_CUSTOMER_ID; elsif :REQUEST = 'DELETE' then delete from "DEMO_CUSTOMERS" where "CUSTOMER_ID" = :P22_CUSTOMER_ID; end if; end; 行の作成、更新、削除
  38. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 44 Oracle Database MLE + APEX • Oracle Database Multilingual Engine - Oracle Databaseに GraalVMを組み込んだもの – にOracle APEXを実装。 • 2019年1月末日までプロトタイ プを公開。 • JavaScript(一部Python)にて サーバー側のロジックを記述 可能。
  39. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 45 UIの動作を拡張 - JavaScript JOBがSALESMANの 場合、Hire dateと Commissionを表示 それ以外の場合、 Hire dateと Commissionは非表示 ノー・コード アクションとして”表示”を 選んで、表示するアイテ ムを指定する。 ロー・コード アクションとし て”JavaScriptコードの実 行”を選んで、JavaScript を記述する。
  40. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 46 UIの見かけを拡張 - CSS 背景に写真を追加する。 ロー・コード 必要な修飾のみ記述。
  41. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | ローコード開発の実践 デモンストレーション 47
  42. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | スプレッドシートからのアプリケーション作成 Confidential – Oracle Internal 49
  43. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 52 SQL言語 SELECT ENAME FROM EMP WHERE EMPNO = 7839
  44. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 53 テクノロジーは変わってきたが、 SQLは不変
  45. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 54 テクノロジーはこれからも変わるが、 SQLは不変 2029年にスマートフォンがこの形である確率: 0% 2029にSQLがこの形である確率: 100%
  46. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 55 Oracle APEX自体のコード内訳 2019 Oracle APEX Code Lines 2019 Stackoverflow Survery Result
  47. Copyright © 2019, Oracle and/or its affiliates. All rights reserved.

    | 56 アプリケーションはメタデータ定義 + SQLで開発 SQL & PL/SQL CSS/HTML JavaScript APEX 標準コンポーネント (共通) + SQL (アプリ依存) + 最小限のPL/SQLスニペット, プラ グイン, CSS & JavaScript APEX開発チーム&開 発パートナーに、アプリ ケーションに共通な処 理や、基盤となる処理を 行う、 100万を超える コードのメンテナンスは 任ましょう。