fastlike について
fastlikeは、Fastly Compute ABIをGoで実装し、コンパイル済みWebAssemblyプログラムをローカルで実行するランタイムです。Computeの機能やリクエストのライフサイクルを示す実行可能なリファレンスとしても利用できます。
主な機能
- 01WebAssemblyプログラムのローカル実行
- 02Fastly Compute ABIの実装
- 03キャッシュ、KV、バックエンドリクエスト対応
- 04リクエストのトレースと性能分析
- 05Computeのリファレンスとなるソースコード
活用シーン
- 01Fastly Computeアプリのローカルデバッグ
- 02Computeのリクエストライフサイクルの調査
- 03バックエンド呼び出しとキャッシュ動作の確認
- 04リクエスト性能トレースの生成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ fastly/ fastly-agent-toolkit --skill fastlikeインストール後、Claude Code で/fastlikeを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/abi.mdbackends.mdbuild.mdconfig.mdprofiling.mdtest.mdunderstanding-compute-from-source.md詳細
トリガーと対象範囲
次の内容に該当する場合に使用します:Fastly Compute、Compute@Edge、Fastly 上の WASM、fastlike、XQD ABI、Compute のリクエストライフサイクル、508 ループ検出、バックエンドのサブリクエスト、ボディのストリーミング、ローカルの Compute アプリのプロファイリング、Go コードへの Fastly Compute ランタイムの埋め込み、または Compute プラットフォームのプリミティブ(キャッシュ、KV ストア、エッジレート制限、ACL、ジオロケーション、シークレットストア、コンフィグストア、ディクショナリ、ロギング、動的バックエンド、リクエストの集約、非同期 I/O)の内部動作に関する質問。
次の場合には使用しないでください:Fastly VCL(falco を使用)、Fastly CLI/API(fastly-cli または fastly を使用)、Viceroy、CDN の比較、WAF、Terraform、API 経由のキャッシュパージ、Fastly のロギング/統計情報の設定。
Fastlike — ローカル Compute ランタイムとリファレンス
Fastlike は、Fastly Compute ABI の Go 実装です。コンパイル済みの WebAssembly プログラムをローカルで実行し、Fastly の本番 Compute プラットフォームが提供する 249 を超えるホスト関数(バックエンド、ディクショナリ、KV ストア、キャッシュ、ジオロケーション、レート制限、ACL、シークレットストアなど)を実装しています。
同じくらい重要なのは、fastlike のソースコードが、Fastly Compute の動作を示す最も包括的なプログラム仕様であるという点です。その ABI 実装は、プラットフォームの各プリミティブ、リクエストライフサイクルの詳細、データ構造を、実行可能なコードとして記述しています。
Fastlike のドキュメント:https://github.com/avidal/fastlike
Compute のリファレンスとしてのソースコード
fastlike のソースコードをローカルで参照できる場合(デフォルト:~/src/fastlike)、特定の Compute に関する質問には、以下のパスを確認してください。
| 質問 | このファイルを確認 | 理由 |
|---|---|---|
| 「リクエストライフサイクルはどのように動作しますか?」 | instance.go、xqd_http_downstream.go | リクエストごとのセットアップ、実行、ダウンストリームの処理 |
| 「X の ABI 関数には何がありますか?」 | xqd_*.go ファイル | 各ファイルが、関連する ABI 関数のグループを実装 |
| 「バックエンドのサブリクエストはどのように動作しますか?」 | xqd_backend.go、backend.go | リクエストの送信、動的バックエンド、タイムアウト |
| 「キャッシュはどのように動作しますか?」 | xqd_cache.go、xqd_http_cache.go、cache.go | キャッシュ操作、Vary、サロゲートキー、リクエストの集約 |
| 「KV ストアはどのように動作しますか?」 | xqd_kv_store.go、kv_store.go | CRUD 操作、ページネーション、世代ベースの並行処理 |
| 「レート制限はどのように動作しますか?」 | xqd_erl.go、erl.go | レートカウンター、ペナルティボックス、しきい値のチェック |
| 「ACL はどのように動作しますか?」 | xqd_acl.go、acl.go | CIDR ベースの IP フィルタリング、最も具体的な一致 |
| 「どのような設定オプションがありますか?」 | options.go | ランタイムのすべての With* 関数オプション |
| 「操作で返されるエラーコードには何がありますか?」 | constants.go | すべての XQD ステータスコードとエラー型 |
| 「プロファイラーはどのように動作しますか/トレースはどのような形式ですか?」 | profile.go、profile_json.go、docs/profiling.md | トレースのデータモデル、JSON ワイヤーフォーマット、ディープモードのメトリクス、エンコーダー |
包括的なガイドについては、understanding-compute-from-source.md を参照してください。
ソースからインストール
Go 1.24 以降が必要です。
# Clone and build
git clone https://github.com/avidal/fastlike.git ~/src/fastlike
cd ~/src/fastlike
make build # Creates bin/fastlike
# Or install to GOPATH/bin
make install
# Or install directly
go install fastlike.dev/cmd/fastlike@latest
クイックスタート
bin/fastlike の例では、ソースからビルドしたものを使用します。
プロジェクトディレクトリから絶対パスを使用するか、インストール済みのバイナリを使用する場合は fastlike を指定してください。
# Minimal: WASM + single backend. The wasm path is positional.
bin/fastlike -backend localhost:8000 app.wasm
フラグは wasm パスの前後どちらにも指定できます。
macOS では、ポート 5000 へのバインドを避けてください。AirTunes/AirPlay Receiver がデフォルトでそのポートをリッスンし、接続を奪ってしまいます。別のポート(例:-bind localhost:8000)を選択するか、システム設定で AirPlay Receiver を無効にしてください。
Fastlike と Viceroy の比較
| 機能 | Fastlike | Viceroy |
|---|---|---|
| 言語 | Go | Rust |
| 地理位置情報 | カスタム JSON ファイル(-geo) | 組み込みのデフォルト値 |
| ホットリロード | SIGHUP(-reload) | 再起動が必要 |
| インストール | go install または make build | cargo install または fastly compute serve |
| ローカルバックエンド | -backend name=host:port | fastly.toml の [local_server.backends] |
Fastlike を使用する場合:Rust 以外の Compute アプリ、カスタム地理データを使用する場合、ホットリロードが必要な場合、デバッグする場合。
Viceroy を使用する場合:cargo-nextest を使う Rust Compute アプリ、Component Model プロジェクト、fastly compute serve を使用する場合。
一般的な設定
名前付きバックエンドを使用する場合:
bin/fastlike \
-backend api=api.example.com:8080 \
-backend cache=redis:6379 \
-backend localhost:8000 \
app.wasm
ホットリロードを有効にした開発モード:
bin/fastlike -backend localhost:8000 -reload -v 2 app.wasm
再起動せずに WASM を再読み込みするには、SIGHUP を送信します。
組み込みプロファイラーを使用する場合:
bin/fastlike -backend localhost:8000 -profile-ui localhost:6060 app.wasm
トレースのインデックスを表示するには、http://localhost:6060/ を開きます。各リクエストは /r/{id}(HTML)または /r/{id}.json(正規のネイティブ JSON。.chrome.json、.firefox.json、.pprof も利用できます)として記録されます。本文のバイト数、キャッシュ結果、ヘッダー、WASM ヒープのメトリクスを追加するには、-profile deep を指定します。ループバック以外で -profile-ui を使用するには、-profile-auth TOKEN(または明示的な -profile-insecure-ui)が必要です。profiling.md を参照してください。
完全な設定:
bin/fastlike \
-bind 0.0.0.0:5000 \
-backend localhost:8000 \
-dictionary config=./config.json \
-kv store=./data.json \
-config-store settings=./settings.json \
-secret-store secrets=./secrets.json \
-acl blocklist=./acl.json \
-logger output=./logs.txt \
-geo ./geodata.json \
-compliance-region us-eu \
-v 2 \
-reload \
app.wasm
必須の引数
| 引数 | 説明 |
|---|---|
<wasm-file> | WebAssembly プログラムへの位置引数のパス(必須) |
-backend VALUE または -b VALUE | バックエンドサーバー(必須、複数回指定可能) |
オプションのフラグ
| フラグ | デフォルト | 説明 |
|---|---|---|
-bind ADDR | localhost:8000 | サーバーのバインドアドレス |
-reload | false | SIGHUP によるホットリロードを有効にします |
-v INT | 0 | 詳細度(0-2) |
-dictionary NAME=FILE or -d | - | JSON から辞書を読み込みます |
-kv NAME[=FILE] | - | KV ストア(空、または JSON から読み込み) |
-config-store NAME=FILE | - | JSON から設定ストアを読み込みます |
-secret-store NAME=FILE | - | JSON からシークレットストアを読み込みます |
-acl NAME=FILE | - | JSON から ACL を読み込みます |
-logger NAME[=FILE] | - | ログエンドポイント(ファイルまたは stdout) |
-geo FILE | - | ジオロケーション JSON ファイル |
-compliance-region REGION | - | コンプライアンス対象地域(none、us-eu、us) |
-profile MODE | trace | off、trace、native、combined、deep。詳細はprofiling.mdを参照してください。 |
-profile-ui ADDR | - | プロファイル UI リスナーを ADDR にバインドします(-bind とは別のソケット)。 |
-profile-auth TOKEN | - | UI リクエストに必要なベアラートークンです。-profile-insecure-ui が設定されていない場合、ループバック以外の -profile-ui では必須です。 |
-profile-insecure-ui | false | -profile-auth なしでループバック以外の -profile-ui を許可します(外部認証の背後でのみ使用してください)。 |
-profile-retain N | 256 | 完了したトレースの LRU サイズです。 |
-profile-backend-cap N | 512 | 記録するバックエンド呼び出し数のリクエストごとの上限です。 |
-profile-async-grace DUR | 100ms | 処理中の非同期バックエンドを待ってから確定するまでの時間です。無効にするには 0 を指定します。 |
-profile-dir PATH | cwd | wasm-symbols-{pid}.json およびプロセスごとのプロファイル成果物を格納するディレクトリです。 |
リファレンス
| トピック | ファイル | 次の場合に参照してください |
|---|---|---|
| ソースから Compute を理解する | understanding-compute-from-source.md | fastlike の実装を読んで、Compute の内部構造を理解する場合 |
| プロファイリング | profiling.md | リクエストごとの hostcall とバックエンドのトレース、詳細なメトリクス、ネイティブ JSON スキーマ、pprof のエクスポートを確認する場合 |
| バックエンド | backends.md | 名前付きバックエンド、キャッチオールバックエンド、マイクロサービスのルーティングを設定する場合 |
| 設定 | config.md | 辞書、KV ストア、シークレット、ACL、位置情報用の JSON 設定ファイルを作成する場合 |
| ビルド | build.md | Fastlike をソースからビルドする、リンターを実行する、make ターゲットを実行する場合 |
| テスト | test.md | Go テスト、Fastly Compute ABI 仕様テストを実行する場合 |
| ABI | abi.md | Fastly Compute ABI の内部構造、新しい ABI 関数の実装、ハンドルシステムについて確認する場合 |