本記事は「IBM Systems Magazine」の許諾のもと、原文を日本語化するとともに、一部再編集したものとなります。原文をご覧になりたい方は下記よりアクセスしてください。
原文タイトル:The New ODBC Driver for IBM i
原文著者: Mark Irish
2019年8月19日| マーク・アイリッシュ
IBM i オープン・ソース・ソフトウェア・チームは最近IBM i Access ODBCドライバーを直接IBM i 上で動作するように移植しました。以前は、ODBCはWindowsまたはLinuxのためだけにコンパイルされていました。つまり、この移植が行われる前はODBCを使ってWindowsまたはLinuxでDb2 for iにアクセスするプログラムを開発することはできても、そのプログラムをそのままIBM i 上で動かすことはできませんでした。なぜなら、それらのプログラムはIBM i のCLI(コール・レベル・インタフェース)にしかアクセスできなかったからです。IBM i 向けのDb2 for i用ODBCドライバーの出現により、開発機上でオープン・ソース技術を使ってDb2 for iにアクセスするアプリケーションを開発し、完成後にそれをIBM i に移植できるようになりました。
このODBCドライバーはまだ新顔なので、ユーザーにはIBM i への導入方法がよく分からない点があるようです。本稿はODBCとは何か、ODBCを使いたい理由は何かについて簡単に説明した後、ODBCドライバーをIBM i に導入するために踏むべき手順、DSNおよび接続文字列の両者による接続オプションの定義の仕方、そして構成がすべて完了した後のODBCの使い方について説明します。
ODBCとは?
IBM i へのODBCドライバーの導入方法について調べる前に、実際のところODBCとは何かということを知ることが重要です。ODBCはOpen Database Connectivityの略語で、データベース管理システム(DBMS)にアクセスするための標準APIです。ODBCを使って、DBMSに依存しない関数がODBCドライバー・マネージャーから特定のDBMS(今の場合はDb2 for i)をターゲットとするODBCドライバーに対してデータを送ります。これにより、適切なDBMSに対して正確なクエリー構文を間違いなく生成する限り、理論的には複数のドライバーを介して複数のDBMSをターゲットとするアプリケーションを書くことが可能になります。ほとんどのIBM i ユーザーはDb2 for iだけをターゲットとしているので、ODBCは複数のOSから使用可能な標準インタフェースを作成するのに一層役立ちます。これにより、1つのマシンないしOS上でプログラムを開発し、別のマシンに移植することが可能になります。もはやWindowsおよびLinuxからDb2 for iに接続するためのコードとIBM i から直接接続するための別のコードを書く必要はありません。
ODBCを使うには、使用しているOS用のODBCドライバー・マネージャーならびに情報のやり取りをしたいDBMSをターゲットとするODBCドライバーが必要です。Windowsユーザーの場合には、ODBCドライバー・マネージャーはOSに事前導入されています。LinuxやIBM i で使用する場合にはunixODBCというドライバー・マネージャーをダウンロードする必要があります。ドライバー・マネージャーの入手方法に関係なくターゲットとするDBMS用のODBCドライバーも必要であり、Db2 for i用のものはIBMから入手できます。IBM i に導入するドライバー・マネージャーおよびドライバーのダウンロード手順については後ほど概説します。
ODBCを使うべき理由
開発マシンおよびIBM i 自身の双方からデータベースに接続を行うための主要な手段としてODBCを使うことを考えるべき理由は沢山あります。
- ODBCはIBM i だけでなく他のOS用にも使われる技術なので、すでにODBCを使用できるアプリケーションや技術が数多く存在しています。ほぼすべてのオープン・ソースのプログラム言語(および多くの非オープン・ソースの言語)がODBCインタフェースを介してデータベースに接続する何らかの方法をもっており、ODBCドライバーを持つ(IBM i を含む)あらゆるデータベースと情報のやり取りをするのを容易にしています。
- 同様に、ODBCコネクタが非常に多くの言語やフレームワーク用にすでに開発されているので、IBM i オープン・ソース・ソフトウェア・チームはIBM i 用に提供するすべての新しいテクノロジーのために、特定のDb2 for i用コネクタを作成するのに時間を費やす必要がありません。これは私たちが、ユーザーのために新しいソフトウェアを提供し、IBM i で可能なことを推し進めるためにより多くの時間を使えることを意味します。将来的に私たちが開発するほとんどのパッケージはODBC接続を使用することが前提条件になるでしょう。
- すでに述べたように、外部のシステムからIBM i 上のデータベースに接続したい場合ODBCは便利です。IBM i 上のみで構築可能なCLIベースのコネクタと違い、ODBC接続はWindowsやLinuxマシンからも可能です。これは、1つのシステム上でアプリケーションを開発し、それらが配備可能になった時点でIBM i に移すことができるということを意味しています。これはまた、同じアプリケーションが同じやり方で、IBM i 上のデータベースと情報のやり取りができる複数の異なるプラットフォーム上でも実行できるということでもあります。
- 最後に、ODBCにはCLIよりも利用可能な接続オプションが数多くあります。DSNまたは接続文字列を介してODBC接続を行う場合、約70の異なる接続オプションが設定可能です。これには、システム、ユーザー名あるいはパスワードを指定することからデフォルトライブラリーやスキーマあるいはストアドプロシージャ呼び出しを可能にするかどうかに至るまで、あらゆることが含まれています。オプションの完全な一覧はIBM i 7.4の文書の“Connection string keywords”のページに掲載されています。
IBM i へのODBCドライバーの導入法
-
オープン・ソース・ソフトウェア環境の導入
第一に行うべきことは、IBM i にオープン・ソース環境が導入済みであることを確認することです。一番手っ取り早い方法はシステムにyumが導入されているかチェックすることです。それはIFS内の/QOpenSys/pkgs/bin/yumに置かれているはずです。端末を使っており、かつPATH上に/QOpenSys/pkgs/binがあるなら次のコマンドを実行できます。
which yum
画面上にその配置場所が表示されるはずです。もし表示されないなら、yum導入ガイドにある指示に従ってオープン・ソース・ソフトウェア環境を導入する必要があります。
-
ODBCドライバー・マネージャーの導入
IBM i で使用されるODBCドライバー・マネージャーの名前はunixODBCです。これはほとんどのLinuxディストリビューションで使われるのと同じドライバー・マネージャーです。ですから、過去にODBCの設定を行ったことがあれば、これらの指示には馴染みがあるはずです。
unixODBCを入手するために、オープン・ソース・ソフトウェア導入用のパッケージ・マネージャーであるyumを使ってこれを導入します。またODBCを使ってアプリケーションを書けるようにするためのunixODBC-develという拡張パッケージをダウンロードする必要があります。これらのパッケージを1つのコマンドで両方とも導入するために、次のコマンドを実行します。
yum install unixODBC unixODBC-devel
yumが2つのパッケージを導入するというメッセージが表示されます。この導入にはシステム上に約1MBの容量が必要です。メッセージに対して’y’とキー入力し、ダウンロードを承認する必要があります。その後、パッケージがダウンロードされ、システムに導入されます。
-
IBM i 用のIBM i Access ODBCドライバーの導入
ドライバー・マネージャーを導入し終わったら、ODBCがIBM i 上のDb2と通信できるようにするために実際のドライバーを導入する必要があります。
- IBM i Access – Client Solutionsウェブページを開く
- Downloads for IBM i Access Client Solutionsをクリック
- プロンプト画面が表示されたらIBMidを入力し、続いてパスワードを入力(IBMidを持っていない場合は新規作成する)
- ライセンス使用条件に同意する
- ダウンロード・ページ(下図)で”Download using http” タブをクリック
- 画面をスクロールし、ACS PASE App Pkg の横の”Download now”をクリック
.zipファイルを手に入れたら、それをIBM i のIFSに移動します。IBM i との間でファイルを移動する方法は少なく見積もってもかなりの数あるので、このやり方については説明するまでもなく既に知っているものと仮定します。もし知らないなら、Access Client Solution(ACS)のIFSユーティリティを使用することを考えてください。
(unzipが未導入の場合には)システム上のzipファイルを使い、次のようにyumでunzipを導入することができます。
yum install unzip
プロンプトが表示されたら’y’と応答して導入を承認しなければなりません。unzipが導入されたら、IBM i 上に移動した.zipファイルに対してunzipを実行します。
unzip IBMiODBC_driver.zip
このコマンドは.zipファイルに圧縮保存されている取り扱い説明とppc64という名前のディレクトリを抽出します。RPMはディレクトリppc64の中にあるはずで、これがIBM i のIFS内にあるならばyumを使ってそれを導入します。
yum install ibm-iaccess-1.1.0.11-0.ibmi7.2.ppc64.rpm
この記事はIBM i 上でのODBCの設定に特化しています。WindowsやLinuxマシン用の設定手順についてはIBM i 開発用のODBC設定ガイドを参照してください。
unixODBCの導入と同様に、導入を承認するために’y’と入力するようプロンプトが表示されます。承認するとIBM i にIBM i Access ODBCドライバーが導入されます。同時に自動的にodbcinst.iniのドライバー一覧にドライバーが追加され、ローカルのDb2データベースに接続するためのodbc.iniにデフォルトのDSNが作成されます。これらをもう少し詳しく見てみましょう。
IBM i でのODBCドライバーとDSNの構成
単にシステムにIBM i Access ODBCドライバーを導入しただけではODBCを使うことはできません。unixODBCがODBCドライバーとの接続を確立する方法を知ることができるようにunixODBC構成ファイルを正しく設定する必要があります。幸運にもIBM i Access RPMを導入したときに、ローカルのDb2データベースを使用するのに必要なすべてのものは自動的に構成されています。しかし構成ファイルを理解することはそれでも重要です。
-
odbcinst.ini
このファイルはシステムに導入したODBCドライバーを定義し、システム上の全ユーザーが利用できます。
IBM i Access RPMをシステムに導入すると、自動的にIBM i Access ODBCドライバーがodbcinst.iniに追加されます。
[IBM i Access ODBC Driver]
Description=IBM i Access ODBC Driver
Driver=/QOpenSys/pkgs/lib/libcwbodbc.so
Threading=0
DontDLClose=1
UsageCount=1
このファイルを編集する必要がないということはほぼあり得ません。これについてもっと詳しく知りたければ公式のunixODBC文書またはIBM i開発用のODBC設定ガイドをご覧ください。
-
odbc.ini および .odbc.ini
odbcinst.iniがドライバーを定義するのに対し、odbc.iniおよび.odbc.ini(名前の前にある’.’に注意)はデータソース名(DSN)を定義します。DSNはODBCがデータベースに接続するために使用できる接続オプションの集まりで、大抵の場合使用するドライバー、接続先のシステム、接続に使用するユーザーID およびもしかするとパスワード等の情報を含んでいます。ODBCを使用できるアプリケーションの中で接続文字列を使用する場合、単に使用するDSN名を指定することができ、そのDSN内のすべての接続オプションが接続に追加されます。これらのファイルは次の形式でDSNを定義します。
[DSN名]
Description=DSNの説明記述
Driver=ドライバー名(ディレクトリ情報を含む)
System=システム名 または IPアドレス
…OtherOptions=値…
すべての有効なDSNオプションの一覧はIBM i 7.4の文書の”Connection string keywords”のページに記載されています。DSN内でオプションを定義する場合、各オプションには必ずODBC.INIキーを使ってください。
Driverキーで定義された値は、odbcinst.iniで定義されたドライバー名と一致しなければならないことに注意してください。
システムにIBM i Access RPMを導入すると、*LOCALという名前のDSNがodbc.iniに自動的に追加されます。
IBM provided DSN – do not remove this line ###
[*LOCAL]
Description = Default IBM i local database
Driver = IBM i Access ODBCドライバー名(ディレクトリ情報を含む)
System = localhost
UserID = *CURRENT
### Start of DSN customization
### End of DSN customization
### IBM provided DSN – do not remove this line ###
IBM i システム上のローカルDb2データベースに接続するのにこのSDNを使うことができます。*CURRENTというユーザーIDは、ODBC接続を行おうとしているジョブを実行しているユーザーの認証情報を使用することを意味しています。IBM i 7.2および7.3で *CURRENTを使用するには次のPTFが必要です。(これらのPTFはIBM i7.4の一部として提供されます。)
7.2: SI69058
7.3: SI68113
unixODBCはodbcinst.iniと同じIFSの場所(デフォルトでは/QOpenSys/etc/)にodbc.iniを導入します。この場所は次のコマンドを実行すればチェックすることもできます。
odbcinst -j
これと対照的に.odbc.iniファイルはIFSのユーザーのホームディレクトリ(通常は、”/home/ユーザー名” のような名前です)に作成することができます。
これらのファイルは内部的には同じに見えますが、1つ主要な違いがあります。odbc.iniで定義されたDSNはシステム上の全ユーザーが利用できますが、.odbc.iniで定義されたDSNはそのファイルを所有するユーザー(そのファイル置かれているホームディレクトリのユーザー)だけが利用できます。
IBM i 上でのODBCの使用
ドライバー・マネージャーとドライバーを導入し、構成ファイルを設定すれば(あるいはIBM i Access ODBCドライバーと一緒に導入されたデフォルトの構成ファイルを使えば)、ODBCを使用するアプリケーションを使って接続を確立することは信じられないほど単純です。接続文字列を渡す際に次に示すようにDSN名を単に渡すだけです。
“DSN=*LOCAL”
アプリケーションは*LOCALというDSNをodbc.iniおよび.odbc.iniの中から探し出し、接続を確立するためにそこで定義されているすべての接続オプションを使用します。*LOCALは*CURRENTというユーザーIDを使用するので、ユーザー認証情報を指定する必要はありません。同様に、ユーザーIDとパスワードが定義されているDSNを作成しているなら、接続文字列の中に明示的に機密情報を入れて渡す必要がありません。
また、次の例のようにDSNの後に追加の接続オプションを付加することで、DSNで定義されたオプションを拡張することも可能です。
“DSN=*LOCAL;CMT=3;DFTPKGLIB=MIRISH”
DSNを使いたくなければ、接続文字列を通じてドライバー名と追加オプションを渡すことができます。しかし、それは共通の接続文字列オプションを定義するためにDSNを使用する能力を失うことになります。
“DRIVER=IBM i Access ODBC Driver;SYSTEM=localhost;UID=MIRSH;PWD=abc123def”
すべての有効なDSNオプションの一覧はIBM i 7.4の文書の”Connection string keywords”のページに記載されています。DSN内でオプションを定義する場合、各オプションには必ずODBC.INIキーを使ってください。
ODBC:オープン(ソース)・データベース・コネクティビティ
Db2 for iと共にODBCを使うことにより、開発機から本番環境へアプリケーションをもっと容易に移植できます。このことはオープン・ソース・ソフトウェアで最もよく見られます。というのも、開発機とIBM i の両方で同じ技術が利用可能であれば、多くの場合開発機からIBM i へは100%移植可能だからです。IBM i 用のIBM i Access ODBCドライバーがリリースされる以前は、WindowsやLinuxからIBM i へアプリケーションを移植できたとしても、ODBCベースのコネクタの代わりに全く異なるAPIを持つことの多いCLIベースのコネクタを使用するようにプログラムを書き換えなければなりませんでした。今やプログラムが移植されたときに行うべき変更は、あるとしてもローカルのDSNを指定するように接続文字列を変更することだけです。
ODBCを構成するには数多くの手順があるように見えるかもしれませんが、実のところほとんどの作業はyumとRPMによってなされます。さらに、一度設定を行ってしまえば、追加のDSNを定義したり既存のDSNのオプションを変更したりする必要がない限り、再度構成を行う必要はありません。すでに述べたように、ドライバーに対して70以上の接続オプションがあり、これによってどんなに特殊なものであっても必要に合わせて誂えられた接続構成が作成できます。
私達IBM i オープン・ソース・ソフトウェア・チームは、このドライバーがもたらす可能性にワクワクしていますし、ユーザーの皆さんにも私達と同様にその有用性を感じてほしいと願っています。