WindowsでRustのDieselライブラリを利用
TLDR
開発用途であればWSLを使うほうが楽。
本番用途でも静的リンクは大変。
Dieselとは
RustのORM/クエリビルダライブラリ
PostgreSQL, MySQL, SQLite3に対応しているが、それぞれのSQLクライアントライブラリにリンクする必要がある。
後述するが、それぞれのクライアントに限定してインストールすることもできる。
Vcpkg
VpkgはC言語とC++のライブラリ管理ツール
今回はVcpkgを利用して各種SQLクライアントのライブラリインストールしてみる。Vcpkgのインストール方法については下記ページを参照。
特筆すべき事項としては、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のインストールがうまくいかない
環境変数に RUSTUP_IO_THREADS=1
に付与すればインストールできた。
#!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 ...'