#始めに
Windows環境でRubyで
・DBにアクセスする
・Webアプリケーションを作る
といったまともにアプリケーションを作れる環境を構築するには、JavaやC#(※1)に比べて時間がかかりすぎるというお話。
※1いや、C#やJavaはともかく、F#やGroovyといったマイナーな言語よりも面倒くさいです
#開発環境
- windows10
- ruby2.4.0
- jdk1.8
- ecliplse Neon Release (4.6.0)
- oracle12c
#Ruby on Railsがどうやってもインストールできない
Ruby on RailsあたりでWebApiモジュールを作ろうと思いRailsを導入しようとしたが・・・
C:\DevKit>gem install rails
Building native extensions. This could take a while...
ERROR: Error installing rails:
ERROR: Failed to build gem native extension.
current directory: C:/Ruby24/lib/ruby/gems/2.4.0/gems/nio4r-2.1.0/ext/nio4r
C:/Ruby24/bin/ruby.exe -r ./siteconf20170720-6112-ak25be.rb extconf.rb
checking for unistd.h... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
がどうしても解消できない。
Ecliplseを使ってWebモジュールがサクッと動かせる開発に慣れてしまうと、こういう環境周りでうまくいかないことに相当なフラストレーションを感じてしまう。
Webで調べてもたいていはUnix系のOSかMacOsの記事ばかりで、
Windows系のサイトの情報は極論すれば
gem install railsすれば簡単に出来る
というものばかりで役に立ちませんでした。
そういうのもフラストレーションがたまる一因だ
というか、今のご時世、環境構築するためにCモジュールをWindows上でコンパイルさせるフレームワークってどうよと思うのだが。
#Oracleへのアクセス
ruby-oci8-2.2.4-x64-mingw32.gemをインストールし、oracleに接続するプログラムを書いてみた
require 'oci8'
sid = "//localhost:1521/triple_pb.co.jp"
sql = 'select table_name from user_tables'
oracle = OCI8.new("triple","triple",sid);
oracle.exec(sql) do |row|
puts row.join(',')
end
で結果は
C:/Ruby24/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require': OCI.DLL: 193(%1 �͗L���� Win32 �A�v���P�[�V�����ł͂���܂���B ) (LoadError)
from C:/Ruby24/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from C:/Ruby24/lib/ruby/gems/2.4.0/gems/ruby-oci8-2.2.4.1-x86-mingw32/lib/oci8.rb:107:in `<top (required)>'
from C:/Ruby24/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in `require'
from C:/Ruby24/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:133:in `rescue in require'
from C:/Ruby24/lib/ruby/site_ruby/2.4.0/rubygems/core_ext/kernel_require.rb:40:in `require'
from C:/Users/takayoshi/workspace/MyRuby/OracleTest.rb:1:in `<main>'
OCI.DLLが読み込めないらしきエラーが発生している。
JDBCのthinでDBに接続するのが当たり前だった私からすると、clientの設定に依存する形でしかDBアクセスにできないとなると、率直に言って不便すぎる
ちなみに、JRubyでthinで接続してDBアクセスするプログラムを書いてみた
require 'java'
java_import 'oracle.jdbc.OracleDriver'
java_import 'java.sql.DriverManager'
sid = "jdbc:oracle:thin:@//localhost:1521/triple_pb.co.jp"
oradriver = OracleDriver.new
DriverManager.registerDriver oradriver
conn = DriverManager.get_connection(sid,'triple', 'triple')
sql = 'select table_name from user_tables'
conn.auto_commit = false
stmt = conn.prepare_statement(sql);
rowset = stmt.executeQuery()
while (rowset.next()) do
puts rowset.getString(1)
end
こっちは WORD_DICTIONAY WEBPAGE_WORD EMP PARKINGATTIME
出力されと正常にDBにアクセスできる
ただ、上記のプログラミングだとPreparedSteatmentやResultSetを生で使わないといけないJavaライクな書き方になってしまうので、Rubyを使う意味がまったくなくなってしまう。
これだったら、Groovyでプログラムを書くほうがまだましだ
#おわりに
Web上だと
「Rubyを使って簡単にWebアプリ開発」
というページがあふれているが、個人的には
「どこが簡単?環境構築が面倒くさすぎる」
というのが正直なところ
JavaのEclipse、C#のVisualStudio並の統合開発環境がないと
「簡単に開発できる」
なんて言ってはいけないと思う