読者です 読者をやめる 読者になる 読者になる

chikuchikugonzalezの雑記帳

趣味とか日記とかメモとか(∩゚д゚)

カジュアルに環境変数を変えたcmdを動かすためにcosplayコマンド作った

開発 .NET

ついカッとなって作った。リポジトリはこれ→ https://bitbucket.org/chiku2gonzalez/cosplay です。

使い方

PATHを通した後

C:\>closet add ruby200
C:\>closet edit --editor=gvim
C:\>cosplay ruby200

みたいにします。

"closet edit" コマンドですが、ただエディタ (デフォルトではnotepad) が起動します。
めんどくせぇ(#゚Д゚) って人は %USERPROFILE%\cosplay.configを直接編集してもいいです。*1

cosplay.configフォーマットについて

とりあえずサンプル

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<cosplay>
  <closet>
    <!-- 環境 (コス) とか。名前は name で。groupは未使用 -->
    <costume name="devkit47" group="">
      <summary>Ruby Devkit (mingw32) 4.7.2</summary>
      <description>Ruby Devkit (mingw32 4.7.2)</description>
      <references />
      <environments><!-- 環境変数定義 -->
        <variable name="PATH">%RI_DEVKIT%\bin</variable><!-- 一行一個で -->
        <variable name="PATH">%RI_DEVKIT%\mingw\bin</variable><!-- 複数あると ';' で連結される -->
        <variable name="RI_DEVKIT">P:\Ruby\DevKit-4.7.2</variable>
      </environments>
    </costume>
    <costume name="ruby200" group="">
      <summary>Ruby 2.0.0</summary>
      <description>CRuby 2.0.0 (mingw32) 環境</description>
      <references />
      <environments>
        <variable name="PATH">%RUBY_HOME%\bin</variable>
        <variable name="PATH">%RUBY_HOME%\sbin</variable>
        <variable name="RUBY_HOME">P:\Ruby\Ruby200</variable>
      </environments>
    </costume>
    <costume name="ruby200dev" group="">
      <summary>Ruby 2.0.0 with DevKit</summary>
      <description>CRuby 2.0.0 (mingw32) 開発環境</description>
      <references>
        <inner>ruby200</inner><!-- 先に取り込む別環境名 -->
        <outer>devkit47</outer><!-- 後から取り込む別環境名 -->
      </references>
      <environments />
    </costume>
  </closet>
</cosplay>

注意点

closetコマンドの注意点
  • "closet add" したときに自動でソートされる
  • "closet edit" したときは編集してなくても cosplay.config が再保存される

くらいかな

cosplayコマンドの注意点
  • 新しくサブプロセスとしてcmd.exeを起動してます
    • cosplay自体がcmdの終了を待つので、何段も重ねるとcosplayぷろせすが増殖します\(^o^)/
  • 起動するシェルは COMSPEC 環境変数に入ってるプログラム
    • デフォルトは cmd.exe だよね?
    • PowerShellにしたいときは COMSPEC=powershell してから使う
cosplay.configの注意点
  • <references>~</references>で指定した環境からは<environments>~</environments>の環境しか取り込まれない。再帰的に追いかけたりしない
  • <innter>と<outer>は複数可能っす

とういところかなー。

なんで作ったのって言われたら

  1. Ruby (mingw32 / mswin32混在) を切り替えたい
  2. Pikを試そう
    1. なぜか動かない(´・ω・`)
  3. よく考えたらバージョンだけじゃない (2.0.0のmingw32とmswin32を切り替えたかったりする)
    1. Pikでもできそうだったのでやってみる → できた(/・ω・)/ 動かなかったのはなんだったのか *2
  4. ふと気づく。RubyInstallerで入れたmingw32のために devkit も切り替えたいことに
    1. Ruby1.9 と Ruby2.0 で使う devkit が違う
    2. Pikじゃ無理\(^o^)/
  5. 作るか
  6. っていうかVisual Studioもあるじゃん(´・ω・`)
  7. あれこれ、環境変数差し換えられればよくね?
  8. コマンド作った ← イマココ

名前の由来は、別の環境という服を着て作業するから、っていうでっち上げ

*1:git configみたいなの用意しようとしたけどめんどくなってやめた

*2:たぶんRubyのパスが通ってなかったから