Closed8

cc-slackをおうちクラスタで試してみる

K@zuki.K@zuki.

おうちクラスタの構成

我が家のおうちクラスタはhomeにあるマニフェストを見てもらえると良いが、前提として以下のような条件が揃っている。

  • KubeVirtで簡単に仮想マシンを作成可能
  • Cloudflare Tunnel導入済みでCloudflare側で設定すればすぐに外部公開が可能

どこのご家庭でも一般的な構成となっている。
そのため今回の動作確認では、

  • KubeVirtで仮想マシンの作成
  • Cloudflare Tunnelで外部公開

といった構成ですすめる。

K@zuki.K@zuki.

仮想マシンの作成

以前書いた記事があるので、それをベースにマニフェストを作成してデプロイする。

https://khasegawa.hatenablog.com/entry/2023/11/23/070000

記事のURLは古いので https://cloud-images.ubuntu.com/ あたりから使いたいimgファイルのURLを引っ張ってきて書き換えつつ、利用可能なStorageClassを指定すると良い。

---
apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:
  name: cc-slack-volume
spec:
  source:
    http:
      url: 'https://cloud-images.ubuntu.com/noble/20250725/noble-server-cloudimg-amd64.img'
  pvc:
    storageClassName: nfs-csi
    accessModes:
      - ReadWriteMany
    resources:
      requests:
        storage: 10Gi

---
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: cc-slack
  labels:
    kubevirt.io/os: linux
spec:
  running: true
  template:
    metadata:
      labels:
        kubevirt.io/size: small
        kubevirt.io/domain: cc-slack
    spec:
      domain:
        cpu:
          cores: 2
        devices:
          disks:
            - name: disk0
              disk:
                bus: virtio
            - name: cloudinitdisk
              cdrom:
                bus: sata
                readonly: true
          interfaces:
            - name: default
              masquerade: {}
        machine:
          type: q35
        resources:
          requests:
            memory: 2048M
      networks:
        - name: default
          pod: {}
      volumes:
        - name: disk0
          persistentVolumeClaim:
            claimName: cc-slack-volume
        - name: cloudinitdisk
          cloudInitNoCloud:
            userData: |
              #cloud-config
              hostname: cc-slack
              ssh_pwauth: true
              password: ubuntu
              chpasswd:
                expire: false

---
apiVersion: v1
kind: Service
metadata:
  name: cc-slack
  labels:
    kubevirt.io/os: linux
spec:
  ports:
    - name: ssh
      port: 22
      targetPort: 22
    - name: cockpit
      port: 9090
      targetPort: 9090
    - name: cc-slack
      port: 8080
      targetPort: 8080
    - name: netdata
      port: 19999
      targetPort: 19999
  selector:
    kubevirt.io/domain: cc-slack

これをapplyして2,3分待てばUbuntuの仮想マシンの出来上がり。

最近のvirtプラグインではvm/などの指定が必要なので、今回の場合は kubectl virt ssh --local-ssh ubuntu@vm/cc-slack のような形で接続することができる。

K@zuki.K@zuki.

環境のセットアップ

cc-slackに必要なツールのセットアップのためにmiseをインストールする。

https://mise.jdx.dev/getting-started.html

またmiseでは以下のようにGoとpnpmのインストールしておく。

mise use --global go@1.24.4
mise use --global node@latest
mise use --global pnpm@latest

その後、cc-slackをクローンしておき、webディレクトリに必要なパッケージをインストールしておくと良い。

git clone https://github.com/yuya-takeyama/cc-slack.git
cd cc-slack/web
pnpm i
cd .. # cc-slackディレクトリに戻る

終わったらClaude Codeもセットアップしておくと良い。

# claude-codeもインストール
npm install -g @anthropic-ai/claude-code

# claudeコマンドを起動して認証設定
claude
K@zuki.K@zuki.

Slack Appを作成

cc-slackのREADMEにある通りに作成する必要があるのだが、Bot Tokenの発行をしないとEvent Subscriptionsなども設定ができない。
そのため、まずは気合いでBot Tokenを発行する。

  1. OAuth & Permissionsを設定(Redirect URLもlocalhostなどの適当なURLでOK)

  2. Manage DistributionからAdd to Slackで自分のWorkspaceへインストール

  3. Redirect URLへ遷移するのでクエリパラメータにあるcodeを控える

  4. 気合いのcurlでトークン発行

    curl -X POST https://slack.com/api/oauth.v2.access -d "client_id={Basic InformationのClient ID}" -d "client_secret={Basic InformationのClient Secret}" -d "code={クエリパラメータにあったcode}" -d "redirect_uri={OAuth & Permissionsで設定したRedirect URL}"
    

エラーが出なければ、Bot TokenがOAuth & Permissionsの画面に出てくるので、それを使ってREADMEのセットアップ手順に従って設定をしていく。

  • 環境変数の設定
  • config.yamlの作成

各種設定が適切に終わったら./scripts/start でエラーなく起動ができる。
エラーが出ている場合は何らか設定が漏れている可能性があるので見返すと良い。

ここまできたらやっとEvent Subscriptionsなどの設定ができるようになる。
諸々設定したら再度気合いのOAuth認証をしておけば完璧。

K@zuki.K@zuki.

cc-slackを呼び出す

/cc で呼び出せる様に設定しているはずなので、実際呼び出す。

呼び出すとプロンプトを入力する画面が現れる。

ここに適当な文字列を入力すれば、あとは作業を開始してくれる。

スレッド内で @cc-slackをつけて呼び出せば、セッションの続きで作業をしてくれる。

完全にcc-slackが動いたやったね 👏

K@zuki.K@zuki.

そこまで使い込んでいるわけではないもののDevinに近いような体験を得られていて、非常に良い。
他にも似たようなツールは多くあるので、自分にあったツールを探してみるのもいいかもしれない。

Discordの民なのでDiscordで似たようなことができないかなぁ。

このスクラップは1ヶ月前にクローズされました