---
title: "erpc worker で最初のアプリをサーバーにデプロイする"
description: "erpc worker で HelloWorld アプリを作り、自分のマシンで動かしてから、ERPC の VPS か自分のサーバーにデプロイします。"
canonical: "https://erpc.global/ja/doc/erpc-cli/worker-quickstart/"
locale: "ja"
---

# erpc worker で最初のアプリをサーバーにデプロイする

`erpc worker` で Rust の小さな HTTP API を作り、自分のマシンで動かして、4 つのコマンドでサーバーにデプロイします。

このページは、プレリリースの ERPC CLI `v0.1.0-rc.4` について説明しています。

`erpc worker`（別名 `erpc w`）は、アプリを Linux ネイティブのバイナリにコンパイルし、ERPC の VPS、新しく開始する時間課金の VPS、または自分のサーバーで動かします。動かすのは堅牢化した systemd ユニットの下で、間に Docker もランタイムも挟みません。

正常に起動しなかったリリースは、1 つ前のリリースにロールバックされます。1 台のサーバーで複数のアプリを、それぞれ自分のポートで動かせます。アプリについての設定はすべて、アプリのルートにある `erpc.toml` に入ります。このファイルはシークレットを含まないので、コミットできます。

## 前提条件

- **ERPC アカウント**。このマシンで `erpc login` でログインしておきます（[ログインと鍵](https://erpc.global/ja/doc/erpc-cli/sign-in-and-keys/)）。
- **ERPC Credit**。新しい時間課金の VPS に要ります。時間課金の商品は、先に購入しておく ERPC Credit から支払われ、残高で足りない開始は受け付けられません。料金は[料金表](https://erpc.global/ja/price/)と [ERPC Web Dashboard](https://dashboard.erpc.global/ja) にあります。
- **SSH の鍵**がこのマシンにあること。`ssh-keygen -t ed25519` で作るか、手持ちの鍵なら `erpc config set ssh_key <path>.pub` で指定します。
- **Linux 向けにビルドする手段**。Mac や Windows からは、サーバー向けの Rust のターゲット（`rustup target add x86_64-unknown-linux-gnu`）、`zig`（macOS では `brew install zig`）、`cargo-zigbuild`（`cargo install cargo-zigbuild --locked`）が要ります。サーバーと同じ種類の Linux マシン（ERPC のサーバーはすべて x86-64）からなら、cargo のほかには何も要りません。クロスビルドのツールがない場合、アプリはこのマシン自身のツールチェーンでビルドされ、そのバイナリはリンクした glibc を必要とします（`build` と `deploy` がその版を示します）。ツールがあれば、glibc 2.31 以降向けにビルドされます。

## HelloWorld をデプロイする

HelloWorld は Rust で書かれた小さな HTTP API で、鍵もシークレットもデータの回線も要りません。`GET /`、`GET /hello/{name}`、`GET /healthz` に応答します。

```bash
erpc worker init --template helloworld   # makes ./hello-world
erpc worker run hello-world              # here: curl http://127.0.0.1:3000/
erpc worker deploy hello-world           # your VPS, or a new hourly one (price asked first)
erpc worker api / --dir hello-world      # {"message":"Hello, World!",…} from the server
```

1. `init` は、`./hello-world` にアプリを `erpc.toml` ごと作ります。
2. `run` はアプリをビルドして自分のマシンで動かすので、先に curl で呼んで確かめられます。
3. `deploy` はサーバー向けにビルドしてデプロイします。お金のかかるものは、1 時間あたりの料金・残高・その残高で持つ時間を先に表示し、ターミナルでは「はい」と答えた後にだけ開始します。
4. `api` は、デプロイしたアプリの API を自分のマシンから呼び出します。API はサーバーのループバックに置いたままです。

`erpc worker check` はアプリに足りないものを一覧にし、足りないものがあれば `deploy` は何かを購入する前に止まります。`erpc worker build` はビルドだけを実行します。サーバーを購入する前に、ビルドが失敗するかどうかを確かめる方法です。

## テンプレートを選ぶ

`erpc worker init` が聞くのは 1 つだけ、何を作るかです。矢印キーで選びます。

- **HelloWorld** は、最初に始めるためのテンプレートです。
- **HFT** と **pumpfun-bot** は、今はどちらも pumpfun テンプレートから作られます。ValidatorsDAO/solana-stream から移植した、pump.fun（PumpSwap）の取引 bot です。

`--template hft`（または `helloworld`、`pumpfun-bot`、テンプレートの ID）を付けると選択画面を飛ばし、`--name` でアプリに名前を付けます。名前がなければ、アプリは選んだものにちなんで名付けられます（`hello-world`、`hft-bot`、`pumpfun-bot`）。同じ名前のディレクトリがあるときは、人が選んでいれば `-2`、`-3` と続く名前になり、スクリプト（`--yes`、`--json`、ターミナルなし）ではエラーになります。聞く相手がおらず `--template` もなければ、HelloWorld が作られます。

取引 bot は、動かす前に鍵といくつかの設定が要ります。その順番は次のとおりです。

```bash
erpc login                             # once per machine: the session in 1Password or the keychain
erpc worker init                       # pick with the arrow keys; makes ./<name> with erpc.toml
cd <name>
erpc worker key new                    # the trading key, in 1Password, the keychain or the keystore; prints the public key to fund
erpc worker secret put API_TOKEN --generate          # the bot's own API token, made for you and shown to nobody
erpc worker secret put ERPC_API_KEY --from-account   # the account's RPC key, read from your account (or SOLANA_RPC_ENDPOINT in [vars])
erpc worker check                      # what erpc.toml describes, and what is missing
erpc worker run --grpc --ip <IPV4>     # build and run here, with an hourly gRPC line letting this machine in
erpc worker run --check --grpc --ip <IPV4>   # the same, stopped once healthy
erpc worker deploy --new-vps --grpc    # a new hourly VPS and gRPC line, prices asked first
```

`init` は、作ったアプリに合わせてこの順番を表示します。鍵とシークレットをどこに置くかは[鍵とシークレット](https://erpc.global/ja/doc/erpc-cli/worker-secrets/)で説明しています。

## サーバーを選ぶ

`deploy` は、次のうち最初に当てはまるものを使います。

1. アプリの `[env.<name>]` にすでに書かれているサーバー
2. `--vps <id>`。アカウントの ERPC の VPS
3. `--new-vps`。このマシンのタイムゾーンから見て最も近いリージョンにある、最も安い時間課金の VPS（`--region` と `--plan` で別のものを選べます）
4. `--host <address>`。自分のサーバー。systemd、nftables、`sudo`、`/usr/bin/python3` の Python 3 がある Ubuntu か Debian で、root か、パスワードなしで sudo できるユーザーで接続できること
5. どれでもなければ、ターミナルではアカウントの稼働中の VPS が一覧で表示され、最後に「新しく開始する」が並びます

自分のサーバーでは、ワーカーのファイアウォールが SSH とアプリのポート以外の受信接続をすべて落とします。ほかのサービスを提供しているサーバーは使わないでください。

## スクリプトやエージェントからデプロイする

スクリプトや、`erpc ai` のようなエージェントには、答えるためのターミナルがありません。2 つのフラグを付ければ、それでも作業を進められます。

```bash
erpc worker deploy hello-world --new-vps --yes                     # no key: all the way, unattended
erpc worker deploy pump-sniper --new-vps --grpc --yes --prepare    # a bot: everything but its key
erpc worker deploy pump-sniper                                     # then you, at a terminal: the key, and the start
```

- **`--yes`** は、コマンドが名指す時間課金の商品（`--new-vps`、`--grpc`、`--shreds`、`--unlimited`）それぞれの料金の確認に答えます。erpc がまだ鍵だけでログインする形にしていないサーバー（新しいサーバーか、`--vps <ID>` で指定したサーバー）への最初のログインにも答えます。このとき erpc はサーバーのパスワードで 1 回だけログインし、自分の鍵を置いて、パスワードでのログインを無効にします。`--yes` もターミナルもなければ、開始は何も購入する前に終了ステータス 3 で断られます。
- **自分のサーバーの中から選ぶには、今も人が要ります。** サーバーは `--new-vps`、`--vps <ID>`、`--host` のどれかで指定してください。
- **`--prepare`** は、取引用の鍵もシークレットも要らない作業をすべて済ませ、何も開始・停止・再起動しません。次にターミナルで `erpc worker deploy` を実行すると、鍵とシークレットを渡してアプリを開始します。取引用の鍵は、ターミナルにいる人のためにだけ読み出されます。

## アプリを gRPC・Shreds・Unlimited RPC につなぐ

ERPC の時間課金の回線は、サーバーをアドレスで受け入れ、トークンを取りません。`deploy` にフラグを 1 つ付けると、そのサーバー向けに回線が 1 つずつ開始し、アプリはそのエンドポイントを設定として受け取ります。

| フラグ | 回線 | アプリが受け取るもの |
| --- | --- | --- |
| `--grpc` | Geyser gRPC | `GRPC_ENDPOINT` |
| `--shreds` | Shreds（Shredstream gRPC） | `SHREDS_ENDPOINT` |
| `--unlimited` | サーバーのリージョンの Unlimited RPC | `SOLANA_SEND_RPC_ENDPOINT` |

- `--grpc-plan`、`--shreds-plan`、`--unlimited-plan` でプランを指定しなければ、各回線はその種類で最も安いプランになります。
- Unlimited RPC は専有のサーバーで動き、用意に最大 45 分かかります。`sendTransaction` と、短い一覧の読み取りメソッドに応答し、`getProgramAccounts` と `getTokenAccountsByOwner` には応答しません。エンドポイントは素の HTTP（TLS なし）で、許可リストに入れたアドレスだけを受け入れます。

### 自分のマシンで動かすときの回線

`erpc worker run` も `--grpc` と `--shreds` を受け付けます。アプリをサーバーに載せる前に、ここで本物のデータを相手に試すためです。

- **アドレス:** 回線が受け入れるのは、このマシンのパブリック IPv4 アドレスで、`--ip` で渡します。erpc が自分で調べることはありません。
- **購入:** 新しい回線を購入するのは、ターミナルで料金を表示した後だけです。`run` には `--yes` がありません。
- **利用終了:** 実行が終わると、時間課金の回線はそれぞれ確認の後に利用を終了します。`--keep-lines` を付けると回線は残り、課金も続きます。ほかの終わり方（ターミナルを閉じた、Ctrl-C を 2 回押した）をした場合、回線は残り、課金されます。
- **数値:** ここでアプリが測る値には、このマシンから回線までの距離が含まれます。そのため、回線の近くのサーバーで動く同じアプリより遅くなります。

## 次のステップ

- [アプリの取り込み](https://erpc.global/ja/doc/erpc-cli/worker-import/): 手持ちのアプリを、言語を問わずデプロイします。
- [鍵とシークレット](https://erpc.global/ja/doc/erpc-cli/worker-secrets/): 取引用の鍵とシークレットを、サーバーのディスクに置かずに扱います。
- [ファイアウォールと WAF](https://erpc.global/ja/doc/erpc-cli/worker-firewall-and-waf/): 公開する API を WAF の後ろに置きます。
- [稼働状況と課金](https://erpc.global/ja/doc/erpc-cli/worker-status-and-billing/): アプリを見守り、1 時間あたりの費用を確かめます。
