
はじめに
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 ユーザーが実際の開発で使いながら学んだことを記録していくサイトです。