Dockerで開発環境 LISP編

引き続き、古い言語と格闘してみる。今度はLISPにチャレンジ。

とはいえ、LISPといっても、「方言」がメチャクチャ多数ある。ややこしいのは「純LISP」という「方言」まである。(もともとのLISP=純LISP、というわけではない)

その中でも、今でも割と情報がありそうなのは、Common LISP や Emacs LISPあたりか。Wikiでは、Clojure、Scheme といったところもLISPの方言とされてるけど、TIOBE Indexに行くと、これらは別言語扱いでランキングされている。

*ここまで来ると、方言というより、「LISPをベースとした別言語」「LISP系の言語」と言ったほうが分かりやすいかも。

多数ある方言の中で、「これが本家」的な情報もなかなか見当たらないのだが、情報として多そうなCommon LISPをあたってみる。

  • http://www.sbcl.org/getting.html
  • http://www.nct9.ne.jp/m_hiroi/clisp/index.html#clisp

Common LISP にもいろいろ処理系があるようで、SBCL というものがあり、Linux用のバイナリが配布されているので、これを使ってみた。

# apk update
# apk add --no-cache build-base
# mkdir /home/lisp && cd /home/lisp
# wget wget http://prdownloads.sourceforge.net/sbcl/sbcl-1.4.3-x86-linux-binary.tar.bz2
# bzip2 -cd sbcl-1.4.3-x86-linux-binary.tar.bz2 | tar xvf -
# sh sbcl-1.4.3-x86-linux-binary/install.sh
(中略)
SBCL has been installed:
 binary /usr/local/bin/sbcl
 core and contribs in /usr/local/lib/sbcl/

Documentation:
 man /usr/local/share/man/man1/sbcl.1
# sbcl
/bin/sh: sbcl: not found

・・・あれ?not found???

# which sbcl
/usr/local/bin/sbcl
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

PATHも通ってるはずだし、公式サイトの手順通りのはずなんだが・・・よく分からん。なんか、インストールの仕方がマズかったか?

 

とりあえず、Docker HubでDockerfile付きであがってる、LISPのイメージがないか確認してみる。

全部は見れてないが、ざっと下記のものがあるようだ。(他にもあったが、Dockerfileが無くて、実態がよく分からんからノータッチで)

  • https://hub.docker.com/r/daewok/lisp-devel/dockerfile
  • https://hub.docker.com/r/codesignal/lisp/dockerfile
  • https://hub.docker.com/r/anhil/common-lisp-roswell

後は、下記のページあたりを見ると、「Roswell」なるものを入れると、Common LISPの環境が簡単にできるらしい。

  • https://qiita.com/t-sin/items/054c2ff315ec3b9d3bdc
  • https://github.com/roswell/roswell

これらの情報を元に、Alpineをベースにしている、「anhil/common-lisp-roswell」というイメージを参考にした。

FROM frolvlad/alpine-glibc

RUN set -x && \
    apk update && \
    apk add --no-cache curl-dev && \
    apk add --no-cache --virtual=build-deps git automake autoconf build-base && \
    git clone https://github.com/roswell/roswell.git /tmp/roswell && \
    cd /tmp/roswell && \
    sh bootstrap && \
    ./configure && \
    make && \
    make install && \
    ros setup && \
    cd ../../ && \
    rm -rf /tmp/roswell && \
    apk del build-deps

CMD ["ros", "run"]

こんな感じのDockerfileでビルドしてrunしてみる。

$ docker build . -t lisp_test
$ docker run -it lisp_test:latest
* (format t "Hello World!~%")  # 直接、SBCLのプロンプトが起動するので、ここにコードを打ち込む。
Hello World!
NIL
*

けど、このイメージを使っても、sbcl のコマンドを直接は使えなかった。

$ docker run -itd lisp_test:latest
$ docker exec -it hoge /bin/sh
# ros run
* (format t "Hello World!~%")
Hello World!
NIL
* (quit)
/ # sbcl
/bin/sh: sbcl: not found

 

 

 

コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA