Windows で Chef するときに PATH で混乱しないように専用のコンソールを作った

話題の Chef をいまさら試したくなって、手元の Windows 環境に環境を作ってみた。

http://www.getchef.com/chef/install/ からインストーラーをダウンロードしてインストールした。Cygwin を使うと無駄にはまるし、ぐぐるといっぱい出てくる「gem から入れる手順」は公式サイトでは見つからなくなっている。

すべてデフォルトでインストールすると、C:\opscode\chef にファイルがいっぱい展開されていた。

PATH に追加される 2 つのフォルダー

インストーラーから Chef を入れると、PATH

  • C:\opscode\chef\bin
  • C:\opscode\chef\embedded\bin

の 2 つが追加される。

C:\opscode\chef\bin には Chef 関係のプログラム (chef-solo, knife など...) が入っている。

一方、C:\opscode\chef\embedded\bin には UNIX 関係のプログラム (ruby.exe, perl.exe, ls.exe, cat.exe など...) が入っている。

ピンチ! 既存の Ruby 環境と競合!!

全部入りでありがたいんだけど、ruby.exeperl.exe にパスが通ってしまうのが気持ち悪い。

自分の環境では、Chef のやつ以外にも Ruby を C:\Ruby200-x64\bin にインストールしていて、そっちにも PATH が通った状態になっている。

この状態で、gem install knife-solo すると、先にインストールしたほうの Ruby の gem が動く。自分の場合は Chef が後だったので、C:\Ruby200-x64\bin のほうの gem が動いた。その結果、C:\Ruby64 の下に knife-solo が入って、おかしな状態になった。

この環境では、Chef 側の何らかのコマンドが C:\opscode\chef\embedded\bin\ruby.exe を実行するつもりで ruby を実行したとしても、C:\Ruby200-x64\bin\ruby.exe が実行されてしまうわけで、変なバグに困らされる確率が高そうだ。

何かと嫌な予感がするので、対策することにした。

解決法: Chef 用のコンソールを作る

Visual Studio を入れたら「開発者コンソール」がスタート メニューに入るし、Git for Windows でも MS-DOS から隔離された Git Bash で作業をする。

同じように、Chef にも専用のコマンド プロンプトを用意することにした。

ということで作ってみた。手順は 2 段階。

1. バッチファイルを作る

こちらがそのバッチファイル。これを C:\opscode\chefenv.bat といった名前で保存しておく。

@ECHO OFF

SET PATH=c:\opscode\chef\bin;c:\opscode\chef\embedded\bin
SET PATH=%PATH%;c:\windows\system32;c:\windows

title Chef Env
chef-solo -v

2. ショートカットを作る

このファイルへのショートカットを作る。

[リンク先] は C:\Windows\System32\cmd.exe /K C:\opscode\chefenv.bat に設定する (/K は「バッチを実行して、ウインドウを閉じない」という意味)。

[作業フォルダー] は Chef レポジトリーのパスか、マイドキュメントのパスにでもしておくとよいだろう。

ショートカットのファイル名は何でもよいけど、「Chefコマンド プロンプト」とでもしておいてスタートメニューに登録するなり、デスクトップに置くなり、ランチャーに登録するなりしておくとよいだろう。

使い方

ショートカットを叩くと、PATH が限定された状態でコマンドプロンプトが立ち上がってくれる。

chef-soloknife も実行できる。めでたし。

ついでに、システム全体の PATH から c:\opscode 以下の 2 つを削っておくと、コマンドプロンプトを使ったときの混乱も起きなくなって幸せ。

ぜひお試しください。