WindowsにClozure CLをインストールする先人たちの知恵は、所かしこに存在するのですが、すでに導入しているQuickLispのライブラリも持ち歩きたいと考えた場合はなかなかみつからない。
そこで試行錯誤してみました。
結論、試行錯誤と言うレベルではなく、結構簡単に実現。
この結果が正しいかどうかは分かりませんが、作業結果としてブログに残します。
仕様概要
- 簡単に持ち歩きたい(環境まるごと)
- ネットワークに接続されている状態でならQuickLispによるライブラリの導入ができる
- ネットオフラインになっても導入したQuickLispライブラリを使いたい
- Clozure CLを採用したい
- SLIMEな環境で開発したい
- 可能な限りWindowsのバージョンに左右されないようにしたい
環境構築
Clozure CLのダウンロード
Clozure CLのダウンロードと導入については、他のサイトに任せます。
単純に本家のサイトに行き、Clozure CLのWindows用ZIPファイルをダウンロードし、それを任意のフォルダに展開するだけ。
便宜上、C:\work\cclとする
Clozure CLはインストーラなどは必要ない。
https://ccl.clozure.com/download.html
Clozure CLの展開フォルダをホームディレクトリに
ここの部分がキモになる。
Linuxな環境ならば、homeディレクトリという考え方があり、各ユーザーの設定を個別に管理できるが、Windowsの場合はバージョンによって様々。
Windowsでも好きに触れるならオレオレにすれば良いじゃないかと思ったのですが、利用しているアプリケーションによっては、勝手にホームディレクトリを変更すると動作がおかしくなる。
それは嫌だ。
なので、BATファイルを作り、限定的に環境変数を操作する事で回避する。
コマンドプロンプトを開き、そのコマンドプロンプト内だけホームディレクトリを、Clozure CLを展開したC:\work\cclにする。
そうすれば、他には影響が無いはず。
絶対に必要な設定はこちら
SET CCL_DEFAULT_DIRECTORY=%~dp0 SET PATH=%PATH%;%~dp0 SET USERPROFILE=%~dp0 SET HOME=%~dp0
環境変数のUSERPROFILEを再設定する事で、Linuxでいう所のhomeディレクトリを決めている。
SETXではなくSETを使っているのは、バッチを実行したプロンプトだけに設定を反映したかったから。
つまり、バッチを実行したプロンプト内は、全く別の環境として機能する。
以降の作業は、全てこのバッチを走らせたプロンプト内で実施しなければならない!
以下、バッチファイル全文。(意味を理解しなきゃ、コピペするだけじゃ動かないよ!)
Emacsとxyzzyを使いたいし、graphvizも呼び出したいので、フォルダ作ってそこに配置し、PATHを通した。
@echo off REM ClozureCL Start for Windows echo ================================================= echo Common Lisp Environment Setup by Project Kinpira. echo ================================================= echo . echo EnvironmentValue Setup! -^> Start REM カレントディレクトリをClozureCLのデフォルトディレクトリとして設定 REM ClozureCLの実行ファイルパスもPATHに追加する REM 表示するプロンプトだけ有効にするため、SETXではなくSETで設定している SET CCL_DEFAULT_DIRECTORY=%~dp0 SET PATH=%PATH%;%~dp0 echo CCL_DEFAULT_DIRECTORY -^> %CCL_DEFAULT_DIRECTORY% REM このBATを実行した時だけ、userprofileをカレントディレクトリにする(他には何も影響しない) SET userprofile=%~dp0 SET HOME=%~dp0 echo USERPROFILE -^> %USERPROFILE% echo HOME -^> %HOME% echo EnvironmentValue Setup! -^> End echo . echo ApplicationPath Setup! -^> Start REM サードパーティアプリの実行パスもPATHに含める(共通部) SET PATH=%PATH%;%~dp0\third_party_tools\graphviz-2.38\release\bin SET PATH=%PATH%;%~dp0\third_party_tools\xyzzy SET PATH=%PATH%;%~dp0\third_party_tools\emacs\bin echo Graphviz2.38 -^> OK echo XYZZY -^> OK echo Emacs24 -^> OK REM サードパーティアプリの実行パスもPATHに含める(Windowsバージョン別) ver | find /i "Version 5.1." > nul if %ERRORLEVEL% equ 0 GOTO :WINXP ver | find /i "Version 6.1." > nul if %ERRORLEVEL% equ 0 GOTO :WIN7 ver | find /i "Version 6.3." > nul if %ERRORLEVEL% equ 0 GOTO :WIN8.1 ver | find /i "Version 10.0." > nul if %ERRORLEVEL% equ 0 GOTO :WIN10 goto :END :WINXP SET PATH=%PATH%;%~dp0\third_party_tools\Tcl_WinXP\bin goto END :WIN7 SET PATH=%PATH%;%~dp0\third_party_tools\Tcl_Win7\bin goto END :WIN8.1 SET PATH=%PATH%;%~dp0\third_party_tools\Tcl_Win7\bin goto END :WIN10 SET PATH=%PATH%;%~dp0\third_party_tools\Tcl_Win7\bin goto END echo Tcl/TK -^> OK echo ApplicationPath Setup! -^> End echo . :END echo QuickLisp Library List -^> Start! dir %~dp0\quicklisp\dists\quicklisp\software echo QuickLisp Library List -^> End echo . echo ===== Usage ===== echo Emacs起動 -^> runemacs echo XYZZY起動 -^> xyzzy echo REM ClozureCL起動 REM wx86cl.exe
QuickLispの導入
基本はこちらのサイトに掲載されている方法で導入。
http://modern-cl.blogspot.jp/2011/03/
QuickLispのダウンロードと設置
QuickLispの本家から「Quicklisp.lisp」をダウンロードし、Clozure CLを解凍したフォルダに配置。
C:\work\CCL
へ保存。
Clozure CLの起動
先に作ったバッチを実行し、実行した後のプロンプトでClozure CLを起動。
なぜなら、次に行うQuickLispの導入とライブラリの導入先を、Clozure CLを展開したフォルダにしたいから。
QucikLispでライブラリ導入
こちらのサイトに紹介されている方法でQuickLispを導入。
http://modern-cl.blogspot.jp/2011/03/quicklisp.html
(load "quicklisp.lisp") (quicklisp-quickstart:install) (ql:add-to-init-file)
ここまでで、うまく行っていれば、Clozure CLの解凍フォルダにQuicklispの設定ファイルが出来ているはず。
これ → ccl-init.lisp
http://modern-cl.blogspot.jp/2011/04/4-common-lisp.html
こちらのサイトに掲載されている方法で、ライブラリを導入
Clozure CLの解凍フォルダに「quicklisp」フォルダが作成され、その中にどんどんとライブラリが蓄積されていくはず。
(ql:quickload :cl-ppcre) ; 正規表現 (ql:quickload :local-time) ; 時間計算 (ql:quickload :trivial-shell) ; シェルコマンド実行 (ql:quickload :cl-fad) ; ディレクトリ・ファイル操作 (ql:quickload :Drakma) ; HTTPリクエスト (ql:quickload :ltk) ; Tkライブラリ(GUI作成用)
こんだけあったら、現状の日常業務はなんとかなりそう。
ソースコードの実行
これもバッチファイルで実行。
ファイル名は、ccl.batとでもしておく
@echo off wx86cl.exe --load %1 --eval (quit)
これで、
> ccl hoge.lisp
としてプログラムを実行できる。
開発環境の構築
ホームディレクトリが設定されているので、自分の.emacs.dをClozure CLの展開フォルダに配置するだけ。
NTEmacsを導入していたので、cドライブ直下にあるemacsディレクトリを、.emacs.dと同様にClozure CLの展開フォルダに配置する。
最終的に、フォルダ構成はこうなっている。
履歴として晒してみる。。。
C:\work\ccl のディレクトリ 2017/11/25 19:17 <DIR> . 2017/11/25 19:17 <DIR> .. 2017/11/25 14:33 <DIR> .emacs.d <- Emacs用の設定 2015/11/06 20:10 <DIR> .svn 2017/11/25 16:19 44 .xyzzy <- xyzzy用の設定 2017/11/25 12:28 221 ccl-init.lisp 2017/11/25 15:45 51 ccl.bat <- コンパイル用バッチ 2017/11/25 18:18 2,170 cl-setup.bat <- 環境変数変更用バッチ 2015/11/06 20:09 <DIR> compiler 2015/11/06 20:09 <DIR> contrib 2015/11/06 20:09 <DIR> doc 2015/11/06 20:09 <DIR> examples 2015/11/06 20:09 <DIR> level-0 2015/11/06 20:09 <DIR> level-1 2015/11/06 20:09 <DIR> lib 2015/11/06 20:09 <DIR> library 2015/11/06 20:09 <DIR> lisp-kernel 2015/11/06 20:09 <DIR> objc-bridge 2017/11/25 12:18 <DIR> quicklisp 2017/11/25 11:16 57,144 quicklisp.lisp <- quicklisp.lispはココに置いた 2015/11/06 20:09 <DIR> scripts 2015/11/06 20:09 <DIR> src <- ソースコード置くとこ作ってみた 2017/11/25 14:33 <DIR> third_party_tools <- この中に使いたいアプリを放り込む。(Emacsとxyzzy、TclとGraphvizが入っている) 2015/11/06 20:09 <DIR> tools 2015/11/06 20:09 <DIR> win32-headers 2015/11/06 20:09 <DIR> win64-headers 2015/11/06 19:32 868,278 wx86cl.exe <- 32bit用のClozure CL本体 2015/11/06 19:36 18,182,160 wx86cl.image 2015/11/06 19:36 1,078,774 wx86cl64.exe <- 64bit用のClozure CL本体 2015/11/06 19:41 24,334,576 wx86cl64.image 2015/11/06 20:09 <DIR> xdump 10 個のファイル 44,524,635 バイト 21 個のディレクトリ 267,617,517,568 バイトの空き領域