Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,8 @@ The master password lookup order is: **macOS Keychain → `MYSH_MASTER_PASSWORD`
- [Sharing Connections](docs/sharing-connections.md) — export/import configurations for team onboarding
- [Import Guide](docs/import-guide.md) — migrate from DBeaver, Sequel Ace, MySQL Workbench

Japanese translations are available under [`docs/ja/`](docs/ja/)(日本語ドキュメントは [`docs/ja/`](docs/ja/) を参照).

## Dependencies

- `golang.org/x/crypto` - Argon2id key derivation
Expand Down
File renamed without changes.
File renamed without changes.
185 changes: 185 additions & 0 deletions docs/ja/redash-guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
# Redash連携ガイド

Redash経由で本番データベースにクエリを投げる方法です。DB認証情報やSSHトンネルは不要で、出力マスキングも自動で適用されます。

## 概要

```
あなた / Claude Code → mysh → Redash API → データベース
マスキング適用
安全な結果
```

myshがSQLをRedashに送信し、結果を受け取ってマスキングルールを適用し、サニタイズされた出力を返します。個人情報がAIアシスタントに届くことはありません。

## セットアップ

### 1. Redash APIキーを取得する

1. Redashにログイン
2. プロフィールアイコン → **Settings**
3. **API Key** をコピー

### 2. データソースIDを確認する

エンジニアに聞くか、Redashで以下を確認します。

1. **Settings** → **Data Sources**
2. 使いたいデータソースをクリック
3. URLの末尾がID: `https://redash.example.com/data_sources/3` → IDは `3`

### 3. 接続を追加する

```bash
mysh add --name prod \
--redash-url https://redash.example.com \
--redash-key YOUR_API_KEY \
--redash-datasource 3
```

対話で以下が聞かれます。

- **Environment**: 自動マスキングを有効にするため `production` を選択
- **Mask columns**: そのままEnterでデフォルト(`email,phone,*password*,*secret*,*token*,*address*`)

### 4. 動作確認

```bash
mysh ping prod
# Connection "prod" (Redash): OK (85ms)
```

## 使い方

### クエリを実行する

```bash
# インラインSQL
mysh run prod -e "SELECT * FROM users LIMIT 5"

# SQLファイルから実行
mysh run prod query.sql
```

### 出力フォーマット

```bash
# CSV
mysh run prod -e "SELECT * FROM users" --format csv

# JSON
mysh run prod -e "SELECT * FROM users" --format json

# Markdownテーブル
mysh run prod -e "SELECT * FROM users" --format markdown

# ファイルへ保存
mysh run prod -e "SELECT * FROM users" --format csv -o users.csv
```

### Claude Codeと使う

やりたいことを自然言語で書くだけです。

> 「アクティブなサブスクリプションをプラン別に集計して」

Claude CodeがSQLを自動生成し、mysh経由で実行してくれます。

## マスキング

直接接続の場合と同じ挙動です。マスクルールに一致したカラムは自動で伏せ字になります。

| 種別 | 元の値 | マスク後 |
|------|--------|----------|
| メール | alice@example.com | a\*\*\*@example.com |
| 電話番号 | 090-1234-5678 | 0\*\*\* |
| 氏名 | Alice | A\*\*\* |

production接続では、端末から実行しようとスクリプトから実行しようとAIアシスタントから実行しようと、常にマスキングが適用されます。

## ノンインタラクティブセットアップ

スクリプトや自動化(新メンバーのプロビジョニング等)向けに、対話を飛ばせます。

```bash
export MYSH_MASTER_PASSWORD="the-master-password"

mysh add --name prod \
--redash-url https://redash.example.com \
--redash-key "$REDASH_API_KEY" \
--redash-datasource 3 \
--env production \
--mask "email,phone,*password*,*secret*,*token*,*address*"
```

## 複数データソース

用途別に複数のRedash接続を登録できます。

```bash
mysh add --name analytics \
--redash-url https://redash.example.com \
--redash-key YOUR_KEY \
--redash-datasource 5 \
--env production \
--mask "email,phone"

mysh add --name logs \
--redash-url https://redash.example.com \
--redash-key YOUR_KEY \
--redash-datasource 8 \
--env staging
```

```bash
mysh run analytics -e "SELECT count(*) FROM events WHERE date = CURDATE()"
mysh run logs -e "SELECT * FROM access_logs LIMIT 10"
```

## 接続設定の共有

エンジニアはRedash接続をチームに配布できます。

```bash
# エクスポート(APIキーは除外される)
mysh export prod > prod-redash.yaml

# 受け取り側は自分のAPIキーを入れてインポート
mysh import --from yaml --file prod-redash.yaml
```

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

### `redash API returned HTTP 403`

- APIキーが無効・期限切れ、または該当データソースへの権限がない
- Redashのプロフィール設定から新しいAPIキーを発行する

### `redash API returned HTTP 400`

- SQLのシンタックスエラー
- データソースIDが間違っている

### `redash API request failed: connection refused`

- Redash URLを確認
- 社内VPN接続が必要な場合もある

### `redash query failed: ...`

- Redashはクエリを実行したが失敗している(テーブルが存在しない、権限不足など)
- エラーメッセージで詳細を確認

### クエリに時間がかかる

- Redash側にクエリタイムアウト(通常5分)がある
- myshはRedashのジョブ完了を500msごとにポーリングしながら待機
- 大きなクエリには `LIMIT` を付けることを検討

### マスクしたいカラムがマスクされない

- `mysh edit prod` でマスク設定を確認
- カラム名は大文字小文字を区別せず比較される
- パターンはワイルドカードをサポート: `*address*` は `home_address`, `email_address` などにマッチ
137 changes: 137 additions & 0 deletions docs/ja/sharing-connections.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
# 接続設定の共有

myshの接続設定をエクスポート・インポートして、チームメンバーのセットアップを簡単にする方法です。

## 概要

エンジニアが一度接続設定を作って、チームに配布します。受け取る側は自分の認証情報を入力するだけで、それ以外の設定(environment、SSH、マスキングルール)はそのまま引き継がれます。

```
エンジニア チームメンバー
────────── ──────────
mysh export prod > prod.yaml → mysh import --from yaml --file prod.yaml
→ パスワード入力
→ 完了
```

## エクスポート

### 特定の接続をエクスポート

```bash
mysh export prod > prod.yaml
```

### 全接続をエクスポート

```bash
mysh export > all-connections.yaml
```

### 含まれる内容

| 項目 | 含まれる | 備考 |
|------|----------|------|
| 接続名 | Yes | |
| Environment | Yes | production, staging, development |
| DBホスト | Yes | |
| DBポート | Yes | |
| DBユーザー | Yes | |
| DB名 | Yes | |
| DBパスワード | **No** | セキュリティのため常に除外 |
| SSH設定 | Yes | host, port, user, key path |
| マスクルール | Yes | columns と patterns |
| Driver | Yes | cli または native |
| Redash URL | Yes | Redash接続の場合 |
| Redash APIキー | **No** | セキュリティのため常に除外 |
| Redashデータソース ID | Yes | Redash接続の場合 |

### 出力例

```yaml
- name: production
env: production
ssh:
host: bastion.example.com
user: deploy
key: ~/.ssh/id_ed25519
db:
host: 10.0.0.5
port: 3306
user: app
database: myapp_production
mask:
columns:
- email
- phone
patterns:
- "*address*"
- "*secret*"
```

## インポート

### YAMLファイルから

```bash
mysh import --from yaml --file prod.yaml
```

インポートフロー:

1. ファイル内の接続一覧を表示
2. インポートするものを選択
3. DBパスワード(またはRedash APIキー)を入力
4. 接続テスト
5. 設定を保存

### 全部まとめて一気にインポート

```bash
mysh import --from yaml --file prod.yaml --all
```

### 受け取り側に必要なもの

**直接DB接続の場合:**

- エンジニアから受け取ったYAMLファイル
- DBパスワード

**Redash接続の場合:**

- エンジニアから受け取ったYAMLファイル
- 自分のRedash APIキー(Redashのプロフィール設定から取得)

## ベストプラクティス

### 共有するエンジニア向け

1. **エクスポート前に environment とマスクルールを設定する** — 受け取り側はこれを引き継ぐ
2. 実ユーザーデータにアクセスする接続は **production environment** を指定
3. **マスクパターンを網羅的に設定する** ことで意図しないデータ露出を防ぐ:
```bash
mysh edit prod
# マスクを以下に設定: email,phone,*password*,*secret*,*token*,*address*,*name*
```
4. **YAMLファイルの共有経路はセキュアに** — パスワードは含まれないが、ホスト名やユーザー名は含まれる

### 受け取る側

1. `MYSH_MASTER_PASSWORD` をシェルプロファイルに設定しておくと、AIアシスタントから対話プロンプトなしでmyshを使える
2. インポート後 `mysh ping` で接続を必ず確認する
3. マスク設定はエンジニアの指示なしに変更しない

## Redash接続の共有

Redash接続も同じ流れで共有できます。

```bash
# エンジニアがエクスポート
mysh export analytics > analytics.yaml

# 受け取り側は自分のAPIキーを入力してインポート
mysh import --from yaml --file analytics.yaml
```

各メンバーが自分のRedash APIキーを使うので、アクセスはRedashの監査ログで個別に追跡できます。
Loading