🤖
swiftのLinux用開発環境構築
swiftのLinux用開発環境を構築方法について共有します。エディタはVSCodeでリモートコンテナで開発します。エディタの設定はdevcontainer.json
に全て書かれています。
.devcontainer/devcontainer.json
{
"name": "Docker from Docker Compose",
"dockerComposeFile": "../docker-compose.yml",
"service": "app",
"workspaceFolder": "/home/user/scan-swift",
"settings": {
"terminal.integrated.defaultProfile.linux": "bash",
"[swift]": {
"editor.formatOnSave": true
},
"sourcekit-lsp.serverPath": "/usr/bin/sourcekit-lsp",
"apple-swift-format.path": "/usr/bin/swift-format"
},
"extensions": [
"vknabel.vscode-apple-swift-format",
"sswg.swift-lang"
],
"remoteUser": "user"
}
Dockerfileは次のとおりです。
Dockerfile
FROM swift:5.6.0-focal
WORKDIR /build
COPY Tools Tools
COPY build_tools.sh .
RUN bash build_tools.sh
RUN install Tools/.build/release/swift-format /usr/bin
RUN rm -rf /build
ARG USERNAME=user
ARG GROUPNAME=user
ARG UID=1000
ARG GID=1000
ARG PASSWORD=user
RUN groupadd -g $GID $GROUPNAME && \
useradd -m -s /bin/bash -u $UID -g $GID -G sudo $USERNAME && \
echo $USERNAME:$PASSWORD | chpasswd && \
echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
USER $USERNAME
WORKDIR /home/$USERNAME/scan-swift
Tools
でswift-format
をビルドしている以外はswift:5.6.0-focal
をそのまま使っている感じです。Tools
の中身については、githubにあげたリポジトリを参照してください。
VSCodeを使用している限りは基本的に保存するたびフォーマットされますが、一度に全ファイルについてフォーマットする場合は次のスクリプトでフォーマットできます。
format.sh
#!/usr/bin/env bash
if type "swift-format" > /dev/null 2>&1; then
swift-format -p --recursive ./Sources ./Tests --in-place
else
swift run --skip-build -c release --package-path Tools swift-format -p --recursive ./Sources ./Tests --in-place
fi
Xcode 13.3を使用している限りはDocker無しの状態で利用できます。その時はsourcekit-lsp.serverPath
とapple-swift-format.path
の設定を環境に合わせて変更してください。
今のところ1度コンパイルしないと型が見つけられなかったり、テストケースが見つけられないようです。それ以外は概ね問題なく動いているように感じます。まだVSCodeの拡張機能がプレビュー版なので、今後改善していくと期待しています。
Discussion