iPhoneでGrafanaのグラフを参照できるアプリGrafanizer作ってます。 詳しくはこちらへ

Windows10のWSLでGolangからOracleへ接続させる

Sep 21, 2017  
#windows #go #oracle #dev #env

普段はWindowsで開発しているのだが、GolangでOracleに接続する必要が出てきた。

これまでGolangで開発してた案件は基幹システム系ではなかったのだが、そろそろOracleのデータを利用するAPIサーバーがほしいよねってことで。

前からどういうライブラリがあるかは見てたし、以前NodeJSでOracleへ接続させたりしてたので、仕組みについては分かるつもりではいたのだがそうは問屋が卸さない。

利用したのは go-oci8 なのだが、いろいろ試してみたもののWndowsの環境では結局うまくビルドできなかった。

でどうしたかた言うと、タイトルにもある通りWindows Subsystem for Linux(WSL)を使ってみて解決できたって話。

いやー、WSLなかなか良いよ。昔coLinuxを使って遊んでた記憶が蘇ってくる。あとね、VSCodeもいいよ。bashも違和感なく使える。

wsl_bash_vscode

【 ページ内広告 】

ということで、WSLに入れたGolangで go-oci8をビルドするメモを残しておく。

1. WindowsにWSLを入れる

2. bashを起動

3. aptでbuild-essential等を入れる

sudo apt install build-essential unzip pkg-config libaio1

4. 最新のGolangを入れる

wget https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.9.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin

5. Oracleからinstantclientをダウンロードして/usr/localにコピー

http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

  • instantclient-basic-linux.x64-12.2.0.1.0.zip
  • instantclient-sdk-linux.x64-12.2.0.1.0.zip

6. シンボリックリンク作成

sudo ln -s libclntsh.so.12.1 libclntsh.so

7. /usr/lib/pkgconfigへoci8.pcを作成

prefix=/usr/local/instantclient_12_2
libdir=${prefix}
includedir=${prefix}/sdk/include/

Name: oci8
Description: Oracle Instant Client
Version: 12.2
Libs: -L${libdir} -lclntsh
Cflags: -I${includedir}

8. LD_LIBRARY_PATHを設定

LD_LIBRARY_PATH=/usr/local/instantclient_12_2:${LDLIBRARY_PATH}
export LD_LIBRARY_PATH

9. ビルド

go get github.com/mattn/go-oci8

ってな感じで、特に躓くところもなくビルド完了。

...っというわけにはいかなく、 LD_LIBRARY_PATH の指定がわからなかった。RPMで入れれば問題にはならないんだろうね。そもそも常識かもしれないけど。

それと、時々bashが詰まる。何かのタイミングでおかしくなってしまうようで、いったんエラーになるとWindowsを再起動しなくては治らない。ここは次のアップデートで直ってくれるといいんだけど。

wsl_bash_error

しかし、簡単で便利。こういう「Windowsでどうにかして頑張る」っていうのは、もう過去の話になっちゃうんだろうな。


使ってみるまでは、自分の中での情報が「お互いのファイルシステムをマウントできない?」「ネットワーク的にはつながらない?」とかいう初期の頃の制限のままだったから、ここまで使えるレベルになっていたことにびっくり。

まだ動きに怪しいところはあるものの、次のアップデートでは複数インスタンスも起動できそうだしこれは期待できるぞっと。