{"id":45771673,"url":"https://github.com/jingu/ladle","last_synced_at":"2026-06-26T08:01:01.369Z","repository":{"id":340679568,"uuid":"1167103281","full_name":"jingu/ladle","owner":"jingu","description":"CLI tool to edit S3/cloud storage files with your local editor — download, edit, diff, upload","archived":false,"fork":false,"pushed_at":"2026-06-23T03:09:20.000Z","size":194,"stargazers_count":2,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-23T04:22:00.348Z","etag":null,"topics":["aws","cli","cloud-storage","command-line-tool","editor","golang","s3"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jingu.png","metadata":{"files":{"readme":"README.ja.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-26T00:11:52.000Z","updated_at":"2026-04-22T03:36:50.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jingu/ladle","commit_stats":null,"previous_names":["jingu/ladle"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/jingu/ladle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jingu%2Fladle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jingu%2Fladle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jingu%2Fladle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jingu%2Fladle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jingu","download_url":"https://codeload.github.com/jingu/ladle/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jingu%2Fladle/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34808043,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","cli","cloud-storage","command-line-tool","editor","golang","s3"],"created_at":"2026-02-26T06:03:06.059Z","updated_at":"2026-06-26T08:01:01.363Z","avatar_url":"https://github.com/jingu.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"```\n  ██\n  ██\n  ██       _     ____   _      _____\n  ██      / \\   |  _ \\ | |    | ____|\n  ██     / _ \\  | | | || |    |  _|\n  ██    / ___ \\ | |_| || |___ | |___\n ▄██▄  /_/   \\_\\|____/ |_____||_____|\n██████\n ▀████▀\n```\n\n[English](README.md)\n\n**S3 / Google Cloud Storage / Azure Blob Storage 上のファイルをターミナルから直接編集。コマンド一発。**\n\n```bash\nladle s3://mybucket/config.json\nladle gs://mybucket/config.json\nladle az://mycontainer/config.json\n```\n\nダウンロード、エディタで編集、差分確認、アップロード — すべてワンコマンド。\n手動のダウンロード/アップロードも、Webコンソールも、スクリプトも不要。\n\n## なぜ ladle？\n\n- **1コマンドで編集** — `ladle s3://bucket/file` でダウンロード・編集・差分表示・アップロード\n- **メタデータも同様** — `ladle --meta s3://bucket/file` でContentType、CacheControl等をYAMLで編集\n- **好きなターミナルエディタで** — vim, emacs, nano — `EDITOR` 環境変数か `--editor` で指定\n- **安全設計** — アップロード前にカラー差分 + 確認プロンプト\n- **パイプ \u0026 リダイレクト** — シェルパイプラインやスクリプトでも自動検出で動作\n- **ブラウズ \u0026 フィルタ** — vim風 `/` 検索付きインタラクティブTUIブラウザ\n\n## 操作イメージ\n\n### ファイルを編集\n\n```\n$ ladle s3://myapp/config.json\nDownloading s3://myapp/config.json ...\nTemp file: /tmp/ladle-123/config.json\n\n  （エディタが開き、変更して保存・終了）\n\nFile: s3://myapp/config.json\n\n--- original\n+++ modified\n@@ -1,3 +1,3 @@\n {\n-  \"debug\": false,\n+  \"debug\": true,\n   \"port\": 8080\n }\n\nUpload changes? [y/N]: y\nUploading to s3://myapp/config.json ...\nDone.\n```\n\n### メタデータを編集\n\n```\n$ ladle --meta s3://myapp/index.html\nFetching metadata for s3://myapp/index.html ...\n\n  （エディタがYAML形式で開く）\n\n# s3://myapp/index.html\nContentType: text/html\nCacheControl: max-age=3600\nMetadata:\n  author: alice\n\n  （CacheControlを変更して保存・終了）\n\n--- original\n+++ modified\n@@ -2,3 +2,3 @@\n ContentType: text/html\n-CacheControl: max-age=3600\n+CacheControl: max-age=86400\n Metadata:\n\nUpdate metadata? [y/N]: y\nDone.\n```\n\nメタデータの更新にはS3 CopyObject APIを使用 — ファイル本体の再アップロードは不要。\n\n### パイプ \u0026 リダイレクト\n\nladle はシェルリダイレクトを検出し、パイプラインやスクリプトで使用できます — エディタ不要。\n\n```bash\n# ローカルファイルにダウンロード\nladle s3://myapp/config.json \u003e config.json\n\n# ローカルファイルからアップロード（差分表示・確認あり）\nladle s3://myapp/config.json \u003c config.json\n\n# 確認をスキップ\nladle --yes s3://myapp/config.json \u003c config.json\n\n# アップロードせずに差分のみ表示\nladle --dry-run s3://myapp/config.json \u003c config.json\n\n# メタデータをYAMLでエクスポート / インポート\nladle --meta s3://myapp/index.html \u003e meta.yaml\nladle --meta s3://myapp/index.html \u003c meta.yaml\n\n# 変換して再アップロード\nladle s3://myapp/config.json | jq '.debug = true' | ladle --yes s3://myapp/config.json\n\n# オブジェクト/バケットを一覧（1行1URI、ディレクトリは末尾 / 付き）。\n# stdout を非TTY にするためリダイレクトかパイプを使う（端末のままだと TUI ブラウザが開く）。\nladle s3://myapp/config/ \u003e objects.txt   # config/ 配下のオブジェクトとサブディレクトリ\nladle s3:// | grep myapp                  # 全バケットを s3://\u003cbucket\u003e/ として\n\n# オブジェクトのバージョン履歴を一覧（タブ区切り: id, 更新日時, サイズ, latest, delete-marker）\nladle --versions s3://myapp/config.json \u003e versions.tsv\n```\n\nstdout がリダイレクトされている場合、ディレクトリ URI（やスキーマのみ）は一覧を、`--versions` はバージョン履歴を出力します（対話 TUI は開きません）。\n\nstdin がリダイレクトされている場合、確認プロンプトは `/dev/tty` から読み取ります。非インタラクティブ環境では `--yes` を使用してください。オブジェクトが存在しない場合は新規作成されます。\n\n### ファイルをブラウズ\n\n```\n$ ladle s3://myapp/\n\n      ██  _   ___  _    ____\n     ██  /_\\ | _ \\| |  | __|\n  ▄▄██▄ / _ \\| | || |__| _|\n  ██████_/ \\_\\___/|____|____|\n   ▀██▀  v1.0.0\n\n  s3://myapp\n\n\u003e 📁 config/\n  📁 static/\n  📝 index.html              2.1 KB  2026-02-19 02:08\n  📝 readme.md               1.3 KB  2026-02-19 02:08\n  ..\n\n  / index▏\n  ↑/↓ navigate  ←/→ collapse/expand  enter select  - up  / filter  esc×2 quit\n```\n\n- `↑/↓` で移動、`←/→` でディレクトリの展開/折りたたみ\n- `/` でフィルタ — 展開済みツリー全体をインクリメンタル検索\n- `Enter` でファイルを編集、完了後ブラウザに戻る\n- ファイル上で `→` でコンテキストメニューを開く\n- `-` で上のディレクトリへ\n\n#### コンテキストメニュー\n\nファイル上で `→` を押すとコンテキストメニューが表示されます:\n\n```\n  s3://myapp\n\n  📁 config/\n  📁 static/\n\u003e 📝 index.html              2.1 KB  2026-02-19 02:08\n  📝 readme.md               1.3 KB  2026-02-19 02:08\n  ..\n\n  ╭──────────────────╮\n  │ index.html       │\n  │ \u003e Edit           │\n  │   Edit metadata  │\n  │   Download to... │\n  │   Copy to...     │\n  │   Move to...     │\n  │   Versions       │\n  │   Delete         │\n  ╰──────────────────╯\n\n  ↑/↓ navigate  enter select  esc/← close\n```\n\n| 操作 | 説明 |\n|------|------|\n| Edit | エディタでファイルを開く |\n| Edit metadata | ContentType、CacheControl等をYAMLで編集 |\n| Download to... | ローカルディレクトリにダウンロード（タブ補完対応） |\n| Copy to... | 同一バケット内の別キーにコピー |\n| Move to... | 同一バケット内の別キーに移動 |\n| Versions | バージョン履歴を表示し、過去のバージョンに復元（S3 / GCS / Azure Blob バージョニング） |\n| Delete | オブジェクトを削除（確認あり） |\n\n### バージョン履歴\n\nオブジェクトの過去のバージョンを表示・復元できます（バージョニングが有効である必要があります — S3 のバケットバージョニング、GCS のオブジェクトバージョニング、または Azure Blob バージョニング）。\n\n```bash\n# バージョン履歴を直接表示\nladle --versions s3://myapp/config.json\n```\n\n```\n      ██  _   ___  _    ____\n     ██  /_\\ | _ \\| |  | __|\n  ▄▄██▄ / _ \\| | || |__| _|\n  ██████_/ \\_\\___/|____|____|\n   ▀██▀  v1.0.0\n\n  s3://myapp\n\n  ╭──────────────────────────────────────╮  ╭──────────────────────────────────╮\n  │ Versions: config.json                │  │ Preview                          │\n  │ \u003e aB3dE6fG7h1i  2026-02-27 10:30    │  │ {                                │\n  │       812 B  (current)               │  │   \"debug\": true,                 │\n  │   kL9mN0pQ2r3s  2026-02-26 14:15    │  │   \"port\": 8080,                  │\n  │       795 B                          │  │   \"host\": \"0.0.0.0\"              │\n  │   tU4vW5xY6z7a  2026-02-25 09:00    │  │ }                                │\n  │       780 B                          │  │                                  │\n  │                                      │  │                                  │\n  │                                      │  │                                  │\n  │                                      │  │                                  │\n  ╰──────────────────────────────────────╯  ╰──────────────────────────────────╯\n\n  ↑/↓ navigate  enter restore  ctrl-d/u scroll preview  esc back  esc×2 quit\n```\n\nバージョンビューでは左側にバージョン一覧、右側にコンテンツのプレビューが表示されます。`↑/↓` でバージョンを選択、`Ctrl-d/Ctrl-u` でプレビューをスクロール、`Enter` で選択したバージョンに復元できます。\n\nブラウザのコンテキストメニューから **Versions** を選択してアクセスすることもできます。\n\n## インストール\n\n### Homebrew\n\n```bash\nbrew install jingu/tap/ladle\n```\n\n### ソースから\n\n```bash\ngo install github.com/jingu/ladle/cmd/ladle@latest\n```\n\n### GitHub Releasesから\n\n[Releases](https://github.com/jingu/ladle/releases)からお使いのプラットフォーム用バイナリをダウンロードしてください。\n\n## AWSオプション\n\n```bash\nladle --profile production s3://bucket/file.html\nladle --region ap-northeast-1 s3://bucket/file.html\nladle --endpoint-url http://localhost:9000 s3://bucket/file.html   # MinIO\nladle --no-sign-request s3://public-bucket/file.html\n```\n\n## Google Cloud Storage\n\n`gs://` スキームで Google Cloud Storage に対応しています:\n\n```bash\nladle gs://bucket/path/to/file.html\nladle gs://bucket/path/to/                     # ファイルブラウザモード\nladle --project myproject gs://                # バケット一覧\n```\n\n認証情報は [Application Default Credentials (ADC)](https://cloud.google.com/docs/authentication/application-default-credentials) で解決されます:\n\n1. サービスアカウントキーファイルを指す `GOOGLE_APPLICATION_CREDENTIALS`\n2. `gcloud auth application-default login`\n3. GCP 上で実行している場合のアタッチされたサービスアカウント（GCE, Cloud Run, GKE など）\n\n```bash\ngcloud auth application-default login\nladle gs://bucket/file.html\n```\n\nバケット一覧（`ladle gs://`）にはプロジェクトIDが必要で、`--project` または\n`GOOGLE_CLOUD_PROJECT` 環境変数で指定します。公開バケットには `--no-sign-request`、\nfake-gcs-server エミュレータには `--endpoint-url`（または `STORAGE_EMULATOR_HOST`）を使います。\n\n## Azure Blob Storage\n\n`az://` スキームで Azure Blob Storage に対応しています。コンテナがバケットに、Blob がキーに対応します:\n\n```bash\nladle --account myaccount az://container/path/to/file.html\nladle az://container/path/to/file.html        # AZURE_STORAGE_ACCOUNT 設定時\nladle az://                                    # コンテナ一覧\n```\n\nストレージアカウントと認証情報は次の優先順位で解決されます:\n\n1. `AZURE_STORAGE_CONNECTION_STRING` — 接続文字列\n2. アカウント名（`--account` または `AZURE_STORAGE_ACCOUNT`）+ `AZURE_STORAGE_KEY` — 共有キー\n3. アカウント名 + `AZURE_STORAGE_SAS_TOKEN` — SAS トークン\n4. アカウント名 + Azure AD（`DefaultAzureCredential`。例: `az login` や Managed Identity）\n\n```bash\nexport AZURE_STORAGE_ACCOUNT=myaccount\nexport AZURE_STORAGE_KEY=...                  # または\nexport AZURE_STORAGE_CONNECTION_STRING=...    # または Azure AD なら `az login` のみ\nladle az://container/file.html\n```\n\nAzurite エミュレータを使う場合は `--endpoint-url` を指定します。\n\n## フラグ一覧\n\n| フラグ | 短縮 | 説明 |\n|--------|------|------|\n| `--meta` | | ファイル本体ではなくメタデータを編集 |\n| `--versions` | | ファイルのバージョン履歴を表示（S3 / GCS / Azure Blob バージョニング） |\n| `--editor` | | エディタコマンドを指定（環境変数より優先） |\n| `--yes` | `-y` | 確認プロンプトをスキップ |\n| `--dry-run` | | アップロードせずにdiffのみ表示 |\n| `--force` | | バイナリファイルでも強制的に編集 |\n| `--profile` | | AWS named profile |\n| `--region` | | AWSリージョン |\n| `--account` | | Azure ストレージアカウント名（または `AZURE_STORAGE_ACCOUNT`） |\n| `--project` | | バケット一覧用の GCP プロジェクトID（または `GOOGLE_CLOUD_PROJECT`） |\n| `--endpoint-url` | | カスタムエンドポイントURL（MinIO, LocalStack, Azurite, fake-gcs-server等） |\n| `--no-sign-request` | | 署名なしリクエスト |\n| `--install-completion` | | シェル補完スクリプトを生成 (bash\\|zsh\\|fish) |\n\n## エディタの優先順位\n\nladle は以下の優先順位でエディタを選択します:\n\n1. `--editor` フラグ\n2. `LADLE_EDITOR` 環境変数\n3. `EDITOR` 環境変数\n4. `VISUAL` 環境変数\n5. `vi`（フォールバック）\n\n## シェル補完\n\n```bash\n# bash\nladle --install-completion bash \u003e\u003e ~/.bashrc\n\n# zsh\nladle --install-completion zsh \u003e\u003e ~/.zshrc\n\n# fish\nladle --install-completion fish \u003e ~/.config/fish/completions/ladle.fish\n```\n\n## Agent Skill\n\nladle には、AI コーディングエージェントに ladle でのクラウドストレージ操作（読み取り・編集・メタデータ確認）の使い方を教える [Agent Skill](https://docs.claude.com/en/docs/claude-code/skills) が同梱されています。エージェントが非対話で扱えるよう、パイプモードを前提とした内容です。\n\n```bash\n# Claude Code 向けにインストール（ユーザーグローバル: ~/.claude/skills/ladle/SKILL.md）\nladle skill install\n\n# カレントプロジェクトにインストール（.claude/skills/ladle/SKILL.md）\nladle skill install --project\n\n# 既存のインストールを上書き\nladle skill install --force\n\n# スキルを標準出力に表示\nladle skill show\n```\n\n## 今後の予定\n\n- Cloudflare R2 (`r2://`) バックエンド\n- 複数ファイルの一括編集\n- `ladle compare` による2ファイルのリモートdiff\n\n## ライセンス\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjingu%2Fladle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjingu%2Fladle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjingu%2Fladle/lists"}