proxmox上のubuntu 24.04 LXCにClaude codeをinstallする[備忘録]

用意した環境は以下:
```
proxmox 8.4
Ubuntu 24.04
CTのRAM: 5GB
CTのSwap: 0
CPU: 2 Core
```

## Installation
### 最新のNode.jsのinstall
以下の記事に従い、nで最新のNode.jsを入れた

https://qiita.com/seibe/items/36cef7df85fe2cefa3ea

### Claude codeのinstall
公式のドキュメントに従って `npm install -g @anthropic-ai/claude-code` とすると、以下のようなエラーが出た。

```bash
$ npm install -g @anthropic-ai/claude-code
npm error code EACCES
npm error syscall mkdir
npm error path /usr/local/lib/node_modules/@anthropic-ai
npm error errno -13
npm error Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/@anthropic-ai'
npm error     at async mkdir (node:internal/fs/promises:852:10)
npm error     at async /usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:624:20
npm error     at async Promise.allSettled (index 0)
npm error     at async [reifyPackages] (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:325:11)
npm error     at async Arborist.reify (/usr/local/lib/node_modules/npm/node_modules/@npmcli/arborist/lib/arborist/reify.js:142:5)
npm error     at async Install.exec (/usr/local/lib/node_modules/npm/lib/commands/install.js:150:5)
npm error     at async Npm.exec (/usr/local/lib/node_modules/npm/lib/npm.js:207:9)
npm error     at async module.exports (/usr/local/lib/node_modules/npm/lib/cli/entry.js:74:5) {
npm error   errno: -13,
npm error   code: 'EACCES',
npm error   syscall: 'mkdir',
npm error   path: '/usr/local/lib/node_modules/@anthropic-ai'
npm error }
npm error
npm error The operation was rejected by your operating system.
npm error It is likely you do not have the permissions to access this file as the current user
npm error
npm error If you believe this might be a permissions issue, please double-check the
npm error permissions of the file and its containing directories, or try running
npm error the command again as root/Administrator.
```

下記に従ってtroubleshootを行う。

https://docs.anthropic.com/en/docs/claude-code/troubleshooting#linux-permission-issues 

最初に今の段階でglobalにinstallされているlibraryをtextに書き出す。今の段階では結果は以下:

```bash
$ cat npm-global-packages.txt
/usr/local/lib
├── corepack@0.32.0
├── n@10.2.0
└── npm@10.9.2
```

global packageのinstall先を変更する
```bash
# Create a directory for your global packages
mkdir -p ~/.npm-global

# Configure npm to use the new directory path
npm config set prefix ~/.npm-global

# Note: Replace ~/.bashrc with ~/.zshrc, ~/.profile, or other appropriate file for your shell
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc

# Apply the new PATH setting
source ~/.bashrc
```
これで再度installを試みるとうまく行ったっぽい。

```bash
$ npm install -g @anthropic-ai/claude-code

added 3 packages in 2s

2 packages are looking for funding
  run `npm fund` for details
  ```

## Githubから適当に自分のprojectをcloneして使ってみる
### Github CLIを入れる
[公式のレポ](https://github.com/cli/cli/blob/trunk/docs/install_linux.md#official-sources)にあるコマンドで入れた。

```bash
(type -p wget >/dev/null || (sudo apt update && sudo apt-get install wget -y)) \
	&& sudo mkdir -p -m 755 /etc/apt/keyrings \
        && out=$(mktemp) && wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg \
        && cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
	&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
	&& sudo mkdir -p -m 755 /etc/apt/sources.list.d \
	&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
	&& sudo apt update \
	&& sudo apt install gh -y
```

installが終わったら`gh auth login`でログインする。CLIで色々と聞かれるので、なすがままに設定を行うと終わる。後は、GitHubのrepositoryで、cloneの所で「GitHub CLI」を選択したら出てくるコマンドを打てばcloneされる。

### Claudeに聞いてみる
まずClaudeを立ち上げてみる

```
claude
```
Claudeの設定が始まった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327331/5960b3f4-2e49-4691-b21a-1964bc83ad3f.png)

今回はProプランを購入したので、そのログインもある。LXCにGUI環境はないので、途中で出てくるURLをブラウザにペッしてやる必要がある(CLIの指示に従えば間違えることはない)。
以下のようになれば、使えるっぽい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327331/a4b73706-6353-4ce5-b920-5c85068020e2.png)

まずは公式にあった`summarize this project`を実行してみることにした。
内容は伏せるが、勝手にファイルを読んで良い感じの出力が出た。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327331/8ccc5ee5-736c-478d-922d-96258e316115.png)

次に`/init`を使ってCLAUDE.mdを作り、それをClaude codeにコミットしてもらう。
1分ぐらいでCLAUDE.mdが出来た。

```
CLAUDE.mdをコミットしてください
```
と日本語でお願いしてみた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327331/b74d9156-49f6-42c9-a493-518d5f877f1a.png)

いけるっぽい。branchを切らずに雑にinitしたので、ローカルのmainにcommitしちゃったので、
```
pushしておいてください
```
と雑にお願いしてみたらちゃんとやってくれた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327331/3512397c-8ce3-4053-9020-03a9714d747e.png)

今の所は逐一挙動を確認しているが、勝手にやってくれるようにしたら、どんどんやってくれるんだろうな。


今回はここまでです。
なんかダメな所とかあったら教えてください。