---
title: "手持ちのアプリを erpc worker import でデプロイする"
description: "erpc worker import はアプリのディレクトリを読んで erpc.toml を書くので、Cargo パッケージも、どの言語の Linux バイナリも、コードを変えずにデプロイできます。"
canonical: "https://erpc.global/ja/doc/erpc-cli/worker-import/"
locale: "ja"
---

# 手持ちのアプリを erpc worker import でデプロイする

`erpc worker import` は、手持ちのアプリをそのまま取り込みます。アプリの `erpc.toml` を書くだけで、コードには一切手を入れません。

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

## 取り込んでデプロイする

取り込めるのは、今 systemd や Docker の下で動いている bot でも、別の言語で書いたサービスでもかまいません。`import` はアプリのディレクトリを読み、そこから分かる内容で `erpc.toml` を書きます。アプリの中にほかのものは書かず、中のものを実行せず、コードも変えません。erpc は、`init` のときと同じように、そのアプリを自分の一覧に加えます。

```bash
cd my-bot                                   # a Cargo package
erpc worker import                          # writes erpc.toml from what is there
erpc worker check                           # what it describes, and what is missing
erpc worker deploy                          # your VPS, or a new hourly one

cd my-go-service && make linux              # any other toolchain: build the Linux binary your way
erpc worker import --binary dist/service --port 8080 --health /healthz
erpc worker deploy
```

- **Cargo パッケージ**は、`init` で作ったアプリと同じく `cargo build --release` でビルドされます。アプリの名前は、`--name` で別の名前を指定しない限りパッケージの名前になり、パッケージに複数のバイナリがあるときは `--bin` で選びます。ワークスペースのルートは受け付けないので、`import` にはパッケージを指定してください。
- **どこで、どの言語でビルドした Linux バイナリでも**、`--binary <PATH>` を付ければ同じようにデプロイでき、そのままの形で送られます。erpc はバイナリのヘッダーを読み、サーバーで動かせないものは受け付けません。macOS や Windows のバイナリ、スクリプト、共有ライブラリ、途中で切れたファイル、`build.target` と違うアーキテクチャのものです。バイナリは静的リンクか、通常の場所にローダーがある glibc とリンクしたものでなければなりません。バイナリはアプリのファイルとして扱われ、その名前でアプリのディレクトリの外へつながるリンクは受け付けません。使えないバイナリがあれば、デプロイはサーバーを購入する前に止まります。変更を載せるデプロイの前には、バイナリをビルドし直してください。

## import が読むもの

| ディレクトリにあるもの | `import` がすること |
| --- | --- |
| `.env.example` などの例のファイル | 設定にできる名前は、それぞれ設定になります。大文字・数字・`_` 以外を含む名前（数字で始まる名前も）と、erpc やサーバーが自分で設定する名前（`ERPC_WORKER_…`、`LD_…`）は外します。普通の値は、例の値のまま `[vars]` に入ります。名前からシークレットに見えるもの、または値に資格情報を含むものは、それを保管するコマンドを示し、値は写しません |
| `.env` | 名前だけを読みます。ポート番号は例外です |
| `PORT`、`API_PORT`、Dockerfile の `EXPOSE` | `--port` で指定しない限り、`run.port` になります。`--health <PATH>` を付けると、そのポートにヘルスチェックを加えます |
| `GRPC_ENDPOINT`、`SHREDS_ENDPOINT` など、データの回線が渡す設定 | `[vars]` から外します。`deploy` に付ける回線のフラグがこれらを設定します |
| `wallet.json`、`id.json`、`*keypair.json` | `erpc worker key import <FILE> --wipe` を示します。このコマンドは、erpc worker が読む場所に鍵を保管し、ファイルを消去します |
| Redis や PostgreSQL を含む compose ファイル | `[services]` に入れ、`deploy` がサーバーに置くようにします |
| `Dockerfile`、compose ファイルそのもの | アプリの実行には使いません。erpc worker は、堅牢化した systemd ユニットの下でバイナリそのものを動かします |

`import --chain` でアプリが対象とするチェーンを指定します。既定は `solana` です。

## import がディレクトリを読む方法

ディレクトリは、ついさっきクローンしたものかもしれません。そのため `import` は注意して読みます。

- **`erpc.toml` は新しく作ります。** その場所に何かがあれば、`import` は止まります。既存のファイルを上書きすることも、リンクを通して書くこともありません。
- **読むのはディレクトリの中の通常のファイルで、1 つ 1 MiB まで。** ディレクトリの外へつながるリンク、パイプ、デバイス、それより大きいファイル、UTF-8 でないファイルは読まず、それぞれ読まなかったことを伝えます。
- **シークレットと見なした値は写しません。** 資格情報は形で探すので、この検査は網であって証明ではありません。知らない形のシークレットは、ほかの値と同じように写されます。`erpc.toml` はコミットする前に自分で読んでください。
- **`erpc worker check` が警告する種類は、`import` が控える種類より少なくなります。** `[vars]` の下にある、パスに鍵を含む RPC の URL や、リカバリーフレーズについては何も言いません。これらは `erpc worker secret put` で保管してください。

## サーバーでアプリが受け取るもの

- **設定は環境変数として届きます。** `[vars]` も `[secrets]` も同じです。サーバーに `.env` はありませんが、dotenv ライブラリで `.env` ファイルを読むアプリもそのまま動きます。
- **アプリ自身のディレクトリは読み取り専用です。** アプリが書くファイルは、`ERPC_WORKER_STATE_DIR` が示すディレクトリ（アプリの `HOME` でもあります）の下に置きます。このディレクトリはデプロイしても残り、`erpc worker backup` がバックアップします。
- **取引用の鍵はファイルではなくパイプで届きます。** アプリの起動時に 1 回だけ、`ERPC_WORKER_KEY_FD` が示すファイルディスクリプタに 64 バイトで届き、公開鍵は `ERPC_WORKER_PUBKEY` に入ります。鍵ファイルを読むアプリは、その読み出し 1 か所を変える必要があります。変え方は pumpfun テンプレートの `src/wallet.rs` にあります。
- **アプリは 1 つのバイナリと、`run.files` に並べたファイルだけでできています。** 実行中に開くほかのものは、すべてその一覧に入れておく必要があります。

## 次のステップ

- [鍵とシークレット](https://erpc.global/ja/doc/erpc-cli/worker-secrets/): `import` が控えた設定と、取引用の鍵を保管します。
- [ファイアウォールと WAF](https://erpc.global/ja/doc/erpc-cli/worker-firewall-and-waf/): アプリに届いてよい相手を選びます。
- [ワーカーのガイド](https://github.com/elsoul/erpc-cli/blob/v0.1.0-rc.4/docs/worker.md): `import` が読むファイルと、探す資格情報の形をすべて載せています。
