00:00:00皆さん おはようございます
00:00:02本日はご参加いただき ありがとうございます
00:00:03これからお話しする内容に とてもワクワクしています
00:00:06さて この10年間 Vercelで実行されるコードは
00:00:10主に即時的なウェブ・リクエスト用に構築されてきました
00:00:14しかし 現在 顧客が作成している最も興味深いソフトウェアは
00:00:17もはや そのモデルには当てはまりません
00:00:20そして こうした新しいプロジェクトの数は 爆発的に増えています
00:00:23ここ数ヶ月だけでも
00:00:25Vercelでの週間デプロイ数は2倍になりました
00:00:28さらに 新規デプロイの3分の1は コーディング・エージェントによるもので
00:00:31その数は わずか6ヶ月で
00:00:341,000%も増加しています
00:00:35しかし 私にとって最も興味深いのは
00:00:38デプロイの量ではなく デプロイされている「中身」です
00:00:41それらのエージェントが さらにエージェントをデプロイしているのです
00:00:44そして 顧客が構築するエージェントは
00:00:48一度応答して待機するだけではありません
00:00:50推論し ツールを呼び出し 人間を待ち
00:00:53それを何度も繰り返す必要があります
00:00:55そして 各ワークフローには それに追従できるバックエンドが必要です
00:00:58Vercelで見てきた中で
00:01:02今 最も速くリリースしているチームは
00:01:05インフラを再構築したり
00:01:07キューを自分たちでコーディングしたりはしていません
00:01:08リトライ・ロジックを一から書いたり
00:01:11オブザーバビリティを繋ぎ合わせたりもしません
00:01:13そのようなことは すでに解決済みだからです
00:01:15彼らは 我々のインフラ・プリミティブを使用しています
00:01:17我々がこの10年間かけて構築してきたものです
00:01:20それにより 彼らは製品開発に全力を注ぐことができます
00:01:24まさにその問題を解決するために 構築したのが「Workflows」です
00:01:276ヶ月前にベータ版をリリースしましたが
00:01:30その反響は 素晴らしいものでした
00:01:33そして1億回の実行を経て
00:01:36本日 Workflowsの一般提供(GA)を 発表できることを嬉しく思います
00:01:41どのように機能するか お見せしましょう
00:01:43お見せするのは
00:01:44私が自作した バースデーカード・ジェネレーターです
00:01:47まあ どんなアプリでもいいのですが
00:01:49これは先ほど話した要素を すべて備えています
00:01:51単一のリクエストでは完結せず
00:01:54人間の入力を待ち 失敗すればリトライし
00:01:57進行状況をリアルタイムで ユーザーにストリーミングします
00:02:00では 仕組みを説明します
00:02:02自分宛にカードを送ってみましょう
00:02:04まずはメールアドレスを入力します
00:02:05次に 日付を選択します
00:02:094月23日にしましょう
00:02:11誕生日に焚き火をするのが好きなので
00:02:14「オーシャン・ビーチでの焚き火」にします
00:02:17自分宛なので 宛名はPernetにします
00:02:21デモを簡単にするために ここにも自分のメールアドレスを入れます
00:02:24自分の誕生日に 自分で出席確認(RSVP)をするわけです
00:02:27よし 「生成して送信」を押すと
00:02:30バースデーカードの生成が始まります
00:02:34Vercelのダッシュボードに移動すると
00:02:35実行リクエストが届いているのが分かります
00:02:37中を見てみましょう
00:02:39プロンプトが生成され メッセージが作られ
00:02:42画像が生成される様子を
00:02:43リアルタイムで確認できます
00:02:45これが 先ほど話したオブザーバビリティです
00:02:48すべてのステップが ここで可視化されています
00:02:50何が実行中で 何が完了し
00:02:52何が待機中なのかが 一目で分かります
00:02:54ユーザー側を確認すると
00:02:57カードが生成され
00:02:58出席確認のメールが 送信されたことが分かります
00:03:01現時点で ワークフローは中断されています
00:03:04計算処理は実際には行われていません
00:03:07人間の応答を待っている状態です
00:03:09今すぐメールを開いて返信することもできますし
00:03:12数時間後や数日後に返信しても構いません
00:03:15ワークフローは引き続き進捗を追跡します
00:03:18メールを見る前に
00:03:20CLIをお見せしたいと思います
00:03:22Workflowsは 初日からCLIを同梱しており
00:03:25ダッシュボードで見られる情報を
00:03:27すべてCLIでも確認できます
00:03:29つまり 開発者もエージェントも
00:03:32問題が発生した際の デバッグに必要な
00:03:35全体像にアクセスできるということです
00:03:37さて メールを確認しましょう
00:03:40メールが届いているはずです
00:03:43ありましたね
00:03:44出席確認を求めています
00:03:46「はい」を押すと 反映されます
00:03:49ダッシュボードに戻ると フックが再開し
00:03:53スリープ状態に入るはずです
00:03:55ユーザー・ダッシュボードでも同じことが確認できます
00:03:58出席確認の待機は終了し
00:04:00現在は バースデーカードを送るために
00:04:0123日まで待機しています
00:04:032週間もお待たせするわけにはいかないので
00:04:05ダッシュボードに戻って
00:04:06ここからスリープを解除しましょう
00:04:09すると ワークフローが即座に再開され
00:04:12完了する様子が見て取れます
00:04:14ユーザー・ダッシュボードに戻ります
00:04:17ポストカードが送信されました
00:04:18メールの方にも 出席確認を含んだ
00:04:22バースデーカードが届いているはずです
00:04:23いいですね
00:04:24次に コードをお見せします
00:04:26先ほどの話を思い出してください
00:04:29最速で動いているチームは キューの処理や
00:04:32状態、インフラの管理に 時間を割いていません
00:04:34それは古いやり方です
00:04:35Workflowsでは 今日お見せしたすべてが
00:04:38単一の関数になっています
00:04:40そして それはこの「useWorkflow」ディレクティブから始まります
00:04:43この一つの命令により 関数を数日間実行し
00:04:48ステップ間で中断し 中断した箇所から再開できるのです
00:04:52ワークフローが「プロンプト生成」や
00:04:53「画像生成」などのステップを呼び出すと
00:04:56ワークフローは関数を一時停止し
00:04:58バックグラウンドでタスクをキューに入れます
00:05:00失敗した場合は自動でリトライし
00:05:02完了後にワークフローを再開します
00:05:05その間 Vercelのダッシュボードで
00:05:07全ステップの完全なオブザーバビリティが得られます
00:05:11各ステップをクリックして確認もできます
00:05:13デフォルトで Vercel上のデータは暗号化されていますが
00:05:16復号して入力内容を確認してみましょう
00:05:19これはダッシュボードとCLIの両方で利用可能です
00:05:22Workflowsには ストリーミング機能も組み込まれています
00:05:24これを使って 進捗を追跡するために
00:05:29クライアントにリアルタイムで更新をプッシュしました
00:05:31これを実現するために わざわざ
00:05:33データベースを導入する必要はありませんでした
00:05:34クライアントの接続が切れても 再接続すれば問題ありません
00:05:37これは永続的なストリームだからです
00:05:39さて ここがフックの部分です
00:05:42出席確認ごとに 使い捨てのウェブフックURLを
00:05:46その場で作成してメールで送信し
00:05:50あとは下の方で 待機するだけです
00:05:52ワークフローはここで停止し
00:05:56全員がリンクをクリックするまで待ちます
00:05:59データベースは一切関与しておらず
00:06:01結果はローカルのJavaScript変数に保持されます
00:06:05ワークフロー自体が すべての状態を保持しているのです
00:06:08分散システムの複雑な仕組みを
00:06:11意識する必要はもうありません
00:06:12開発者がこうしたことを 考える必要はなくなったのです
00:06:14最後に 誕生日の時まで
00:06:17スリープさせる処理がここです
00:06:18ここにありますね
00:06:19このスリープは数秒でもいいですし
00:06:21数日や 今回のように数週間でも可能です
00:06:24スリープ中 ワークフローは中断され
00:06:27コンピューティング・リソースは一切消費しません
00:06:29再開時には 状態を維持したまま
00:06:33中断した箇所から正確に継続します
00:06:34これで全工程です
00:06:37上から下まで読み進めるだけで
00:06:40エンド・ツー・エンドのロジックを理解できる単一の関数です
00:06:43各ステップはキューによって保護され
00:06:45自動的にリトライされ
00:06:47独自のサーバーレス関数で実行されます
00:06:49タイムアウト制限はないので
00:06:51ワークフローは必要なだけ長く実行できます
00:06:54「Vercelが背後のすべてを処理する」
00:06:56というのはこういう意味です
00:06:59皆さんはロジックを書くだけでいいのです
00:07:02このデモでは 単純なユースケースをお見せしましたが
00:07:07すでに多くのお客様が Workflowsを利用して
00:07:09エージェントを大規模な本番環境で運用しています
00:07:12Mux社は 動画生成パイプラインを
00:07:17毎回確実に実行するために Workflowsを使用しています
00:07:19Flora社は Workflowsによって 50種類の画像生成モデルにわたり
00:07:23並列でクリエイティブ・エージェントを調整しています
00:07:27Durable社は 少人数のチームながら
00:07:30300万もの顧客ウェブサイトをホストしており
00:07:33Workflowsを使って 新しいエージェントを
00:07:35毎日ユーザーに提供しています
00:07:38冒頭で 私はこう言いました
00:07:40顧客が構築する最も興味深いソフトウェアは
00:07:42もはや単一のリクエストには収まらないと
00:07:46そして そのようなアプリがデプロイされるのを
00:07:50毎日 ますます目にしています
00:07:51エージェントがエージェントをデプロイし
00:07:54開発チームはキューのことではなく
00:07:58顧客の課題に集中しています
00:08:01この変化は Vercel内部だけで起きているのではありません
00:08:05顧客のデプロイ数は倍増しており
00:08:07インフラを自前で構築するエンジニアは かつてないほど減っています
00:08:11どのようなアプリやエージェントを構築する場合でも
00:08:16Workflowsは それを信頼性が高く 長期実行可能で
00:08:18永続的で 観測可能なものにします
00:08:22手元のPCから 100万人のユーザーまで
00:08:25すべて同じアプリケーション・コードで対応できます
00:08:27Workflowsは 本日一般公開されました
00:08:31さあ 「確実に動くもの」をリリースしましょう
00:08:37[音声なし]