📘

Fastly Compute SDK の機能と役割 (1) 基本的な仕組み

2023/12/09に公開

この記事は Fastly Compute (旧 Compute@Edge) 一人アドベントカレンダー 8 日目の記事です。

Fastly Compute での開発に欠かせない SDK について少し深掘りして見ていくシリーズ(Fastly Compute SDKの機能と役割)の第一回目です。本稿では言語 SDK の基本的な仕組みについて紹介します。

Language SDK (言語SDK)

公式 Web サイトでは Language SDK (言語 SDK) と呼ばれています。言語毎にそれぞれ以下のパッケージを指します。

基本的な仕組み

前述の言語 SDK のパッケージ(または crate)を含む形で .wasm ファイルをビルドすることで Fastly Compute 上で動作するアプリケーションを開発することができます。言語毎にその実装に少しずつ特徴や差があるものの、基本的には SDK は Fastly の Hostcall を呼び出すための高レベルな API を提供することがその役割です。提供される API としては、HTTP リクエストの送受信のためのクラスや、KVStore や Cache API など各種 Fastly の機能にアクセスするための API などがあります(詳細は明日の記事にて紹介予定)。

これらを実現するためのビルディングブロックとして Fastly の Hostcall が利用されています。この Hostcall の ABI が公開されていることが Fastly の言語 SDK の大きな特徴の一つで、これによって WASI をターゲットにコンパイルができる言語であれば、基本的にはどの言語でも Fastly Compute で動くように言語 SDK を自前で開発することが可能になっています。このようにして開発された SDK を公式 Web サイトでは Unofficial SDK (非公式 SDK) と呼び、Rust, Go や JavaScript の公式 SDK とは区別して呼んでいます。

開発中の注意事項 (SDK と fastly CLI との依存関係について)

言語 SDK はパッケージのことを指します、と冒頭で紹介しましたが、実際の開発フローにおいて注意すべき点として、最新版の言語 SDK を利用したい場合には fastly CLI についても $fastly update コマンドを使ってバージョンを最新にする必要がほとんどであることに注意してください。これは $fastly compute build コマンドが言語毎に異なる処理を行う際に、言語や SDK のバージョンに依存した処理が fastly CLI 側に存在している状況であるためです。(ビルド時に CLI が go のバージョン依存の処理を行っている例

アクティブに開発をしている際にはこまめに $fastly update コマンドを打つ癖をつければ問題ないのですが、久しぶりにビルドをする際などにはバージョンをどのバージョンで開発するかなど、少し気をつけたいポイントとして出てくると思いますので、言語 SDK と fastly CLI のバージョンには緩やかな依存関係があることに注意してください。

まとめ

本稿では言語 SDK の基本的な仕組みについて紹介しました。明日は SDK を通して使える機能と題して、機能概要について紹介していきたいと思います。

Discussion