Claude Code 始めました
サーバーに実装する時にClaudeにSSH使わせたら驚くほど楽だった話

はじめに

AIにコードを書かせるのはもう慣れた。設計は自分でやって、実装はClaudeに任せる。いつものスタイルだ。

ただ、作ったものを自宅サーバーに載せる作業——デプロイは、自分の手でやるもんだと思っていた。Dockerでイメージをビルドして、サーバー側でpullして、コンテナ外にSQLiteのDBを置いて、.envを設定して、パーミッションを整えて。地味で面倒だが、こればっかりは手作業だろうと。

そう思い込んでいた。


コピペ相談の限界

以前はサーバー側でトラブルが起きたら、ターミナルの出力をコピペしてAIに聞いていた。

Nextcloudを自宅サーバーに入れた時がひどかった。パーミッション周りのエラーが出て、GPT-5.4に相談したんだが、延々とループした。「このディレクトリの権限を変えてみてください」→ 変えた → 別のエラー → 「じゃあこっちも」→ 変えた → 最初のエラーに戻る。

最終的にClaudeにも手伝ってもらって解決したが、相当時間を使った。


「スクリプト書きましょうか?」

DiscordのオークションBotを自宅サーバーにデプロイする作業をしていた時のこと。

コンテナの更新を何度かやった後、Claudeが聞いてきた。**「コンテナの更新を簡単にするスクリプト書きましょうか?」**と。

いいよ、と返した。

そしたらまず、SSH鍵認証の設定から始めた。鍵の生成、サーバー側のauthorized_keysへの登録。パスワードなしでリモート操作できる環境を整えてから、deploy.shを作った。

それまでは、リモートのターミナルに手でコマンドを打ち込んでいた。エラーが出たらやり直しだし、動いたかどうかの確認もログをコピペして見てたし。面倒だった。

deploy.shの中身はシンプルだ。ローカルでDockerイメージをビルド、GitHub Container Registryにpush、SSHでサーバーに入ってpodman pull(サーバー側はBazziteOSなのでDockerではなくpodman)、古いコンテナを止めて削除、新しいコンテナを起動。DBのボリュームマウントも.envの読み込みも全部入っている。これがスクリプト一発で終わる。

しかもそこから先、起動時にBotがエラーを吐いた時も、ClaudeがSSHでサーバーのログを確認して、原因を特定して、ローカルでコードを直して、deploy.shで再デプロイ。一つのセッションで全部完結した。


コピペと直接触らせるの差

コピペで相談していた頃は、AIはサーバーの状態が見えていなかった。エラーメッセージだけ渡されても、「操作ミスでは?」「環境設定が違うのでは?」という可能性を一個ずつ手動で潰すしかない。人間がコピペで中継する分、遠回りになる。

SSHで直接触らせると、Claudeが自分の目でサーバーの状態を確認できる。推測じゃなくて事実ベースで動ける。

やっていることは ssh user@host "コマンド" をBashから叩いているだけだ。特別な仕組みがあるわけじゃない。鍵認証が通っていれば、Claudeからすると「ちょっと遠いターミナル」でしかない。

怖くないのかという話だが、ポートはSSHと80しか開けていないし、まだ売上もない環境だ。それに、Opusは指示の意図を正確に汲んでくれるから、変なコマンドを叩かれる心配が少ない。これが精度の低いモデルだったら怖いと思う。


まとめ

デプロイは手作業でやるもんだと思い込んでいた。Claudeに「スクリプト書きましょうか?」って言われるまで、任せるって発想がなかった。


このブログ「Claude Code 始めました」は、Claude MAX ユーザーが実際の開発で使いながら学んだことを記録していくサイトです。