※ 本記事は、Witold Swierzyによる”Integrating Oracle Database with GitHub“を翻訳したものです。

2025年5月19日


Table of Contents

はじめに

プログラマが1人でシステム全体を開発できたのは遠い過去の話です。今やアプリケーションのほとんどは、一人で開発するには複雑で大規模すぎます。そのため、開発チームのメンバー間のコラボレーションは必須です。さまざまなコード管理ソリューションが普及しているのはこのためです。コラボレーションに対するこのアプローチは、もちろんデータベース開発者にも当てはまります。このため、Oracle Databaseでは、GitHubなどの普及しているクラウド・コード・リポジトリを簡単に使用できる機能が導入されています。
パッケージDBMS_CLOUD_REPOは導入済みなので、Autonomous Databases – 23aiまたは19cではすぐに利用できます。23.7 ODAやExadataのリリースでは、ここで説明するステップで簡単にインストールできます。19cや21cなどの他のデータベース・リリースでdbms_cloudパッケージ・ファミリをインストールする場合は、MOSドキュメント「How To Setup And Use DBMS_CLOUD Package」(Doc ID 2748362.1)をご参照ください。

使用

この機能を使用するには、次の要件を満たす必要があります:

  • GitHub、AWS Code CommitまたはAzure Repoのいずれかのクラウド・コード・リポジトリ・システムのアカウント
  • DBMS_CLOUD_REPOがADBがプリインストールされているADB、またはインストール済みのOracleデータベース (上のリンクを参照)

この記事では、GitHubの使用方法について説明しますが、全体の流れは、他のリポジトリ・システムと同様で、通常、次のステップで進めます:

1. データベースから直接リポジトリを使用するため、認証資格証明を取得する必要があります。GitHubの場合、ユーザー名と認証トークンで構成されるペアです。トークンを生成する手順は、ここのGitHubのドキュメントで説明されています。適切なレベルの権限がトークンに割り当てられているか、例えばすべてのリポジトリ、メタデータなどへのアクセスについて、いま一度確認しておくことが非常に重要です。いざというときに、追加の操作ができないことになりかねません。

2. 次に、資格証明オブジェクトを作成します。そのために、ADBではDBMS_CLOUDパッケージを使用し、ADB以外のデータベースではDBMS_CREDENTIALを使用します。

begin
  dbms_cloud.create_credential(
    credential_name => 'GITHUB_CREDENTIAL',
    username => 'witold.swierzy@oracle.com',
    password => '<access token>'
  );
end;
/

もちろん、資格証明オブジェクトの作成は1回で済みます。繰り返し使用できます。

3. これで、コード・リポジトリを使用できます。たとえば、PL/SQLプログラムを含むSQLスクリプトをダウンロードでき、すぐにデータベースで実行されます。

declare
  l_repo_handle clob; -- CLOB object will contain a JSON document 
                      -- containing all the details required to connect to a GitHub account
begin
  -- below code initializes the connection to a GitHub account and repository
  l_repo_handle := dbms_cloud_repo.init_github_repo(
    credential_name => 'GITHUB_CREDENTIAL', 
    owner => 'witold-swierzy',                -- GitHub username 
    repo_name => 'sql_horizontal_aggregation' -- name of the repository
  );
  dbms_cloud_repo.install_file(      -- download and execute a SQL script
    repo => l_repo_handle,           -- CLOB connection descriptor
    file_path => 'json_arr.sql',     -- name of the file we want to download and execute
    stop_on_error => true            -- stop in case of any error 
  );
end;
/

スクリプトjson_arr.sqlにはjson_arr_vc集計関数の定義が含まれており、正常にインストールされたらすぐにその関数の使用を開始できます:

SQL> select department_id, json_arr_vc(last_name)
  2  from employees
  3* group by department_id;

   DEPARTMENT_ID JSON_ARR_VC(LAST_NAME)                          
________________ _______________________________________________ 
              10 ["Whalen"]                                      
              20 ["Hartstein","Be Charge"]                       
              50 ["Mourgos","Vargas","Matos","Davies","Rajs"]    
              60 ["Hunold","Lorentz","Ernst"]                    
              80 ["Zlotkey","Taylor","Abel"]                     
              90 ["King","De Haan","Kochhar"]                    
             110 ["Higgins","Gietz"]                             
                 ["Grant"]                                       

4. DBMS_CLOUD_REPOパッケージでは、もちろん他のアクションもカバーします。例えばリポジトリの作成、プッシュおよび変更のコミットなどです。一般的には、gitコマンドライン・ツールの全機能に対する部分的な機能を提供しますが、PL/SQL APIの形式で実装されます。

次の例は、新しいリポジトリplsql_demosを作成し、それにジオコード・プロシージャを追加/アップロードする方法を示しています。

declare
    repo_handle clob;
begin
    -- first, we need to initalize the repository in the database
    -- the repository has not been created in our GitHub yet
    repo_handle:=dbms_cloud_repo.init_github_repo(
                                    credential_name => 'GITHUB_CREDENTIAL',    
                                    repo_name       => 'plsql_demos', -- new repository name
                                    owner           => 'witold-swierzy');

    -- below call creates the repository in our GitHub account                                            
    dbms_cloud_repo.create_repository(
                        repo        => repo_handle,
                        description => 'My test repo',
                        private     => false);
    ...

5.  これで、以前に作成したリポジトリにプロシージャのコードをプッシュしてコミットできます:

    ... 
    dbms_cloud_repo.export_object(
                       repo           => repo_handle,
                       file_path      => 'spatial/geocode.sql',
                       object_type    => 'PROCEDURE',
                       object_schema  => user,
                       object_name    => 'GEOCODE',
                       branch_name    => 'main',
                       commit_details => json_object('message' value 'geocoding wrapper procedure',
                                                     'author'  value 'Witold Swierzy',
                                                     'email'   value 'witold.swierzy@oracle.com' ),
                       append         => false );
end;
/

まとめ

DBMS_CLOUD_REPOを使えば、簡単かつ快適にクラウド・コード・リポジトリをデータベース・レベルで使うことができます。複数のプラットフォームをサポートし、組織内で公式なソリューションとして受け入れられているものを選択することができます。この機能により、開発者のコラボレーションが可能になり、マルチユーザー環境でコードとその一貫性を保護する新しい方法が提供されたことで、データ中心のアプリケーションの最新の開発が大幅に容易になります。

その他のリソース