夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

WindowsでSublime Text2からClojure REPLを使えるようにしてみる→実は使えませんでした

こんにちは。

今までREPLをコマンドラインで起動して使っていましたが、
さすがに効率が悪いようになってきたため、一度エディタから直接呼べるように環境を整えます。

というわけで、Sublime Text2にREPLのプラグインを導入してみます。

ですが、まずSublime Text Package Controlをインストールしておかないとどうにもならないため、
それがインストールされている前提、で話を進めます。

1.SublimeREPLインストール

まずはSublimeREPLのインストールから。
ただ、こちらについてはあまりにも簡単でした。Sublime Text2様々ですね。

まずはSublime Text2から「Package Control: Install Package」を選択します。

するとパッケージ一覧が表示されるため、「SublimeREPL」をインストールします。

これで終了。
後は、ClojureのGetting Started With Sublime Text 2によると
SublimeREPLの後にLeiningenをインストールする必要があるとのことのため、こちらもインストールを行います。

2.Leiningenインストール

まずはhttps://github.com/technomancy/leiningen/tagsから最新バージョンをインストールし、
「C:\Tools\leiningen-2.1.3」に展開します。

その後、環境変数に以下の内容を追記します。

LEIN_HOME=C:\Tools\leiningen-2.1.3
PATH=%LEIN_HOME%\bin

で、leinを実行すると・・・

C:\Tools\leiningen-2.1.3>lein

Leiningen is missing its dependencies.
Please run "lein bootstrap" in the leiningen-core/ directory
with a stable release of Leiningen. See CONTRIBUTING.md for details.

そもそもGitHubから落としてきた時点ではjarも存在しないため、落としてくる必要があるようです。
というわけでまずはインストールコマンドを実行。

C:\Tools\leiningen-2.1.3>lein self-install
Downloading Leiningen now...
        1 個のファイルを移動しました。

このコマンドを実行すると、「C:\Tools\leiningen-2.1.3\self-installs\leiningen-2.1.3-standalone.jar」がインストールされます。

さぁ、これでOKかと思いきや、再度のエラー。

C:\Tools\leiningen-2.1.3>lein

Leiningen is missing its dependencies.
Please run "lein bootstrap" in the leiningen-core/ directory
with a stable release of Leiningen. See CONTRIBUTING.md for details.

バッチファイルを確認したところ、「\leiningen-core\lib」ディレクトリが無いからの模様。
・・・というか、ただそれ以前に「leiningen-2.1.3-standalone.jar」があるので
そんなの必要ないじゃん、ということで「https://github.com/technomancy/leiningen」を見てみると、
そもそもleinはバッチファイルをインストールしてself-installをすれば使えるというオチでした。

そんなわけで、binとself-installs以外を削除して、実行してみます。

C:\Tools\leiningen-2.1.3>lein
(依存性解決が走る)

Leiningen is a tool for working with Clojure projects.

Several tasks are available:
check               Check syntax and warn on reflection.
classpath           Write the classpath of the current project to output-file.
clean               Remove all files from project's target-path.
compile             Compile Clojure source into .class files.
deploy              Build jar and deploy to remote repository.
deps                Show details about dependencies.
do                  Higher-order task to perform other tasks in succession.
help                Display a list of tasks or help for a given task or subtask.

install             Install current project to the local repository.
jar                 Package up all the project's files into a jar file.
javac               Compile Java source files.
new                 Generate scaffolding for a new project based on a template.
plugin              DEPRECATED. Please use the :user profile instead.
pom                 Write a pom.xml file to disk for Maven interoperability.
repl                Start a repl session either with the current project or standalone.
retest              Run only the test namespaces which failed last time around.
run                 Run the project's -main function.
search              Search remote maven repositories for matching jars.
show-profiles       List all available profiles or display one if given an argument.
test                Run the project's tests.
trampoline          Run a task without nesting the project's JVM inside Leiningen's.
uberjar             Package up the project files and all dependencies into a jar file.
update-in           Perform arbitrary transformations on your project map.
upgrade             Upgrade Leiningen to specified version or latest stable.
version             Print version for Leiningen and the current JVM.
with-profile        Apply the given task with the profile(s) specified.

Run `lein help $TASK` for details.

Global Options:
  -o             Run a task offline.
  -U             Run a task after forcing update of snapshots.
  -h, --help     Print this help.
  -v, --version  Print Leiningen's version.

See also: readme, faq, tutorial, news, sample, profiles, deploying, gpg, mixed-source, templates, and copying.

というわけで、leinが実行できるようになりました。

3.Sublime Text2にleinのパスを通す

とりあえずこれで使えるのかと
Sublime Text2の「Tools」→「SublimeREPL」→「Clojure」→「Clojure」で実行してみると、下記のエラーが発生。
全くわかりません(汗

ただ、そもそもパス追加後にSublime Text2を再起動してなかったため、
Sublime Text2を再起動して再度実行してみます。
すると、下記のようにREPLが起動しました。

後はメニューから選択するのが長いので、コマンドがないか確認したところ、ショートカットは使えませんでしたが、
実行メニュー中にClojureが加わっていることを確認しました。

これでようやくコマンドプロンプトに面倒な手順とって貼り付ける手間から解放されそうです。

2013/05/22 追記
確認したところ、SublimeREPLからSublimeREPLを起動した場合、Clojureのコマンドを入力しても何も実行されない状態になっていました・・・
とりあえず何故こういう事象が発生するのか確認中です。
すんなり終わったと思いきや、まだまだ問題はありそうです・・・・

情報を調べてみた結果、Leiningen2系になった時点でfopenの扱いが変わり、今回の構成では使用できなくなったようです。
https://github.com/technomancy/leiningen/issues/842

上手くいかないという内容の投稿が下記にも。
https://github.com/wuub/SublimeREPL/issues/48
https://github.com/wuub/SublimeREPL/issues/49
https://groups.google.com/forum/?fromgroups#!msg/clojure/-eNOk7x49YI/VB4bXlK7nFoJ
http://www.sublimetext.com/forum/viewtopic.php?f=3&t=7878


連携に成功した記事はLeiningen1系のもの。当時は出来たということですね。
http://yagays.github.io/blog/2012/11/16/sublimerepl-clojure/

というわけで、残念ながら環境自体は別の環境を探してみることにします・・・

2013/05/26 追記

Twitter上で困った旨のことを呟いていたところ、
id:AntiBayesianさんから返信があり、Leiningen2ではなく、普通のJavaから起動したClojure REPLを使って
Sublime Text2から実行可能であることを教えていただきました。

WindowsSublime Text2 + leiningen + Clojure/Incanter環境をお手軽に作る
http://d.hatena.ne.jp/AntiBayesian/20130501/1367406979

というわけで問題は解決。
Sublime Text2からClojure REPLが実行できるようになりました。

これでとりあえずは一段階Clojureのプログラミング環境が快適になりそうです。