Git Upload Helper
v1.3.0 リリース - 2026-01-21
VSCode からワンクリックで SFTP / FTP / S3 へのアップロードと
CloudFront キャッシュ削除 を行える拡張機能。
開発・ステージング・本番環境のファイル転送を自動化します。
EN Overview
Git Upload Helper is a Visual Studio Code extension that automates file uploads to SFTP / FTP / S3 and CloudFront cache invalidation with a single click. Perfect for automating file transfers across development, staging, and production environments.
Key Features
- Auto-detect Git diff / recently modified files
- Multi-commit selection mode - select and aggregate multiple commits
- Staged file mode - upload only git-added files
- Support for SFTP / FTP / S3 targets
- DryRun (simulation mode)
- CloudFront cache invalidation
- Per-target include/exclude rules
- Auto-generate configuration UI
- Real-time operation logs in output panel
- Multi-language support (Japanese, English, and custom languages)
⚠️ 必ず開発環境でテストしてから本番環境で使用してください。本拡張機能で起きた事故は一切責任を負いません。
⚠️ Always test in your development environment before using in production. We assume no responsibility for any accidents that occur with this extension.
🚀 主な機能
- Git 差分 / 最近更新ファイルの自動検出
- マルチコミット選択モード - 複数コミットを選択・集計してアップロード
- Staged(ステージング済み)モード - git add したファイルのみアップロード
- Working / Staged / 最新コミット / コミット選択 の 4 つの差分モード
- SFTP / FTP / S3 全対応
- DryRun(シミュレーション)
- CloudFront キャッシュ削除(ボタン or 自動)
- 接続チェック(SFTP / FTP / S3 の認証確認)
- ターゲットごとの include / exclude ルール
- 設定ファイル自動生成・編集 UI 付き
- 出力パネルでリアルタイム進行ログ確認
- 多言語対応(日本語、英語、カスタム言語)
⚙️ 設定ファイル(.vscode/git-upload.json)
最初は「セットアップ」ボタンで自動生成されます。
以下は SFTP(stage)、FTP(legacyFtp)、S3(prod)の例です。
{
"compactDryRunOutput": true,
"targets": {
"stage": {
"type": "sftp",
"label": "ステージ環境(SFTP)",
"baseRemotePath": "/home/www/html",
"pathRules": [{ "stripPrefix": "www", "remoteSubDir": "" }],
"host": "example.com",
"user": "ec2-user",
"privateKeyPath": "~/.ssh/id_rsa",
"exclude": ["**/node_modules/**", "**/.git/**"],
"cloudFront": {
"distributionId": "XXXXXXXXX",
"paths": ["/*"],
"region": "ap-northeast-1",
"accessKeyId": "AKIAEXAMPLE123",
"secretAccessKey": "XXXXXXXXXXXXXXXXXXXXXX"
}
},
"legacyFtp": {
"type": "ftp",
"label": "レガシー環境(FTP)",
"baseRemotePath": "/public_html/app",
"pathRules": [{ "stripPrefix": "www", "remoteSubDir": "" }],
"host": "ftp.example.com",
"user": "ftp-user",
"password": "ftp-password",
"port": 21,
"ftpSecure": false,
"exclude": ["**/node_modules/**", "**/.git/**"]
},
"prod": {
"type": "s3",
"label": "本番環境(S3)",
"baseRemotePath": "s3://my-bucket-name/www",
"pathRules": [{ "stripPrefix": "www", "remoteSubDir": "" }],
"region": "ap-northeast-1",
"accessKeyId": "AKIAEXAMPLE123",
"secretAccessKey": "XXXXXXXXXXXXXXXXXXXXXX",
"exclude": ["**/node_modules/**", "**/.git/**"],
"cloudFront": {
"distributionId": "XXXXXXXXX",
"paths": ["/*"]
}
}
}
}
設定ファイルのプロパティ詳細
ルートレベル:
| プロパティ |
型 |
説明 |
exclude |
string[] |
グローバル除外パターン(全ターゲット共通) |
compactDryRunOutput |
boolean |
ドライラン出力を 1 行表示にする(デフォルト: true) |
targets |
object |
アップロード先の定義 |
各ターゲットの共通プロパティ:
| プロパティ |
型 |
必須 |
説明 |
type |
"sftp" | "ftp" | "s3" |
○ |
アップロード先の種類 |
label |
string |
|
UI に表示される名前 |
baseRemotePath |
string |
○ |
リモート側のベースパス(SFTP: /path/to/dir, S3: s3://bucket/path) |
pathRules |
object[] |
○ |
ローカルパスをリモートパスに変換するルール |
include |
string[] |
|
インクルードパターン(指定時は他は除外) |
exclude |
string[] |
|
エクスクルードパターン |
pathRules の構造:
"pathRules": [
{
"stripPrefix": "www", // ローカルパスから削除
"remoteSubDir": "" // リモート側のサブディレクトリ
}
]
例:www/html/index.html → stripPrefix: "www" → /html/index.html
SFTP 固有プロパティ:
| プロパティ |
型 |
必須 |
説明 |
host |
string |
○ |
ホスト名/IP |
user |
string |
○ |
ユーザー名 |
port |
number |
|
ポート番号(デフォルト: 22) |
password |
string |
|
パスワード(privateKeyPath がない場合) |
privateKeyPath |
string |
|
秘密鍵のパス(~/.ssh/id_rsa など) |
passphrase |
string |
|
秘密鍵のパスフレーズ |
FTP 固有プロパティ:
| プロパティ |
型 |
必須 |
説明 |
host |
string |
○ |
FTP ホスト名/IP |
user |
string |
○ |
ユーザー名 |
password |
string |
○ |
パスワード(匿名接続を使わない場合も推奨) |
port |
number |
|
ポート番号(デフォルト: 21) |
ftpSecure |
boolean |
|
true で FTPS(explicit)接続を有効化 |
S3 固有プロパティ:
| プロパティ |
型 |
必須 |
説明 |
region |
string |
○ |
AWS リージョン(例: ap-northeast-1) |
accessKeyId |
string |
○ |
AWS アクセスキー |
secretAccessKey |
string |
○ |
AWS シークレットキー |
CloudFront(オプション):
"cloudFront": {
"distributionId": "XXXXXXXXX", // CloudFront ディストリビューション ID
"paths": ["/*"], // 削除対象パター(デフォルト: ["/*"])
"region": "ap-northeast-1", // AWS リージョン(省略時は target の region を使用)
"accessKeyId": "...", // AWS キー(省略時は target の認証情報を使用)
"secretAccessKey": "..." // AWS シークレット
}
🧭 使い方
- VSCode 左サイドバー → 「Git Upload」 を開く
- 上部の「アップロード環境」セレクトでターゲットを選択
- ドライラン実行 → アップロード対象を確認
- アップロード実行
- 必要に応じて CloudFront キャッシュ削除 ボタンをクリック
出力パネル「Git Upload Helper」で進捗と結果を確認できます。
📌 アップロードモード詳細
Git Diff モード
Working(作業中の変更):
ワークスペースの 未ステージング ファイルと 未追跡ファイル をアップロード対象にします。
git add していない変更や新規ファイルが含まれます。
Staged(ステージング済み): ⭐ v1.2.0 新機能
git add 済みのファイル(ステージングエリアの変更)をアップロード対象にします。
Last Commit(直前のコミット):
HEAD の直前のコミット(親コミット)との差分をアップロード対象にします。
Select Commits(コミット選択): ⭐ v1.2.0 新機能
複数のコミットを選択して、その範囲の変更をまとめてアップロードできます。
- 「コミットを選択」ボタンをクリック
- コミット一覧が表示されます(最新 50 件)
- SHA またはコミットメッセージで検索・絞り込み可能
- チェックボックスで対象コミットを選択
- 「選択を適用」をクリック
⚠️ 重要(削除 → 追加の優先順位):
同じファイルが選択コミット内で削除 → 追加された場合、追加(新規ファイル)が優先されます。
例:
- コミット A:ファイル X を削除
- コミット B:ファイル X を追加
→ アップロード対象:ファイル X は 追加 として扱われます
- 「コミットを選択」ボタンをクリック
- コミット一覧が表示されます(最新 50 件)
- SHA またはコミットメッセージで検索・絞り込み可能
- チェックボックスで対象コミットを選択
- 「選択を適用」をクリック
⚠️ 重要(削除 → 追加の優先順位):
同じファイルが選択コミット内で削除 → 追加された場合、追加(新規ファイル)が優先されます。
例:
- コミット A:ファイル X を削除
- コミット B:ファイル X を追加
→ アップロード対象:ファイル X は 追加 として扱われます
Recent Update モード
指定した期間内に変更されたファイル(git 追跡対象)をアップロード対象にします。
期間設定:
- 日: 0 〜 30 日前
- 時間: 0 〜 24 時間前
- 分: 5/15/30/45 分(プリセット)
例:「1 日 + 6 時間 + 30 分」に設定した場合、直近 1 日 6 時間 30 分以内の変更ファイルが対象。
⚙️ exclude / include ルール
ターゲットごとに除外パターンを設定可能です。
"exclude": [
"**/node_modules/**",
"**/.git/**",
"**/*.tmp",
"**/*.bak"
]
include も設定可能です(exclude と併用可)。
"include": [
"www/html/**",
"www/main/css/**"
]
🌍 多言語対応
このプリケーションは複数の言語をサポートしています。
対応言語
言語の切り替え
パネル内の「言語」セレクトボックスから言語を選択します。
選択した言語は自動的に保存され、次回起動時も適用されます。
カスタム言語の追加
独自の言語ファイルをプロジェクトに追加できます。
手順:
- プロジェクトの
.vscode/ ディレクトリに git-upload-locales/ フォルダを作成
- 言語コード名の JSON ファイルを作成(例:
fr.json for フランス語)
- JSON ファイルに言語別メッセージを定義
例(.vscode/git-upload-locales/fr.json):
{
"language": "Langue",
"uploadEnvironment": "Environnement d'upload",
"uploadMode": "Mode d'upload",
"gitDiff": "Git Diff",
"recentUpdate": "Mises à jour récentes",
...
}
利用可能なキーは src/i18n/locales/ja.json を参照してください。
カスタム言語の構造
ユーザーが追加した言語ファイルは以下の場所に配置します:
project-root/
└── .vscode/
└── git-upload-locales/
├── fr.json # フランス語
├── de.json # ドイツ語
└── ...
拡張機能は起動時にこのディレクトリをスキャンし、
利用可能な言語すべてを自動的にドロップダウンに表示します。
☁️ CloudFront 設定
CloudFront 設定があるターゲットのみ
「キャッシュ削除」ボタンが表示されます。
"cloudFront": {
"distributionId": "XXXXXXXX",
"paths": ["/*"],
"region": "ap-northeast-1",
"accessKeyId": "AKIAXXXXXXXXX",
"secretAccessKey": "XXXXXXXXXXXXXXXXXXXXXX"
}
AWS 認証情報はターゲット共通設定を利用可能。
S3 ターゲットの場合は自動的に region / key を流用します。
📜 出力ログ例
ドライラン(標準モード)
=== ドライラン開始: target=stage type=sftp files=3 ===
[DryRun: ステージ環境(SFTP)]
📤 アップロード対象ファイル:
[1/3] www/html/index.html
→ /home/www/html/index.html
[2/3] www/css/style.css
→ /home/www/css/style.css
[3/3] www/js/app.js
→ /home/www/js/app.js
合計: アップロード 3件 + 削除 0件
=== ドライラン完了 ===
ドライラン(compact モード: compactDryRunOutput: true)
=== ドライラン開始: target=stage type=sftp files=3 ===
[DryRun: ステージ環境(SFTP)]
📤 アップロード対象ファイル:
[1/3] www/html/index.html → /home/www/html/index.html
[2/3] www/css/style.css → /home/www/css/style.css
[3/3] www/js/app.js → /home/www/js/app.js
合計: アップロード 3件 + 削除 0件
=== ドライラン完了 ===
本番アップロード(S3)
=== アップロード開始: target=prod type=s3 files=2 deletedFiles=0 ===
[1/2] S3 アップロード: www/html/index.html → s3://my-bucket/html/index.html
Content-Type: text/html
✅ verify OK: s3://my-bucket/html/index.html
size=1234 bytes, remoteTime(JST)=2025-12-17 10:30:00
[2/2] S3 アップロード: www/css/style.css → s3://my-bucket/css/style.css
Content-Type: text/css
✅ verify OK: s3://my-bucket/css/style.css
size=5678 bytes, remoteTime(JST)=2025-12-17 10:30:01
=== アップロード完了 ===
🧾 更新履歴 / Version History
- 1.3.0 (2026-01-21): FTP アップロード対応、compact ドライラン既定化 / FTP targets & compact dry-run default
- 1.2.0 (2025-12-19): マルチコミット選択モード、コミット差分集計 / Multi-commit selection mode with git diff aggregation
- 1.1.0 (2025-12-17): サーバー接続チェック、ドライラン出力改善 / Server connection check, compact dry-run output
- 1.0.0 (2025-12-04): 初回公開 / Initial release
今後のバージョンアップは本セクションに追記していきます。
⚖️ ライセンス
All Rights Reserved © 2025 niii
このソフトウェアは以下の制限のもとで提供されます:
使用条件:
本ソフトウェアの使用により、以下を同意するものとします:
- ✅ 使用: 個人的・商用目的での使用は自由
- ✅ 修正: ローカル環境での改変・カスタマイズは自由
- ❌ 再配布: 変更されたバージョンの配布は禁止
- ❌ 改変配布: ソースコードの改変・加工したバージョンの公開・配布は禁止
- ❌ 再ライセンス: ライセンス条件の変更は禁止
免責事項:
本ソフトウェアの使用によるいかなる損害について、作者は一切の責任を負いません