週刊Cloudflare - 2025/06/29週
こんにちは、あさひです 🙋♂️ 今週の Cloudflare のアップデートをまとめていきます!
この記事の主旨
この記事では、前週に Cloudflare のサービスにどんな変更があったかをざっくりと理解してもらい、サービスに興味を持ってもらうことを目的としています。そのため、変更点を網羅することを優先します。
2025/06/22 ~ 2025/06/28 の変更
Wrangler
4.22.0
マイナーアップデート
-
getPlatformProxy
に assets バインディングサポートを追加
サンプル
{
"name": "my-worker",
"assets": {
"directory": "./public/",
"binding": "ASSETS"
}
}
import { getPlatformProxy } from "wrangler";
const { env, dispose } = await getPlatformProxy();
const text = await (await env.ASSETS.fetch("http://0.0.0.0/file.txt")).text();
console.log(text); // logs the content of file.txt
await dispose();
パッチアップデート
- コンテナでインスタンスタイプ未指定時にデフォルトで
dev
インスタンスタイプを使用 - コンテナのイメージリスト出力形式を簡素化
- tailing 時に正常にデプロイされたもののみを選択
4.21.2
パッチアップデート
-
wrangler containers
のコマンド実行前にコンテナスコープをチェックし、より良いエラーメッセージを表示 - スコープ定義がない場合はチェックをスキップ
- コンテナビルドで既存イメージ検出の方法を強化
- Docker 未検出時にコンテナワーカーのデプロイを早期に失敗させる
4.21.1
-
wrangler version upload
を Python Workers でサポート - Docker デーモン未起動時のエラーメッセージを修正
- コンテナエンジン設定を
miniflare
に正しく渡すよう修正 - コンテナ設定スキーマを更新(
containers.configuration
を非推奨、トップレベルフィールド化、image
を必須化、instances
とdurable_objects
を非推奨、name
をオプション化) - 定義名のないコンテナに合理的なデフォルト名を追加
- 依存関係を更新
miniflare@4.20250617.4
4.21.0
マイナーアップデート
- Python vendored モジュールの出力テーブルを集約
- Python Workers で vendored パッケージの
.so
ファイルを自動バンドルするように修正
パッチアップデート
- dev 起動時のホットキー登録を後方へ移動
- Workers Containers コマンドを Containers API エンドポイントへ移行
- Workers Containers API は Cloudchamber 上に構築されましたが、現在は独自の API に移行
-
wrangler container
コマンドでオープンベータステータスを表示
Workers
Sandboxes 機能が追加
Cloudflare Workers にSandboxes
機能(@cloudflare/sandbox)が導入され、コンテナベースの隔離環境内で以下の操作を安全に実行できるようになりました。現在は実験的機能です
-
コード実行
-
exec(command: string, args: string[], options?)
: 任意のコマンドを実行
-
-
Git 操作
-
gitCheckout(repoUrl: string, options?)
: リポジトリをチェックアウト
-
-
ファイル操作
-
mkdir(path: string, options?)
: ディレクトリ作成 -
writeFile(path: string, content: string, options?)
: ファイル書き込み -
readFile(path: string, options?)
: ファイル読み取り -
deleteFile(path: string, options?)
: ファイル削除 -
renameFile(oldPath: string, newPath: string, options?)
: ファイル名変更 -
moveFile(sourcePath: string, destinationPath: string, options?)
: ファイル移動
-
-
その他
-
ping()
: サンドボックス疎通確認
-
複数の dev コマンドで起動した Workers が相互接続可能に
Cloudflare Vite プラグインにより、別々の dev コマンド(vite dev
や wrangler dev
)で起動した Worker 同士が、サービスバインディングと tail consumer を通じて相互に通信できるようになりました。異なるチームがそれぞれのビルド環境で開発する場合や、Worker ごとにツールチェーンを分けたい場合に便利になっています。
Durable Objects
@cloudflare/actors ライブラリがベータ公開されました
@cloudflare/actors
は Durable Objects 向けの新しい SDK で、リアルタイム・インタラクティブ・マルチプレイヤーアプリケーション構築を強力にサポートします。主な機能は以下の通りです
- 各 Durable Object ごとの組み込み SQLite ストレージをクエリするストレージヘルパー
- SQL スキーマのマイグレーション管理ヘルパー
- 日付指定、秒単位遅延、cron 式によるアラームスケジューリングヘルパー
-
Actor
クラスによる Durable Object パターンの定義 - 必要に応じて Workers Durable Objects API へ直接アクセス
`@cloudflare/actors` サンプル
ストレージおよびアラーム ヘルパー メソッドは、Durable Object を定義する任意の Javascript クラス ( Actor
クラスを含む DurableObject を拡張するクラス) と組み合わせることができます。
import { Storage } from "@cloudflare/actors/storage";
export class ChatRoom extends DurableObject<Env> {
storage: Storage;
constructor(ctx: DurableObjectState, env: Env) {
super(ctx, env);
this.storage = new Storage(ctx.storage);
this.storage.migrations = [
{
idMonotonicInc: 1,
description: "Create users table",
sql: "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY)",
},
];
}
async fetch(request: Request): Promise<Response> {
// Run migrations before executing SQL query
await this.storage.runMigrations();
// Query with SQL template
let userId = new URL(request.url).searchParams.get("userId");
const query = this.storage.sql`SELECT * FROM users WHERE id = ${userId};`;
return new Response(`${JSON.stringify(query)}`);
}
}
@cloudflare/actors
ライブラリは、 Actor
クラスパターンを導入しています。Actor
を使用すると、Durable Object と通信する Worker を記述することなく、Durable Object にアクセスできます(Worker は自動的に生成されます)。デフォルトでは、リクエストは「default」という名前の Durable Object にルーティングされます。
export class MyActor extends Actor<Env> {
async fetch(request: Request): Promise<Response> {
return new Response("Hello, World!");
}
}
export default handler(MyActor);
nameFromRequest
を使用して、 Actor
クラス内の名前でさまざまな Durable Objects にルーティングできます。
export class MyActor extends Actor<Env> {
static nameFromRequest(request: Request): string {
let url = new URL(request.url);
return url.searchParams.get("userId") ?? "foo";
}
async fetch(request: Request): Promise<Response> {
return new Response(
`Actor identifier (Durable Object name): ${this.identifier}`
);
}
}
export default handler(MyActor);
Cloudflare Fundamentals
Cloudflare User Groups と SCIM User Groups が一般提供 (GA) となり、グループ単位でのアクセス管理がより柔軟かつ自動化されるようになりました。これにより、組織内の権限設定が簡素化され、大規模環境でも安定した運用が可能です
- User Groups
- アカウントメンバーのコレクションを作成し、グループ単位でアクセス権を管理可能
- ダッシュボードまたは API で操作可能
- SCIM User Groups
- Okta や Entra ID などの ID プロバイダと同期し、グループ管理を自動化
- 同期されたグループに直接 Permission Policies を適用可能
- 安定性とスケール
- ベータ期間中のテストを経て大規模環境での本番利用をサポート
- レガシー機能の移行
- 既存の SCIM Virtual Groups は 2025 年 12 月 2 日に EOL 予定
- 使用中の場合は SCIM User Groups への移行を推奨
Containers
Cloudflare Containers が、有料プランの全ユーザーを対象にパブリックベータとして公開されました。これにより、開発者は使い慣れたコンテナ技術を利用して、Cloudflare のグローバルなエッジネットワーク上にアプリケーションをデプロイできます。
このサービスは Cloudflare Workers と並行して動作し、両者の長所を組み合わせたハイブリッドなアーキテクチャを実現します。主な用途として、以下のようなものが挙げられます。
- 任意のプログラミング言語で構築されたバックエンドサービス
- メディアファイルのエンコーディングやデータ処理などの重い処理
- 既存のコンテナ化されたアプリケーションの簡単な移行
- バッチ処理や CLI ツールの実行
将来的には、R2 ストレージや Hyperdrive、KV といった他の Cloudflare サービスとの連携がさらに強化される予定なのでより柔軟かつスケーラブルなアプリケーションを、Cloudflare のプラットフォーム上でシンプルに構築できるようになりそうです。
筆者の感想
ちょっと目を話した好きに新しい動画が大量に増えてますね…👀 というか ClaudeCode と GeminiCli の話がすでに投稿されてたりこの辺の速度感はとんでもなく早いですね。気になるものもいくつかあるので自分でも試してみようと思います 🙌
Discussion