↑前回の記事で取得した Swift公式Dockerイメージを、VSCode から使う方法を“図解付き”でまとめます。
(Windows 以外の OS でも、ここで説明する手順は同じです)
前回の記事の続きのため、以下の環境がインストール済みであることを前提とします。
- Visual Studio Code
- WSL(Ubuntu)
- Docker Desktop for Windows
- Swift Docker Image
また、Docker Desktop for Windows を起動し、Docker Engine Running 状態にしておくこと。
1. VSCodeに拡張機能をインストール
Dockerコンテナを作成する準備として、(ローカルの)VSCodeに次の3つの拡張機能をインストールします。(検索して「インストール」を押す。)
すでにインストール済みなら手順1.1へスキップ。
- Docker
- Dev Containers
- Swift
1.1 インストールした拡張機能を確認
上記の拡張機能をインストールすると、↓このようになるはずです。
CodeLLDB は、Swift拡張機能と一緒にインストールされます。
![ext 2024-06-25 152604.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F283293%2F3d52b4ca-16da-6ff6-b7c2-54dcaf424e5d.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=b6218f7dcb0559643ccc9142ba98bae2)
本題では不要ですが、「推奨」の先頭に出ている WSL が、VSCodeを開く度に「推奨」されます。ここでインストールしておく方が 今後うるさくなくてよいかも。
2. Swiftプロジェクトのルートフォルダを作成
Windowsターミナル(一般ユーザのPowerShell)を起動し、適当なディレクトリで以下のコマンドを実行します。
> mkdir swift #プロジェクトのルートフォルダを作成
> cd swift #プロジェクトフォルダに移動
> code . #VSCodeでプロジェクトフォルダを開く
↓ここでは、C:\Users\nak435\Documents\myDocker_tpl
ディレクトリとして進める。
3. Dockerコンテナの作成
順を追って説明します。
3.1 Dockerfileの作成
「新しいファイル...」をクリックする
ファイル名を「Dockerfile」とする
ファイルの中身は 次の2行として、必ず「保存」する
FROM swift:latest
RUN /bin/bash
3.2 コンテナーの作成
左ペインの「リモート エクスプローラー」をクリックする
「+」(新しい開発コンテナー)をクリックする
「コンテナーで現在のフォルダーを開く」をクリックする
「ワークスペースに構成を追加する」をクリックする
「'Dockerfile'から
コンテナー構成の既存の 'Dockerfile' を参照してください」をクリック
もし、「'Dockerfile'が見つかりません」エラーとなったときは、ファイル名のスペル誤りか「保存」忘れ。見直して『「リモート エクスプローラー」をクリック』からやり直す。
実は、上記のスクショを撮っている段階では、Dockerfile
ファイルの「保存」を忘れており、「'Dockerfile'が見つかりません」エラーとなって悩みました。
追加機能は不要。「OK」をクリック
3.3 コンテナーが起動される
コンテナーが作成・起動されると、ターミナルが開く。
swiftが起動していることを確認するために、swift --version
を実行し、バージョンが表示されたら問題なし。
『「main.swift」ファイルが見つからない』は、後で作成するので 今は無視してよい。
3.4 コンテナーにVSCode拡張機能をインストールする
LOCAL-インストール済みの中から Swift拡張機能を見つける。
歯車アイコンをクリックして出てくるメニューから「devcontainer.json に追加」をクリック
「拡張機能が開発コンテナーの構成に追加されました」を確認する。
ただし、この時点では、本当はまだ追加されていない。
左下の青いところをクリック、上部のメニューから「コンテナーのリビルド」をクリック。
自動的に「コンテナーをリビルド」しますか?と聞かれる場合もある。その場合は「Rebuild」をクリックすればよい。
「開発コンテナー」に Swift拡張機能が追加されたことを確認する。また、devcontainer.json
を開くと、Swift拡張機能が追加されていることが確認できる。
CodeLLDB は、Swift拡張機能と一緒にインストールされる。
4. Swiftプロジェクト作成
順を追って説明します。
4.1 Swiftプロジェクトの初期化
引き続き、ターミナルで次のコマンドを実行する
swift package init --type executable
やっと、swift run
で実行できるようになったはずだ。
ここで一度、VSCodeからフォルダを閉じる。
4.2 再びフォルダーを開く
「最近使用した項目を開く」から Swiftプロジェクトフォルダ
を見つけクリック、再びフォルダーを開きます。
swift package init
後、初めて、プロジェクトフォルダを開くと、VSCodeのプロジェクト情報が自動で作成される(.vscodeサブフォルダやlaunch.jsonが自動で作成される)。
これが目的で、再度、開く必要があった。しかし、今のこの状態だと、コンテナーと紐付いていないため、もう一度、開発コンテナーのパスを開く必要がある。
ここの手順がめんどくさいのは、Swift環境がDockerにしかなく、Windowsネイティブには、Swiftがインストールされていない前提としたためです。
もし、Windowsネイティブにも、Swiftがインストールされているならば、Swiftプロジェクトのルートフォルダを作成したときに、一緒にSwiftプロジェクトの初期化も行ってしまえば、VSCodeの閉じたり開いたりが不要になる(手順4.1と4.2が不要)。
> mkdir swift #プロジェクトのルートフォルダを作成
> cd swift #プロジェクトフォルダに移動
> swift package init --type executable #Swiftプロジェクトの初期化
> code . #VSCodeでプロジェクトフォルダを開く
5. Swiftプロジェクトコンテナーを開く
「最近使用した項目を開く」からSwift開発コンテナー
を見つけてクリックする。
↓これで開いたVSCodeは、Swiftプロジェクトフォルダ
とSwift開発コンテナー
が紐付いた状態となっており、「使える」状態になっています。
では、デバッグ実行してみましょう。
6. デバッグ実行する
コードを少し書き換えます。
let message = "Hello, world!"
print(message)
6.1 ブレークポイントの設定
行番号のすぐ左側をクリックし、ブレークポイントを設定します。赤い丸「●」です。
6.2 デバッグ実行開始
左ペインの「実行とデバッグ」をクリック、上部の三角形「Debug Swift」をクリックして、デバッグ実行を開始します。
すると、設定したブレークポイントで止まります。
「ターミナル」タブの横の「デバッグコンソール」をクリック。
デバッガーのコマンドを入力します。ここでは、変数message
の内容を確認するために、p message
を入力しenter。
すると、変数message
の内容が表示されました。
String型で中身は"Hello, world!"ですね。Xcodeのデバッガーとほぼ同じです。
画面上部中央にあるデバッガーのツールバーで「続行」をクリックし、プログラムを続行する。最終的にはプログラムが終了する。
プログラムからの標準出力は、「ターミナル」タブに出力されています。
7. Swiftコンテナーの停止
左下の青いところをクリック、上部のメニューから「リモート接続を終了する」をクリック。
再び起動する場合は、手順5 の「最近使用した項目を開く」からSwift開発コンテナーを見つけてクリックすれば良い。
8. その他
-
Docker Desktopを起動しておけば、他の操作はすべてVSCode内で閉じるところが、今回の方法のよいところです。
手順2「Swiftプロジェクトのルートフォルダを作成」において、Windowsターミナル(一般ユーザのPowerShell)からコマンドを打つ操作をしましたが、これもVSCode内の(ローカル環境の)ターミナルからでも可能。
-
今回の手順は、一つのSwiftプロジェクトが一つのDockerコンテナーとなります。複数のプロジェクトを並行に扱う場合は、それぞれのDockerコンテナーの区別が付くように、手順3.3にてコンテナーが作成されたときに生成される
devcontainer.json
内のname
を固有のプロジェクト名称に書き換えておくとよいでしょう。devcontainer.json{ //"name": "Existing Dockerfile", // changes to project name "name": "Swift XXX Project Dockerfile", "build": { "context": "..", "dockerfile": "../Dockerfile" }, "customizations": { "vscode": { "extensions": [ "sswg.swift-lang" ] } } }
-
手順3.4に Dockerコンテナー内に Swift拡張機能を追加する手順がありますが、上記json の該当部分をコピーすれば、GUIでの操作は省略できます。その場合も「コンテナーのリビルド」を忘れないこと。
-
今回の手順で作成したが、停止されていて使わなくなったコンテナーやイメージは、Docker Desktop や Dockerコマンド で削除して構わない。
再び使う場合は、VSCodeからプロジェクトフォルダーを開き、左下の青いところをクリック、上部のメニューから「コンテナーで再度開く」をクリックすると、上記のdevcontainer.json
から再構成してくれます。
-
開発コンテナーは WSLでインストールした Ubuntuが動いています。ここにライブラリを追加する場合は、
apt-get install -y xxxx
コマンドで可能ですが、コンテナーを停止すると消えてしまいます(おそらく)。
恒久的に必要なライブラリは、最初に作成したDockerfile
に書いておくこと。リポジトリ更新のため、apt-get update
は必須だが、sudo
は不要。DockerfileFROM swift:latest RUN apt-get update && apt install -y figlet RUN /bin/bash