2010-07-19

Bundler 0.9.26 を触ってみた

あぁ、快適だ。例え Windows でも画面もキーボードも小さくても、Emacs バインドで書ける喜び1

Bundler との出会い

先日、pear packageでアプリの依存ライブラリを管理するようにし始めたわけですが、もとはと言えばこれは jruby-appengine を調べていたときに知った

Bundlerがめっちゃ便利そう

というところからスタートしています。

もともと依存パッケージは管理する必要があると感じていたわけですが、とりあえずリストアップして README 辺りに書いてありゃいいのかなぁとか軟弱なことを思ったりしていました2。しかし jruby-appengine を調べたときには

  • 必要な gem も含めて全部勝手に deploy されてるらしい
  • bundle っていう gem がなにやら超絶便利らしい

ということを知り、どうにか勉強しなきゃと思っているうちにまた半年が経っていました3

インストールと基本的な使い方

Bundler: The best way to manage Ruby applications

gem install bundler
bundle help

ですね。

Bundler でできること

  • 依存している gem package を Gemfile というファイルで管理できる4
  • Gemfile をもとに bundler が download、install を行うことができる
  • download した *.gem パッケージを cache することができる ( bundle package )
    • install の際には gem server だけでなく、この cache も利用することができる
  • local にも remote にも Bundler を入れておくことで、deploy 時に自動的に依存 gem も更新することができる
  • Bundler を利用したライブラリの読み込みのサポート ( Bundler.setup )

Bundler: The best way to manage Ruby applications

この辺に書いてあるのですが、group に分けておいた gem package 群を必要に応じて require することができるようです。例えば test 用のライブラリは開発環境でだけ読み込む、といったことを個別に記述することなく Bundler.setup だけで実現できる。らしいです。自分はそこまでたどり着いてはいないのですが。

deploy ツールと連携して remote の gem を管理する

実は当初、bundle package でできる cache/*.gem さえあればいいのかと勘違いしていました。でもそんなことないですよね。そりゃそうだ。実際には

bundler を使って gem をインストールする際に cache/*.gem があれば gem サーバを見にいかなくて済むよ

という話でしかありません。

また、remote での gem のインストールも Bundler によって自動化されるのではなく、

remote にインストールされている Bundler を呼んでくれる deploy ツールによって実現されています。

そりゃそうか。

そりゃそうかの連続。そりゃそうかの連続なんだけど、この仕組みを思いついた人はやっぱり頭いいなぁ。

逆に言うと deploy ツールがない場合は開発環境の準備が多少楽になるよ、程度の意味しかありません。たぶん。まぁそれも重要なんですけど。依存パッケージをいちいち調べたり、動かし始めてからアレがないコレがないという状態になるのはとてもイライラしますから。

Bundler 1.0 へ

ROADMAP というファイルを読むと、今後は 0.10, 1.0 と進んでいくようで、0.9 からは API は変更しない模様。逆に言うと 0.9 の間は変更し放題かな? 実際、0.9.4 と 0.9.5 の間に断絶があるらしいです。

他の環境への応用を考える

Ruby で deploy ツールと言えばもちろん Capistrano 系になるわけですが、これらは基本的に shell アクセスを要求します。repository からコードを取得してサーバを再起動するまで全自動で行います。スバラシイ。

では shell アクセスが不可能な場合はどうしたらよいのでしょう。例えばレンタルサーバでの CGI や PHP 開発では?

PHP の場合は

  • include_path さえ通っていれば、ライブラリの読み込みはできる
  • include_path は .htaccess からスタートするアプリケーション動作の流れの中で定義できる
  • Pear package は pure PHP で書かれていることが保証されており、単に extract しただけで使える
  • Pear package は gem のように複数バージョンを管理することはできない

という感じなので、

  1. 指定の package を取得してきて
  2. package を extract して
  3. アプリケーションのコードと一緒に put

できるだけでいいはずです。例えばこの最低限度の機能が実現できれば deploy ツールがなくてもアプリケーションとその依存パッケージを同時に deploy できます。

pecl とか使う場合は build もサーバの再起動も必要になるので話は変わってきますが、星の数ほどあるレンタルスペースベースの小規模 PHP 案件はこれで十分ですし、小規模こそ、この辺りの作業に掛ける手間は減らすべきです5

やっぱり PHP にこそ欲しいですねぇ、これ。

参考

  1. 下書きを netbook + Evernote で書きました。 

  2. 一方で、システムを丸ごと再現する際には個々のアプリの情報なんか知ったこっちゃなくて、結局何が要るの?ということで現在入っている pear の list をもとに手作業で入れ直しとかするんですよね。これも非常にダサいです。 

  3. このときの様子は delicious 上にしか残っていません。 

  4. 名前は変更できる 

  5. そうでないと数をこなせない 

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm