カテゴリー別アーカイブ: Ruby

[ruby] Bundler4つの便利な使い方(初期化、インストール、省略する設定など)


Ruby(Rails)での開発にあたり、開発環境(エディタやツールなど)の調査や試用をしていました!!
その中で、パッケージ管理ツールのBundlerのサブコマンドやオプションでこれはいいと思ったものについてまとめてみたいと思います。間違いなどあればご指摘お願いいたいします。

前提としてRubyは rbenv,ruby-build でビルドした環境です。

まず、Bundlerとは

Rubyのパッケージを管理するもの。
Gemfileというファイルにパッケージ名、バージョンを記述してgemのライブラリを管理出来ます。また、グループ化などもでき、環境に応じてgemを管理することができます。


次から3つの便利な使い方です。

その1 初期化コマンド

とても簡単で、initサブコマンドを実行するだけです。

    % bundle init

このコマンドを実行したら、以下の内容で「Gemfile」のデフォルトファイルが生成されます。

Gemfileの中身

# A sample Gemfile
source "https://rubygems.org"

# gem "rails"

その2 インストールコマンド

基本的には「bundle install」というコマンドを実行すればGemfileから該当のgemをインストールしてくれるのですが、色々とオプションを設定すると環境依存がない形でインストール出来ます。

    % bundle install --path=vendor/bundle --binstubs=vendor/bin

–path と –binstubs という2つのオプションを指定しました。

  • [–path]
    指定したディレクトリへGemをインストールします。指定しない場合はrbenvのグローバルな領域へインストールされます。
    上記の場合、カレントディレクトリに「vendor/bundle」というディレクトリが掘られ、インストールされます。

  • [–binstubs]
    指定したディレクトリへコマンドとなるスクリプトを配置します。指定しない場合はカレントに 「bin」というディレクトリが出来てそれいかにスクリプトが置かれます(※1 注意が必要)
    上記の場合、「vendor/bin」というディレクトリにスクリプトが配置されます。
    「bundle_bin」というディレクトリ名を指定するのも多いようですが、自分はvendor/binとしてインストールしました。

  • [–without]
    ここでは指定していないが、以下のようにwithooutに設定するとtest , development グループに記述したgemのインストールを除外する。  

    % bundle install --without test development

(※1) Rails4では–binstubsでデフォルトで指定されるbinディレクトリだと不都合が起きるようです。rails3までで使われていた「script」ディレクトリがなくなり、「bin」ディレクトリが代わりにできるようになったからだそうです。
* Rails 4.0 と bundler install –binstubs について
* Rails4から–binstubsが使えなくなる件

その3 設定を確認するコマンド

上記のような 「–path」や「–binstubs」などの設定を確認するコマンドです。
「bundle config」

    % bundle config
    Settings are listed in order of priority. The top value will be used.
    
    path
      Set for your local app (/PATH_TO_PROJECT/.bundle/config): "vendor/bundle"
    
    bin
      Set for your local app (/PATH_TO_PROJECT/.bundle/config): "vendor/bin"
    
    disable_shared_gems
      Set for your local app (/PATH_TO_PROJECT/.bundle/config): "1"

その4 bundle exec コマンドを省略する件

bundle execを使わずに済む方法(rbenv編) の記事を参考にしてみて、rbenv-binstubsというプラグインを入れてみた。

    % mkdir ~/.rbenv/plugins
    % cd .rbenv/plugins
    % git clone git://github.com/ianheggie/rbenv-binstubs.git

これで以下のように該当プロジェクトでbundle exec を省略して rails などのコマンドを実行するとbundleでインストールしたものが利用できる。

    % cd RAILS_PROJECT_DIR
    $ rails --version
    Rails 3.2.13

しかし、、、これだと「–path=vendor/bundle」など –path でbundleのインストールディレクトリを指定した場合は利用でいないみたいだ。。

    ↓これだとコマンドが読み込めない
    % bundle install --path=vendor/bundle --binstubs=vendor/bin
    
    ↓このようにすると使える(グローバルにインストール)
    % bundle install --binstubs=vendor/bin

これはおそらくグローバルに入っていないとrbenvのディレクトリへのパスが通ってない状態なので、インストールしたプラグインが利用することができないためです。
そもそも以下のようにrailsコマンドを打ってもコマンドが見つからないというエラーとなる。

% rails --version
zsh: command not found: railss

グローバルに何でもかんでも入れたくないので、最終的に以下のように明示的にパスを設定することで解決しました。

export PATH=./vendor/bin:$PATH

RVMでの利用方法
RVM の after_cd_bundler というフックスクリプトを利用することができるそうです。
http://qiita.com/items/a1fbac19686a8fcd2e34


おまけ

以下のようにBundleで利用するgemがどの領域のgemを利用しているか確認する場合、以下のコマンドで確認できます。

% rbenv which pry
% bundle show pry

インストール可能な gem を探すには

hogeってキーワードに引っかかるパッケージ一覧出す
% gem search --remote hoge
省略形
% gem search -r hoge

ネットワークからパッケージを探して詳しく一覧で出す(現在最新のバージョン)
% gem search -rd hoge

ネットワークからパッケージを探して詳しく一覧で出す(過去バージョンも出力)  
% gem search -rda hoge 

Mac で Ruby環境構築(rbenv でのインストールから rbenv-gemset )


【追記】 2014/03/17

rbenv-aliases というrbenvのプラグインを入れておくと、 .ruby-version で指定するときに ruby2.0.0p… などの p… 以降を指定せずに 2.0.0 などで指定しておけば p… 以降はよしなに判断して最新のものを適用してくれる。

【追記】2013/12/18

‘-k (–keep)’ オプションを使うことでrbenv配下のディレクトリにRuby本体のソースもダウンロードしてくれる。
そして、pry-docをインストールするとpry上からRubyのソース(C実装)を確認できる。
pry-docでカジュアルにRubyのソースコードを読む

% RUBY_CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install -k 2.0.0-p353

【追記】 2013/05/23

Ruby2.0 以上をrbenv + ruby-buildでビルドするときに日本語環境とSSL環境を有効にする方法。
1.9までは「CONFIGURE_OPTS」だったのに「RUBY_CONFIGURE_OPTS」という環境変数で指定してあげないとダメみたい。

% RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline) --with-openssl-dir=$(brew --prefix openssl)" rbenv install 2.0.0-p195 

参考:MacにRubyをインストールする時のメモ


以前に書いた記事でも
Ruby環境構築(Mac rbenv編)
rbenvによる環境構築を書いたのですが、新たにマシンをセットアップするということで改めてまとめてみました。
OSは Mountain Lion です!!

rbenvなどのインストールからちょっと中断まで

基本的な流れは以前の記事と同じです。

% brew install rbenv
% brew install ruby-build
% eval "$(rbenv init -)" >> ~/.zshenv

% brew install openssl
% brew install readline 

## 以前は成功した、「brew link」コマンド何故か以下のWarning。。。
% brew link openssl
Warning: openssl is keg-only and must be linked with --force
Note that doing so can interfere with building software.

% brew link readline
Warning: readline is keg-only and must be linked with --force
Note that doing so can interfere with building software.

「brew link」ではreadline, opensslを /usr/local/bin にリンクを張るために行なっているのですが、「keg-only」のWarningが出てしまう。「–force」を使えばLinkは通るけど「brew doctor」ではまたWarningが出る。

homebrewについてはこのへん参考
一旦保留ということにしておこう。


rbenvでRubyをインストール

【参考】
* rbenvでのビルドに再挑戦(成功)
* rbenv & ruby-build の使い方メモ

上記で「brew link」ができなかったので明示的に「brew –prefix FORMULA」でパスを指定してインストールする。

しかし、またまたエラー。。。GCC周りがおかしいようです。AppleはGCCの仕様が変わってコンパイルできなくなることが多いなー。。

% CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline) --with-openssl-dir=$(brew --prefix openssl)" rbenv install 1.9.3-p286

Downloading yaml-0.1.4.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/36c852831d02cf90508c29852361d01b
Installing yaml-0.1.4...
Installed yaml-0.1.4 to /Users/takaesu-m/.rbenv/versions/1.9.3-p286

Downloading ruby-1.9.3-p286.tar.gz...
-> http://dqw8nmjcqpjn7.cloudfront.net/e2469b55c2a3d0d643097d47fe4984bb
Installing ruby-1.9.3-p286...

BUILD FAILED

Inspect or clean up the working tree at /var/folders/yx/11hj2qx50z56bw5dx05_ggvm0000gn/T/ruby-build.20130211111658.95876
Results logged to /var/folders/yx/11hj2qx50z56bw5dx05_ggvm0000gn/T/ruby-build.20130211111658.95876.log

Last 10 log lines:
compiling regenc.c
compiling regerror.c
compiling regexec.c
compiling regparse.c
regparse.c:582:15: error: implicit conversion loses integer precision: 'st_index_t' (aka 'unsigned long') to 'int' [-Werror,-Wshorten-64-to-32]
    return t->num_entries;
    ~~~~~~ ~~~^~~~~~~~~~~
1 error generated.
make: *** [regparse.o] Error 1
make: *** Waiting for unfinished jobs....
  34.95s user 13.27s system 102% cpu 47.008 total

ググってみるとこの記事を発見。ページ下部の部分に参考になる内容が!!
Cannot compile ruby 1.9.3

Ruby環境 rbenv mac

「brew tap」コマンドはhomebrew に参照するリポジトリを追加するものです。
この内容でやっていることは

  1. berwをアップデート
  2. 「homebrew/dups」をhomebrewで参照するリポジトリとして追加
  3. 「apple-gcc42」をインストール。
  4. 「apple-gcc42」を環境変数の CC としてExport
  5. brewを使ってrubyをインストール

4番目のExportまで行ったら、再度以下のコマンドでRubyをインストール

% CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline) --with-openssl-dir=$(brew --prefix openssl)" rbenv install 1.9.3-p286

無事インストール出来ました!!

なお、「rbenv install」の前にCONFIGURE_OPTSをつけるのはMacOSXのみのようです。
brew linkができていたら、readlineやopensslを個別に指定しなくても、以下のようにできるようです。

CONFIGURE_OPTS="--with-opt-dir=/usr/local" rbenv install 1.9.3-p286  

rbenv-gemsetの設定

インストールなど
% brew install rbenv-gemset
所定のディレクトリで試してみる
% cd ~/workspace

rbenv gemset create [version] [gemset名] でgemsetを作成
% rbenv gemset create 1.9.3-p286 commands

gemsets作成確認
% rbenv gemset list
1.9.3-p286:
  commands

この設定で以下のディレクトリにgemsetができる
% ls -l ~/.rbenv/versions/1.9.3-p385/gemsets
total 0
drwxr-xr-x  7 takaesu-m  staff  238  3 12 11:27 commands

gemsetsを利用するため「.rbenv-gemsets」を作成する(内容は commands と使用したいgemset名を入れる)
該当ディレクトリより下位はcommandsというgemsetsを利用する
% echo commands > .rbenv-gemset

アクティブなを確認する
% rbenv gemset active
commands

mechanizeというgemをインストールしてみる
% gem install mechanize

gemインストール確認
% gem list
*** LOCAL GEMS ***

domain_name (0.5.7)
mechanize (2.5.1)
mime-types (1.21)
net-http-digest_auth (1.2.1)
net-http-persistent (2.8)
nokogiri (1.5.6)
ntlm-http (0.1.1)
rbenv-rehash (0.3)
unf (0.0.5)
unf_ext (0.0.6)
webrobots (0.1.0)

これでひと通り
rbenv + rbenv-gemset の インストール手順完了です。

関係のない一言

  • 「rbenv local」便利らしい!!

Ruby環境構築(Mac rbenv編)


これまではrubyのバージョン管理といえばrvmだったと思います。自分も以前はrvmでいれていました。

そのあとrubyを全然使っていなかったからきにしていなかったけど、

この度、Lokka というブログ用のCMSツールを入れようということでちょっと話題のrbenvでRubyを管理してみようと思いました。ちょっとそのログです。

【參考】

http://blog.twiwt.org/e/66a1d0
http://qiita.com/items/9dd797f42e7bea674705(開発版などをインストールするなど、とても参考になるリンク)

これも参考になる(readline, opensslなどのリンクはない)
http://pplog.org/?p=2155

Mountain lion 用の参考サイト
http://qiita.com/items/a60886152a4c99ce1017

 

  • インストールは以下のコマンドで一発
% brew install rbenv
% brew install ruby-build

  • シェルの初期化ファイルに(.zshrc, .bashrcなど)以下を記載する

    自分は.zshenvに記述しました。

% eval "$(rbenv init -)"

  • readline(irbでの日本語化)を入れてインストールするといいみたい。ちょっとこの辺わからない。。
% brew install readline openssl
% brew link readline
% brew link openssl

  • ここでインストール

% CONFIGURE_OPTS="--with-readline-dir=/usr/local" rbenv install 1.9.2-p290

おぉってなんかGCC関連でエラーが。。。Xcodeも入れているのにGCCもパス通っているのに。。なぜ?

ここをみるとGCCが変わったとのことです。

しかし、Xcodeのコマンドラインエディションを入れていればインストールできている人が多くいますが、k自分の場合はXcodeもいれ、Xcodeコマンドラインエディションを入れてもダメでした。

以下のリンクからGCCのインストーラをダウンロードしてインストールする。

https://github.com/kennethreitz/osx-gcc-installer/downloads

これでインストールできたーー1.9.2と1.9.3を入れてみよう


% CONFIGURE_OPTS="--with-readline-dir=/usr/local" rbenv install 1.9.2-p290
% CONFIGURE_OPTS="--with-readline-dir=/usr/local" rbenv install 1.9.3-p125
% rbenv rehash

インストール後はrbenv rehash というコマンドを打つのが必須みたい。railsのようなコマンドを含むgemを入れた場合も同様。

rbenv rehash は ~/.rbenv/shims というディレクトリに ruby 自体や gem でインストールした実行ファイルを起動するための実行ファイルを作ってくれる。

% gem install rbenv-rehash
% <strong><span style="color: #ff6600;">各バージョンでインストール</span></strong>しておくとrbenv rehash を打たなくてもいいみたい。

 

不要になったrubyを削除するには普通にファイルを消す


% rm -rf ~/.rbenv/versions/1.9.3-p125

 

その他のコマンドは以下を參考に。

http://blog.twiwt.org/e/66a1d0

rbenvでインストールした 1.9.2-p290を使用する
% rbenv global 1.9.2-p290

システムのRubyに戻す
% rbenv global system

エディタのRedcarをインストールした。。(Windows)


Ruby開発に使うエディタを探していたところ redCar というものを発見。

一度は使ってみようということでインストール。

JavaとRubyが入っていたらコマンド2発でインストール終了。。

簡単ですねーー。。
【参考】
本家github

https://github.com/redcar/redcar/wiki/installation

日本語解説

http://1-byte.jp/2010/10/20/redcar_for_linux_and_windows_users/

http://news.mynavi.jp/column/ide/095/index.html

使い方

http://d.hatena.ne.jp/yo_takagi/20110211/1297409052

 

#インストール手順
>gem install redcar
>redcar install

「$ HOME\.redcar」というディレクトリができる。

 

#起動
>redcar

 

赤い列車のような起動画面が終わるとエクリプスのようなエディタが開く。

 

 

 

 

 

 

 

あとは、ソースツリーにディレクトリを追加するなどしていけるはず。。。

それと、Bundle機能が便利!!!

JavaScriptなどのfuntion、HtmlのDoctypeなど決まりきった文句を自動で出す事ができます。

[fun]と入力して[tab]を押すとずらっとfunctionのコンテキストが出てきます。

また、Macだと「Command+Option+S」で検索ボックスが開くそこでfunctionなどとうつと対応するコンテキストが出てきます。

 

 

Ruby on Railsの環境構築 (WindowsでRubyのマルチ環境~Railsのインストール)


なかなか、WindowsにRubyを入れるっていう情報が少ない気がしたので、Railsの環境を作るところ

までを書いてみました。Ruby使いはやっぱりUnix系なのかな。MacBookAirがほしい。。。

 

●ダウンロード・インストール

Windows版Ruby

rubyinstaller-1.9.2-p290.exe」をダウンロードし実行。

ウィザードを進めていくだけ。。解凍先は「C:\Ruby192」とする。

[*注意]保存ディレクトリの名前にはスペースなどの空白は含めない。

 

インストール確認

>ruby -v
>gem -v

●gemのアップデート

>gem -v
1.7.2
>gem update --system
>gem -v
1.8.11

 

●gemでrakeをアップデート

>gem list
*** LOCAL GEMS ***
minitest (1.6.0)
rake (0.8.7)
rdoc (2.5.8)
rubygems-update (1.8.11)

>gem update rake

>gem list
*** LOCAL GEMS ***
minitest (1.6.0)
rake (0.9.2.2, 0.8.7)
rdoc (2.5.8)
rubygems-update (1.8.11)

 

●Development Kitをインストール

WindowsでC/C++で書かれたnative extensionをインストールするために必要。

(gem でmysqlとかpgをインストールするときに必要そう)

Windows版RubyのサイトのDownloadより[Other Userful Downloads]セクションから

「DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe」をダウンロードする。

ダブルクリックで解凍する。解凍先は「C:\DevKit」とする。

以下のコマンドを実行

>cd c:\DevKit
>ruby dk.rb init
>ruby dk.rb instal
##DevelopmentKitの動作確認(jsonをインストールしてみる)
>gem install json

 

●gemでpikをインストール

> gem install pik
> gem list
##pik_install コマンドでpikを置くディレクトリを指定
> pik_install "C:\_Rubypik"

環境変数のPathに[C\:_Rubypik]を通すとpikコマンドが使えるようになる。

 

pikの動作確認

現在入っているバージョンを表示

>pik list
* 192: ruby 1.9.2p290 (2011-07-09) [i386-mingw32]

 

pikでインストール可能なRubyを表示

>pik list -r

 

Rubyの1.8.7をインストール

> pik install ruby -v 1.8.7-p352

 

バージョンを表示

>pik list
  187: ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32]
* 192: ruby 1.9.2p290 (2011-07-09) [i386-mingw32]

 

Rubyのバージョン切り替え

>pik use 187
>ruby -v
ruby 1.8.7 (2011-06-30 patchlevel 352) [i386-mingw32]

※バージョンの切り替え範囲はターミナル内のみとなる ※ Gem環境も完全に分離されているので、影響が無いです。  Railsをインストールする

>gem install rails
>rails -v
Rails 3.1.1

 

●SQLite3のインストール

http://www.sqlite.org/

  1. ブラウザで http://www.sqlite.org/ を開く。
  2. ページ上部のメニューバーにある「Download」リンクをクリック。
  3. 「Precompiled Binaries For Windows」セクションにある sqlite-dll-win32-x86-******.zip をクリックして保存。
  4. 保存したファイルをダブルクリックして展開。
  5. 展開されたフォルダにある sqlite3.dll をコピー。
  6. 「C:\Ruby192\bin」をにペーストする。

 

●Railsを使ってベースとなるアプリケーションを作成する

##任意のディレクトリへアプリを作るためコマンドプロンプトで移動する
> cd c:\workspace
##アプリケーションコマンドを実行
(カレントディレクトリにworkアプリケーションを作る、sqlite3の依存ライブラリもインストールしアプリを生成する)
> rails new work -d sqlite3

 

●指定するモデルに応じたMVCのソースを自動生成・テーブル作成

##アプリケーションのディレクトリへコマンドプロンプトで移動する
> cd c:\workspace\work
##「rails generate scaffold モデル名 カラム名:カラムの型(カラム名:カラムの型...)」
> rails generate scaffold user id:integer name:string email:string
##上記scaffoldコマンドで定義した足場よりテーブルを作成
> db:migrate

 

●Railsアプリケーションを実行する(Rails組み込みのWebサーバ)

> rails server    又は rails s

Webブラウザで http://localhost:3000/users へアクセス

アクセスができuserの登録などができる画面が出力されるはず。

 

●感想

思ったよりも簡単だった。でもMacやLinux系でやったほうがいいんだろうなって感じました。

基本的にサイトや色々な書籍もUnixベースで書かれているしなぁ。。

あとは、開発するIDE(エディタ)をどうするかだなぁ!!また調べてやってみよ♪

RadRails」と「NetBeans」 とかかな。。。わからん

 

【参考】

Windowsへのインストール

http://www.oiax.jp/rails/zakkan/rails_3_1_installation_on_windows.html

DevelopmentKitのインストールについて

http://d.hatena.ne.jp/kent013/20110416/1302941938

複数バージョン管理pikインストール

http://d.hatena.ne.jp/holypp/20110407/1302193459

http://d.hatena.ne.jp/akishin999/20101107/1289098441