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

おうちクラスタの構成
我が家のおうちクラスタはhomeにあるマニフェストを見てもらえると良いが、前提として以下のような条件が揃っている。
- KubeVirtで簡単に仮想マシンを作成可能
- Cloudflare Tunnel導入済みでCloudflare側で設定すればすぐに外部公開が可能
どこのご家庭でも一般的な構成となっている。
そのため今回の動作確認では、
- KubeVirtで仮想マシンの作成
- Cloudflare Tunnelで外部公開
といった構成ですすめる。

仮想マシンの作成
以前書いた記事があるので、それをベースにマニフェストを作成してデプロイする。
記事の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
のような形で接続することができる。

環境のセットアップ
cc-slackに必要なツールのセットアップのためにmiseをインストールする。
また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

Cloudflare Tunnelの設定
Cloudflare Tunnelがクラスタ内に存在している場合は、{Service名}.{Namespace名}.svc.cluster.local
への設定をすればOK。
例としては、
- Hostname ... cc-slack.example.com
- Service ... http://cc-slack.sandbox.svc.cluster.local:8080
といった形。

Slack Appを作成
cc-slackのREADMEにある通りに作成する必要があるのだが、Bot Tokenの発行をしないとEvent Subscriptionsなども設定ができない。
そのため、まずは気合いでBot Tokenを発行する。
-
OAuth & Permissionsを設定(Redirect URLもlocalhostなどの適当なURLでOK)
-
Manage Distributionから
Add to Slack
で自分のWorkspaceへインストール -
Redirect URLへ遷移するのでクエリパラメータにあるcodeを控える
-
気合いの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認証をしておけば完璧。

cc-slackを呼び出す
/cc
で呼び出せる様に設定しているはずなので、実際呼び出す。
呼び出すとプロンプトを入力する画面が現れる。
ここに適当な文字列を入力すれば、あとは作業を開始してくれる。
スレッド内で @cc-slack
をつけて呼び出せば、セッションの続きで作業をしてくれる。
完全にcc-slackが動いたやったね 👏

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