概要
Distrは、シェルスクリプトの分散実行を管理するオープンソースフレームワークです。複数のリモートマシンやコンテナ環境に対して、統一されたインターフェースでスクリプトを配置・実行し、結果を集約できます。インフラ自動化やバッチ処理、CI/CDパイプラインの拡張などで、スケーラブルな運用を実現するために設計されました。
主な機能
- リモート実行管理:SSH・Docker・Kubernetesなど複数のバックエンドに対応し、ローカルで作成したシェルスクリプトを離れたマシン上で実行できます。
- 並列実行と依存関係管理:複数のタスクを並列に実行しながら、先行タスクの完了を待つ依存関係チェーンを宣言的に定義できます。
- 結果集約とログ追跡:分散実行の出力ログを統一フォーマットで収集し、実行結果の一元管理とデバッグを効率化します。
- 環境変数とシークレット管理:スクリプト実行時に動的に環境変数を注入でき、機密情報の安全な取り扱いに対応します。
- 再試行と障害復旧:タイムアウトやネットワークエラーに対する自動リトライ機能と、部分的な失敗から の復旧戦略をサポートします。
- プラグインアーキテクチャ:独自のバックエンド実装やカスタムフィルターを追加できる拡張性により、組織固有の実行環境に対応します。
技術スタック
- 実装言語:Go(コアフレームワーク)
- スクリプト対応:Bash、Sh、Zsh、その他POSIX準拠シェル
- リモート実行バックエンド:SSH(OpenSSH)、Docker API、Kubernetes API
- 通信プロトコル:SSH、HTTPS、gRPC(オプション)
- ログ・メトリクス:JSON形式ロギング、標準出力・標準エラー統合
- 設定形式:YAML、JSON、HCL対応
導入方法
インストール
GitHubリリースページからバイナリをダウンロード:
wget https://github.com/distr-sh/distr/releases/download/v1.0.0/distr-linux-amd64
chmod +x distr-linux-amd64
sudo mv distr-linux-amd64 /usr/local/bin/distr
または、Goがインストール済みの環境では:
go install github.com/distr-sh/distr@latest
基本的な使用例
YAML形式で実行定義を記述:
version: "1"
tasks:
- name: "deploy-web"
script: |
#!/bin/bash
docker pull myapp:latest
docker run -d myapp:latest
targets:
- "server1.example.com"
- "server2.example.com"
backend: "ssh"
timeout: "5m"
retries: 2
- name: "verify-health"
script: |
#!/bin/bash
curl -f http://localhost:8080/health
depends_on:
- "deploy-web"
targets:
- "server1.example.com"
- "server2.example.com"
backend: "ssh"
実行コマンド:
distr run -f deployment.yaml --parallel 4
Docker環境での実行例
version: "1"
tasks:
- name: "db-migration"
script: |
#!/bin/bash
./migrate up
targets:
- "db-container"
backend: "docker"
environment:
DATABASE_URL: "postgres://user:pass@db:5432/myapp"
競合比較
| 項目 | Distr | Ansible | Fabric |
|---|---|---|---|
| 主な用途 | シェルスクリプト分散実行 | インフラストラクチャ自動化 | Python ベース リモート実行 |
| 学習曲線 | 低(シェルスクリプト知識で十分) | 中(YAML + Ansible固有構文) | 低(Pythonスキル必須) |
| バックエンド対応 | SSH・Docker・Kubernetes | SSH・WinRM・Local | SSH主体 |
| 並列実行 | ネイティブ対応(スケーラブル) | インベントリベース | 基本的な並列化のみ |
| 依存関係管理 | 宣言的タスク依存関係 | ロールの依存関係 | 暗黙的・コード依存 |
| シークレット管理 | 環境変数注入対応 | Vault統合 | 別途実装が必要 |
Distrはシェルスクリプトの資産を活かしたい場合に最適です。既存のbashスクリプトをほぼ修正なしに分散実行できるため、マイグレーション負担が小さく、技術スタックの複雑性が増さない点が最大の差別化要因。AnsibleはYAML・モジュール・ロール設計を学ぶ必要があり、学習コストが相対的に高い。Fabricはリモート実行の柔軟性が高いものの、Pythonプロジェクト限定のため、異言語チームや非プログラマーの運用者には敷居が高くなる。
こんな人におすすめ
- インフラエンジニア・SRE:シェルスクリプト資産を活用しつつ、スケーラブルな分散実行を実現でき、運用自動化の段階的な拡張が可能になる。
- DevOpsエンジニア:複数のマシン・コンテナ・Kubernetesクラスタに統一インターフェースでデプロイでき、CI/CDパイプラインの拡張性が向上する。
- 小〜中規模チームの開発チーム:Ansibleなどの重量級ツールより導入が簡単で、既存スクリプトを流用して分散実行を始められる。
- スタートアップやベンチャー企業:新しい自動化フレームワークを学ぶコストを削減でき、既存の運用知識を直接活かせるため、タイムtoバリューが短くなる。
- レガシーシステムの運用者:古いインフラ資産に対してもSSH経由で実行できるため、モダン化を強制せず段階的な自動化が実現できる。