OracleAPEXってこんな感じだよ。を伝えたい



本記事は、OracleAPEXの概要と初歩的な画面制御の解説を行います。

:::note info
インストール方法や深堀した機能等は、本記事では触れません。
※主はまだまだプロいエンジニアではないので、表現法・認識に違和感を感じさせてしまう箇所もあると思いますが、ご容赦くださいませ。
:::


<dl>
  <dt>こんな方向け</dt>
  <dd>・OracleAPEXという言葉を小耳に挟んだことのある方</dd>
  <dd>・とりあえず簡単にOracleAPEXの概要が知りたいよ～という方</dd>
</dl>

## 目次
[１．OracleAPEX概要](#OracleAPEXの概要)
[２．MVCモデルと比較してみた](#MVCモデルと比較してみた)
[３．メリット・デメリット](#メリットとデメリット)
[４．一覧表示画面をいじってみた](#一覧表示画面をいじってみた)
[５．余談](#余談)


## OracleApexの概要

主なりにまとめると
Oracleデータベースに密接に結びついたWebアプリケーション開発プラットフォーム。

OracleAPEXが提供する、GUIで操作が可能な多数のコンポーネント（例：フォーム、レポート、チャート、カレンダーなど）を活用することで、開発者はプログラムを書かずに、簡単に機能を追加することが可能になります。
また、これらのコンポーネントは、Oracleデータベースと密接に連携しており、データを取得し、画面上に表示させることや、更新、実行処理などが容易に行えます。

（おォ、、、なんか便利そう、、、? :eyes:）

## MVCモデルと比較してみた
どれほど簡略化されているかというと
「MVCアーキテクチャ」に基づいて構築されたフレームワークの一つである***Ruby on Rails***を比較例にとって

「掲示板アプリ」の開発を考えたとき・・・

![ER.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/742666/54f34387-1b9b-8d87-73d1-069545da394f.jpeg)


###### Ruby on Railsの場合

Model→データベースから投稿データを取得
View→投稿データを表示するHTMLを生成
Controller→Modelから取得した投稿データをViewに渡して、ユーザーに表示

↑をそれぞれ作成する必要があり、恐らく内容はこんな感じ、、、

<details><summary><b>ソースコードを表示（折りたたみ）</b></summary><div>

```ruby:Model
class Post < ApplicationRecord
  belongs_to :user
end
```

```ruby:View
<h1>Posts</h1>
<table>
  <thead>
    <tr>
      <th>Title</th>
      <th>Content</th>
      <th>User</th>
    </tr>
  </thead>
  <tbody>
    <% @posts.each do |post| %>
      <tr>
        <td><%= post.title %></td>
        <td><%= post.content %></td>
        <td><%= post.user.name %></td>
      </tr>
    <% end %>
  </tbody>
</table>
```

```ruby:Controller
class PostsController < ApplicationController
  def index
    @posts = Post.all
  end
end
```
</div></details>



###### OracleApexの場合
※あらかじめDBに接続済みで、データも登録されている前提です。
![投稿一覧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/742666/e18cc3dc-f2e6-599c-1010-2c0fca4304f8.png)

①コンポーネントをドラッグ&ドロップでBodyに埋め込む
今回は投稿一覧画面に合いそうな”クラシックレポート”を埋め込みました。

②テーブルを選択
テーブル名を直接入力する　
　　　　OR
右側の”リストボタン？”を押下すると、DBに登録されているテーブルの一覧が表示されるので
任意のテーブルをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/742666/2b865e60-b5f1-1e34-e736-2345f2af4c64.png)


③実行ボタン押下！！！
右上の緑ぃやつです。

:arrow_down:　実行結果　:arrow_down:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/742666/6d369664-f37f-af6e-3180-7b816f9804ff.png)


３ステップでそれっぽい感じになりましたね:eyes:


## メリットとデメリット

OrackeApexを活用すると、フレームワークの知識がなくとも
こんな感じで画面を作成していくんだなぁを感じたうえで、
メリットとデメリットをまとめてみました。

###### メリット
* GUIベースの開発環境で、コーディングの知識がなくても簡単にWebアプリを構築できる。
* Oracleデータベースとの親和性が高く、簡単にデータベースと連携できる。
* ドラッグ&ドロップで画面を構成できるため、開発スピードが早くなる。
* セキュリティ機能が充実しており、脆弱性のあるWebアプリを作成しにくい。

###### デメリット
* OracleApex環境やWebアプリが複雑になると、対応できないことがある。
* カスタマイズや拡張性に限界があるため、柔軟な開発が難しい場合がある。
* Oracleデータベースに依存するため、他のデータベースを使用する場合には対応が必要。
* 設計や開発方法が正しくないと、パフォーマンスが低下することがある。

:point_up:マウスでポチポチ開発可能で開発効率の向上は期待できるが、
画面の細かいカスタマイズが苦手 ＆ ”脱Oracle勢”にはあまり向かないっぽいですね:point_up:


## 一覧表示画面をいじってみた

先ほど作成した、コレ :arrow_down: をベースに少ーしいじってみました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/742666/69e9a630-c30e-80e2-0f17-b50a34c70a16.png)

「もうそんなん知っているよ」という方は、飛ばしていただいてOKです。

###### 表示する項目を自由に変えてみる

一覧画面に表示されている「User_ID」の項目を非表示

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/742666/b95c5dd0-a358-99f4-6521-c02a5df4a068.png)

左側のカラム選択→右クリック→Delete

###### 表示する項目の順番を変えてみる

左側のカラム選択→ドラッグ&ドロップ

###### 表示する項目の表示名を変えてみる

右側のHeading＞Headingを編集

ちなみに、その下のAlignmentで左揃え/中央揃え/右揃え
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/742666/bdcd0da0-8e2f-e9a3-b765-38b3288ce7d2.png)


###### ソート可能/不可能を制御する

POST_IDとCREATED_ATでのみソート可能にしてみます。

右側のSorting＞SortableのON・OFF切り替え
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/742666/e5869f72-2b17-7486-1686-6af0b417b23e.png)

###### 文字色を変えてみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/742666/e6cb8313-de8c-4191-a63b-f794d600ffc7.png)

すごく簡単にはなりましたが、ここらで・・・
もっと深堀したカスタマイズのチュートリアルは、他の方々がまとめて下さっているのでそちらを参考になさってください。


## 余談

###### DB間の通信
OracleAPEXとOracleDB間の通信は、
SQLNetというOracleが提供するネットワーク通信プロトコルを使用して行われているそう

###### OracleAPEXの開発言語

Oracle APEXはWebアプリケーション開発ツールであり、フロントエンドの開発言語としてJavaScript、HTML、CSSなどが使用されます。
が、、、
Oracle APEXはJavaScriptなどの言語を直接書く必要はなく、GUIベースのデザインとプロパティ設定でアプリケーションを構築することが可能なので、開発者が直接意識する場面は少なそう。

PL/SQLはOracleのデータベースに組み込まれた手続き型言語で、データベースのデータ処理する役目。
JavaScriptはクライアントサイドでの処理に用いられ、ユーザーインタフェースや動的な表示を実現する役目。

###### ワークスペースの自動削除

これは、使っていて気が付いたのですが、
ワークスペースの自動削除機能がデフォルトでは設定されているみたいで
一定時間使用されていない場合、下記のようなメールが届き、「あとX日間アクション無かったらワークスペース削除しまっせ～」とアナウンスされましたので、ちょっと注意が必要そうですね。

![mail3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/742666/1753df29-aeed-bcb8-0bfe-9bf5a51bd1d9.png)



以上、ご覧いただきありがとうございました。:bow:
今後も、入力フォームの設定、更新・削除、楽観ロックあたりのチュートリアルをしていければと思います。