【Ruby/SQLite3】Windows64bit環境にSQLite3を使えるようにする
こんにちは、しきゆらです
今回は、Windows64bit環境でSQLite3を使えるように設定していきます
私の環境では、普通にgemをインストールするとこうなりました
gem.cmd install sqlite3 ERROR: Error installing sqlite3: ERROR: Failed to build gem native extension.
mingw64上で行ってもこうなります
調べてみると、Devkitをインストールすれば使えるようになる
とのことでしたが、gccがmingw64で使えるのにさらに追加で入れるのは気持ち悪かったので見送りました
試しに、gemファイルをローカルに落として展開してみました
wget https://rubygems.org/downloads/sqlite3-1.3.10.gem # ダウンロード状況などは略 gem.cmd unpack sqlite3-1.3.10.gem
※
mingw64のTerminalではgemやirbは「.cmd」を付けないと動いてくれません
昔はbatファイルを作ってくれたと思うんですが・・・?
これで、gemファイルが展開されました
中に入ってみます
cd sqlite3-1.3.11/ext/sqlite3 ruby extconf.rb # エラー文 checking for sqlite3.h... no sqlite3.h is missing. Install SQLite3 from http://www.sqlite.org/ first. *** extconf.rb failed ***
sqlite3をインストールしなさいと怒られます
インストールしたパスを指定してもきちんと読んでくれないので、sqlite3-1.3.11/ext/sqlite3の中にsqlite3のソースをぶち込んでみます
# ここからダウンロード => https://www.sqlite.org/download.html wget https://www.sqlite.org/2016/sqlite-autoconf-3110000.tar.gz # ダウンロード状況は略 # ファイルを展開 tar zxvf sqlite-autoconf-3110000.tar.gz cd sqlite-autoconf-3110000 # 一旦コンパイルする gcc -shared sqlite3.c -o sqlite3.dll # 中身を一つ上の階層へ移動させる mv -i * ../ ls aclocal.m4 configure.ac INSTALL README.txt sqlite3.rc backup.c database.c install-sh shell.c sqlite3_ruby.h backup.h database.h ltmain.sh sqlite3.1 sqlite3ext.h compile depcomp Makefile.am sqlite3.c statement.c config.guess exception.c Makefile.in sqlite3.dll statement.h config.sub exception.h Makefile.msc sqlite3.h tea configure extconf.rb missing sqlite3.pc.in
移動させた結果、こんな感じ
(とても・・・汚いです)
ここで注意!
sqlite3.cを上書きしないようにしてください
上書きした場合は、コンパイル時にエラーが出ます
mvコマンドで「-i」を付けると、上書きするかどうか聞かれます、その時にnoとしてください
追加で以下のようにすると、makefileが作られます
ruby extconf.rb checking for sqlite3.h... yes checking for sqlite3_libversion_number() in -lsqlite3... yes checking for rb_proc_arity()... yes checking for rb_integer_pack()... yes checking for sqlite3_initialize()... yes checking for sqlite3_backup_init()... yes checking for sqlite3_column_database_name()... no checking for sqlite3_enable_load_extension()... yes checking for sqlite3_load_extension()... yes checking for sqlite3_open_v2()... yes checking for sqlite3_prepare_v2()... yes checking for sqlite3_int64 in sqlite3.h... yes checking for sqlite3_uint64 in sqlite3.h... yes creating Makefile make # 略 compiling sqlite3.c compiling statement.c linking shared-object sqlite3/sqlite3_native.so
ここまできちんと動いてくれれば、あとは2つ上の階層にある「setup.rb」を使えばおしまいです
ruby setup.rb # 警告がかなり出るけど無視 mkdir -p C:/Ruby230/lib/ruby/site_ruby/2.3.0/x64-msvcrt/sqlite3 install sqlite3_native.so C:/Ruby230/lib/ruby/site_ruby/2.3.0/x64-msvcrt/sqlite3 ---> ext/sqlite3/tea ---> ext/sqlite3/tea/doc <--- ext/sqlite3/tea/doc ---> ext/sqlite3/tea/generic <--- ext/sqlite3/tea/generic ---> ext/sqlite3/tea/tclconfig <--- ext/sqlite3/tea/tclconfig ---> ext/sqlite3/tea/win <--- ext/sqlite3/tea/win <--- ext/sqlite3/tea <--- ext/sqlite3 <--- ext
こんな感じのが出てきたら完了です
irbで確認してみましょう
irb(main):001:0> require 'sqlite3' => true irb(main):002:0>
これにて、Windows64bit環境でSQLite3を使えるようになりました
恐らくもっとスマートな方法があると思いますが、現状はこれで動いているので良しとします
おわり