概要
vet は、curl | bashパターンのリスクを軽減するコマンドラインツール。 リモートスクリプトの 差分確認、 lint解析、 明示的な承認 を経て実行。 Homebrew や手動インストールに対応し、安全性を重視。 Bash 4+ 必須で、セキュリティ重視の設計思想。 貢献方法 やライセンス情報も明記。
vetとは何か
- vet は、curl | bashパターンの 危険性 を解消するためのCLIツール
- リモートスクリプトを 安全にレビュー・実行 するワークフローを提供
- スクリプトの変更点表示、 lint解析、 ユーザー承認 のプロセスを自動化
- 「Don't just run it, vet it.」 がコンセプト
背景:curl | bashパターンの問題点
- curl -sSL https://example.com/install.sh | bash のような ワンライナー実行 は便利だが危険
- 悪意あるスクリプト、 サーバーの侵害、 ネットワークエラー による部分的なスクリプト実行リスク
- 信頼性の担保が困難 であることが課題
vetによる解決策
- Fetch :リモートスクリプトを一時的な場所にダウンロード
- Diff & Review :前回実行時からの 差分表示 による安全確認
- Lint : shellcheck がインストールされていれば自動解析(バグや悪意の検出)
- Confirm : 明示的な承認 なしにはスクリプトを実行しないインタラクティブ設計
- 新しい安全な実行方法 :vet https://example.com/install.sh
インストール方法
- Homebrew(macOS/Linux)推奨
- 公式リポジトリをtap:brew tap vet-run/vet
- インストール:brew install vet-run
- Homebrew内の他ツールとの 競合回避 のため、formula名はvet-run
- 手動インストール(セキュリティ重視)
- スクリプトをダウンロードし、内容を確認後に実行
- 公式ドメイン:curl -o install_vet.sh https://getvet.sh/install.sh
- GitHubリリース:curl -L -o install_vet.sh https://github.com/vet-run/vet/releases/latest/download/install.sh
- lessやエディタで 内容確認 後、bash install_vet.shで実行
- 自動化された安全プロセス の体験
- スクリプトをダウンロードし、内容を確認後に実行
非推奨:curl-to-bashパターン
- curl -sL https://getvet.sh/install.sh | bash のような 直接実行 は推奨しない
- vetで安全性を確保 することが目的
基本的な使い方
- 基本コマンド :vet <URL>
- 実例 :vet https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh
- 引数渡し :vet https://example.com/setup.sh --user myuser --version latest
- 非対話モード (自動化環境向け):vet --force https://my-trusted-internal-script.sh
オプション一覧
- -f, --force: 全てのプロンプトをスキップし即実行 (注意して使用)
- -h, --help: ヘルプメッセージ 表示
プロジェクトの思想・技術的決定
- Bash 4+必須 :安全性・堅牢性・可読性重視のため、POSIX sh互換よりも 最新bash機能 を優先
- Alpine Linux等の最小環境 では、bashの明示的なインストールが必要:apk add --no-cache bash
コントリビューション方法
- バグ報告や新機能提案 はIssueで受付
- Pull Request手順
- リポジトリを Fork
- 新機能ブランチ作成:git checkout -b feature/my-amazing-feature
- 変更を加える
- テスト実行:bats tests/
- コミット:git commit -am 'Add some amazing feature'
- プッシュ:git push origin feature/my-amazing-feature
- Pull Request作成
謝辞・ライセンス
- 貢献者一覧 はContributorsファイルで公開
- MITライセンス で提供、詳細はLICENSEファイル参照