LoginSignup
1
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Windows で Swift公式Docker イメージをVSCodeから使う“やさしい”手順

Last updated at Posted at 2024-06-25

↑前回の記事で取得した Swift公式Dockerイメージを、VSCode から使う方法を“図解付き”でまとめます。
(Windows 以外の OS でも、ここで説明する手順は同じです)

前回の記事の続きのため、以下の環境がインストール済みであることを前提とします。

  • Visual Studio Code
  • WSL(Ubuntu)
  • Docker Desktop for Windows
  • Swift Docker Image

また、Docker Desktop for Windows を起動し、Docker Engine Running 状態にしておくこと。
engine.png

1. VSCodeに拡張機能をインストール

Dockerコンテナを作成する準備として、(ローカルの)VSCodeに次の3つの拡張機能をインストールします。(検索して「インストール」を押す。)
すでにインストール済みなら手順1.1へスキップ。

  • Docker

ex_docker.png

  • Dev Containers

ex_dev-container.png

  • Swift

ex_swift.png

1.1 インストールした拡張機能を確認

上記の拡張機能をインストールすると、↓このようになるはずです。

CodeLLDB は、Swift拡張機能と一緒にインストールされます。

ext 2024-06-25 152604.png

本題では不要ですが、「推奨」の先頭に出ている WSL が、VSCodeを開く度に「推奨」されます。ここでインストールしておく方が 今後うるさくなくてよいかも。

2. Swiftプロジェクトのルートフォルダを作成

Windowsターミナル(一般ユーザのPowerShell)を起動し、適当なディレクトリで以下のコマンドを実行します。

> mkdir swift #プロジェクトのルートフォルダを作成
> cd swift #プロジェクトフォルダに移動
> code . #VSCodeでプロジェクトフォルダを開く

↓ここでは、C:\Users\nak435\Documents\myDocker_tplディレクトリとして進める。

term.png

3. Dockerコンテナの作成

順を追って説明します。

3.1 Dockerfileの作成

「新しいファイル...」をクリックする

scr 2024-06-25 155132.png

ファイル名を「Dockerfile」とする

scr 2024-06-25 155206.png

ファイルの中身は 次の2行として、必ず「保存」する

Dockerfile
FROM swift:latest
RUN /bin/bash

3.2 コンテナーの作成

scr 2024-06-25 155408.png

左ペインの「リモート エクスプローラー」をクリックする

scr 2024-06-25 155522.png

「+」(新しい開発コンテナー)をクリックする

scr 2024-06-25 155629.png

「コンテナーで現在のフォルダーを開く」をクリックする

scr 2024-06-25 155642.png

「ワークスペースに構成を追加する」をクリックする

scr 2024-06-25 155656.png

「'Dockerfile'から
 コンテナー構成の既存の 'Dockerfile' を参照してください」をクリック

scr 2024-06-25 155708.png

もし、「'Dockerfile'が見つかりません」エラーとなったときは、ファイル名のスペル誤りか「保存」忘れ。見直して『「リモート エクスプローラー」をクリック』からやり直す。

実は、上記のスクショを撮っている段階では、Dockerfileファイルの「保存」を忘れており、「'Dockerfile'が見つかりません」エラーとなって悩みました。

追加機能は不要。「OK」をクリック

scr 2024-06-25 155716.png

3.3 コンテナーが起動される

コンテナーが作成・起動されると、ターミナルが開く。
swiftが起動していることを確認するために、swift --versionを実行し、バージョンが表示されたら問題なし。

scr 2024-06-25 155821.png

『「main.swift」ファイルが見つからない』は、後で作成するので 今は無視してよい。

3.4 コンテナーにVSCode拡張機能をインストールする

LOCAL-インストール済みの中から Swift拡張機能を見つける。
歯車アイコンをクリックして出てくるメニューから「devcontainer.json に追加」をクリック

scr2 2024-06-25 165030.png

「拡張機能が開発コンテナーの構成に追加されました」を確認する。

scr2 2024-06-25 165051.png

ただし、この時点では、本当はまだ追加されていない。
左下の青いところをクリック、上部のメニューから「コンテナーのリビルド」をクリック。

自動的に「コンテナーをリビルド」しますか?と聞かれる場合もある。その場合は「Rebuild」をクリックすればよい。

scr2 2024-06-25 165110.png

「開発コンテナー」に Swift拡張機能が追加されたことを確認する。また、devcontainer.jsonを開くと、Swift拡張機能が追加されていることが確認できる。

scr2 2024-06-25 165514.png

CodeLLDB は、Swift拡張機能と一緒にインストールされる。

4. Swiftプロジェクト作成

順を追って説明します。

4.1 Swiftプロジェクトの初期化

引き続き、ターミナルで次のコマンドを実行する

swift package init --type executable

scr2 2024-06-25 164123.png

やっと、swift runで実行できるようになったはずだ。

ここで一度、VSCodeからフォルダを閉じる。

scr2 2024-06-25 164314.png

4.2 再びフォルダーを開く

「最近使用した項目を開く」から Swiftプロジェクトフォルダを見つけクリック、再びフォルダーを開きます。

scr2 2024-06-25 164648.png

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開発コンテナーを見つけてクリックする。

scr3 2024-06-25 183045.png

↓これで開いたVSCodeは、SwiftプロジェクトフォルダSwift開発コンテナーが紐付いた状態となっており、「使える」状態になっています。

scr4 2024-06-25 183829.png

では、デバッグ実行してみましょう。

6. デバッグ実行する

コードを少し書き換えます。

let message = "Hello, world!"
print(message)

6.1 ブレークポイントの設定

行番号のすぐ左側をクリックし、ブレークポイントを設定します。赤い丸「」です。

scr2 2024-06-25 165701.png

6.2 デバッグ実行開始

左ペインの「実行とデバッグ」をクリック、上部の三角形「Debug Swift」をクリックして、デバッグ実行を開始します。

scr2 2024-06-25 165725.png

すると、設定したブレークポイントで止まります。

「ターミナル」タブの横の「デバッグコンソール」をクリック。
デバッガーのコマンドを入力します。ここでは、変数messageの内容を確認するために、p messageを入力しenter。

scr2 2024-06-25 165742.png

すると、変数messageの内容が表示されました。
String型で中身は"Hello, world!"ですね。Xcodeのデバッガーとほぼ同じです。

画面上部中央にあるデバッガーのツールバーで「続行」をクリックし、プログラムを続行する。最終的にはプログラムが終了する。

scr2 2024-06-25 165755.png

プログラムからの標準出力は、「ターミナル」タブに出力されています。

scr4 2024-06-25 212040.png

7. Swiftコンテナーの停止

左下の青いところをクリック、上部のメニューから「リモート接続を終了する」をクリック。

scr5 2024-06-25 212917.png

再び起動する場合は、手順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から再構成してくれます。
    scr6 2024-06-25 220332.png
     

  • 開発コンテナーは WSLでインストールした Ubuntuが動いています。ここにライブラリを追加する場合は、apt-get install -y xxxxコマンドで可能ですが、コンテナーを停止すると消えてしまいます(おそらく)。
    恒久的に必要なライブラリは、最初に作成したDockerfileに書いておくこと。リポジトリ更新のため、apt-get updateは必須だが、sudoは不要。

    Dockerfile
    FROM swift:latest
    RUN apt-get update && apt install -y figlet
    RUN /bin/bash
    

 scr7 2024-06-25 231509.png

1
0
0

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
1
0