普段Javaを主言語として使っている人が、Rubyを始める時の開発環境構築の記事です。
自分は、2006年ぶりのrubyです。
最近、再び触ろうとしましたが、すべてを忘れていました。(つまり初心者)
なので、試行錯誤して作った環境構築と参考にした記事を記述しています。
(それとJavaでいうところの何なのかをも書きます。)
なお参考にした記事のリンク先を見た方がそれぞれの理解が深まると思います。
mac環境限定です。
構築の前に
構築の前にRuby環境において、Javaでは何なのかを簡単にまとめておきます。
正確には違うけど、大体こんな感じと捉えて下さい。
Ruby | Java | 概要 |
---|---|---|
rbenv | SDKMAN! | 複数バージョンの使い分けの仕組み |
gem | jar | ライブラリとしての意味とコマンドとしての意味がある |
http://rubygems.org/ | http://search.maven.org/ | ライブラリのレポジトリ |
bundler | gradle,maven | パッケージ管理ツール |
rubocop | checkstyle | コーディング規約のチェックツール |
rubocop -a + Vim設定など | formatter | ソースフォーマッターツール |
RDoc,YARD,TomDoc | JavaDoc | ドキュメント。RDocが標準 |
Test::Unit | JUnit | 単体テストフレームワーク |
RSpec | Spock(Groovy) | BDDフレームワーク |
Editorは、人によって大きく違うと思うけど、大体こんな感じだと思います。
- Rubyでは、Vim,Emacsなどのエディタ + Plugin + 開発支援なgem
- Javaでは、Eclipse,NetBeans,IntelliJなどのIDE
Javaの人はIDEが無いと辛いと思うかもしれませんが、Vim Pluginや開発支援するgemを使えば、IDEと遜色なく使えるのではないかと思います。
例えば、エディタ上で以下のことはできます。
- コード補完
- ブレイクポイントを置いて、ステップ実行
- カーソル上のクラスやメソッドに飛ぶ(gemやRuby本体のC言語も含む)
- 知りたいクラスやメソッドなどのドキュメントやソースの表示
- 保存時にコーディング規約違反の表示
homebrew
mac標準のrubyでまずはhomebrewをインストールします。
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
ruby開発環境に関係するものを Brewfile brewfile.sh に記述します。
(Brewfileは使えなくなったので書き換えました)
brew install git
brew install lua
brew install ctags
## ruby
brew install readline
brew install ruby-build
brew install rbenv
brew install rbenv-gemset
## Editor
brew install vim --with-lua
・・・
上記Brewfile brewfile.shのあるディレクトリで以下を実行してインストールします。
$ chmod +x brewfile.sh
$ ./brewfile.sh
rbenv
Ruby環境のバージョン切り替えツールです。
JavaでいうところのSDKMAN!になります。
Javaでは環境変数 JAVA_HOME
を手動で書き換えてたあれです。Rubyでは仕組みとして用意されています。
まずはパスを通しておきます。
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile
- rbenv-default-gemsの利用
これは、どのバージョンのrubyでも共通に利用したいgemがある場合やプロジェクト内でバージョンを合わせたい場合にも役立ちます。
(ここでいうgemはjavaでいうところのjarです。)
まずは、インストール
$ git clone https://github.com/sstephenson/rbenv-default-gems.git ~/.rbenv/plugins/rbenv-default-gems
以下のファイルにrbenv install
後に一緒に gem install
したいgemを指定します。
bundler ~>1.7.0
pry
pry-doc
pry-stack_explorer
pry-byebug
refe2
rubocop
- ruby本体のインストールと設定
インストール可能なrubyバージョンを調べてインストールします。
$ rbenv install -l
・・・
$ rbenv install バージョン番号
インストールしたら ~/.rbenv/versions/バージョン番号/bin/
の実行ファイルを動作するシェルスクリプトを ~/.rbenv/shims
に置くためのコマンドを打ちます。
$ rbenv rehash
普段利用するバージョンを設定します。
$ rbenv global バージョン番号
以下は必要なときにやります。
特定のディレクトリで利用するバージョンを設定します。
$ rbenv local バージョン番号
使わないバージョンは削除の仕方です。
$ rbenv uninstall バージョン番号
一応、rbenv-default-gems
で指定したアプリを見ます。
$ gem list
参考
rbenvは以下の記事を参考にしました。
rbenvでRubyのバージョンを指定する方法
Bundler
gemコマンドがシステムで利用するgemのパッケージ管理ツールで、Bundlerはアプリ毎のgem(とそのバージョン)管理ツールという理解です。
(Bundlerは、Javaでいうところのmavenやgradle)
インストールは、上記での rbenv-default-gems
を利用したので済んでいます。
管理したいgemをGemfileに記述します。
$ bundle init
上記コマンドで以下のGemfileができます。
(Gemfileは、Javaでいうところのpom.xmlやbuild.gradle)
# A sample Gemfile
source "https://rubygems.org"
# gem "rails"
例えば、Gemfileに以下を追加して
gem 'rspec', '~> 3.0.0'
gem 'pry'
gem 'pry-doc'
gem 'pry-stack_explorer'
gem 'pry-byebug'
インストールする。
$ bundle install --path vendor/bundle
--path
によってgemが置かれる場所を指定できます。
これにより、プロジェクト毎に違うgemを利用することができます。
なお、一度 --path
付きでインストールすると次からも同じ場所にインストールされます。
--path
でインストールすると以下のコマンドでrspecが表示されません。
$ gem list
この場合は、bundle exec
を付けることで、インストールしたディレクトリを解決してコマンドを実行してくれます。
プログラム内では、以下のように記述するとgemを一括でrequireされます。
require 'bundler'
Bundler.require
参考
rbenvからbundlerまでは以下の記事を参考にしました。
Rails開発環境の構築(rbenvでRuby導入からBundler、Rails導入まで)
Bundler再履修: bundle execって何? gemはどこに入るの?
https://gist.github.com/kozy4324/5719555
Editor
自分はエディタにvimを使っています。
(Javaでは、EclipseなどのIDEを使いますが、Rubyでは軽量なエディタにpluginなどでIDE的な機能を追加していくことが多いようです)
rubyの入力を補完させたいのでneocompleteプラグインを使います。
これはluaなvimでないと動きません。
まずは、対応vimかを確認します。
$ vim --version | grep lua
+lua
+luaが表示されない場合は、こちらのブログを参照して下さい。
またhomebrewのvimは現在+rubyになっています。一応確認します。
$ vim --version | grep ruby
+ruby
次に、vimプラグインを簡単に管理したいので、NeoBundleを入れます。
$ curl https://raw.githubusercontent.com/Shougo/neobundle.vim/master/bin/install.sh | sh
.vimrc
を記述します。
自分の場合はgithubで管理しています。一応、自分のをリンクしますが、これよりも他の方々のを参考にしたほうがいいと思います。
Neobundle用のvimrc
ruby用のvimrc
ここでvimを開くとneocompleteなどの記述したpluginがインストールされます。
vim pluginやgemなど
neocomplete
自動でコード補完をするプラグインです。
vimでは標準で補完機能があります。インサートモードで <Ctrl-x>
で表示されます。例えば、その後<Ctrl-o>
をするとオムニ補完されます。
この <Ctrl-x>
をしなくても補完が出るようにするためにneocomplete利用します。
以下が自分の .vimrc
になります。
Neocomplete用のvimrc
Refe2
コマンドラインから日本語リファレンスを引くために利用します。
rbenv-default-gems
でインストール済(依存するbitclustも同様)なので、
まずはリファレンスのデータベースを作成する。
$ bitclust setup --versions=2.1.2
この操作で、~/.bitclust以下にドキュメントをダウンロードしてデータベースを作成しているようです。
更新も同様のコマンドです。
これでターミナルでドキュメントを見れますが、vim上で読みたいので、vim-ref-riを使います。
vim-ref-ri
vimで以下のコマンドを打つとRefeのドキュメントが見れます。
: Ref refe Array
以下はriでドキュメントが見れます。
: Ref ri Array
Uniteプラグインを使っていれば、以下で出来ます。
: Unite ref/refe
enter
でカーソルのリファレンスが見れて、<Ctrl-o>
で戻る。<Ctrl-i>
で進む。
また、vim上のソースにカーソルを合わせて、 <Shift-k>
を入力すると 定義が見れます。
参考
refeは以下を参考にしました。
vim-refとReFeでRubyのリファレンスマニュアルをvimで読む
ctags
ソースにインデックスを付けて、エディタで参照をするために利用します。
インストールは、homebrewで済んでいます。
rubyの定数も対象にするために以下を作成しておきます。
--regex-ruby=/^[\t ]*([A-Z][-_A-Za-z0-9]*::)*([A-Z][-_A-Za-z0-9]*)[\t ]*=/\2/C,constant/
そしてインデックスを作ります。
rubyプロジェクトのルートで以下のようなコマンドを叩きます。
$ ctags --languages=ruby -R .
ctagsディレクトリが出来ます。
これでインデックスされたソースは、vim上で、<Ctrl-]>
でその定義のソースに飛びます。<Ctrl-o>
で戻ります。
参考
ctagsやrefは以下の記事を参考にしました。
Rubyのコードを読むのが捗る技 (Vim)
Rubyの定数をTag Jumpできるようにする
pry,pry-doc,pry-stack_explorer,pry-byebug
主にソースにブレイクポイントを貼ってデバッグするために利用します。
pry自体はirbのパワーアップ版みたいなツールです。
pry-docはRuby本体のC言語を参照できるようにするツールです。
pry-stack_exploreは、pryで止めた場所までの呼び出しメソッドのスタックを扱えるツールです。
pry-byebugはpryでステップ実行をできるようにするツールです。Ruby2.0.0以前の場合は、pry-debuggerを利用します。
インストールは、bundler
で済んでいます。
例えば以下のように binding.pry
と書き、
require 'pry'
class Hello
def message
@hoge = 'hoge'
binding.pry
@hoge = 'hello'
end
end
Hello.new.message
実行させます。
$ ruby hello.rb
するとbinding.pry
のところでpryが起動します。
3: def message
4: @hoge = 'hoge'
5: binding.pry
=> 6: @hoge = 'hello'
7: end
下記のようにデバッグできます。
ls
でオブジェクトの状態を見て、cd 変数名
でそのオブジェクト内に入ります。
[1] pry(#<Hello>)> p @hoge
'hoge'
=> 'hoge'
[2] pry(#<Hello>)> ls
Hello#methods: message
instance variables: @hoge
locals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_
[3] pry(#<Hello>)> cd @hoge
[4] pry('hoge'):1> upcase
=> 'HOGE'
[5] pry('hoge'):1>
show-stack
でスタック一覧が表示されて、up
で上位スタック、dowon
で下位スタックへ frame スタッック番号
で直接移動します。
[1] pry(#<Hello>)> show-stack
・・・
=> #0 message <Hello#message()>
#1 [block] block in run <PryByebug::Processor#run(initial=?, &_block)>
#2 [method] run <PryByebug::Processor#run(initial=?, &_block)>
#3 [method] resume_pry <PryByebug::Processor#resume_pry(context)>
#4 [method] at_line <PryByebug::Processor#at_line(context, _file, _line)>
#5 [method] at_line <Byebug::Context#at_line(file, line)>
#6 [method] message <Hello#message()>
#7 [main] <main>
・・・
[2] pry(#<Hello>)> up
・・・
[3] pry(#<PryByebug::Processor>)> down
・・・
[4] pry(#<Hello>)> frame 7
・・・
s
でステップ実行(メソッドに入る) n
で次の行へ f
でメソッドの外へ c
で次のブレイクポイントへ
=> 6: @hoge = 'hello'
7: "hello".capitalize
・・・
[1] pry(#<Hello>)> s
・・・
6: @hoge = 'hello'
=> 7: 'hello'.capitalize
・・・
途中でドキュメントやソースを見たくなったら、show-doc
、show-source
で見れます。
参考
pryは以下を参考にしました。
ググるよりもまずはpry
Rubyistよ、irbを捨ててPryを使おう
Pryが真の力を発揮してくれる19個のコマンドとコマンドの自作方法[Rails]
Rails4 今のところ最強なデバッグツール達
rubocop
コーディングルールに準拠しているかをチェッックします。
(rubocopは、JavaでいうところのCheckStyle)
プロジェクトで以下のコマンドを打つと違反のある警告を無効にする .rubocop_todo.yml
ファイルができます。これを参考に自分たちのコーディングルールに合わせて作ります。
$ rubocop --auto-gen-config
ファイル名を.rubocop.yml
にして、以下を打つと規約違反が表示されます。
-aオプションで一部の警告が自動で補正されます。
$ rubocop -a
・・・
lib/hello.rb:5:5: W: Remove debugger entry point binding.pry.
binding.pry
^^^^^^^^^^^
・・・
syntastic
rubocop(だけではないけど)をvim保存時に実行させるvim pluginです。
:wで保存するとエラー箇所がvim上に表示されます。
カーソルを警告の行に合わせると一番下に警告内容が表示されます。
1 require 'pry'
S> 2 class Hello
3 def messagege
4 @hoge = 'hoge'
S> 5 binding.pry
6 @hoge = 'hello'
S> 7 binding.pry
8 @hoge.capitalize
9 end
10 end
Missing top-level class documentation comment.
参考
rubocopは以下を参照しました。
Rubocopを使ってコーディングルールへの準拠チェックを自動化
Rubocopをsyntasticを使ってVimから自動実行する