# Workers VPC の connect() でプライベートな TCP サービスに直結できるようになったよ！

みんな、しぃちゃんだよ！ 今日は Workers から社内サーバーへの道がまた一本広がる、うれしいアップデートを見つけちゃった。

## なにが発表されたの？

Cloudflare の Changelog からのニュースだよ。[Workers VPC](https://developers.cloudflare.com/workers-vpc/) の VPC Network バインディングが、[connect()](https://developers.cloudflare.com/workers/runtime-apis/tcp-sockets/) の Socket API を使った生の TCP 接続に対応したの！ これまでの `fetch()` による HTTP 通信に加えて、TCP ソケットが開けるようになったってこと。

つなげる先は、Cloudflare Tunnel・Cloudflare Mesh・Cloudflare WAN の on-ramp 経由で届くプライベートサービス。Redis や Memcached、MQTT、独自のバイナリプロトコルみたいな「TCP で直接しゃべる」子たちが対象だよ。

## 今までどうだったの？

これまで VPC Network バインディングは `fetch()` の HTTP 通信が中心だったの。だから HTTP をしゃべってくれるサービスとは仲良くできたけど、Redis や Memcached みたいに素の TCP でやりとりするサービスには、ちょっと手が届きにくかったんだよね。

## これで何が変わるの？

Workers から、プライベートネットワークの奥にいる TCP サービスへ直接ソケットを張れるようになるの！ Redis に `PING` を投げたり、Memcached を叩いたり、MQTT で購読したり…… これまで別の中継役を挟まないとできなかったことが、バインディング1本でスッと書けるようになるんだ。自前のプライベート DB やメッセージキューを Workers から使いたい人には、うれしい一歩だよ。

## 深く潜ってみよう

設定はとってもシンプル。`wrangler.jsonc` に VPC Network のバインディングを書くだけだよ。

```jsonc
{
  "vpc_networks": [
    {
      "binding": "PRIVATE_NETWORK",
      "network_id": "cf1:network",
      "remote": true
    }
  ]
}
```

あとは runtime で、バインディングに対して `connect()` を呼ぶだけ。プライベートな Redis につないで `PING` を送る例はこんな感じ。

```js
const socket = await env.PRIVATE_NETWORK.connect("10.0.1.50:6379");

const writer = socket.writable.getWriter();
await writer.write(new TextEncoder().encode("PING\r\n"));
await writer.close();
```

ひとつだけ注意ね。今のところ VPC Networks 越しの `connect()` は plaintext TCP のみ対応で、TLS はまだなの。もっと詳しく知りたい子は [VPC Networks](https://developers.cloudflare.com/workers-vpc/configuration/vpc-networks/) と [Workers Binding API](https://developers.cloudflare.com/workers-vpc/api/) を見てみてね。

## まとめ

- Workers VPC の VPC Network バインディングが `connect()` による TCP 接続に対応したよ
- Cloudflare Tunnel・Mesh・WAN 経由のプライベートな Redis・Memcached・MQTT などに TCP ソケットを張れる
- 設定は `wrangler.jsonc` にバインディングを足すだけ、runtime は `connect()` を呼ぶだけ
- 今のところ plaintext TCP のみ（TLS 非対応）

プライベートネットワークの TCP サービスを Workers からそのまま使いたいバックエンド勢に、ぴったり刺さるアップデートだね！
