Swift の学習をしたかったので、Docker Container の VSCODE と Swift を入れて、
開発環境を作成してみた。(AWS Cloud9 ライクに動作します)
Auto-Complete も効いて中々便利です。
オンライン上の置くこともできるので、少し工夫すれば、あらゆるところで、
Swiftで遊ぶことができます。
使い方
(1) Docker Image を起動して、VSCodeを立ち上げる。
docker build -t swift_code .
docker run --privileged -p8080:8080 -p8443:8443 -it swift_code
※ --privileged が必要っぽい
(2) ブラウザーを”http://127.0.0.1:8443/”を起動して、VSCodeを開く。
ipは環境によって違います。 (Windows は docker-machine ip とかでわかるかも)
自由自在にプログラム
※ File->Preference->Setting->SourceKit-Lsp の ToolChainは / にしてね。
※ mountして、変更内容を、Descktop PCに反映させたい場合は、 -v optionをつけたり
docker run --privileged -v/xxx/xx/x:/app -p8080:8080 -p8443:8443 -it swift_code
※ 今回はport 8080 を開けているので、例えば、
$ bash
$ python -m SimpleHTTPServer 8080
とすると、ブラウザーで、起動しているサーバーにアクセスすることもできます。
環境構築
Docker ファイルの中身
適当に書いたので、長期間もちませませんが、以下のようにしました。
#
# docker build -t swift.streamini .
# docker run --privileged -p8080:8080 -p8443:8443 -it swift.streamini
#
FROM ubuntu:18.04
RUN apt-get update --fix-missing
RUN apt-get upgrade -y
#RUN dpkg -i /var/cache/apt/archives/linux-libc-dev_4.15.0-55.60_amd64.deb
#RUN apt-get install linux-libc-dev -y
RUN apt-get install clang -y --fix-missing
RUN apt-get install curl wget -y
WORKDIR /works
WORKDIR /app
WORKDIR /works
RUN wget https://github.com/cdr/code-server/releases/download/2.preview.5-vsc1.37.0/code-server2.preview.5-vsc1.37.0-linux-x86_64.tar.gz
RUN tar --strip-components 1 -xzf code-server2.preview.5-vsc1.37.0-linux-x86_64.tar.gz
#
# swift
#
# copy from https://github.com/apple/swift-docker/blob/master/5.0/ubuntu/18.04/Dockerfile
#
RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true && \
apt-get -q install -y \
libatomic1 \
libbsd0 \
libcurl4 \
libxml2 \
libedit2 \
libsqlite3-0 \
libc6-dev \
binutils \
libgcc-5-dev \
libstdc++-5-dev \
libpython2.7 \
tzdata \
git \
pkg-config \
&& rm -r /var/lib/apt/lists/*
# Everything up to here should cache nicely between Swift versions, assuming dev dependencies change little
ARG SWIFT_PLATFORM=ubuntu18.04
ARG SWIFT_BRANCH=swift-5.0.2-release
ARG SWIFT_VERSION=swift-5.0.2-RELEASE
ENV SWIFT_PLATFORM=$SWIFT_PLATFORM \
SWIFT_BRANCH=$SWIFT_BRANCH \
SWIFT_VERSION=$SWIFT_VERSION
RUN wget https://swift.org/builds/swift-5.1-branch/ubuntu1804/swift-5.1-DEVELOPMENT-SNAPSHOT-2019-08-16-a/swift-5.1-DEVELOPMENT-SNAPSHOT-2019-08-16-a-ubuntu18.04.tar.gz
#https://swift.org/builds/swift-5.0.2-release/ubuntu1804/swift-5.0.2-RELEASE/swift-5.0.2-RELEASE-ubuntu18.04.tar.gz
RUN tar --strip-components 1 -xzf swift-5.1-DEVELOPMENT-SNAPSHOT-2019-08-16-a-ubuntu18.04.tar.gz --directory /
RUN chmod -R o+r /usr/lib/swift
WORKDIR /works
RUN git clone https://github.com/apple/sourcekit-lsp.git
WORKDIR /works/sourcekit-lsp
#RUN git checkout tags/swift-5.1-DEVELOPMENT-SNAPSHOT-2019-06-26-a
RUN apt-get update
RUN apt-get install libsqlite3-dev -y
RUN apt-get install libdispatch-dev -y
#RUN swift build -Xcxx -I/usr/lib/swift
RUN apt-get install libncurses5-dev -y
RUN apt-get install libncurses5 -y
RUN swift build -Xcxx -I/usr/lib/swift
RUN swift package update
RUN apt-get install nodejs -y
RUN apt-get install npm -y
ENV PATH="/works/sourcekit-lsp/.build/debug:${PATH}"
WORKDIR /works/sourcekit-lsp/Editors/vscode
RUN npm run createDevPackage
RUN /works/code-server --install-extension out/sourcekit-lsp-vscode-dev.vsix
CMD [ "/works/code-server", "--allow-http", "--no-auth","--port","8443", "/works" ]
Swift Plugin
Swift plugin は使わず、Apple が作成中の、LSPを利用しています。
https://github.com/apple/sourcekit-lsp.git を利用しています。
LSPは、様々な Editor や 開発環境でオートコンプリートなどの機能を提供しようとして、
Microsft が提唱しているものです。
とっても便利ですね。
LSPならば、VSCode 向けの Pluginを、自作のEditorなどでも動作させるのを
容易に実現できそうですね。
バージョンをあわせる
不足していえうライブラリーや、LSPようにバージョンを合わせたりと
結構大変でした。
例えば、LSPのSwift5.1はブランチを見ろと書かれていましたが、
Masterが既にSwift5.1でした。
素直に、Swift Docker Image を使うのが良いと思います。
https://github.com/apple/swift-docker
その場合、LSPについては、最新の環境を使えば良いと思います。
Swift5.1で開発の最新といった感じにすると、事故が少ないかと
また、Swift Docker Image は ubuntu ベースなので、Code-Server が動きます。つまり、VSCODEが動きます。ということは、今回の環境がストレスなく作れることを意味しています。
便利
PS
今回の作成したものは、以下にあります。
https://github.com/kyorohiro/my-code-server