Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Git Upload HelperNew to Visual Studio Code? Get it now.
Git Upload Helper

Git Upload Helper

niii

|
8 installs
| (0) | Free
Git差分をS3やFTPにアップロードするツール
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

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 シークレット
}

🧭 使い方

  1. VSCode 左サイドバー → 「Git Upload」 を開く
  2. 上部の「アップロード環境」セレクトでターゲットを選択
  3. ドライラン実行 → アップロード対象を確認
  4. アップロード実行
  5. 必要に応じて CloudFront キャッシュ削除 ボタンをクリック

出力パネル「Git Upload Helper」で進捗と結果を確認できます。

📌 アップロードモード詳細

Git Diff モード

Working(作業中の変更):
ワークスペースの 未ステージング ファイルと 未追跡ファイル をアップロード対象にします。
git add していない変更や新規ファイルが含まれます。

Staged(ステージング済み): ⭐ v1.2.0 新機能
git add 済みのファイル(ステージングエリアの変更)をアップロード対象にします。


Last Commit(直前のコミット):
HEAD の直前のコミット(親コミット)との差分をアップロード対象にします。

Select Commits(コミット選択): ⭐ v1.2.0 新機能
複数のコミットを選択して、その範囲の変更をまとめてアップロードできます。

  1. 「コミットを選択」ボタンをクリック
  2. コミット一覧が表示されます(最新 50 件)
  3. SHA またはコミットメッセージで検索・絞り込み可能
  4. チェックボックスで対象コミットを選択
  5. 「選択を適用」をクリック

⚠️ 重要(削除 → 追加の優先順位):
同じファイルが選択コミット内で削除 → 追加された場合、追加(新規ファイル)が優先されます。
例:

  • コミット A:ファイル X を削除
  • コミット B:ファイル X を追加
    → アップロード対象:ファイル X は 追加 として扱われます
  1. 「コミットを選択」ボタンをクリック
  2. コミット一覧が表示されます(最新 50 件)
  3. SHA またはコミットメッセージで検索・絞り込み可能
  4. チェックボックスで対象コミットを選択
  5. 「選択を適用」をクリック

⚠️ 重要(削除 → 追加の優先順位):
同じファイルが選択コミット内で削除 → 追加された場合、追加(新規ファイル)が優先されます。
例:

  • コミット 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/**"
]

🌍 多言語対応

このプリケーションは複数の言語をサポートしています。

対応言語

  • 🇯🇵 日本語(デフォルト)
  • 🇪🇳 English

言語の切り替え

パネル内の「言語」セレクトボックスから言語を選択します。
選択した言語は自動的に保存され、次回起動時も適用されます。

カスタム言語の追加

独自の言語ファイルをプロジェクトに追加できます。

手順:

  1. プロジェクトの .vscode/ ディレクトリに git-upload-locales/ フォルダを作成
  2. 言語コード名の JSON ファイルを作成(例:fr.json for フランス語)
  3. 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

このソフトウェアは以下の制限のもとで提供されます:

使用条件:

本ソフトウェアの使用により、以下を同意するものとします:

  • ✅ 使用: 個人的・商用目的での使用は自由
  • ✅ 修正: ローカル環境での改変・カスタマイズは自由
  • ❌ 再配布: 変更されたバージョンの配布は禁止
  • ❌ 改変配布: ソースコードの改変・加工したバージョンの公開・配布は禁止
  • ❌ 再ライセンス: ライセンス条件の変更は禁止

免責事項:

本ソフトウェアの使用によるいかなる損害について、作者は一切の責任を負いません

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft