サーバーレス Swift のご紹介 : Andrew Barba 氏が語る Compute での構築
Swift Cloud のエンジニアである Andrew Barba 氏は先日、Fastly の Compute プラットフォーム向けに高いパフォーマンスと豊富な機能を備えた Swift SDK をリリースしました。しかも、わずか4日間で初回リリースを構築したそうです。感銘を受けた私たちは Barba 氏と対談し、彼の目標やプロジェクトの構築プロセスについてお話を伺いました。
Apple のエコシステムに慣れ親しんでいる開発者の皆さんは、Swift について耳にしたことがあるかと思います。Swift は Apple とオープンソースコミュニティによって構築された、iOS、iPadOS、macOS、tvOS、watchOS 向けのプログラミング言語です。
Apple のエコシステムはタブレットやスマートフォンなどのデバイスに関しては規模が大きいですが、Swift コミュニティはサーバー上で Swift を実行する方法を長期にわたって模索してきました。Swift の管理者は WebAssembly にコードをコンパイルするためのサポートを追加するなど、その基礎を形づくってきましたが、コミュニティ内ではあまり多くの活動は見られませんでした。それが今変わろうとしています。
Andrew Barba 氏のインタビューの抜粋をご覧ください。
Swift が優れた選択肢である理由は何ですか?Swift のどのような点を気に入っていますか?
私は iOS 開発者としてこの業界で働き始め、Swift を初期から使用していました。Swift は iOS のエコシステムでよく使用されており、その優れた安全性と高いパフォーマンスに魅力を感じました。その後、キャリアの方向性が変わり、バックエンド開発に携わるようになったため、それほど Swift を使用しなくなり、Node.js で JavaScript を書くことが多くなりました。
Swift でのネイティブアプリケーションの構築に比べると、開発エクスペリエンスが非常に乏しいと感じました。Apple が数年前、サーバーにも Swift の使用を推進し、AWS Lambda などで Swift を実行するためのパブリックパッケージや CI ツールのリリースを始めたときはワクワクしたものです。
なぜ Compute 向けの Swift ランタイムを書こうと考えたのですか?
Swift パッケージを AWS で使用するのに必要なオーバーヘッドが大きすぎたからです。クラウドアーキテクチャや Docker ファイルなどについて、あまりにも多くの知識が必要でした。そこで、iOS 開発者のコミュニティがより簡単にサーバーで Swift を実行できるよう、障壁を減らしたいと考えました。
SwiftWasm チームは、Swift を WebAssembly にコンパイルできるようにするという挑戦において素晴らしい成果をあげています。彼らの取り組みに没頭するうち、突然ひらめきました。ランタイムの仕様全体を実装すれば、コンパイラとプラットフォームの間に邪魔するものが何もなくなると気付いたのです。
なぜ Compute を選んだのですか?
Cloudflare Workers で Swift 統合を構築しようとしましたが、Workers のサイズ要件内でパッケ ージを構築するには、多くの依存関係が必要になることが分かりました。また、アウトバウンド HTTP リクエストやキャッシュレイヤーなどのプラットフォーム機能を活用する方法も明確ではありませんでした。Fastly は Compute のコアシステムのホストコールを公開していて、抽象レイヤーが少なくパッケージもずっと小さいため、Swift と Compute を直接統合することができました。
本質的に、Fastly は多言語をサポートしています。
エッジコンピューティングは現在、多くの興味深い方向に進化しています。開発者はエッジプラットフォームをどのように使用したいと考えているのでしょうか?また、プラットフォームの標準化が進み、ひとつの方向に収束していくでしょうか?
HTTP には標準仕様があるので、現時点で、エッジコンピューティング向けに普遍的な抽象化が定義される可能性はあります。全般的に、開発者はきめ細やかなキャッシュコントロールを求めていると思います。プラットフォームは今後もステートなどにおいて異なる可能性があります。若干違う方法で、誰もが同じものを新たに構築しようとしているのです。
こうしたプラットフォームは複雑で、さまざまなことを行うため、本番環境と同等のセットアップをローカルでテストすることが難しくなりつつあります。このため、トンネルやプレイグラウンドなど、リモートサービスを開発やテストのワークフローの一部として使用できるようにするツールが増えてい ます。Fastly の Fiddle と Viceroy は優れたツールです。「単一ファイルアプリケーション」には、1つの場所ですべてを把握し、迅速にテストやイテレーションができるといった多くのメリットがあります。
エッジではどのような新しいユースケースが生まれるとお考えですか?
エッジコンピューティングでしかできないものがあるかどうかは分かりませんが、画像最適化は気に入っている機能のひとつです。機械学習もエッジコンピューティングにとって大きな機会になると考えています。
エッジネットワークの優れた特徴のひとつにレジリエンスの高さがあります。ステートレスのエッジコンピューティングアプリは容易に作れますが、ステートと一貫性については問題があります。Google の Spanner はそういった意味で興味深いです。
開発の初心者の皆さんにどのようなアドバイスがありますか?また、そのアドバイスは、開発を始めた頃のご自身に伝えたいアドバイスとはどのように異なるでしょうか?
今では命令型の論理から離れ、関数型の宣言的な手法でコードを書くようになり、アプリケーションの動作を理解することに対する精神的な壁が低くなりつつあります。コードについて楽に考えられるようになるものを選ぶことが重要です。最近は強力なツールがあるので、プログラミングについて奥深くまで探る必要はありません。自分のニーズに合う優れたプラットフォームが見つかれば、驚くほど生産性を高めることができます。
Compute で Swift を試してみたい方 (Barba 氏による SDK の微調整へのサポートも歓迎します) は、こちらから、Barba 氏のランタイムに関するリポジトリをご覧ください。Barba 氏に刺激を受け、Compute で独自のビルドプロセスを使用することに興味のある方は、こちらから開始できます。
Fastly は、「開発者による、開発者のための」精神を重要視しています。「開発者による」とは、Fastly のプロダクトを構築している自社チ ームだけを意味するのではありません。Fastly のエコシステムに貢献する、広範な開発者のコミュニティも含まれています。Fastly のユーザーベース全体が、習熟していて慣れ親しんだ言語を使って好きなように構築できる環境の実現を私たちは目指しています。
ご自身の取り組みを Fastly のブログで紹介したい場合や、Barba 氏の Swift SDK を試した経験について共有したい場合は、Fastly 宛てにツイートしてください。