MENU

.NET7 on PowerとIBM iの連携方法 ~IBM iの設定からODBCドライバーの準備、.NETアプリの作成まで|特集.NET 7 ×IBM i ❹

2022年11月に.NET 7のPower対応が発表され、WindowsアプリケーションとIBM iとの新たな連携に「新次元を拓く」期待が高まっている。特集では、IBM iとWindowsの連携技術の歩みを振り返り、.NET 7の導入、セットアップ、連携方法、利用メリットなどを整理し、今回の発表内容の意義とインパクトを探った。

 

text=水野 智之 日本IBM

 

Part3では、.NETのインストール方法について紹介した。インストール自体はとても簡単で、Red Hat Enterprise Linux(RHEL)の環境さえあればすぐに使えることがおわかりいただけたかと思う。Part4では、.NETのサンプルやIBM iとの連携方法について触れていく。

.NETはオープンソースである。このことは多くの人がご存じかと思う。そのソースコードはGitHubで公開され、メンテナンスされている。以前からIBM iの開発にもGitは取り入れられているため、馴染みのあるユーザーも多いのではないだろうか。GitHubとは、Gitをオンライン上で利用できるWebサービスであり、オープンソースの開発では広く使われるツールとなっている。それでは、実際の.NETのリポジトリを見てみよう(図表1)。

図表1 .NETのリポジトリ
図表1 .NETのリポジトリ

このリポジトリには、.NET本体もそうであるが多くのサンプルが含まれている。プログラム言語を始める時にお馴染みの“Hello World!”を表示するコンソールアプリケーションや、Webページ用のサンプルが公開されている。サンプルアプリは、それぞれカテゴリーごとにリポジトリが分かれている。サンプルを探すのであれば、リポジトリのタブで検索ができるので、“sample”と入力して検索をするとよいだろう(図表2)。

図表2 「sample」で検索した結果
図表2 「sample」で検索した結果

まずは、“Hello World!”を表示するサンプルアプリを動かしてみる。GitHubで公開されているので、“git clone”コマンドを使ってソースコードをローカルマシンにダウンロードする。作業するローカルマシンは、.NETをインストールしたLinux on Power環境である。もしGitコマンドが見つからない場合は、 RHELであれば“dnf install git”コマンドでGitをインストールする必要がある。

今回試しにダウンロードするのは、以下のsamplesリポジトリである。

 https://github.com/dotnet/samples

実際にCloneした際の実行結果は図表3の通りである。

図表3 “Hello World!”のソースコードをダウンロードした結果
図表3 “Hello World!”のソースコードをダウンロードした結果

ダウンロードが完了すると、コマンドを実行したディレクトリに “samples” のディレクトリが作られていることがわかる。この中に、GitHub上で公開されているソースコードなどが格納されている(図表4)。

図表4 “sample”のディレクトリ
図表4 “sample”のディレクトリ

 

Hello World! を表示するサンプルアプリは、以下のリポジトリに格納されている。

 samples/core/console-apps/HelloMsBuild

実際のコンソールアプリのソースコード“Program.cs”は図表5である。

図表5 ソースコード“Program.cs”
図表5 ソースコード“Program.cs”

では、さっそくこのサンプルアプリを実行できるように手順を進めていきたい。ソースコードは準備されているので、最初にビルドが必要となる。.NETのビルドは、プロジェクトが定義されているディレクトリで“dornet build”を実行する必要がある(図表6)。

図表6 “dornet build”の実行結果
図表6 “dornet build”の実行結果

ビルドが正常に完了すると、“ビルドに成功しました。”のメッセージが表示される。アプリのビルドが完了したため、アプリを実行できるようになった。実行は“dotnet run”で行い、実行結果は以下のようになる。

  [root@rhel9-dotnet HelloMsBuild]# dotnet run
  Hello World!

1つ目に既存のソースコードをビルドし実行するところまでを、簡単ではあったが紹介をした。使用したソースコードは、x86アーキテクチャのLinuxであってもPower上のLinuxでも同じものである。今紹介した手順の通り、特別な改変は行っていない。すべてのプログラムが変更なしで動くわけではないが、基本的な.NETのプログラムはアーキテクチャが異なっても大きな変更はほとんど必要ない。

2つ目に、少し実践的な例を紹介する。IBM iといえば、OSに組み込まれているデータベース Db2 for iであろう。シンプルな管理で高いパフォーマスを実現できる頼もしい存在であると言える。そのDb2 for iに対して、.NETからデータを参照・更新することが可能である。Db2 for iへの接続には、ODBCを利用する。

本章の最後に、.NETからODBCを使ってIBM iのDBからデータを参照する方法を紹介する。ODBCの接続準備から.NETアプリの実行までは、以下の手順に沿って行う。

① IBM iの設定

(1)ODBC用サービスの起動確認

② ODBCドライバーの準備

(1)リポジトリの登録
(2)ODBCドライバーのインストール

③ .NETアプリの作成

(1)ODBCパッケージの追加
(2)プログラムの変更
(3)ビルド・実行

今回作成するアプリでは、IBM i上に格納されているデータをSelectで取得する。サンプルデータとして、IBM i にTOKMSPを使用し、データ自体はDB上にあるものとする。

 主な環境は以下の通りである。

・.NET

 -OS : RHEL 9.1
 -.NET 7.0.1

・IBM i

 -IBM i 7.5

① IBM i の設定

(1)ODBC用サービスの起動確認

IBM i環境でODBCを使うには、参照先のDBがあるIBM iでODBC用のサービスを起動する必要がある。まずは、ODBC接続用のサービスが起動しているかを確認する。5250画面から“WRKACRJOB”を実行して該当するサービスを探す。図表7のように“QUSRWRK”の下に、“QZDASOINIT” が起動していれば、ODBCの接続準備ができている。

図表7 ODBC起動の確認
図表7 ODBC起動の確認

対象のサービスが起動していない場合は、“STRHOSTSVR *ALL”コマンドを実行する。このコマンドを実行した後、先程のサービスが起動している“WRKACTJOB”で確認するとよいだろう。IBM iでの設定は以上となり、これ以降は、RHEL上での操作である。

② ODBCドライバーの準備

(1)リポジトリの登録

ODBC経由でIBM iに接続するには、ODBCドライバーをLinux側にインストールする必要がある。IBM iに接続するためのLinux用ODBCドライバーは、ACS(Access Client Solution)のパッケージとして提供されている。RHELのパッケージ管理ツールであるdnfもしくはyumのリポジトリとして提供されているため、その定義を以下のコマンドでダウンロードする。

  curl https://public.dhe.ibm.com/software/ibmi/products/odbc/rpms/ibmi-acs.repo | sudo tee /etc/yum.repos.d/ibmi-acs.repo

この定義をダウンロードすることで、dnf、yum からODBCドライバーがインストール可能となっている。

(2)ODBCドライバーのインストール

ODBCのドライバーはACSのパッケージに含まれるので、dnf、yumから“ibm-iaccess.ppc64le”をインストールする。実際にインストールした際のコマンド“dnf install ibm-iaccess.ppc64le”の実行結果の一部を図表8に記載する。

図表8 “dnf install ibm-iaccess.ppc64le”の実行結果の一部
図表8 “dnf install ibm-iaccess.ppc64le”の実行結果の一部

ACSのパッケージの依存関係に、unixODBCが含まれているのがわかる。unixODBCはLinuxやUNIX向けのODBCドライバーを提供するパッケージである。単体でもインストール可能であるが、IBM iへの接続にACSも必要であるためACSをインストールしている。

ODBCの設定ファイルが存在するドライバーのリストを表示して確認することができる。これを確認することで、IBM iへ接続するための設定となっているか判断できる。コマンド “odbcinst -q -d” を実行する。

  [root@rhel ~]# odbcinst -q -d
  [PostgreSQL]
  [MySQL]
  [MySQL-5]
  [FreeTDS]
  [MariaDB]
  [IBM i Access ODBC Driver]
  [IBM i Access ODBC Driver 64-bit]

この中に“[IBM i Access ODBC Driver 64-bit]”が含まれていればIBM i への接続が可能である。

③ .NETアプリの作成

事前の準備が完了したので、本命の.NETアプリの作成に移る。今回は、簡単なサンプルということでコンソールアプリを作成する。まずは.NETにおいて、CLIでコンソールアプリを作成する際に共通となるテンプレートの作成を行う(図表9)。

図表9 テンプレートの作成
図表9 テンプレートの作成

ベースとなるテンプレートが、コマンドを実行したディレクトリに展開される。ここの中に、必要なプログラムやパッケージを入れていく。

(1)ODBCパッケージの追加

.NETのアプリでODBCを使うために、.NET用のパッケージを追加する必要がある。.NETには、“dotnet add package”で指定したパッケージをダウンロード可能である。今回は“System.Data.Odbc”というパッケージが必要なため、以下のコマンドを実行する。

 dotnet add package System.Data.Odbc

これを実行することで、先程作成したプロジェクト内にSystem.Data.Odbc.dllなどODBC接続に必要なライブラリなどがダウンロードされている。

(2)プログラムの変更

プロジェクト内にある、“Program.cs”を変更する。これは、.NETのアプリでベースとなるソースファイルである。まずは、書き換えた“Program.cs”の中身を記載し(図表10)、その後に少し解説をする。

図表10 “Program.cs”の変更結果
図表10 “Program.cs”の変更結果

ODBCを使ったデータのやり取りは、以下の手順となる。

・接続先情報のセット
・コネクションの作成
・DDLの実行

今回紹介したプログラムでは、“接続先情報のセット”を以下の部分で行っている。

  string MyConString = “DRIVER={IBM i Access ODBC Driver 64-bit};” +
     ”SYSTEM=<アクセス先>;” +
   ”UID=<ユーザー>;” +
  ”PWD=<パスワード>;”;

ドライバーとして、ODBCをインストールした際に確認した“IBM i Access ODBC Driver 64-bit”を指定している。その後ろに、アクセス先としてIBM iのIPアドレスやシステム名など接続先の情報を入力する。そして、DBにアクセスするためのIBM iユーザーとパスワードを入れる。

コネクションの作成は、以下の部分で行っている。

先程“MyConString”で設定した接続先の情報を基に、DBへの接続を開始している。

  dbcConnection DbConnection = new OdbcConnection(MyConString);
  DbConnection.Open();

そして、DDLの実行をここで行っている。IBM i上のTOKMSPをSelectで取得するため、今回のプログラムでは以下のように設定している。

 DbCommand.CommandText = “SELECT * FROM DEMOLIB.TOKMSP”;
 OdbcDataReader DbReader = DbCommand.ExecuteReader();

これ以降は、“DbReader”にクエリーの実行結果が格納されるため、それをコンソール上に表示するプログラムとなっている。それでは、作成したプログラムのビルドと実行を行う。ビルド・実行は、最初のHello World!アプリでも行ったように、“dotnet build”、“dotnet run”で行う。実際に動かしてみると図表11のようにTOKMSPが取得できていることがわかる。

図表11 作成したプログラムのビルドと実行
図表11 作成したプログラムのビルドと実行

ACSからも同じようにSelect文を流してみると、上の画像と同じデータが取得できていることがわかる(図表12)。

図表12 ACSで実行した結果
図表12 ACSで実行した結果

このようにして、.NETからIBM iのDBにODBCを使ってアクセスができる。コンソールアプリという単純なもので紹介したが、Webアプリと組み合わせることも可能である。Power上でも、.NETでWebアプリを作る際に使われるASP.NETのようなフレームワークを使うことができる。

本章では、簡単なサンプルを2つ紹介した。2つのサンプルはとても簡単なものではあったが、.NET on Powerの入り口ということで手軽に動かせるものを紹介した。Part3で紹介した環境構築方法を参考にしながら、RHEL環境がある場合はぜひ試していただきたい。Part2でも触れているが、RHELには、Red Hat社から60日間の無償評価版が提供されている。こちらも試していただけると、現行システムの高度化や最適化への糸口になるかもしれない。次のPart5は本特集の最終章であるが、.NET7 for Powerを利用するメリットや想定されるユースケースについて紹介する。

著者
水野 智之

日本アイ・ビー・エム株式会社
システム事業部
Power Systems テクニカルセールス
Power テクニカル スペシャリスト

2017年日本IBM入社。入社以来、IBM Powerのプリセールス・エンジニアとして活動。PowerにおけるLinuxやOpenShiftの活用支援や提案を中心に、並行してIBM iの提案・支援活動を行っている。最近ではIBM iの魅力を強く感じており、新たな活用方法の模索などにもチャレンジしている。外部向けにIBM iに関する技術情報の発信にも取り組む。

特集 .NET 7 IBM i|WindowsとIBM iの新たな連携

part 1    WindowsアプリケーションとIBM iとのミニ連携史
part 2   .NET 7 on Powerの意義・インパクト  
part 3   .NET 7 on Powerの導入~セットアップ
part 4   .NET 7 on PowerとIBM iの連携方法(今回)  
part 5   .NET 7 on Powerの利用メリット、ユースケース

[i Magazine 2023 Spring(2023年5月)掲載]