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

( ꒪⌓꒪) ゆるよろ日記

( ゚∀゚)o彡°オパーイ!オパーイ! ( ;゚皿゚)ノシΣ フィンギィィーーッ!!!

Scalaのバージョンを簡単に切り替えられる"svm"ってヤツ作った (冷やし中華終わりました)

scala

まぁタイトルの通りなんですが(冷やし中華は終わってます)、RubyだったらrvmとかPythonだったらvirtualenvとか、使うバージョン切り替えられるヤツあんじゃないスカ?


Scalaでもあったらいーなーと思ってシェルスクリプトで書きました。Scalaの場合は、依存ライブラリをランタイムのバージョン毎に切り替える必要はないので、単純にSCALA_HOMEを切り替えれば事足りるってー訳で。


ここに置いてあります。


yuroyoro/svm · GitHub

f:id:yuroyoro:20110121204427p:image


この前trunkに入ったDynamic typeの調査をするはずが、何故かシェルスクリプトを書き始めていた……。何を言って(ry

概要

インストールされてるScalaのバージョンを切り替えたり、指定したバージョンをダウンロードしてきたりできます。


こいつを使えば、気軽にnightly buildを試したり、stableに戻ったり、新しいリリースを素早くインスコできたりするって寸法でさぁ。


動作確認はMac OSX 10.6でやってます。bashで書いてます。ライセンスは修正BSDです。

設定

シェルスクリプト(svm)を落としてきたらPATHが通ってるとこに配置して実行権限をつけてください。


あと、環境変数PATHに、"$HOME/.svm/current/rt/bin"を追加しておいてください。

export SCALA_HOME=~/.svm/current/rt
export PATH=$SCALA_HOME/bin:$PATH


readlinkを使ってるのでcoreutilsが必要です。macportとかhomebrewで入れておいてください(ってかふつー入ってるよね?)


svmでは、"$HOME/.svm"以下にversion毎にディレクトリを作成して、Scalaのバージョンを配置します。カレントのバージョンは、"$HOME/.svm/current"というシンボリックリンクによって、対象バージョンのディレクトリを指すようにすることで設定されます。


ようは、こんなディレクトリ構成なわけです。

ozaki@mbp $ ls ~/.svm
total 8
drwxr-xr-x    7 ozaki  staff   238  1 21 20:28 .
drwxr-xr-x  169 ozaki  staff  5746  1 21 20:28 ..
lrwxr-xr-x    1 ozaki  staff    30  1 21 20:28 current -> /Users/ozaki/.svm/scala-latest
drwxr-xr-x    5 ozaki  staff   170  1 21 19:54 scala-2.8.1.RC1
drwxr-xr-x    3 ozaki  staff   102  1 21 19:59 scala-2.8.1.RC2
drwxr-xr-x    5 ozaki  staff   170  1 21 20:17 scala-2.8.1.final
drwxr-xr-x    5 ozaki  staff   170  1 21 20:28 scala-latest

f:id:yuroyoro:20110121204426p:image

各バージョンのディレクトリ以下には、3つのディレクトリがあります。

  • rt : ランタイムが配置される
  • devel-doc : ScalaDocが配置される
  • sources : SDKのソースファイルが配置される


すでにインストールされているScalasvm管理下に置きたい場合は、上記のディレクトリ構成に従って配置すればおけです。

使い方

svm helpってやってもらえば大体わかるわけですが。

ozaki@mbp $ svm help 

Usage :
  svm [Action] [Scala-Version] [Options]

Action :
  -h|help             - show this usage information
  -c|current          - show the currently use scala version
  -l|list|versions    - show the scala version installed in svm_path(default is /Users/ozaki/.svm)
  -i|install          - install specific scala version
  -r|remove|uninstall - uninstall specific scala version and remove their documents and sources
  -s|switch|-u|use    - setup to use a specific scala version
  update-latest       - install or update nightly build scala version
  latest              - setup to use nightly build scala version
  stable              - setup to use stable(x.x.x.final) scala version
  (any strings)       - setup to use specific scala version(shortcut of svm switch)


Options :
  --no-docs    - with install, update-latest.skip to download scala-devel-docs.
  --no-sources - with install, update-latest.skip to download scala-sources.


"svm install 2.8.1.final"とやると、.svm以下にscala2.8.1.finalをダウンロードして来ます。ダウンロードが終わったらこいつをcurrentのversionに設定するか聞かれるのでお好みで設定して。

ozaki@mbp $ svm install 2.8.1.final
Trying to installing version of 2.8.1.final.
in /Users/ozaki/.svm/scala-2.8.1.final
--2011-01-21 18:58:53--  http://www.scala-lang.org/downloads/distrib/files/scala-2.8.1.final.tgz
Resolving www.scala-lang.org... 128.178.154.159
Connecting to www.scala-lang.org|128.178.154.159|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 20203153 (19M) [application/x-gzip]
Saving to: `scala-2.8.1.final.tgz'

100%[===================================================================================================================================================>] 20,203,153   124K/s   in 3m 19s  

2011-01-21 19:02:13 (98.9 KB/s) - `scala-2.8.1.final.tgz' saved [20203153/20203153]

...

Successfully installed version of 2.8.1.final.
installed directory is /Users/ozaki/.svm/scala-2.8.1.final
Do you want to change current runtime version to 2.8.1.final? y/N: y

currently version is 2.8.1.final.


"svm current"で現在使用してるversionを表示します。

ozaki@mbp $ svm current
currently version is /Users/ozaki/.svm/2.8.1.final


"svm 2.8.1.RC1"のようにバージョン番号を指定すると、そのバージョンに切り替えます。指定したバージョンが無い場合はダウンロードに行くか聞いてきます。

ozaki@mbp $ svm 2.8.1.RC1
currently version is 2.8.1.RC1

ozaki@mbp $ scala 
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
Welcome to Scala version 2.8.1.RC1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_22).
Type in expressions to have them evaluated.
Type :help for more information.

scala> 


"svm stable"とやると、インストールされてる中で最新の安定バージョンに切り替わります。

ozaki@mbp $ svm stable
currently version is 2.8.1.final


"svm update-latest"は、nightly-buildをダウンロードします。既にダウンロードされてる場合は最新のものに置き換えます。

ozaki@mbp $ svm update-latest
in /Users/ozaki/.svm/scala-latest
--2011-01-21 20:04:22--  http://www.scala-lang.org/archives/downloads/distrib/files/nightly/distributions/scala-2.9.0.latest.tgz
Resolving www.scala-lang.org... 128.178.154.159
Connecting to www.scala-lang.org|128.178.154.159|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 43338980 (41M) [application/x-gzip]
Saving to: `scala-2.9.0.latest.tgz'

...


"svm uninstall 2.8.1.RC1"でディスクから消し去ります。あばばばばばばばば。


"svm list"または"svm versions"で、インストールされているバージョンを表示します。

ozaki@mbp $ svm list 
2.7.1.final
2.7.3.final
2.7.4.final
2.7.5.final
2.7.6.final
2.7.7.final
2.7.7.RC2
2.8.0.Beta1-prerelease
2.8.0.Beta1-RC2
2.8.0.final
2.8.0.latest
2.8.0.RC1
2.8.0.RC2
2.8.0.RC3
2.8.0.RC5
2.8.0.RC6
2.8.0.RC7
2.8.1.final
2.8.1.RC
2.8.1.RC1
2.8.1.RC2
2.8.1.RC4
2.8.8.RC5
latest
currently version is /Users/ozaki/.svm/latest


だいたいこんなところですわ。なんかバグ見つけたらレポートしてくれたりパッチくれたりpull-requestくれたりするとありがたいです。