# Docs

> Agent Skill: sftp-deployer

- Skill: `junsuzuki1973/docs` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add junsuzuki1973/docs`
- Raw SKILL.md: https://api.skillmd.com/api/skills/junsuzuki1973/docs/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: JunSuzuki1973 (https://skillmd.com/u/junsuzuki1973)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/junsuzuki1973/docs

---

# Agent Skill: sftp-deployer

## 概要
レンタルサーバーへの自動デプロイと管理を行う汎用的なスキルセットです。GUIベースのFTPクライアントと同等の機能をコマンドラインから利用でき、AIエージェントが自動的に操作できます。

## 対応サーバー
- SSH/SFTP接続が可能な任意のサーバー
- パスワード認証またはSSH公開鍵認証に対応
- レンタルサーバー、VPS、クラウドサーバーなど

## トリガー
- ユーザーが「デプロイして」「サーバーにアップして」「ファイルを確認して」などと指示した場合

## 使用可能なツール

### 📤 アップロード・デプロイ
- **sftp_deploy.py** - ファイル/ディレクトリのアップロード
- **sftp_mkdir.py** - リモートディレクトリの作成

### 📥 ダウンロード・バックアップ
- **sftp_download.py** - ファイル/ディレクトリのダウンロード

### 📋 確認・一覧表示
- **sftp_list.py** - ファイル一覧表示（詳細情報付き）

### 🔧 管理・操作
- **sftp_chmod.py** - パーミッション変更
- **sftp_delete.py** - ファイル/ディレクトリの削除

### 🔍 その他
- **find_remote_path.py** - リモートパス探索

## 主要な使用例

### 1. デプロイ（アップロード）

```bash
# デフォルトパスにデプロイ
python sftp_deploy.py my_website

# 特定のパスにデプロイ
python sftp_deploy.py my_website /var/www/html

# テスト実行（Mock モード）
python sftp_deploy.py my_website --mock
```

### 2. ダウンロード（バックアップ）

```bash
# デフォルトパスからダウンロード
python sftp_download.py ./backup

# 特定のファイルをダウンロード
python sftp_download.py /var/www/html/config.php ./config_backup.php

# ディレクトリ全体をバックアップ
python sftp_download.py /var/www/html ./website_backup
```

### 3. ファイル一覧表示

```bash
# シンプルな一覧表示
python sftp_list.py

# 詳細表示（権限、サイズ、日時）
python sftp_list.py -l

# 再帰的に表示
python sftp_list.py -r

# 特定のディレクトリを詳細表示
python sftp_list.py -l /var/www/html
```

### 4. 権限変更

```bash
# ファイルを実行可能に
python sftp_chmod.py /var/www/html/script.sh 755

# ディレクトリの権限変更
python sftp_chmod.py /var/www/html/uploads 777

# 再帰的に権限変更
python sftp_chmod.py /var/www/html 755 -r
```

### 5. ディレクトリ作成

```bash
# 単一ディレクトリ作成
python sftp_mkdir.py /var/www/html/uploads

# ネストしたディレクトリ作成
python sftp_mkdir.py /var/www/html/app/data/cache

# 特定の権限で作成
python sftp_mkdir.py /var/www/html/logs -m 777
```

### 6. 削除

```bash
# デフォルトパスを削除（確認プロンプトあり）
python sftp_delete.py

# 特定のパスを削除
python sftp_delete.py /var/www/html/old_files
```

## 自動パーミッション設定（デプロイ時）

| ファイル/ディレクトリ | パーミッション | 説明 |
|---------------------|--------------|------|
| `.cgi`, `.py`, `.pl`, `.sh` | `755` | CGIスクリプト（実行権限） |
| `data/` ディレクトリ | `707` | データディレクトリ（書き込み権限） |
| その他のファイル | `644` | 標準ファイル |
| その他のディレクトリ | `755` | 標準ディレクトリ |

## AIエージェント向けガイドライン

### ユーザーの指示に応じた適切なツール選択

| ユーザーの指示例 | 使用するツール | 備考 |
|----------------|--------------|------|
| 「デプロイして」「アップロードして」 | sftp_deploy.py | デフォルトパスまたは指定パス |
| 「ファイルを確認して」「何があるか見て」 | sftp_list.py | -l オプションで詳細表示 |
| 「バックアップして」「ダウンロードして」 | sftp_download.py | ローカルに保存 |
| 「実行権限を付けて」「権限を変更して」 | sftp_chmod.py | 適切なモード指定 |
| 「ディレクトリを作って」 | sftp_mkdir.py | 親ディレクトリも自動作成 |
| 「削除して」「クリアして」 | sftp_delete.py | 確認プロンプトあり |

### 推奨ワークフロー

#### デプロイ前
1. `sftp_list.py -l` で現在の状態確認
2. 必要に応じて `sftp_download.py` でバックアップ
3. `sftp_deploy.py` でデプロイ
4. `sftp_list.py` で結果確認

#### トラブルシューティング
1. `sftp_list.py -l` で権限確認
2. `sftp_chmod.py` で権限修正
3. 必要に応じて `sftp_download.py` でログ取得

## 重要な注意事項

### ⚠️ Pythonについて
- **レンタルサーバーではPythonスクリプトは推奨されません**
- `.py` ファイルは実行されず、ダウンロードされる可能性があります
- CGIモードは古く、非効率的です
- **推奨**: HTML、PHP、JavaScriptを使用してください

### ✅ 推奨される技術スタック
- **HTML** - 静的サイト
- **PHP** - サーバーサイド処理（レンタルサーバーで標準サポート）
- **JavaScript** - クライアントサイド処理

### 📁 リモートパスの設定
`.env` の `FTP_REMOTE_ROOT` にデフォルトのデプロイ先を設定できます：

**例（Xserver）**:
```env
FTP_REMOTE_ROOT=./your_domain.com/public_html
```

**例（一般的なレンタルサーバー）**:
```env
FTP_REMOTE_ROOT=./public_html
FTP_REMOTE_ROOT=./www
FTP_REMOTE_ROOT=/var/www/html
```

## セットアップ手順

### 1. 必須ファイル: `.env`
`.env.example` をコピーして `.env` を作成し、サーバー情報を設定：

```env
# サーバー接続情報
FTP_HOST=your_server_host.com
FTP_USER=your_username
FTP_PORT=22

# 認証方式（どちらか一方を設定）
# パスワード認証の場合
FTP_PASS=your_password

# SSH鍵認証の場合
FTP_KEY_FILE=path/to/your_key.key

# その他の設定
FTP_TIMEOUT=30
FTP_REMOTE_ROOT=./public_html
```

### 2. 必須ライブラリのインストール
```bash
pip install -r requirements.txt
```

**requirements.txt の内容**:
- `paramiko` - SFTP接続
- `python-dotenv` - 環境変数管理

### 3. SSH鍵ファイル（鍵認証の場合）
- SSH秘密鍵ファイルをプロジェクトルートに配置
- サーバーの管理画面からダウンロード可能（Xserver、さくらなど）
- `.env` の `FTP_KEY_FILE` にファイル名を指定

## トラブルシューティング

### 接続タイムアウト
- タイムアウト設定は30秒（`.env`の`FTP_TIMEOUT`で変更可能）
- ホストキーは自動的に受け入れられます（`AutoAddPolicy`）
- ファイアウォールやポート設定を確認

### ファイルが表示されない
- デプロイ先パスが正しいか確認
- Webルートディレクトリに `index.html` が存在するか確認
- サーバーのドキュメントルート設定を確認

### 権限エラー
- SSH鍵ファイルのパスが正しいか確認
- `.env` の設定（ホスト、ユーザー名、ポート）を確認
- パスワード認証と鍵認証が混在していないか確認

### ポート番号
- 一般的なSSH/SFTPポート: `22`
- Xserverなど一部のサーバー: `10022`
- サーバーのドキュメントで確認してください

## サーバー別設定例

### Xserver
```env
FTP_HOST=xs123456.xsrv.jp
FTP_USER=xs123456
FTP_PORT=10022
FTP_KEY_FILE=xs123456.key
FTP_REMOTE_ROOT=./your_domain.com/public_html
```

### さくらインターネット
```env
FTP_HOST=your_server.sakura.ne.jp
FTP_USER=your_username
FTP_PORT=22
FTP_PASS=your_password
FTP_REMOTE_ROOT=./www
```

### ロリポップ
```env
FTP_HOST=your_server.lolipop.jp
FTP_USER=your_username
FTP_PORT=22
FTP_PASS=your_password
FTP_REMOTE_ROOT=.
```

### VPS（一般的な設定）
```env
FTP_HOST=123.456.789.012
FTP_USER=root
FTP_PORT=22
FTP_KEY_FILE=server_key.pem
FTP_REMOTE_ROOT=/var/www/html
```

## ツール一覧クイックリファレンス

| ツール | 機能 | 主なオプション |
|--------|------|--------------|
| sftp_deploy.py | アップロード | --mock (テスト実行) |
| sftp_download.py | ダウンロード | - |
| sftp_list.py | 一覧表示 | -l (詳細), -r (再帰) |
| sftp_chmod.py | 権限変更 | -r (再帰) |
| sftp_mkdir.py | ディレクトリ作成 | -m (モード指定) |
| sftp_delete.py | 削除 | (確認プロンプトあり) |

