MySQL
Nim
Nimble

NimでMySQL接続 (あんま怖くないNim③)

More than 1 year has passed since last update.


NimでC/C++のライブラリを呼び出す。

スクリプト言語風の簡易な文法ながら、C/C++等にコンパイルされ、Cに近しい実行速度が出せるNim。

まだ、バージョン1.0前でドキュメント量をまだまだ少ないため、実案件で使うことは当面ないだろうが、C系との近しさは、余計な物がなん分、C系のライブラリの学習用途には使えそう。

Nimの情報はまだまだ少ないので、MySQL(Mariadb)をNimから呼び出してみたメモ書きをさらしておく。


バッケージマネージャツールnimbleを活用。

外部パッケージを活用して、一定程度以上に複雑なプログラムを書く場合には,適切なパッケージ管理が必要。nimには、パッケージの導入からコードのビルドまでを行えるパッケージマネージャnimbleが標準で付属している。


 mimleでdbライブラリを導入



  • パッケージ情報を最新に更新


    nimble refresh





  • mysqlに関するパッケージ情報を調べる


    nimble search mysql





  • パッケージdbを導入


    nimble install db




これで、RDB接続用パッケージdbが導入される。


nimble initでディレクトリ構造を決定

nimble initコマンドで生成されるパッケージ名.nimbleファイルにより、ディレクトリ構造を定める


パッケージ名.nimble

# Package

version = "0.1.0"
author = "Anonymous"
description = "test"
license = "MIT"

# Dependencies

requires "nim >= 0.15.2"

# ここにディレクトリ構造を追記
srcDir = "src"
binDir = "bin"
bin = @["main"]


私もnim初心者なので、委細はnimble initで自ら調べていきたいが

./srcにソースコードを書き、ビルド後のファイルは./binに置かれることは分かるだろう。


MySQLに接続

ローカルのMySqlに接続するには、以下のようなコードを書く(この例ではデーブル生成のみ)。


main.nim

import db_mysql

let theDb = open("localhost", "user", "passwd", "mydb")

theDb.exec(
sql(
"create table myTestTbl (" &
" Id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, " &
" Name VARCHAR(50) NOT NULL, " &
" i INT(11), " &
" f DECIMAL(18,10))"
)
)        

theDb.close()


要するに、open -> exec(sql文) -> closeという一連の流れでデータベースを操作するわけだ。

ビルドはnimble buildで行い、実行は./bin/main.exeとなる。

...が、このまま実行してしまうと、libmysql.dllがないよ、と怒られてしまう(windows環境の場合)。実行に際しては、例えば、windowsでのC言語実行の基本にもどって、libmysql.dllをmain.exeと同じディレクトリに配置する必要がある。

無事実行できた際のディレクトリ構造は以下のようになる。

nimmm.PNG

コンパイル後に生成される./nimcacheディレクトリを開いてみる。

ca.PNG

確かに、nimがCにコンパイルされていることが分かる。


C系言語の資産を活かそう。

C系言語は、40年以上の歴史を持ち、さまざまな実用プログラムを生み出してきた。C系言語のソースコードにコンパイルされるnimは、まさしく、その巨人の肩に直接に乗っている形だ。

nimでC系言語の良さをお手軽に再認識したいと思う今日このごろ。