この記事の要点
- Swift Server ワークグループ(Swift Server Work Group, SSWG)が、結成から 1 年が経過した時点での活動状況をまとめた年次アップデートです。サーバーサイド Swift コミュニティのニーズに応えるための取り組みの進捗を報告しています。
- 最大の成果は、Swift Evolution に似た形でパッケージを評価・推奨していく「Incubation Process」の整備です。このプロセスを経て採用されたパッケージは、公式のサーバー向けパッケージインデックスに掲載されます。
- すでに SwiftNIO・SwiftLog・SwiftMetrics・PostgresNIO・AsyncHTTPClient など 9 件のパッケージが採用され、Vapor 4 や Kitura といった主要フレームワークで採用が進んでいます。あわせて Docker 公式イメージや Linux の月次パッチリリースなど、ツール面の改善も報告されています。
Incubation Process(パッケージの評価プロセス)
SSWG は、健全なオープンソースエコシステムはパッケージの品質に大きく依存すると考え、最も力を入れてきたのがパッケージのための提案プロセスである Incubation Process の整備です。これは Swift Evolution に似た仕組みで、既存の Swift パッケージや新しいアイデアを持つ人が、フィードバックを受け、ベストプラクティスに従い、最終的に公式のサーバー向けパッケージインデックスに掲載されるまでの流れを定めたものです。
このプロセスには、並行処理・テスト・コードスタイルなどに関する指針や要件が盛り込まれています。一方で、参入の障壁はできるだけ低く保つことも重視されており、最初のステップである「アイデアやパッケージの売り込み(pitch)」は、Swift Forums の Server > Pitches カテゴリに投稿するだけで始められます。
採用されたパッケージはパッケージインデックスに掲載され、その後も基準を満たし続けているかを定期的にレビューされます。
採用されたライブラリ
執筆時点で 9 件のパッケージが Incubation Process を経て採用されています。主なものは次のとおりです。
- SwiftNIO: 高性能なプロトコルサーバー/クライアントのためのイベント駆動・ノンブロッキングなネットワークフレームワーク。Swift サーバーエコシステムの中核で、多くのパッケージがこれを土台に構築されています。
- SwiftLog: 汎用のロギング API。ログを出力したいパッケージが、具体的なロギング実装に依存せず、最終的な実装の選択を利用者に委ねられるようにします。
- SwiftMetrics: 汎用のメトリクス API。ゲージ・タイマー・カウンターなどを使って構造化された情報を報告でき、実装の選択は利用者に委ねられます。
- PostgresNIO: SSWG として初めて承認されたデータベースドライバ。SwiftNIO 2 の上にゼロから構築された PostgreSQL クライアントです。
- rediStack: SwiftNIO 2 上に構築された Redis クライアント。
- AsyncHTTPClient: SwiftNIO 上に構築された HTTP クライアント。サーバーアプリケーションにおける
URLSessionの代替として、ストリーミングやプロキシ、Cookie パースなどに対応します。 - APNSwift: SwiftNIO 上の HTTP/2 ベースの APNS(プッシュ通知)ライブラリ。
- StatsdClient / Prometheus: SwiftMetrics API のデータを、それぞれ statsd プロトコルや Prometheus へ出力するためのバックエンド。
これらのパッケージは、Vapor 4 や Kitura といった主要なサーバーサイド Swift フレームワークの次期バージョンで急速に採用が進んでいます。
ツールの改善
パッケージの評価に加えて、SSWG は Linux 上での Swift とそのツールの改善にも取り組んでいます。
- Docker: Swift 3・4・5 の公式 Docker イメージが Docker Hub で提供されるようになりました。Swift の新バージョンがリリースされるたびに新しいイメージが作られます。実行に必要な最小限だけを含む「slim」イメージも用意され、マルチステージビルドで最終的なコンテナサイズを削減できます。
- Swift Backtrace: Linux 上で Swift プログラムのクラッシュ時にバックトレースを自動表示するためのパッケージです。
- Linux の月次パッチリリース: Swift 4.2.2 以降、Linux 向けにバグ修正を含むパッチリリースが月次で提供されるようになりました。各パッチリリースにはレビューマネージャが付き、約 3 週間のウィンドウ内でパッチをマージしたうえでリリースされます。これにより Linux サーバーでも、より早くバグ修正や改善を受け取れるようになりました。
2020 年に向けたフォーカス領域
今後も主軸はパッケージインデックスへの新規パッケージ追加ですが、それ以外にもサーバー上の Swift とツールの改善を続けたいとしています。記事では、今後注力したい領域として次のようなテーマが挙げられています(いずれも将来の構想であり、実現を約束するものではありません)。
- データベースドライバとストレージクライアント: Postgres・Redis に続き、MongoDB・MySQL・SQLite などのクライアントが検討・提案されています。
- 分散トレーシング: 可観測性(observability)の 3 本柱のうち、ロギング(swift-log)とメトリクス(swift-metrics)はすでに採用済みで、残る「トレーシング」の設計を進めたいとしています。
- コネクションプーリング: 並行処理や性能に関わるコネクションプールの共通的な実装。
- OpenAPI: ロギング・メトリクス・トレーシングと深く統合する共有ライブラリの可能性。
- Linux ディストリビューション: 現在は Ubuntu 向けのツールチェインが中心ですが、他のディストリビューションの公式サポートを増やしたいとしています。
- デプロイガイドとアダプションの可視化: 本番運用に向けたガイドの整備や、サーバーサイド Swift の採用事例の収集・発信。
これらの領域に関心がある人には、Swift Forums の Server セクションへの投稿や、Incubation Process を通じたアイデアの売り込みが呼びかけられています。
参加・利用者への影響
この記事は、サーバーサイドで Swift を使う開発者や、サーバー向けライブラリ・ツールの開発に関わりたい人に向けたものです。Incubation Process の整備により、信頼できるパッケージが公式インデックスとして整理され、SwiftNIO を中心としたエコシステムが形作られてきたことが分かります。
なお、SSWG の前身である Server APIs ワークグループの結成については、Server APIs ワークグループのダイジェストでも紹介しています。SSWG の現在の活動状況は、Swift Server ワークグループのプロジェクトページから確認できます。