WindowsでRustのDieselライブラリを利用

TLDR

開発用途であればWSLを使うほうが楽。
本番用途でも静的リンクは大変。

Dieselとは

RustのORM/クエリビルダライブラリ

diesel.rs

PostgreSQL, MySQL, SQLite3に対応しているが、それぞれのSQLクライアントライブラリにリンクする必要がある。

後述するが、それぞれのクライアントに限定してインストールすることもできる。

Vcpkg

VpkgはC言語とC++のライブラリ管理ツール
今回はVcpkgを利用して各種SQLクライアントのライブラリインストールしてみる。Vcpkgのインストール方法については下記ページを参照。

github.com

特筆すべき事項としては、Visual Studioの英語の言語パックのインストールが必要。

静的リンク

以下で全てのインストールはできそうだが7/26現在MySQL, PostgreSQLの静的リンクはできなかった。

#!pwsh
cd $env:VCPKG_ROOT
.\vcpkg.exe --triplet x64-windows-static install libpq
.\vcpkg.exe --triplet x64-windows-static install libmysql
.\vcpkg.exe --triplet x64-windows-static install sqlite3

$env:RUSTFLAGS= "-Ctarget-feature=+crt-static"
cargo install diesel_cli

PostgreSQL(静的リンク)

2020/07/26 インストール失敗

#!pwsh
cd $env:VCPKG_ROOT
.\vcpkg.exe --triplet x64-windows-static install libpq

$env:RUSTFLAGS= "-Ctarget-feature=+crt-static"
cargo install diesel_cli  --no-default_features --features postgres

MySQL(静的リンク)

2020/07/26 インストール失敗

#!pwsh
cd $env:VCPKG_ROOT
.\vcpkg.exe --triplet x64-windows-static install libmysql

$env:RUSTFLAGS= "-Ctarget-feature=+crt-static"
cargo install diesel_cli  --no-default_features --features mysql

SQLite(静的リンク)

#!pwsh
cd $env:VCPKG_ROOT
.\vcpkg.exe --triplet x64-windows-static install sqlite3

$env:RUSTFLAGS= "-Ctarget-feature=+crt-static"
cargo install diesel_cli  --no-default_features --features sqlite

動的リンク

#!pwsh
cd $env:VCPKG_ROOT
.\vcpkg.exe --triplet x64-windows install libpq
.\vcpkg.exe --triplet x64-windows install libmysql
.\vcpkg.exe --triplet x64-windows install sqlite3
# 動的リンクする場合は VCPKGRS_DYNAMICに値を設定する。 (参考: https://docs.rs/vcpkg/)
$env:VCPKGRS_DYNAMIC = 1
cargo install diesel_cli

動的リンクは可能だが、当然DLLのパスを通す必要がある。通常は %VCPKG_ROOT%\installed\x64-windows\bin あたり。汎用DLLも存在するためDLL Hellが起きないか不安だ。

WSL1 (Ubuntu 2004)

開発環境ならこれがもっとも簡単

ただし 2020/07/26現在WSL1のUbuntu2004ではrustupのインストールがうまくいかない

qiita.com

環境変数に RUSTUP_IO_THREADS=1 に付与すればインストールできた。

github.com

#!bash
export RUSTUP_IO_THREADS=1
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

sudo apt install libpq-dev libmysqlclient-dev libsqlite3-dev
cargo install diesel

Windowsからdieselを使うときは以下のように実行

#!pwsh
wsl bash -lc 'diesel ...'