--- name: ftp-deploy description: ファイルを FTP か FTPS で組み込み機器のフォルダに送り、必要なら権限も変える。ビルドしたプログラムなどを機器に送る(転送・アップロード・デプロイ)とき、FTP で送るための設定を確かめるときに使う。 --- # ftp-deploy 設定の `files` に書いた PC のファイルを、FTP で機器のフォルダに送る。 設定ファイルは `<作業フォルダ>/.ftp-deploy/config.yaml`。各項目の意味は、項目のすぐ上のコメントにある。 設定ファイルがなければ、このスキルのフォルダの `assets/config-template.yaml` を写して作る。 パスワードは、設定ファイルの `password` か、`password_env` に名前を書いた環境変数で渡す。 ## コマンド スクリプトは `uv run` で動かす。 作業フォルダで動かすか、`--workdir "<作業フォルダ>"` を付ける。パスは `"…"` で囲む。 | すること | コマンド | | --- | --- | | ファイルを送る | `uv run --project "<このスキルのフォルダ>" "<このスキルのフォルダ>/scripts/ftp_deploy.py" run` | | 設定を確かめる。機器にログインし、送り先のフォルダの一覧を取る。何も作らない | `uv run --project "<このスキルのフォルダ>" "<このスキルのフォルダ>/scripts/ftp_deploy.py" check` | - 送るのは、設定の `files` に書いたファイルだけ。依頼されたファイルが `files` にないときは、`files` に足すかを利用者に聞いてから送る。 - 大きなファイルを送るときは、コマンドを動かすツールの待ち時間を長くする。 ## 結果 標準出力に JSON を1つ返す。終了コードは、0 が成功、1 がつながらないときや送れないとき、2 が設定や引数の問題。 進み具合と機器の答えは、標準エラー出力に出る。 | 項目 | 中身 | | --- | --- | | `ok` | 成功したら `true` | | `message` | 起きたことと、確かめること。利用者にはこれを伝える | | `problems` | 設定の問題の一覧(終了コード 2 のとき) | | `files` | run:送って置き換えたファイル。`local`(PC)、`remote`(機器)、`size`(バイト数)、`mode`(変えた権限。変えていなければ `null`) | | `remote_dir` | 機器の送り先のフォルダ(check で、まだなければ `null`) | | `notes` | check:送るファイルや送り先のフォルダのうち、まだないもの | | `config` | 設定ファイルの場所 | - 失敗したときも、`files` には、それまでに送って置き換えたファイルが入る。これも利用者に伝える。 - check は、送るファイルや送り先のフォルダがまだなくても成功し、`notes` にそう書く。ビルドの前に確かめてもよい。 送る手順、失敗したときの後始末、check のしかた、FTPS のことは [reference/transfer.md](reference/transfer.md) にある。 ## してはいけないこと - つながらないときや送れないときに、何も変えずに同じコマンドを繰り返さない。`message` を伝えて終える。 - このスクリプトを使わずに(自分で書いたスクリプトや FTP のコマンドで)送らない。送ったあとのサイズの確かめも、失敗したときの後始末もされない。 - 同じ機器に、run を同時に2つ動かさない。 - 利用者に確かめずに、`remote_dir` を機器のシステムのフォルダ(`/bin` など)にしない。同じ名前のファイルは置き換わる。 - パスワードをチャットで聞かない。設定ファイルの中身を見せるときも、パスワードは出さない。 - 依頼されていないのに、設定ファイルを書き換えない。