2024年10月3日追記
RESAS APIは2025年3月24日で提供が終了します。詳しくは以下のリンクを参照してください。
https://opendata.resas-portal.go.jp/docs/api/v1/index.html
追記終了
Oracle APEX 22.1の新機能のOracle APEX Data Generatorを使ってみようとしたところ、現状ではサンプル・データは英語のみでした。例えば都道府県や市区町村名をテスト・データとして表に投入するには、元となるデータが必要です。
手作業でサンプル・データを作成するのは大変なので、RESAS APIを呼び出してサンプルのデータ・セットを準備することにしました。RESAS APIの使い方については、以前に記事「RESAS APIを呼び出してデータを取得する」として紹介しています。RESAS APIの利用者登録やAPIキーの取得方法については、こちらの記事を参照してください。
本記事では、RESAS APIを使って、都道府県一覧と市区町村一覧を取得し、それをRESTソース・カタログとして登録するまでの手順について紹介します。
Web資格証明の作成
RESAS APIの利用者登録が済み、APIキーを取得済みとします。Web資格証明はワークスペースに作成します。
アプリケーション・ビルダーのワークスペース・ユーティリティを開きます。
Web資格証明を開きます。
RESAS APIのアクセスに必要な資格証明を作成します。
名前はRESASの資格証明、静的識別子はRESAS_API_KEYとします。認証タイプはHTTPヘッダー、資格証明名(認証タイプにHTTPヘッダーを選んでいるので、これはヘッダー名です)としてX-API-KEYを指定します。資格証明シークレットとして、RESAS APIに利用者登録を行い取得したAPIキーを入力します。URLに対して有効には、https://opendata.resas-portal.go.jp/api/v1/を指定し、Web資格証明の用途をRESAS APIに限定します。
以上を入力し、作成をクリックします。
e-Statが提供しているAPIにアクセスするには、URL問合せ文字列のappIdとしてアプリケーションIDを渡す必要があります。e-StatのWeb資格証明の指定は以下のようになります。
Web資格証明としてRESASの資格証明が作成されました。
APEXアプリケーションの作成
RESAS APIにアクセスしてデータを取得するために、RESTデータ・ソースを作成します。RESTデータ・ソースはAPEXアプリケーションの共有コンポーネントなので、RESTデータ・ソースを作成するには、最初にAPEXアプリケーションを作成する必要があります。
とりあえず空のアプリケーションを作成します。
アプリケーション作成ウィザードを起動します。
名前をRESASとし、アプリケーションの作成をクリックします。
アプリケーションが作成されました。
今回はアプリケーションの作成が目的ではありません。作業のほとんどは共有コンポーネントにて実施します。
都道府県一覧の取得
都道府県一覧の情報を取得します。RESAS-API一覧より共通の都道府県一覧を参照します。ここで、sampleに記載のあるURLに注目します。
共有コンポーネントのRESTデータ・ソースを開きます。
登録済みのRESTデータ・ソースが一覧されます。作成をクリックします。
RESTデータ・ソースの作成として最初からを選択します。
次へ進みます。
RESTデータ・ソース・タイプとして簡易HTTPを選択します。名前はRESAS都道府県一覧とします。URLエンドポイントには、RESAS APIの都道府県一覧のページにsampleとして記載されていたURLを貼り付けます。
次へ進みます。
リモート・サーバー、ベースURLおよびサービスURLパスは自動的に導出されます。変更は不要なので、そのまま次へ進みます。
ページ区切りタイプとしてページ区切りなしを選択します。
次へ進みます。
認証が必要ですをONにします。資格証明として、作成済みのRESASの資格証明を選択します。
検出をクリックします。
APIの呼び出しが行われ、取得されたデータが一覧されます。データ・プロファイルをクリックして、認識された列を確認します。
データ・プロファイルを確認します。今回の結果では、列PREFCODEが主キーとして認識されていない点は修正が必要です。
RESTデータ・ソースの作成をクリックします。
RESTデータ・ソースRESAS都道府県一覧が作成されました。修正が必要なので、このRESTデータ・ソースを開きます。
最初に詳細の静的IDを修正します。静的IDは名前より導出されますが、日本語は使用できないためその部分が_(アンダースコア)になります。このままでは一意にならないため、RESAS_prefecturesに変更し、変更の適用をクリックします。
変更を適用するとRESTデータ・ソースの一覧画面に戻ります。再度、RESTデータ・ソースを開き、今度はデータ・プロファイルの編集をクリックします。
列PREFCODEの主キーをNoからYesに変更し、変更の適用をクリックします。
変更の適用をクリックします。RESTデータ・ソースの一覧画面に戻るので、再度、編集画面を開きます。画面右の同期化の管理に進みます。
表RESAS_PREFECTURESがデータ・プロファイルの設定に従って作成されます。同期化を実行することによりRESAS APIを呼び出して取得したデータが、表RESAS_PREFECTURESに書き込まれます。
RESAS APIを呼び出して取得したデータを、表RESAS_PREFECTURESに保存する準備ができました。保存して実行をクリックします。
保存をクリックします。
表の作成をクリックし、表RESAS_PREFECTURESを作成します。
一度取得したデータを更新する予定は無いので、詳細の同期タイプは追加、マージ、置換のどれを選んでも違いはありません。今回は追加を選択しています。
ジョブのステータスが実行中となります。ジョブが終了すると、ジョブのステータスの表示が消えます。
データ・タブを開き、保存されているデータを確認します。
以上でRESAS APIの都道府県一覧を呼び出し、表RESAS_PREFECTURESに同期することができました。
市区町村一覧の取得
市区町村一覧の情報を取得します。RESAS-API一覧より共通の市区町村一覧を参照します。
RESTデータ・ソースの作成方法は、都道府県一覧と同じです。ただし、市区町村一覧はパラメータとして都道府県コードを必要としている点が異なります。
RESAS APIの説明ではprefCodeのRequiredがtrueとなっており、必須パラメータのように見受けられます。ただし、このパラメータを指定していなくてもAPI呼び出しは成功するようです。
市区町村一覧を取得するRESAS APIを呼び出すRESTデータ・ソースを作成します。作成の流れは、すでに都道府県一覧で説明済みなので、市区町村一覧に特化した部分を取り上げます。
RESTデータ・ソースの名前はRESAS市区町村一覧とします。URLエンドポイントとして、sampleにあるURLをそのまま貼り付けます。
以降の操作は、都道府県一覧を同じです。
RESTデータ・ソースの作成をクリックします。
RESTデータ・ソースRESAS市区町村一覧を開きます。
詳細の静的IDをRESAS_citiesに変更します。また、データ・プロファイルの編集を開き、CITYCODEの主キーをYesに変更します。
データ・プロファイルの列CITYCODEの主キーをYesにします。
パラメータですが、prefCodeの必須がいいえになっています。RESAS APIのWebページではRequiredはtrueですから、本来は必須ははいであるべきです。
パラメータのprefCodeの鉛筆アイコンをクリックします。
パラメータが無くてもAPI呼び出しは成功するようですが、ドキュメントの記述に従い詳細の必須をONに変更します。変更の適用をクリックします。
以上でRESAS APIの市区町村一覧を呼び出すRESTデータ・ソースの作成は完了です。
同期化の管理を呼び出します。
新規に作成する同期化表の表名はRESAS_CITIESとします。
これ以降は都道府県一覧と同じ操作を行い、表RESAS_CITIESにデータを同期させます。
同期化が完了しSQLワークショップより表RESAS_CITIESのデータを確認すると、列PREFCODEが1のデータのみが同期していることが確認できます。
RESTデータ・ソースRESAS市区町村一覧のprefCodeのデフォルト値が1であり、その呼び出しのみが行われているため、このような結果になります。市区町村一覧をすべて同期するには、47都道府県のコードをprefCodeとして与え、47回同期化を実行する必要があります。
prefCodeに都道府県コードを指定し47回同期化を繰り返すために、自動化を使用します。
共有コンポーネントの自動化を開きます。
作成済みの自動化が一覧されます。作成をクリックします。
名前をRESAS市区町村一覧とします。一度だけ実行すればよい処理なので、タイプとしてオンデマンドを選択します。アクションの開始として問合せを選択します。
次へ進みます。
データ・ソースとしてローカル・データベース、ソース・タイプとしてSQL問合せを選択します。SQL SELECT文を入力として、以下を記述します。
select prefcode from resas_prefectures
アクションの実行時間として行が返されるを選択します。実行時間となっていますが、行が返されたときに実行される、という意味で時間とは関係ありません。ここで返される行は47行になり、47回アクションが実行されます。
作成をクリックします。
自動化RESAS市区町村一覧が作成されます。
名前の静的IDに日本語は含められないため、静的IDをRESAS-citiesに変更し変更の保存を行います。
続いて、アクションの鉛筆アイコンをクリックして編集します。
アクションでは、パッケージAPEX_REST_SOURCE_SYNCのDYNAMIC_SYNCHRONIZE_DATAを呼び出します。
アクションの名前を同期に変更します。タイプはコードを実行、コードの位置はローカル・データベース、言語はPL/SQL、コードとして以下を記述します。
コード中でバインド変数としてPREFCODEを使用しています。このバインド変数には、自動化のソースのSELECT文で取得されているPREFCODEが割り当てられます。
変更の適用をクリックします。
以上で自動化の作成は完了です。
保存して実行をクリックします。
自動化の実行ログを確認します。ステータスが成功で、成功した行は47になります。
同期化の結果を確認します。SQLワークショップのSQLコマンドより、以下のSELECT文を実行してみます。
select * from resas_cities where bigcityflag = 1 order by prefcode
PREFCODEが1、つまり北海道のbigCityFlagが1の市区町村については、APEX$SYNC_STEP_STATIC_IDが空白になっています。これはRESTデータ・ソースを作成したときに同期化が実行されているためです。自動化による同期化では、すでに同じデータがあるためスキップされています。
RESTソース・カタログの作成
RESTデータ・ソースはアプリケーションに作成します。公開されているREST APIへのアクセスであれば、他のアプリケーションからも使用できると便利です。
作成したRESTデータ・ソースをアプリケーションで共有するため、Oracle APEX 21.2より、RESTソース・カタログが導入されています。RESTソース・カタログを作成し、今まで作成したRESASのRESTデータ・ソースをRESTソース・カタログに保存します。
ワークスペース・ユーティリティのRESTソース・カタログを開きます。
RESTソース・カタログが未構成の場合、最初にカタログ・グループの作成を要求されます。
グループの作成をクリックします。
カタログ・グループの名前をOpen Data Japanとします。作成をクリックします。
グループとしてOpen Data Japanを選択します。名前はRESAS、内部名もRESASとします。エンドポイントURLのリフレッシュは、まだ作成したRESTデータ・ソースをエクスポートしていないため、指定はしません。
作成をクリックします。
RESTソース・カタログRESASが作成されます。まだ、コンテンツは0サービスです。
作成済みのRESTデータ・ソースを開き、カタログに保存をクリックします。
カタログに保存をクリックします。
作成済みのRESTデータ・ソースがRESTソース・カタログに保存されます。アプリケーション側で加えた変更をRESTソース・カタログに保存する、または、更新されたRESTソース・カタログにてリフレッシュできるようになります。
作成済みのRESTデータ・ソースをすべてRESTソース・カタログに保存しておきます。
以上になります。
RESTソース・カタログのエクスポートとインポート
作成したRESTソース・カタログのエクスポートとインポートが可能です。
ワークスペース・ユーティリティのRESTソース・カタログを開きます。画面右のカタログのエクスポートを実行します。
RESTソース・カタログとしてRESASを選択し、エクスポートを実行します。RESTソース・カタログがSQLファイルRESAS.sqlとしてダウンロードされます。
エクスポートされたファイルを、共有できる場所に配置します。今回はGitHubに配置しました。
https://raw.githubusercontent.com/ujnak/apexapps/master/exports/RESAS.sql
ワークスペース・ユーティティのRESTソース・カタログを開きます。RESASのエンドポイントURLとして、上記のURLを設定します。
エンドポイントURLのリフレッシュとしてURLを設定し、変更の適用をクリックします。
ワークスペースに新規にRESTソース・カタログを導入するには、カタログのインポートを実行します。
インポート作業では、ファイル・タイプとしてRESTソース・カタログが選択されます。インポート・ファイルとして、エクスポートされたRESTソース・カタログのSQLファイルを選択します。
RESTデータ・ソースはRESTソース・カタログによって共有できますが、それを呼び出している自動化は含まれません。
自動化はAPEXアプリケーションに作成されています。APEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/resas-sample-app.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
追記
共通の特許.技術分野のデータにtecCodeとtecNameが空白のデータが含まれます。これはsampleにも含まれています。
このデータのため、データ・プロファイルでtecCodeを主キーにすると、同期化ができません。主キーを設定せず、データを同期化表RESAS_PATENTS_BROADに取り込んだ後にtecCodeがnullの行を削除する必要がありました。
完