Vento は、シンプルで高速なファイル転送とジョブ連携を目的としたコマンドラインツールです。設定ファイル(YAML)一つで転送プロファイルを定義し、ローカルファイルシステムと SFTP サーバー間でのファイル転送を自動化できます。転送前後の処理や、異常時のジョブ実行にも対応しており、バッチ処理におけるファイル連携の自動化に貢献します。
- 転送プロファイルの定義: YAML 形式の設定ファイル
profiles.yaml
で転送元、転送先、プロトコルなどを柔軟に設定できます。 - SFTP 転送: ローカルファイルシステムと SFTP サーバー間でのファイルのアップロード・ダウンロードに対応しています。公開鍵認証をサポートします。
- ジョブ連携:
- 転送前ジョブ: ファイル転送の前に任意のコマンドを実行できます。
- 転送後ジョブ: ファイル転送が成功した後に任意のコマンドを実行できます。
- 異常時ジョブ: ファイル転送が失敗した場合に任意のコマンドを実行できます。
- 基本的なロギング: 実行状況をコンソールまたはファイルに出力し、デバッグや運用をサポートします。
Vento は、以下の方法でインストールできます。
最も手軽な方法です。Rust 環境のセットアップは不要です。
- Vento GitHub Releases ページ にアクセスします。
- ご使用の OS およびアーキテクチャに対応するバイナリをダウンロードします (例:
vento-x86_64-apple-darwin.tar.gz
for macOS,vento-x86_64-unknown-linux-gnu.tar.gz
for Linux,vento-x86_64-pc-windows-msvc.zip
for Windows)。 - ダウンロードしたファイルを解凍し、実行ファイル (
vento
またはvento.exe
) をパスが通っているディレクトリ (例:/usr/local/bin
や Windows のC:\Windows
) に配置します。
Homebrew がインストールされている場合、以下のコマンドで Vento をインストールできます。
# Vento の Homebrew Tap を追加
brew tap kyotalab/vento
# Vento をインストール
brew install vento
Rust の開発環境が既にセットアップされている場合、ソースコードからビルドできます。
- Vento リポジトリをクローンします。
git clone https://github.com/kyotalab/vento.git
cd vento
- プロジェクトをビルドします。
cargo build --release
- 実行ファイルは target/release/vento (Windows の場合は target/release/vento.exe) に生成されます。必要に応じてパスが通っているディレクトリに配置してください。
- 設定ファイルの準備
Vento は YAML 形式の設定ファイル
config.yaml
とprofiles.yaml
を使用します。
config.yaml
(アプリケーション全体の設定)
デフォルトでは、ユーザーのホームディレクトリ配下の設定ディレクトリ (macOS/Linux: ~/.config/vento/config.yaml
, Windows: %APPDATA%\vento\config.yaml
) から読み込まれます。--config
オプションで任意のパスを指定することも可能です。
# ~/.config/vento/config.yaml (または --config で指定したパス)
defaultProfileFile: "/path/to/your/profiles.yaml" # 転送プロファイル定義ファイルへのパス
logLevel: "info" # ログレベル: trace, debug, info, warn, error (デフォルト: info)
logFile: "/var/log/vento.log" # ログ出力先ファイル (省略時は標準出力のみ)
logStdout: false # ログをファイルにのみ出力 (デフォルト: true(ファイルと標準出力))
profiles.yaml
(転送プロファイルの定義)
config.yaml で指定した defaultProfileFile のパスに配置します。
# /path/to/your/profiles.yaml
transferProfiles:
- profileId: "daily-report-sftp"
description: "日次レポートをSFTPサーバーにアップロードするプロファイル"
source:
type: "local" # or sttp
path: "/Users/youruser/reports/daily_report.csv"
trigger:
type: "manual"
# schedule: "0 0 * * * *"
destination:
type: "sftp" # or local
host: "sftp.example.com"
port: 22
path: "/incoming/reports/daily_report.csv"
authentication:
method: "env_key" # or password, private_key, ssh_config
username: "sftpuser"
envKeyRef: "SFTP_PRIVATE_KEY_PATH" # 環境変数名。ここに秘密鍵のパスを設定
# passwordRef: "SFTP_PASSWORD"
# privateKeyRef: "SFTP_PRIVATE_KEY_PATH"
# sshConfigAlias: "my_sftp_server_alias"
transferProtocol:
protocol: "SFTP"
preTransferCommand: "echo '転送を開始します...' && ls -l /Users/youruser/reports/"
postTransferCommand: "echo '転送が完了しました!' && mv /Users/youruser/reports/daily_report.csv /Users/youruser/reports/daily_report.csv.bak"
onErrorCommand: "echo 'エラーが発生しました。管理者に連絡してください。' >> /tmp/vento_error.log"
- profileId: "download-archive-sftp"
description: "SFTPサーバーからアーカイブをダウンロードするプロファイル"
source:
type: "sftp"
path: "/outgoing/archive.zip"
trigger:
type: "manual" # or schedule
# schedule: "0 0 * * * *"
host: "sftp.example.com"
port: 22
authentication:
method: "password"
username: "sftpuser"
passwordRef: "SFTP_PASSWORD" # 環境変数名。ここにパスワードを設定
destination:
type: "local"
path: "/Users/youruser/downloads/received_archive.zip"
transferProtocol:
protocol: "SFTP"
trigger.type: schedule
) に関する注意点
trigger.type: schedule
を設定した場合、Vento は schedule
フィールドに指定された Cron 式の妥当性を検証しますが、Vento 自身がその Cron 式を解釈して定期的にプロセスを起動する機能は持っていません。
この schedule
定義は、あくまで「このファイル転送プロファイルは、外部のスケジューラ(例: OS の cron
、systemd timer
、Windows タスクスケジューラ、Kubernetes の CronJob など)によって定期的に実行されることを意図している」というメタデータとして機能します。
Vento のプロセスを定期実行する場合は、お使いの環境に応じた外部のスケジューリングツールをご利用いただき、Vento コマンド (vento transfer --profile-id <your-profile-id>
) を呼び出すように設定してください。
preTransferCommand
, postTransferCommand
, onErrorCommand
に記述するコマンド文字列は、Vento が実行される OS のシェルに互換性がある必要があります。
- Linux / macOS:
sh -c "あなたのコマンド"
の形式で実行されます。Unix シェル(ls
,mv
,echo
,&&
など)の構文が利用可能です。 Windows:cmd.exe /C "あなたのコマンド
" の形式で実行されます。Windows コマンドプロンプト(dir
,move
,echo
,&&
など)の構文が利用可能です。 異なる OS で同じプロファイルIDを使用する場合は、それぞれの OS で動作するコマンドを記述するか、OS ごとに異なる profileId を用意することを検討してください。
- 環境変数の設定
認証情報に
privateKeyRef
やpasswordRef
を使用する場合、対応する環境変数を設定してください。
# macOS / Linux
export SFTP_PRIVATE_KEY_PATH="/Users/youruser/.ssh/id_rsa_sftp"
export SFTP_PASSWORD="your_sftp_password"
# Windows (コマンドプロンプト)
set SFTP_PRIVATE_KEY_PATH="C:\Users\youruser\.ssh\id_rsa_sftp"
set SFTP_PASSWORD="your_sftp_password"
- 転送の実行 定義したプロファイル ID を指定して転送を実行します。
vento transfer --profile-id daily-report-sftp
その他のコマンドラインオプション
vento --help
# Usage: vento <COMMAND>
# Commands:
# transfer Transfer by profile in config.yaml
# help Print this message or the help of the given subcommand(s)
# Options:
# -c, --config <CONFIG> Override the default config file path
# -h, --help Print help
# -V, --version Print version
vento transfer --help
# Usage: vento transfer [OPTIONS]
# Options:
# -p, --profile-id <PROFILE_ID>
# -h, --help Print help
Vento は config.yaml
の logLevel
設定に基づき、実行ログを出力します。
logLevel
:trace
,debug
,info
,warn
,error
のいずれかを設定できます。logFile
: 指定した場合、ログは標準出力だけでなく、指定されたファイルにも出力されます。
ファイル転送中にエラーが発生した場合、onErrorCommand
で定義されたコマンドが実行されます。これにより、エラー通知やリカバリ処理などの自動化が可能です。
Vento はまだ初期段階のプロジェクトですが、将来的には以下の機能拡張を検討しています。
- SCP, HTTP/HTTPS などの転送プロトコル対応
- 転送スケジュールの詳細な設定(CRON形式のサポートなど)
- より高度なエラーリカバリ機能
- プラグイン機構の導入
Vento の開発にご興味をお持ちいただきありがとうございます。バグ報告、機能リクエスト、コードの改善提案など、どのような形でも貢献を歓迎します。 ライセンス Vento は MIT License の下で公開されています。