この記事の要点
- Swift Server Workgroup(SSWG)から、Visual Studio Code 向けの Swift 拡張機能 が公開されました。macOS・Linux・Windows に対応し、Apple プラットフォーム以外でも Swift を開発できるクロスプラットフォームの開発環境を提供します。
- これまで SourceKit-LSP や LLDB DAP といった個別のコンポーネントは存在していましたが、それらを 1 つにまとめ、すぐに使える形であらかじめ設定したものがこの拡張機能です。主な対象は Swift Package Manager(SwiftPM)プロジェクトです。
- ビルドタスクやデバッグ構成の自動生成、依存パッケージのビューア、SourceKit-LSP によるコード補完やジャンプ機能、LLDB DAP によるデバッガ、Xcode に似た Test Explorer、複数プロジェクトのワークスペース、コンテナ内での開発などをサポートします。
何が発表されたのか
Swift がより多くのプラットフォームに展開されるなかで、開発もそれらのプラットフォーム上で行えることが重要になります。しかし Linux や Windows には Xcode がなく、Apple のエコシステムの外では統合された第一級の開発環境がないことが Swift の普及を妨げていました。
これまでも、Apple の SourceKit-LSP や、LLDB DAP 拡張機能を介した Swift 版 LLDB のサポートなど、開発環境を構成する個々の部品は存在していました。しかし、それらをまとめて使えるようにするものはありませんでした。
Swift Server Workgroup(SSWG)はより完全なソリューションが必要だと考え、これらのコンポーネントを 1 つのパッケージにまとめ、最初からそのまま動くようあらかじめ設定した Swift Extension for Visual Studio Code を公開しました。
何に使えるのか
拡張機能は主に SwiftPM プロジェクトを対象とし、既存のコンポーネントと新規のコンポーネントを 1 つのまとまったパッケージとして提供します。主な機能は次のとおりです。
- 開発環境の事前設定: Visual Studio Code は開発環境を設定するために複数の JSON 設定ファイルを使いますが、この拡張機能は SwiftPM プロジェクト向けにそれらを自動生成します。プロジェクトを読み込むと、プロジェクト内のすべての要素に対するビルドタスクと、
Package.swiftに定義された各実行可能ファイルの debug・release 構成、さらにそれらのデバッガ起動構成が作られます。 - 依存パッケージビュー: 利用しているすべての依存パッケージとそのバージョンを一覧表示します。各依存パッケージの中身を展開して確認したり、右クリックメニューからリポジトリを開いたり、依存先をローカルのバージョンに差し替えたりできます。タイトルバーのボタンから、依存関係の解決(resolve)・更新(update)・リセット(reset)も行えます。
- SourceKit-LSP 統合: Language Server Protocol(LSP)は、シンボル補完やジャンプ機能といった言語機能をエディタに提供する標準です。Swift のサポートは Apple の SourceKit-LSP 実装を通じて提供され、この拡張機能が SourceKit-LSP サーバの起動を管理して、Swift および C/C++ ソースファイルに対してこれらの機能を有効にします。
- デバッガ: デバッガは LLDB DAP 拡張機能を介して提供されます。LLDB との統合は LLDB DAP(Debug Adapter Protocol)拡張機能が担い、この拡張機能は起動時にプロジェクトの実行可能ファイル向けのデバッグ起動構成を作成し、Swift 版の LLDB を使うよう LLDB DAP を設定します。
- Test Explorer: Xcode のテスト UI に似た UI を提供します。テストターゲット・各ターゲット内の
XCTestCaseクラス・各テストをツリー表示し、デバッガの内外でテストを実行できます。個別のテストの実行、クラスやテストターゲット単位での絞り込み実行、全テストの実行が可能で、成否に応じて UI が更新されます。 - 複数プロジェクトのワークスペース: それぞれが独立した SwiftPM プロジェクトを持つ複数のワークスペースフォルダをまとめたワークスペースを扱えます。ワークスペースフォルダのサブフォルダにある SwiftPM プロジェクトにも対応するため、複数のサンプルプロジェクトや Swift Lambda 群を 1 つのルートフォルダ以下に置くような構成や、HTML・JavaScript・Swift 製バックエンドを含む Web プロジェクトのような混在言語の構成を 1 つのフォルダ構造にまとめられます。
- コンテナ内での開発: Remote - Containers 拡張機能を使うと、Docker コンテナの中でコードのコンパイルやテストを行えます。これを Swift 拡張機能と組み合わせれば、macOS で開発しつつ Linux にデプロイする場合などに、Linux と macOS の挙動の差異を早期に発見できます。nightly の Swift Docker イメージと組み合わせれば、新しい OS や Xcode をインストールせずに新機能を試すこともできます。
導入・今後の位置づけ
拡張機能は Visual Studio Code Marketplace から導入できます。発表時点では当初予定していた中核的な機能群がそろっており、今後も拡充を続けるとされていました。
この拡張機能はコミュニティプロジェクトとして開発されており、貢献を歓迎しています。不足や不具合を見つけた場合は Issue を起票し、新機能の追加やバグ修正に時間を割ける場合は連絡してほしい、と呼びかけられています。