本記事では CData サポート担当からこんなことを聞かれたらどこを確認すべきか?という観点で、よく頂くお問合せ内容をご紹介します。
記事はこちら →Go はオープンソースのプログラミング言語でLInux/Unix マシンに簡単にソフトウェアを構築することを可能にします。 Go とODBC Driver for AzureDevOps およびunixODBC を組み合わせて使うことで、Azure DevOps データにリアルタイム連携するアプリケーションを書くことができます。 本記事では、ODBC Driver for AzureDevOps のインストール、unixODBC Driver Manager への設定、そしてAzure DevOps に連携するGo アプリケーションの作成までを説明します。
CData ODBC Drivers はUbuntu、Debian、RHEL、CentOS、およびFedora など多くのRed Hat-based およびDebian-based のシステムでサポートされています。 ほかにもいくつかのライブラリやパッケージのインストールが必要ですが、すでにデフォルトでインストールされている場合もあります。詳細はオンラインおよびインストールされるヘルプドキュメントの「はじめに」のセクションを参照してください。
ドライバーのインストール前にシステムにDriver Manager が入っているかを確認してください。本記事では無償のオープンソースDriver Manager であるunixODBC を使います
Ubuntu のようなDebian ベースのシステムでは、APT パッケージマネージャからunixODBC をインストールできます:
$ apt-get install unixODBC unixODBC-dev
Red Hat Linux ベースのシステムでは、yum もしくはdnf からunixODBC をインストールできます:
$ yum install unixODBC unixODBC-devel
unixODBC Driver Manager はDriver の情報をodbcinst.ini ファイルから読み、odbc.ini からからデータソースの情報を読みます。 次のコマンドをターミナルに入力して、コンフィギュレーションのロケーションを決めることができます:
$ odbcinst -j
コマンドのアウトプットでODBC データソースのコンフィギュレーションファイルと登録されたODBC Drver のロケーションを表示します。 ユーザーデータソースはodbc.ini ホームフォルダが位置するユーザーアカウントのみからアクセス可能です。システムデータソースはすべてのユーザーからアクセスできます。 このコマンドのアウトプット例は以下です:
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/myuser/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
標準パッケージ形式でドライバーをダウンロードできます:Debian .deb package format もしくは、.rpm file format です。 ファイルをダウンロードしたら、ターミナルからドライバーをインストールします。
ドライバーインストーラーはドライバーをunixODBC に登録し、ODBC 接続をサポートするツールやアプリケーションから利用できるシステムDSN を作成します。T
Ubuntu のようなDebian ベースのシステムでは、sudo とともに次のコマンドを実行します:
$ dpkg -i /path/to/package.deb
.rpms をサポートするシステムでは、sudo とともに次のコマンドを実行します:
$ rpm -i /path/to/package.rpm
ドライバーのインストール後、unixODBC Driver Manager を使って、登録されたドライバーを表示し、データソースを定義することができます:
$ odbcinst -q -d
CData ODBC Driver for AzureDevOps
...
$ odbcinst -q -s
CData AzureDevOps Source
...
unixODBC でCData ODBC Driver for AzureDevOps を使用するには、ドライバーがUTF-8 を使用するように設定する必要があります。それには、通常はインストールフォルダのlib フォルダ(/opt/cdata/cdata-odbc-driver-for-azuredevops)に入っているドライバーのINI ファイル(cdata.odbc.azuredevops.ini)を次のように編集する必要があります:
...
[Driver]
DriverManagerEncoding = UTF-16
ドライバーがインストールされると、システムDSN が事前定義されます。システムDSN はシステムデータソースファイル(/etc/odbc.ini)を編集して必要な接続プロパティを定義します。 ユーザー単位のDSN を作成することも可能で、その際には$HOME/.odbc.ini へのアクセスと変更は必要ではありません。 You can connect to your Azure DevOps account by providing the Organization and PersonalAccessToken.
To generate one, log in to your Azure DevOps Organization account and navigate to Profile -> Personal Access Tokens -> New Token. The generated token will be displayed.
If you wish to authenticate to Azure DevOps using OAuth refer to the online Help documentation for an authentication guide.
[CData AzureDevOps Source]
Driver = CData ODBC Driver for AzureDevOps
Description = My Description
AuthScheme = Basic
Organization = MyAzureDevOpsOrganization
ProjectId = MyProjectId
PersonalAccessToken = MyPAT
これらのコンフィギュレーションファイルの使い方についての詳細は、インストールされるヘルプドキュメントを参照してください。
Driver Manager のインストール、DSN 設定を終えたら、Azure DevOps data に連携するGo アプリケーションを作成します。 まずはODBC データベース向けのGo ドライバーをインストールします。いくつかのオプションがありますが、本記事ではhttps://github.com/alexbrainman/odbc のODBC ドライバーを使います。
Go のODBC ドライバーをインストールするには、GOPATH 環境変数を定義する必要があります:
export GOPATH=$HOME/golang/go
GOPATH が定義されたら、ODBC ドライバー向けのGo ドライバーをインストールすることが可能です:
$ go get github.com/alexbrainman/odbc
これでGo アプリケーションを作って実行する準備ができました。
このサンプルアプリケーションはAzure DevOps data に対してシンプルなSQL SELECT クエリを発行し、結果を表示します。$GOPATH/src/cdata-odbc-azuredevops ディレクトリを作成し、次のソースコードをコピーして新しいGo ファイルを作成します。
package main
import (
_ "github.com/alexbrainman/odbc"
"database/sql"
"log"
"fmt"
)
func main() {
db, err := sql.Open("odbc",
"DSN=CData AzureDevOps Source")
if err != nil {
log.Fatal(err)
}
var (
id string
buildnumber string
)
rows, err := db.Query("SELECT Id, BuildNumber FROM Builds WHERE Reason = ?", "Manual")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
err := rows.Scan(&id, &buildnumber)
if err != nil {
log.Fatal(err)
}
fmt.Println(id, buildnumber)
}
err = rows.Err()
if err != nil {
log.Fatal(err)
}
defer db.Close()
}
ターミナルで、Go アプリケーションディレクトリにナビゲートし、アプリケーションをビルドします:
$ go build
アプリケーションのビルド後、アプリケーションを実行し、Azure DevOps のデータを表示することができます:
$ ./cdata-odbc-azuredevops
これでAzure DevOps と連携するシンプルなGo アプリケーションができました。ここに、より複雑なread/write 機能を使い慣れたSQL 文で足してみてください。