軽量で使いやすいRust製ファイル転送CLI「Vento」をOSSとして開発しました

に公開

はじめに

こんにちは、@kyotalab です。

現場で長く使われてきたファイル転送ミドルウェア「HULFT」。その思想にインスパイアされつつ、「もっと軽量で、設定ファイル一つで使えるようなツールがOSSにあってもいいのでは?」という発想から、Rust製CLIツール 「Vento」 を開発しました。

この記事では、Ventoのコンセプトと使い方、そして直近リリースされた v0.2.0 の主な特徴について紹介します。


Ventoとは?

Ventoとは

Vento は、以下をコンセプトにしたシンプルなファイル転送CLIツールです:

  • 軽量・高速(Rust製)
  • YAML形式で設定可能
  • CLI一発でSFTP/SCP転送が実行可能
  • 転送前後やエラー時のコマンドも指定できる
  • OSSとして開発・配布(GitHub + Homebrew)
vento transfer --profile-id my-sftp-upload

ローカルに profiles.yaml を用意すれば、SFTPやSCPでの定型的なファイル転送を自動化できます。


なぜ作ったのか?(モチベーション)

業務システムやデータ連携の現場では、単純なファイル転送が意外と複雑になりがちです。

  • 手書きの scpsftp コマンドがあちこちに
  • バッチでジョブ前後に転送・通知処理をしている
  • HULFTなどの商用ミドルウェアが使われているが重い

こうした「HULFTほど重厚ではないが、信頼性のある転送処理」をYAML一枚とCLIで完結させたいというのが、Ventoの出発点でした。

OSSでありつつ、現場にフィットする構成を目指しています。


機能一覧(2024年6月現在)

✅ SFTP / SCP対応

  • プロファイルで protocol: "SCP" or "SFTP" を指定するだけで切り替え可能
  • 秘密鍵認証・ssh_config 経由の接続に対応

✅ 転送前後・エラー時のコマンド実行

  • 任意のShellコマンドを設定可能
  • 例:圧縮・リネーム・Slack通知など

✅ 転送ファイルサイズの上限バリデーション

  • config.toml またはプロファイル単位で max_file_size_mb を指定可能
  • 最大2GBまで(それ以上は起動時にエラー)

✅ 軽量な設定ファイル

  • YAML形式で複数プロファイルを管理
  • cron等の外部スケジューラーとも連携しやすい

使用例(YAML)

- profileId: "daily-scp-upload"
  description: "日次レポートをSCPで転送"

  source:
    type: "local"
    path: "./report.csv"

  destination:
    type: "scp"
    path: "/home/user/report.csv"
    host: "example.com"
    port: 22
    authentication:
      method: "ssh_config"
      sshConfigAlias: "myhost"
      username: "user"

  transferProtocol:
    protocol: "SCP"

  preTransferCommand: "echo 'Start SCP'"
  postTransferCommand: "echo 'Done SCP'"
  onErrorCommand: "echo 'SCP Error'"

導入方法

Homebrew に対応しています。

brew tap kyotalab/vento
brew install vento

GitHub Releasesにはバイナリも置いています。macOS / Linux / Windowsに対応予定です。


今後の展望

  • 📅 スケジューリング(cron形式)の導入
  • 🧭 Web UI or TUIによるプロファイル操作
  • 📂 転送ログ・メトリクスの永続化
  • 🚀 並列転送・依存関係管理などの拡張

最後に

Ventoは、日々のファイル転送をもっと気軽に、安全に、わかりやすくするためのCLIツールです。

まだ若いプロダクトですが、**「軽いHULFTのようなOSSツールが欲しかった」**という方にはきっと刺さると思っています。

ご意見・フィードバック・GitHub Starなど大歓迎です!

👉 GitHubはこちら


📝 ZennやQiitaでの今後の開発ログも継続予定です。
引き続きよろしくお願いします!

Discussion