LoginSignup
2
0

More than 3 years have passed since last update.

Docker x Code-Server で Swift x VSCode

Last updated at Posted at 2019-08-17

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 とかでわかるかも)

root_page.jpg

自由自在にプログラム

※ 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

とすると、ブラウザーで、起動しているサーバーにアクセスすることもできます。

Screen Shot 2019-08-18 at 3.08.04.png

環境構築

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

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0