Fastly Compute (旧 Compute@Edge) 国内外の関連記事・情報のメモ書き

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

昨日の投稿では Fastly Compute に関係する公式ブログの記事をまとめましたが、本稿では公式に限らず広く公開されている記事や情報を~~まとめて~~メモ書きしてみます。普通に検索すれば出てくる情報が多くなりますが、Fastly Compute を日々扱ってる観点でお薦めしたい・気になる記事をいくつか紹介できればと思います。

:::note warn
個人的な視点で分類・メモ書きしていきますので分類と内容がかなり偏っていることにご注意ください
:::

## 環境構築・Getting Started
[公式のガイド(英語)](https://developer.fastly.com/learning/tools/cli)がありますが、日本語で書かれている情報では hkakehashi さんがまとめられている以下の記事が分かりやすいです。

https://zenn.dev/hrmsk66/articles/74e2e890726e99

環境構築〜デプロイまでのおおまかな流れや体験については以下の記事も大変参考になります。

- [Fastly Compute@Edge を用いた CDN の構築｜株式会社カウシェ](https://note.com/kauche/n/n1426a3f38b88)
- [Fastly Compute@Edgeについて分かったこと – TravelBook Tech Blog](https://tech.travelbook.co.jp/posts/fastly-compute-at-edge/)
- [Fastly Compute@Edge の勉強 (JS) | blog.ojisan.io](https://blog.ojisan.io/compute-at-edge-study/)

## 各種機能のデモや、実際の実装のノウハウなど

かなり多くの情報が Fastly の [Developer Hub](https://developer.fastly.com/learning/compute/) に眠っているものの、英語だったり必要な情報が分散されていたり、等の理由から一定のとっつきづらさはあります。この部分は今回のアドベントカレンダーで明日以降一連の機能紹介や実装例などは紹介しようと思っているので、この部分は割愛します。

## 最近新しく共有された Compute の技術情報のメモ

先月の [Yamagoya 2023](https://www.fastly.com/jp/press/press-releases/yamagoya-2023) での NIKKEI 玉越さんの[発表資料](https://twitter.com/nikkeideveloper/status/1722521580042068460)。Fastly Compute をログ分析基盤として活用した事例で、スケールアウト性能の不足や運用コストの高さ、データの不整合といった複数の問題を、Fastly Compute (Rust) に移行することでどのように改善を進めていったかの話が技術的な詳細とともに学べます。

https://speakerdeck.com/htamakos/xing-dong-rogushou-ji-api-sabano-fastly-compute-yi-xing-gao-sukerabiritei-gao-xin-lai-xing-gao-mentenansuxing-womu-zhi-site

海外の podcast (Syntax.fm) 。WebAssembly のランタイム周りや WASI / Winter CG , Hono の話など Fastly Compute の特徴を幅広く紹介。英語なのでその点注意は必要ですが、それでも大丈夫な人にはお薦めです。Transcript も一応ありそうです。終盤 41:39〜 あたりの wizer がどう動くか紹介する部分が個人的には面白かったです。Fastly の話し手は Principal engineer の Jake Chmpion 氏。

https://syntax.fm/show/643/supper-club-wasm-fastly-edge-and-polyfill-io-with-jake-champion

## Compute の動作の仕組み理解に役立つ(かもしれない)リンク

英語のソースが多くかつ 2019 年の古い記事なのですが、昨日読み込んでいた Fastly の公式ブログの中でも下記の記事は特に面白く読みました。

https://www.fastly.com/blog/webassembly-memory-management-guide-for-c-rust-programmers

Compute@Edge ではなくその前に開発されている Terrarium というサービス[^1]がどのように動作しているかの原理を解説した記事で、C で書かれたソースコードが Clang/LLVM によって Wasm になり、そこから Cranelift によって IR を経由して ネイティブコードに変換されるまでの流れに分かりやすく[図示されています](https://www.fastly.com/cimages/6pk8mg3yh2ee/7wmSgZCMzC8D99224AyAMG/b0631728db32e5991df6483cbf51f80e/WebAssembly_Memory_Management_Compilation.png?auto=avif)。

この図を中心に WebAssembly 上のメモリ管理や hostcall の呼び出し方法などが具体的に説明されている記事なのですが、現在 Fastly Compute が[利用している](https://bytecodealliance.org/articles/wasmtime-1-0-fast-safe-and-production-ready)ランタイムである Wasmtime はコンパイラとして Cranelift を利用していたり、Compute の SDK は hostcall を利用して各種 Fastly の機能を呼び出しているなど現時点の Compute においても類似した構造が見受けられるので、よりシンプルな昔の構造を読み解くことで現在の構造の解釈にも役立つ部分があるように思いました。

[^1]: Rust 等の言語で書いたソースを WebAssembly に変換して実行できるブラウザベースの環境を提供する 2018 年に[発表された](https://www.fastly.com/blog/looking-to-future-how-edge-innovation-sparked-fastly-labs) Fastly Labs のプロジェクト

## まとめ

当初の予定では本記事は「関連記事・情報のまとめ」というタイトルを予定していましたが、カテゴリ分けしていくうちにまとまりがなくなり、結局方向を修正して「メモ書き」という形で最近印象に残った情報やお薦めしたい情報をメモ書きとして残す形としました。一人アドベントカレンダーは今回初挑戦なのですが、やはり時間制限内で書き終える力がかなり求められますね。。途中で途切れないように継続的に書ける方法を模索していきます。

明日は Fastly Compute 開発の前提となる、アカウントの準備やリソース制限周りの記事を執筆予定です。

## 余談

完全に余談ですが、その昔 WebAssembly を採用する前は Native Client の採用を検討していたのは知らなかったです。これも 2019 年と古い記事ですが、面白く読みました。

https://www.publickey1.jp/blog/19/fastly_ctowebassemblylucet.html