TextMate
TM_RUBY環境変数を使用すると、TextMateでRVM gemsetをサポートできます。現在、RVMにはすぐに使える2つの構成があります。1つはrvm-auto-rubyで、(.rvmrcがある場合は)自動的にrubyを検出することをサポートします。もう1つはRVMの組み込みラッパー機能を使用して固定されたrubyバージョンのバイナリを生成します。
どちらの場合も、最初に最新の状態にすることが重要です。最近のバージョンでは、次のコマンドを使用してこれを行うことができます。
rvm get head
また、デフォルトのRubyを選択する必要があります。たとえば、1.9.2をデフォルトとして設定するには次のようにします。
rvm --default use 1.9.2
rvm-auto-rubyのアプローチ
rvmには、通常~/.rvm/bin(または、システム全体にインストールされている場合は/usr/local/bin内)にrubyバイナリが付属しており、rubyを実行する前に次の手順を実行します。
- RVMをロードします
- RVMRCファイルを探してロードします
- 通常のrubyとして実行します
このアプローチにより、追加の作業なしでプロジェクトごとにrubyを切り替えることができます。rvmがインストールされている場合、これはrvm-auto-rubyへのフルパスを取得するだけで済みます。これは次の方法で見つけることができます。
which rvm-auto-ruby
そして、TextMateの環境設定の詳細設定セクションで、TM_RUBY変数を指定されたパスを指すように追加または変更します。例として、このスクリーンショットでインストール例を示します。
RVMラッパーのアプローチ
TextMateのインストールで常に単一のrubyとgemsetの組み合わせを使用したい場合は、代わりにrvmラッパーアプローチを使用する必要があります。これにより、TextMateで使用できるrubyバイナリが生成されます。このアプローチを使用するには、まず使用するrubyとgemsetの組み合わせを決定します。この例では、次のようにします。
rbx@rails3(rvm useで解析できるものであれば、ree、1.8.7、1.9.2@ninja-attackなど、ラッパーコマンドで動作します)。
次に、コマンドを生成する必要があります。rvmラッパーコマンドの一般的な構造は次のとおりです。
rvm wrapper [ruby_string] [wrapper_prefix]
この場合、次を実行します。
rvm wrapper rbx@rails3 textmate
このコマンドは、(前述のように)rvm binパスにファイルを作成します。ファイルの名前は次のようになります。
textmate_rubyこれはTM_RUBYの値に使用できます。したがって、TextMateを開いてTextMateの環境設定の詳細パネルに移動し、コマンドラインで実行した出力にTM_RUBY変数を追加または変更します。
which textmate_ruby(例:/Users/wayne/.rvm/textmate_ruby)。
バンドルとTM_RUBY設定を有効にするために、TextMateを終了して再度開きます。
ラッパーのテスト
次の手順に従って、正常に動作するかどうかをテストできます。
- 新しいドキュメントを開きます
- 新しいドキュメントに次のコードを貼り付けます。
puts RUBY_DESCRIPTION
- ファイルを 'ruby_test.rb' として保存します
- Command + Rを押してrubyを実行します。
TextMateがデフォルトで使用するrubyのバージョンを切り替えたい場合は、次の方法でデフォルトのRVM rubyバージョンを変更できます。
$ rvm use rbx@rails3 --defaultRVMは、各プロジェクトの.rvmrcファイルに基づいてrubyのバージョンとgemsetも切り替えます。
ラッパーコマンドの自動化
RVMが現在のRubyを変更するたびにTextMateのRubyを切り替えたい場合は、スクリプトファイルを実行可能にすることで、rvmのhooksディレクトリにある "after_use_textmate" フックを有効にできます。
$ cd ~/.rvm/hooks $ chmod +x after_use_textmate
これで、プロジェクトディレクトリに切り替えてrvmが自動的にRubyを切り替えると、TextMateは現在のバイナリで実行する準備が整います。TextMateのRuby環境がそれに応じて変更されるため、作業中の主要なプロジェクト以外のプロジェクトのディレクトリに切り替えることによる副作用に注意してください!
TextMateが最新であることを確認する
次に、TextMateが最新バージョンであることを確認し、次のスクリプトを実行してすべてのバンドルを更新します。
#!/usr/bin/env bash mkdir -p /Library/Application\ Support/TextMate/ sudo chown -R $(whoami) /Library/Application\ Support/TextMate cd /Library/Application\ Support/TextMate/ if [[ -d Bundles/.svn ]] ; then cd Bundles && svn up else if [[ -d Bundles ]] ; then mv Bundles Bundles.old fi svn co http://svn.textmate.org/trunk/Bundles fi exit 0
注記
TM_RUBYシェル変数を変更するには、TextMateでメニューを使用して次に移動します。
Textmate | Preferences | Advanced | Shell Variables
問題がある場合は、TextMateのbundler Builder.rbを変更する必要があるかもしれません。TextMateは独自のビルダーを使用するため、それを削除することで、上記で指定したTM_RUBYを使用できます(Seivan Heidariに感謝します!)。
cd /Applications/TextMate.app/Contents/SharedSupport/Support/lib/ ; mv Builder.rb Builder.rb.backup
Ruby 1.9.Xとの互換性のためにosx-plistを更新する必要がある場合は、これが役立つ場合があります。
git clone git://github.com/kballard/osx-plist.git cd osx-plist/ext/plist ruby extconf.rb && make cp plist.bundle /Applications/TextMate.app/Contents/SharedSupport/Support/lib/osx/
Ruby 1.9+で問題が発生した場合、つまり
ruby:0:in `require': /Users/someuserhere/Library/Application Support/TextMate/Bundles/Ruby.tmbundle/Support/RubyMate/catch_exception.rb:13: invalid multibyte char (US-ASCII) (SyntaxError)
バンドルの更新バージョンを確認するか、問題のファイルを手動で編集し、ファイルの先頭に次を追加する必要があります。
# encoding: utf-8
これにより、Rubyは正しいテキストエンコーディングでファイルを読み取り、マルチバイト文字を許可します。別の解決策は、textmate_rubyを介して呼び出されたときに、ruby 1.9.Xを常にUTF-8モードで実行することです。これを行うには、textmate_rubyファイルを編集し、次の行を含む行を置き換えます。
exec ruby "$@"
次の行を含む新しい行に置き換えます。
exec ruby -wKU "$@"
その他
除外されたファイルを使用してプロジェクトディレクトリを開くためのシェル関数を作成できます。このアイデアの簡単な例を次に示します。
上記の関数コード(最初の行を除く)は、dotfilesを保守していない場合は、dotfilesまたは~/.bash_profileに配置されます。