amasok's blog

Articles tagged 'bundle'

bundle execの省略が微妙

2013/11/28 01:00 tags: bundle, このエントリーをはてなブックマークに追加

結論から書くと、僕が望んでいた形ではインストールできませんでした。

僕が望んでいた形は、

  • gemをグローバルな領域にインストールしない(path=vendor/bundleを使用)
  • プロジェクト配下のディレクトリならどの階層でも”bundle exec”を省略できる

今回は、僕が調べたことを3つ記していこうかと思います。 よかったら試してみてください。

対象者

  • bundleを使って“bundle exec"を毎回打ってる人

実行環境

  • mac(Mountain Lion)
  • ruby(2.0.0p247)

rbenv-binstubsを使う

制限事項

  • rbenvを使ってrubyを管理している
  • bundle installはグローバルな領域にインストールする(pathは指定しない)

方法

terminal

1
2
3
4
$ cd $ mkdir .rbenv/plugins $ cd .rbenv/plugins $ git clone git://github.com/ianheggie/rbenv-binstubs.git

上記のようにrbenvのプラグインとしてrbenv-binstubsてのを導入

terminal

1
2
3
$ bundle install --binstubs=vendor/bin $ rbenv rehash $ middleman s

上みたいに、bundle install –binstubs=bendor/binでgem自体はグローバルな領域で作るけど、バイナリ(コマンド)ファイルはプロジェクトディレクトリ内で作る。

これならプロジェクト内のどの階層でもbundle execが必要なくなるけどgemがグローバルな領域で存在しつづけてしまう。

binstubsで作ったbinにパスを通す

制限事項

  • プロジェクトディレクトリの第一階層のみで省略可(プロジェクトディレクトリ内のより深い階層からは省略不可)

方法

terminal

1
$ export PATH=./vendor/bin:$PATH

上記パスを通した後、下記のようにbundle install時にオプションを指定

1
$ bundle install --path=vendor/bundle --binstubs=vendor/bin

はい、この方法でプロジェクトのディレクトリの第一階層上でのみbundle execを省略できます。
なんか、うまいパスの通し方ないかなぁ。。
うまくいくと、このやり方の応用が一番なんとかできそうだけど。。

aliasをかける

制限事項

  • 文字数が少なければOK(完璧に省略する必要はないと考える人)

方法

書くまでもないかな。。。

.bash_profile

1
alias be='bundle exec'

はい、これで

terminal

1
$ be middleman s

とかができるようになりました。
どれもいまいち腑に落ちないけど、今のところ調べた結果のログとして記します。
なんか良い方法見つけたら新しく書こう。
てか、誰か良い方法教えてほしい。

参考

http://blog.takapra.com/2013/04/ruby-bundler-basic/

http://qiita.com/naoty_k/items/9000280b3c3a0e74a618

bundlerによるgemの管理

2013/11/27 00:18 tags: bundle, middleman, このエントリーをはてなブックマークに追加

昨日書いたmiddlemanの導入の記事を見た友人から、

「gemをbundleで管理してないの?」
という話をされ、
「だってわざわざ"bundle exec"とかつけるのめんどくさいじゃんヾ(・д・` )」

と返したのですが、せっかくブログから生まれた話だし、やってみるかー。
ということで、やってみました。

対象者

  • コマンドラインに慣れてる
  • rubyをPC(Mac)にインストールできる
  • gemで何かしらをインストールしたことある
  • bundle installコマンドをわけわからずでも打ったことがある

実施環境

  • mac(Mountain Lion)
  • ruby(2.0.0p247)

bundlerとは

完全に憶測で書くので間違ってたらしれっと直すかもですが。。

bundleとはgemをPCに依存せずプロジェクト毎に管理できるツールです。。

例えば、あるrailsプロジェクトがあったとして、一つは4.0系一つは3.2系を使っていたとします。
リポジトリ管理されており、同じPC内で違うバージョンのプロジェクトをどう扱えばいいか?

そんな時にbundleが便利なようです(想像で書いてます)

あとは、共同開発しててAさんとBさんで入ってるgemのバージョンが違うとかかな。
こっちのほうがよくありそう。

bundlerのインストール

terminal

1
$ gem install bundler

これだけでOK

さすがに、gemを管理するのにbundlerは入れないと動かないです。

bundle initしてみる

プロジェクトのディレクトリを作って、とりあえずbundle initしてみましょう。
terminal

1
2
3
4
$ mkdir project $ cd project $ bundle init Writing new Gemfile to /Users/amasoktest3/Gemfile

するとGemfileファイルが出来上がると思います。

Gemfile

1
2
3
4
# A sample Gemfile source "https://rubygems.org" # gem "rails"

今はせっかくmiddlemanをやってるので、middlemanをインストールしてみましょう。

Gemfile

1
2
3
4
# A sample Gemfile source "https://rubygems.org" gem "middleman"

上記のように変更して、

terminal

1
$ bundle install --path vendor/boudle

上記コマンドでmiddlemanがインストールされます。

また、middlemanに必要な関連ファイルもすべてインストールされます。
それらはすべて、vendor/bundle配下に格納されています。
しかし、vendor/bundle配下はパスが通っていません。どう使うか?
(パスを通すって何?って人は別で調べてください。)

そこで、一番はじめに書いた"bundle exec"が登場します。

terminal

1
$ bundle exec middleman init .

“init ."のドットはカレントディレクトリをさします。 今回でいうところの"project"です。

後はmiddlemanコマンドの前に"bundle exec"を全部つければ middlemanの導入と同じにすればいいです。

また、rubyをrbenvでインストールしている方は"binstubs"てのを使って煩わしい"bundle exec"を省略できちゃうみたいです。

試してみてうまくいきそうなら、また別記事で書きます。