LoginSignup
3
1

More than 5 years have passed since last update.

Windows環境でのRubyの環境構築は時間コストがかかりすぎる

Posted at

始めに

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に接続するプログラムを書いてみた

Oracle.rb
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アクセスするプログラムを書いてみた

OracleTest.rb
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並の統合開発環境がないと
「簡単に開発できる」
なんて言ってはいけないと思う

3
1
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
3
1