この記事の要点
- Swift Server ワークグループ(Swift Server Work Group, SSWG)による 2023 年の年次アップデートです。2022 年のサーバーサイド Swift エコシステムの成果を振り返り、2023 年に向けた目標を示しています。
- 2022 年の成果として、Kafka・Cassandra・GraphQL・RabbitMQ といった新しいクライアントライブラリの登場、Swift Concurrency(
async/await・Sendable)採用の大きな前進、VSCode 拡張や Swift Package plugin、Swiftly などツールの拡充、Linux でのリンク時間とメモリ使用量を大幅に削減するビルド改善が報告されています。 - 2023 年の目標として、エコシステムの拡大、structured concurrency の採用、ドキュメントとガイドの拡充、ツールの改善が掲げられています。
- あわせて、Dave Moser・Jimmy McDermott・Franz Busch・Joannis Orlandos の 4 名が SSWG の新メンバーとして加わったことが紹介されています。
2022 年の振り返り
エコシステムの拡大
2022 年には、サーバーサイド Swift のエコシステムに多くの新しいライブラリが加わりました。GSoC(Google Summer of Code)プロジェクトとして始まった Kafka クライアントライブラリ、Apple がリリースした Cassandra クライアントライブラリ、GraphQL ライブラリ、RabbitMQ ライブラリなどが挙げられています。
また、SSWG のインキュベーションのプロセス(Incubation Process)には、GraphQL と Graphiti、distributed actor によるクラスタ実装、Swift Cassandra クライアントの 3 件が新たに提案・採択されました。
並行処理(Swift Concurrency)の進展
Swift Concurrency の採用がエコシステム全体で大きく前進しました。インキュベーションのプロセスにあるすべてのライブラリが、必要な箇所で新しい async/await API を採用し、Sendable 対応の展開を続けています。
新しい API を Swift Concurrency のみで提供したり、内部実装を Swift Concurrency で書いたりする傾向も見られるようになりました。Kafka クライアントライブラリはその一例です。
あわせて、Custom Actor Executors(SE-0392)の導入が、並行処理コードの挙動をより細かく制御し、性能を改善し、さらに多くのコードを Swift Concurrency へ橋渡しできるようにするものとして注目されています。
ツールの拡充
ツール面での主な進展は次のとおりです。
- Swift Extension for Visual Studio Code がバージョン 1.0.0 に到達し、Swift Package plugin との統合、テストカバレッジや Test Explorer のサポートなどの機能が追加されました。
- Swift Package plugin が多くのライブラリで採用され、フォーマッタやリンタから、SwiftProtobuf・gRPC Swift・Smoke・Soto のようなコードジェネレータまで幅広く使われるようになりました。
- Swiftly が試用可能になり、Linux への Swift のインストールやバージョン切り替えを簡単に行えるようになりました。
ビルド時間の改善
Swift プロジェクトのビルド時間に関しても、コンパイラの最適化、新しいビルドシステム、パッケージマネージャの強化など多くの改善がありました。
Swift Crypto Extras は、ライブラリが独自の BoringSSL のコピーを抱え込まずに済むよう、新しい API を追加し続けています。これは新しい Swift Certificates と Swift ASN.1 ライブラリと組み合わせることで、同じコードを何度もコンパイルすることを避け、コンパイル時間を大きく短縮します。
さらに、SSWG メンバーの Gwynne が Swift 5.9 向けにマージした変更により、Linux でのリンク時間とメモリ使用量が 90% 改善されました。これは、リソースの限られた環境で Swift アプリケーションをビルドする際に特に役立ちます。
サーバーサイド Swift の採用促進
SSWG はコミュニティと協力し、サーバーサイド Swift の採用を進めてきました。SSWG のガイドやインキュベーションのプロセスは、より見つけやすくするために Swift.org へ移行されました。AsyncHTTPClient・RediStack・SwiftNIO・SwiftLog・SwiftMetrics・Swift AWS Lambda Runtime といった多くのサーバー向けパッケージが Swift Package Index でのドキュメントホスティングを採用し、発見と利用が容易になりました。また、コミュニティの実態を把握するためのアンケートも実施されています。
2023 年の目標
SSWG は 2023 年もサーバーサイド Swift にとって刺激的な年になるとして、次の目標に注力するとしています(いずれも将来の構想であり、実現を約束するものではありません)。
- エコシステムの拡大: 既存ライブラリの支援に加え、Swift ネイティブの Memcached クライアント、コネクションプーリングを簡単に導入できる共通のコネクションプールライブラリ、Smoke・Hummingbird・Vapor などの Web フレームワークで使える共通のミドルウェア実装の整備が挙げられています。あわせて、distributed tracing(分散トレーシング)の採用促進による可観測性(observability)の充実や、サーバーサイド Swift の事例・成功例の発信、サーバー向け言語としての可視性向上が目標とされています。
- structured concurrency の採用: SSWG は structured concurrency をサーバーサイド Swift を際立たせる重要な機能と位置づけています。
Sendable・async/await・TaskGroup・TaskAPI のベストプラクティスをまとめた採用ガイドの作成や、swift-service-lifecycle のような中核ライブラリへのベストプラクティスの適用が計画されています。 - ドキュメントとガイドの拡充: Swift Website ワークグループと協力し、サーバーサイド Swift の初心者向けガイドの追加や、既存ガイドの発見性向上に取り組みます。セキュリティやデプロイ(GitHub の Dependabot、AWS の CDK での Swift サポートなど)といった重要領域のドキュメント拡充も予定されています。
- ツールの改善: Linux でのツールチェイン管理ツールとして人気を集めている Swiftly を、Windows と macOS にも対応させたいとしています。そのほか、Swift Package Manager の GitHub Dependabot 対応、フットプリントが小さくセキュリティを強化したコンテナのための Canonical の Chiseled Containers の調査、Swift Package plugin を活用したデプロイ体験の改善などが検討されています。
参加・利用者への影響
この記事は、サーバーサイドで Swift を使う開発者や、サーバー向けライブラリ・ツールの開発に関わりたい人に向けたものです。Swift Concurrency の採用がエコシステム全体で進み、ツールやビルド体験が整備されてきたことが分かります。
SSWG への提案や、インキュベーションのプロセスへのライブラリの売り込みは、Swift Forums の Server カテゴリまたは Slack を通じて行えます。SSWG の前年のアップデートについては、SSWG 2021 年次アップデートのダイジェストでも紹介しています。