コンテンツにスキップ

4b. 入口を Slack にする場合

🤝 はじめる前に — 詰まったときに聞ける相手を作ります

この章は、チャットAI(ChatGPT・Claude など)をサポート役に付けてから始めてください。 詰まったときに、画面のスクリーンショットを貼るだけで、どこで止まっているかを見てくれます。

やること
1 📄 support_04b_slack.txt を開く(リンクを右クリック →「名前を付けて保存」でも構いません)
2 ChatGPT か Claude で、新しい会話を1つ開く
3 そのファイルを添付する。添付が面倒なら、開いた画面を Ctrl+ACtrl+C全部コピーして貼るでも同じです
4 送ると、この工程で何をするのかを3行で返してきます
5 その会話は開いたままにして、この章を進める。詰まったらスクリーンショットを貼る

🔴 トークン・パスワード・鍵は、チャットに貼らないでください。 スクリーンショットに写り込むことがあります。送る前に、画面にそれらが出ていないか見てください。 貼ってしまっても、どれも作り直せます。慌てず、作り直してください。

📋 そのファイルに何が書いてあるか(ここで中身を確認できます)
# 【サポート依頼】4b. 入口を Slack にする場合

あなたは、これから下の手順を**自分の手で通す人**のサポート役です。
相手は Linux もサーバも初めてで、手元の PC は Windows です。

## 守ってほしいこと

1. 相手は下の手順書を**上から順に**やっています。**先回りして別のやり方を勧めないでください。**
   どうしても別の手が要ると判断したときは、**そう判断した理由を1行**添えてください。
2. 詰まった画面のスクリーンショットや、エラーの文言が送られてきます。
   **まず「下の手順書のどこで止まっているか」を特定**してから答えてください。
3. **一度に1つだけ**指示してください。結果を聞いてから次に進みます。
4. 専門用語は、初めて出たときに**かっこ書きで言い換え**を付けてください。
5. 分からないことは「**分かりません**」と答えてください。**推測でコマンドを出さないでください。**
6. この工程の「**終わりの印**」が出るまでは、次の工程の話をしないでください。

## 絶対にしないこと

- **Discord の Bot トークン・パスワード・SSH の秘密鍵**を、送るよう求めないでください。
- 相手がうっかり貼ってしまったら、**その場で作り直すよう伝えてください**(どれも作り直せます)。

## 最初にお願いすること

この工程で何をするのかを、**3行**で教えてください。
そのあと、私が「はじめます」と言ったら、**最初の1手だけ**を教えてください。

---

# 手順書(この工程の全文)

# 4b. 入口を Slack にする場合

!!! info "この章は、Slack を使う方だけ読んでください"
    [4章](./04_discord_bot.md)の Discord の代わりに、**Slack を入口にする**手順です。
    どちらか**片方だけ**でよく、両方は要りません。

    **すでに Slack を仕事で使っている**なら、こちらの方が自然です。
    新しいアプリを増やさずに済み、いつも見ている画面から右腕に話しかけられます。

!!! success "✅ この手順は 2026-09-09 に実機で1回通りました"
    実際に1台のミニPC で、Slack から右腕に話しかけられるところまで確認しています。
    そのとき詰まったのは**次の3つだけ**でした。どれも下に書いてあります。

    | | 詰まったところ |
    |---|---|
    | 1 | `.env` の見本の文字(`your-bot-token` など)を**消し切っていなかった** |
    | 2 | `#` を消したあと、**行頭に空白が残っていた** |
    | 3 | 直したのに**古いログを見ていて**、直っていないと思い込んだ |

    ただし、通したのは**この1台だけ**です。画面の文言はバージョンで変わることがあります。
    詰まったところは[記録場](log/index.md)に書き足してください。

!!! success "Slack は「Socket Mode」で繋ぎます — 外から届く住所が要りません"
    サーバ側から Slack へ**繋ぎに行く**方式なので、**家や事務所のネットワークに穴を開ける必要がありません。**
    ルータの設定も、固定の住所も要らない、ということです。

## ① Slack アプリを作る(Manifest を貼るのが最短です)

<https://api.slack.com/apps> を開き、Slack にログインします。

1. **Create New App****From an app manifest** を選ぶ
2. ワークスペースを選ぶ
3. 形式は **YAML** を選び、下の内容を**まるごと貼り付ける**
4. **Next****Create**

??? note "📋 貼り付ける Manifest(クリックで開く)"

    ```yaml
    display_information:
      name: xangi
      description: AI CLI assistant for Slack
      background_color: '#2f3136'
    features:
      bot_user:
        display_name: xangi
        always_online: false
    oauth_config:
      scopes:
        bot:
          - app_mentions:read
          - channels:history
          - channels:read
          - chat:write
          - files:read
          - files:write
          - groups:history
          - groups:read
          - im:history
          - im:read
          - im:write
          - reactions:read
          - reactions:write
    settings:
      event_subscriptions:
        bot_events:
          - app_mention
          - message.channels
          - message.groups
          - message.im
      interactivity:
        is_enabled: true
      org_deploy_enabled: false
      socket_mode_enabled: true
      token_rotation_enabled: false
    ```

**これで、権限もイベントも Socket Mode も、まとめて設定されます。**
手で1つずつ入れる方法もありますが、**取りこぼしが起きやすい**のでこちらを推します。

## ② App-Level Token(`xapp-` で始まる方)を作る

Manifest を使っても、**この鍵だけは手で作ります。**

1. 左メニュー **Basic Information** → 下の方の **App-Level Tokens****Generate Token and Scopes**
2. Token Name … `xangi-socket`(何でも構いません)
3. **Add Scope****`connections:write`** を選ぶ
4. **Generate** → 表示された **`xapp-...` をコピー**

## ③ ワークスペースに入れて、Bot Token(`xoxb-` で始まる方)を取る

1. 左メニュー **Install App****Install to Workspace**
2. 権限を確認して **許可する**
3. 表示された **Bot User OAuth Token(`xoxb-...`)をコピー**

!!! danger "🔴 2つのトークンは、チャットにもメールにも貼らないでください"
    置き場所は**サーバの中の `.env` ファイル1か所だけ**です([9章](./09_xangi.md))。
    手元では Windows のメモ帳に一時的に置き、`.env` に入れたら消してください。
    漏れてしまったときは、**同じ画面から作り直せます**(古い方は無効になります)。

## ④ 自分のユーザーID と、チャンネルID を控える

| 取る値 | 操作 |
|---|---|
| **自分のユーザーID**`U` で始まる) | 自分のプロフィールを開く → **︙**(その他)→ **メンバーIDをコピー** |
| **チャンネルID**`C` で始まる) | チャンネル名を右クリック → **リンクをコピー**。URL の末尾(`.../archives/C01234567` の `C01234567`)がID |

どちらも [2章の表](./02_values.md) に書いてください。
ユーザーIDは、**誰の指示なら受けるか**を決めるために使います。

## ⑤ 🔴 Bot をチャンネルに招待する

**ここを忘れると、何を書いても反応しません。**使いたいチャンネルで、こう打ちます。

```text
/invite @xangi
```

## 手元に残る4つ

[9章](./09_xangi.md)で使います。**メモ帳に並べておいてください。**

| # | 名前 | 見た目 | 置き場所 |
|---:|---|---|---|
| 1 | **Bot Token** | `xoxb-...` | 🔴 メモ帳に一時保存 → 最終的には `.env` だけ |
| 2 | **App Token** | `xapp-...` | 🔴 同上 |
| 3 | 自分のユーザーID | `U` で始まる | 2章の表 |
| 4 | チャンネルID | `C` で始まる | 2章の表 |

## ✅ ここまで出来たら

Slack のメンバー一覧に Bot が現れ、上の4つがそろえば合格です。
**Bot はまだ反応しません。**サーバ側の設定([9章](./09_xangi.md))が済むと動きます。

## 詰まったら

| 症状 | まず見るところ |
|---|---|
| 🔴 **ログに `invalid_auth` と出る** | **Bot Token(`xoxb-`)が違います。**下の「鍵が本物か確かめる」を実行してください。`xoxb-` と `xapp-`**入れ違いに入れている**のが最も多い原因です |
| **メンションしても無反応** | 🔴 ⑤の `/invite @xangi` を、そのチャンネルでやったか |
| 権限を足したのに変わらない | **Install App から入れ直す**必要があります(権限の変更は再インストールで反映されます) |
| `xapp-` のトークンが見つからない | **Basic Information** の下の方の **App-Level Tokens** です。OAuth の画面にはありません |
| DM で反応しない | Manifest を使わず手で設定した場合、`im:history` `im:read``message.im` が要ります |
| IDをコピーする項目がない | プロフィールの **︙**(その他)の中にあります |

## 🔑 鍵が本物か、その場で確かめる

`.env` に入れたあと([9章](./09_xangi.md))、Slack 本体に直接聞けます。**トークンは画面に出ません。**

```bash
# どちらの鍵がどこに入っているか(先頭9文字だけ表示)
grep -E "^SLACK_(BOT|APP)_TOKEN" ~/xangi/.env | sed -E 's/=(.{9}).*/=\1…/'
```

```bash
# Bot Token が本物か
curl -s -H "Authorization: Bearer $(grep '^SLACK_BOT_TOKEN=' ~/xangi/.env | cut -d= -f2-)" \
  https://slack.com/api/auth.test
```

| 返ってくるもの | 意味 |
|---|---|
| `{"ok":true,"team":...}` | ✅ Bot Token は正常です |
| `{"ok":false,"error":"invalid_auth"}` | 🔴 **Bot Token が違います。**取り直してください |

```bash
# App Token が本物か
curl -s -X POST -H "Authorization: Bearer $(grep '^SLACK_APP_TOKEN=' ~/xangi/.env | cut -d= -f2-)" \
  https://slack.com/api/apps.connections.open
```

!!! danger "🔴 取り違えやすいもの"
    **Bot Token は `xoxb-` で始まります。**`api.slack.com/apps`**OAuth & Permissions** の一番上、
    **Bot User OAuth Token** です。

    同じ画面の周りにある **Signing Secret****Client Secret** を入れると、
    このエラー(`invalid_auth`)になります。**`xoxb-` で始まっていない時点で間違いです。**

次は [5. USB インストーラをつくる](./05_usb.md) です。
(サーバ側で Slack を繋ぐ設定は [9章](./09_xangi.md) で行います。)

この章は、Slack を使う方だけ読んでください

4章の Discord の代わりに、Slack を入口にする手順です。 どちらか片方だけでよく、両方は要りません。

すでに Slack を仕事で使っているなら、こちらの方が自然です。 新しいアプリを増やさずに済み、いつも見ている画面から右腕に話しかけられます。

✅ この手順は 2026-09-09 に実機で1回通りました

実際に1台のミニPC で、Slack から右腕に話しかけられるところまで確認しています。 そのとき詰まったのは次の3つだけでした。どれも下に書いてあります。

詰まったところ
1 .env の見本の文字(your-bot-token など)を消し切っていなかった
2 # を消したあと、行頭に空白が残っていた
3 直したのに古いログを見ていて、直っていないと思い込んだ

ただし、通したのはこの1台だけです。画面の文言はバージョンで変わることがあります。 詰まったところは記録場に書き足してください。

Slack は「Socket Mode」で繋ぎます — 外から届く住所が要りません

サーバ側から Slack へ繋ぎに行く方式なので、家や事務所のネットワークに穴を開ける必要がありません。 ルータの設定も、固定の住所も要らない、ということです。

① Slack アプリを作る(Manifest を貼るのが最短です)

https://api.slack.com/apps を開き、Slack にログインします。

  1. Create New AppFrom an app manifest を選ぶ
  2. ワークスペースを選ぶ
  3. 形式は YAML を選び、下の内容をまるごと貼り付ける
  4. NextCreate
📋 貼り付ける Manifest(クリックで開く)
display_information:
  name: xangi
  description: AI CLI assistant for Slack
  background_color: '#2f3136'
features:
  bot_user:
    display_name: xangi
    always_online: false
oauth_config:
  scopes:
    bot:
      - app_mentions:read
      - channels:history
      - channels:read
      - chat:write
      - files:read
      - files:write
      - groups:history
      - groups:read
      - im:history
      - im:read
      - im:write
      - reactions:read
      - reactions:write
settings:
  event_subscriptions:
    bot_events:
      - app_mention
      - message.channels
      - message.groups
      - message.im
  interactivity:
    is_enabled: true
  org_deploy_enabled: false
  socket_mode_enabled: true
  token_rotation_enabled: false

これで、権限もイベントも Socket Mode も、まとめて設定されます。 手で1つずつ入れる方法もありますが、取りこぼしが起きやすいのでこちらを推します。

② App-Level Token(xapp- で始まる方)を作る

Manifest を使っても、この鍵だけは手で作ります。

  1. 左メニュー Basic Information → 下の方の App-Level TokensGenerate Token and Scopes
  2. Token Name … xangi-socket(何でも構いません)
  3. Add Scopeconnections:write を選ぶ
  4. Generate → 表示された xapp-... をコピー

③ ワークスペースに入れて、Bot Token(xoxb- で始まる方)を取る

  1. 左メニュー Install AppInstall to Workspace
  2. 権限を確認して 許可する
  3. 表示された Bot User OAuth Token(xoxb-...)をコピー

🔴 2つのトークンは、チャットにもメールにも貼らないでください

置き場所はサーバの中の .env ファイル1か所だけです(9章)。 手元では Windows のメモ帳に一時的に置き、.env に入れたら消してください。 漏れてしまったときは、同じ画面から作り直せます(古い方は無効になります)。

④ 自分のユーザーID と、チャンネルID を控える

取る値 操作
自分のユーザーIDU で始まる) 自分のプロフィールを開く → (その他)→ メンバーIDをコピー
チャンネルIDC で始まる) チャンネル名を右クリック → リンクをコピー。URL の末尾(.../archives/C01234567C01234567)がID

どちらも 2章の表 に書いてください。 ユーザーIDは、誰の指示なら受けるかを決めるために使います。

⑤ 🔴 Bot をチャンネルに招待する

ここを忘れると、何を書いても反応しません。使いたいチャンネルで、こう打ちます。

/invite @xangi

手元に残る4つ

9章で使います。メモ帳に並べておいてください。

# 名前 見た目 置き場所
1 Bot Token xoxb-... 🔴 メモ帳に一時保存 → 最終的には .env だけ
2 App Token xapp-... 🔴 同上
3 自分のユーザーID U で始まる 2章の表
4 チャンネルID C で始まる 2章の表

✅ ここまで出来たら

Slack のメンバー一覧に Bot が現れ、上の4つがそろえば合格です。 Bot はまだ反応しません。サーバ側の設定(9章)が済むと動きます。

詰まったら

症状 まず見るところ
🔴 ログに invalid_auth と出る Bot Token(xoxb-)が違います。下の「鍵が本物か確かめる」を実行してください。xoxb-xapp-入れ違いに入れているのが最も多い原因です
メンションしても無反応 🔴 ⑤の /invite @xangi を、そのチャンネルでやったか
権限を足したのに変わらない Install App から入れ直す必要があります(権限の変更は再インストールで反映されます)
xapp- のトークンが見つからない Basic Information の下の方の App-Level Tokens です。OAuth の画面にはありません
DM で反応しない Manifest を使わず手で設定した場合、im:history im:readmessage.im が要ります
IDをコピーする項目がない プロフィールの (その他)の中にあります

🔑 鍵が本物か、その場で確かめる

.env に入れたあと(9章)、Slack 本体に直接聞けます。トークンは画面に出ません。

# どちらの鍵がどこに入っているか(先頭9文字だけ表示)
grep -E "^SLACK_(BOT|APP)_TOKEN" ~/xangi/.env | sed -E 's/=(.{9}).*/=\1…/'
# Bot Token が本物か
curl -s -H "Authorization: Bearer $(grep '^SLACK_BOT_TOKEN=' ~/xangi/.env | cut -d= -f2-)" \
  https://slack.com/api/auth.test
返ってくるもの 意味
{"ok":true,"team":...} ✅ Bot Token は正常です
{"ok":false,"error":"invalid_auth"} 🔴 Bot Token が違います。取り直してください
# App Token が本物か
curl -s -X POST -H "Authorization: Bearer $(grep '^SLACK_APP_TOKEN=' ~/xangi/.env | cut -d= -f2-)" \
  https://slack.com/api/apps.connections.open

🔴 取り違えやすいもの

Bot Token は xoxb- で始まります。api.slack.com/appsOAuth & Permissions の一番上、 Bot User OAuth Token です。

同じ画面の周りにある Signing SecretClient Secret を入れると、 このエラー(invalid_auth)になります。xoxb- で始まっていない時点で間違いです。

次は 5. USB インストーラをつくる です。 (サーバ側で Slack を繋ぐ設定は 9章 で行います。)