LoginSignup
6
4

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-11-20

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系言語の良さをお手軽に再認識したいと思う今日このごろ。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4