はじめに
最近Dockerを勉強してて、Docker上で開発環境ができたらいいなと思いました。
そのようにして開発されてる方は多いのかとは思いますが、私の場合は割とマイナーな開発環境を整えようとしているため、情報が少なく苦戦しております。
とりあえず、なんとかそれらしい環境が作れましたので書いておきます。
環境と構成
macOS Mojave
Emacs 26.3
SLIME
Docker
roswell(処理系はsbcl)
macOSにインストールされているGUI版のEmacs上のSLIMEから、Docker上のSWANKサーバーに接続して、sbclでCommonLispを開発します。
Emacsの環境を整える
Emacsでは次のパッケージを使っています。
- docker-tramp
- dockerfile-mode
SLIMEは次のコマンドでインストールします。
ros install slime
インストール後、.emacsに次の設定を追加します。
(load (expand-file-name "~/.roswell/helper.el"))
これでSLIMEは使えるようになります。
Dockerコンテナの起動
まずは次のDockerfileからイメージを作成します。
FROM amazonlinux:latest
RUN yum install -y automake libcurl-devel zlib-devel git gcc make bzip2 tar
WORKDIR /root
RUN git clone -b release https://github.com/roswell/roswell.git
WORKDIR /root/roswell
RUN sh bootstrap && ./configure && make && make install && ros setup
CMD [ "ros","run", \
"-e", "(ql:quickload :swank)", \
"-e", "(setf swank::*loopback-interface* \"0.0.0.0\")", \
"-e", "(swank:create-server :dont-close t :style :spawn)"]
docker imageコマンドでイメージを作成してもいいですが、dockerfile-modeを入れていると、C-c C-bでDockerイメージを作成できるので楽です。
ここではamazonlinux:roswellという名前でDockerイメージを作成します。
次にDockerコンテナを起動します。
docker run -itd --name roswell01 -h roswell01 -p 4005:4005 amazonlinux:roswell
EmacsからDocker上のswankサーバーに接続
次にEmacsからM-x slime-connect で localhost:4005 に対して接続します。
port はデフォルトで 4005 なので、M-x slime-connect RET RET で接続できます。
参考URL
https://www.common-lisp.net/project/slime/doc/html/Setting-up-the-lisp-image.html
https://blog.3qe.us/entry/2018/06/21/025948