Swift標準ライブラリのRegex機能をブラウザから試すための、Swift/Wasm + Vite 構成です。
./.codex/skills/:swiftwasm/Swift-Wasm-Agent-Skillから導入したスキル./.github/workflows/copilot-setup-steps.yml: Copilot Cloud Agent向けのNode.js + Swift Wasm SDKセットアップPackage.swift: JavaScriptKit / BridgeJS を使う SwiftPM 設定Makefile: ネイティブテスト・Wasmビルドsrc/main.tsx: Preact + TypeScript で Swift/Wasm の Regex テスター UI を構成する Vite エントリ
-
Wasm SDKを入れます。
cd <project-directory> version="$(swift --version | sed -n 's/^Swift version \([0-9.]*\).*/\1/p')" tag="swift-${version}-RELEASE" url="https://download.swift.org/swift-${version}-release/wasm-sdk/${tag}/${tag}_wasm.artifactbundle.tar.gz" archive="$(mktemp)" curl -fsSL "$url" -o "$archive" swift sdk install "$archive" rm -f "$archive"
-
表示された SDK ID を確認します。
swift sdk list
-
ネイティブのテストを実行します。
make test -
Vite の依存関係をインストールします。
npm install
-
Wasm 向けにビルドし、Vite が配信する
./public/wasmへ配置します。make build-web SWIFT_SDK_ID="<swift-sdk-id>"このビルドでは、静的配信環境でも読み込めるように WASI shim を CDN URL 参照で出力します。
public/wasmはローカル確認や CI ビルド用の中間生成物で、Git にはコミットしません。 -
Vite 開発サーバーを起動します。
npm run dev
-
http://localhost:5173を開くと、Swift のhello()が返す文字列を確認できます。
main へ push すると GitHub Actions の Deploy Pages Branch が次を実行します。
- Swift WebAssembly SDK をインストール
make testmake build-webpublic/wasm配下の.wasmファイルへwasm-stripとwasm-opt -Oz --all-features --disable-gc --disable-typed-function-referencesを適用npm run build- 生成された
dist/をdeployブランチへ force-push
Cloudflare Pages 側では、ビルド元ブランチを deploy に設定してください。deploy ブランチにはビルド済みの静的ファイルだけが置かれる想定です。
この方式では、Swift/Wasm の生成物を main ブランチへコミットする必要はありません。
pull_request イベントでは Deploy PR Staging Branch が次を実行します。
make testmake build-webnpm run builddist/をstaging/pr-<PR番号>ブランチへ force-push- PR コメントへ staging 情報を追記
Cloudflare API トークンは不要です。Cloudflare Pages は Git 連携で staging/* ブランチを Preview としてデプロイしてください。
- 本番:
deployブランチ - Preview:
staging/*ブランチ
PR を close すると staging/pr-<PR番号> ブランチは自動削除されます。
PR コメントには https://<branch-slug>.swift-regex-tester.pages.dev 形式の Preview URL を表示します。
fork からの PR は GITHUB_TOKEN の制限により staging/* へ push しません。