Linux サーバーに Claude Code と ChatGPT Codex を導入する:ステップバイステップガイド

公開日 更新日 読了時間 28 分

インストール直後の Debian または Ubuntu から、実際に作業できる AI エージェントまで:ユーザーと sudo 許可リスト、Node.js 22、Claude Code、Codex CLI、Gemini CLI のインストールとログイン、ルールファイル、cron ジョブ、最初のタスク、典型的なエラー。

このガイドでは、インストールしたばかりの Debian または Ubuntu サーバーを出発点に、ログを分析し、設定を確認し、保守作業をこなす AI エージェントを実際に使える状態にするまでの手順を説明します。Claude Code(Anthropic)と Codex CLI(OpenAI、ChatGPT のコマンドラインツール)を、どちらも権限を制限した専用ユーザーの下で設定し、3 つ目の選択肢として Gemini CLI(Google)も紹介します。すべてのコマンドは、Debian 13 と Ubuntu 24.04 を載せた KernelHost KVM ルートサーバー で実際に試しています。AI マネージドサーバーの基本と、どのような構成があるかについては、記事 AI マネージドサーバー:AI エージェントを安全に接続する で解説しています。

2026 年 9 月時点の情報です。ツールは急速に進化しているため、迷ったときはそれぞれ claude --help、codex --help、gemini --help でフラグを確認してください。

前提条件

  • Debian 12 または 13、あるいは Ubuntu 22.04 または 24.04 を載せ、SSH で root アクセスできるルートサーバー。AlmaLinux と Rocky Linux でも手順は同じです。異なるのはパッケージコマンドだけで、dnf が apt に代わります。
  • 基本的な堅牢化が済んでいること:鍵による SSH ログイン、ファイアウォール、自動セキュリティ更新。これらは 新しいルートサーバーのチェックリスト ですべて扱っています。
  • Anthropic のアカウント(Claude Pro、Max、Team)または API キー、ChatGPT アカウント(Plus、Pro、Team)または OpenAI の API キー。設定するツールが 1 つだけなら、必要なのはそのうちの 1 つだけです。
  • api.anthropic.com と api.openai.com への外向きの HTTPS 通信。KernelHost のサーバーでは最初から許可されています。独自に厳しいファイアウォールを設定している場合は、この通信を許可する必要があります。

AI エージェントにはどの程度のサーバーで足りるか

言語モデルはプロバイダー側で動作するため、AI エージェントのためにサーバーへ特別なハードウェアや GPU を用意する必要はありません。サーバー上で動くのはコマンドラインツールと Node.js だけで、セッション中に使うメモリは合わせてもたいてい数百 MB です。ほかにあまりサービスを動かしていないサーバーなら、2 vCPU と 4 GB RAM で十分です。ウェブサイト、データベース、ゲームサーバーも並行して運用している場合は、エージェント用に 1 GB ほどのメモリの余裕を見込んでください。KernelHost の KVM ルートサーバー は約 30 秒で利用可能になり、料金は最低利用期間のない PrePaid 方式です。そのため、まずエージェントを試してみるテスト環境としても適しています。

ステップ 1:専用ユーザーを作成し、sudo を制限する

エージェントは決して root として動かしません。専用のアカウントを与え、sudo の許可リストを通じて、必要なコマンドだけを過不足なく使えるようにします。最初は少数の読み取り専用コマンドから始め、タスクが本当に必要とするときにだけリストを広げてください。

sudo adduser --disabled-password --gecos "KI-Agent" aiagent
sudo tee /etc/sudoers.d/aiagent >/dev/null <<'EOF'
aiagent ALL=(root) NOPASSWD: /usr/bin/journalctl *, /usr/bin/systemctl status *, /usr/bin/systemctl restart nginx, /usr/bin/apt-get update, /usr/bin/apt-get upgrade -y, /usr/bin/tail *, /usr/bin/df *, /usr/bin/ss *
EOF
sudo chmod 440 /etc/sudoers.d/aiagent
sudo visudo -cf /etc/sudoers.d/aiagent

最後の行で構文をチェックします。sudoers ファイルに誤りがあると、全員が sudo を使えなくなるおそれがあります。そのため、このチェックは必ず行ってください。--disabled-password を指定すると、誰もパスワードで aiagent としてログインできなくなります。このアカウントには、後で sudo -iu aiagent を使って切り替えます。sudo ユーザーの基本的な仕組みは、記事 Linux で sudo ユーザーを作成する で説明しています。

sudo でエディターを許可せず、書き込み権限を絞って与える

エージェントに /etc 内のファイルを変更させる場合でも、sudo で nano を許可してはいけません(それでは /etc/sudoers を含むあらゆるファイルを編集できてしまいます)。代わりに、グループと対象を絞った書き込み権限を使います。たとえば setfacl -m u:aiagent:rw /etc/nginx/sites-available/meine-seite.conf のようにします。最初のうちは、エージェントが変更を提案し、それをご自身で反映するだけで十分です。

許可リストでワイルドカードを使うコマンドにも、同じことが言えます。/usr/bin/tail * を許可すると、エージェントは root がアクセスできるあらゆるファイルを読めるようになり、認証情報を含むファイルも例外ではありません。これを避けたい場合は、/usr/bin/tail -n 200 /var/log/nginx/error.log のように、許可するパスを具体的に書き出します。

ステップ 2:Node.js 22 をインストールする

どちらのツールも Node.js 上で動作します。Claude Code はバージョン 18 以上、Codex CLI は 22 以上を必要とするため、22 LTS をインストールします。Debian 12 のパッケージソースに含まれるバージョンは古すぎるので、最新版を提供している NodeSource から入れます。

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
node --version
npm --version

root 権限を使わない代替手段:nvm

インターネットから取得したスクリプトを root 権限で実行したくない場合は、エージェントユーザーのホームディレクトリで nvm を使います。この方法なら、root 権限はまったく必要ありません。nvm のインストールコマンドはプロジェクトの README から取得してください。その後は次の 3 行で済みます。

nvm install 22
nvm alias default 22
node --version

詳細とそのほかの方法は、Debian での Node.js ガイド で説明しています。

ステップ 3:Claude Code をインストールしてログインする

ここからはエージェントのアカウントで作業します。

sudo -iu aiagent
curl -fsSL https://claude.ai/install.sh | bash
claude --version

ネイティブインストーラーは Claude Code を ~/.local/bin に配置し、自動で最新の状態に保ちます。npm を使って npm install -g @anthropic-ai/claude-code でインストールすることもできます。これが EACCES で失敗する場合は、後述のトラブルシューティングの節が役に立ちます。

ブラウザーのないサーバーでのログイン

claude を初めて起動すると、ログインを求められます。Claude アカウントの場合は通常ブラウザーが開きますが、ブラウザーのないサーバーではアドレスとコードが表示されるので、そのコードをノート PC やスマートフォンで承認します。ログインはその後、ログアウトするまで、このサーバー上のこのユーザーに対して有効です。

スクリプトと cron ジョブ用の API キー

スクリプトや cron ジョブには、API キーのほうが適しています。

echo 'export ANTHROPIC_API_KEY="sk-ant-..."' >> ~/.bashrc
chmod 600 ~/.bashrc
source ~/.bashrc
claude -p "OK とだけ答えてください" 

これでキーは、ほかのユーザーが読めないエージェントユーザーのホームディレクトリにだけ置かれます。キーは Anthropic のコンソールで、月額の支出上限を付けて作成してください。そうすれば、セッションが暴走しても高額な費用にはなりません。キーそのものは、エージェントへのタスクにも、エージェントに出力させるファイルにも、決して書かないでください。

ステップ 4:サーバー向けに Claude Code を設定する

ルールファイル CLAUDE.md

Claude Code は起動時に、カレントディレクトリにあるファイル CLAUDE.md を読み込みます。ここには、すべてのセッションに適用されるルールを書きます。エージェントのホームディレクトリに、このファイルを置く作業ディレクトリを作成します。

mkdir -p ~/server && cd ~/server
cat > CLAUDE.md <<'EOF'
# このサーバーのルール
- これは本番サーバーである(Debian 13、nginx、PHP-FPM、MariaDB)。
- 読み取り専用コマンド(journalctl、systemctl status、tail、df、ss)はいつでも実行してよい。
- 書き込みを伴うコマンドの前には、何が変わるかを簡潔に説明し、承認を待つこと。
- パッケージの削除、/var/lib 配下のファイルの削除、ユーザーの作成や削除は決して行わないこと。
- パスワード、鍵、顧客データは決して出力に書き出さないこと。
- 各タスクの最後に、3 文の要約を出すこと。
EOF

このファイルは運用とともに育っていきます。エージェントが意図と違う動きをしたら、そのたびに修正内容を新しいルールとして追記します。数週間もすれば、お使いのサーバーでの作業の進め方がかなり正確に反映されたファイルになります。

settings.json の許可リスト

これに加えてツールの許可リストを用意し、Claude Code が読み取り専用コマンドは確認なしで実行し、それ以外はすべて承認を求めるようにします。ファイル ~/.claude/settings.json は、このユーザーに適用されます。

mkdir -p ~/.claude
cat > ~/.claude/settings.json <<'EOF'
{
  "permissions": {
    "allow": [
      "Bash(sudo journalctl:*)",
      "Bash(sudo systemctl status:*)",
      "Bash(sudo tail:*)",
      "Bash(df:*)",
      "Bash(free:*)",
      "Bash(ss:*)"
    ],
    "deny": [
      "Bash(rm -rf:*)",
      "Bash(sudo rm:*)",
      "Bash(dd:*)",
      "Bash(mkfs:*)"
    ]
  }
}
EOF

deny リストは追加の安全網であって、壁ではありません。1 つのコマンドはさまざまな書き方ができるからです。本当の境界線を引くのはステップ 1 の sudo 許可リストです。ユーザーに許されていないことは、エージェントにも許されないためです。

最初のタスクを対話形式で

では、最初のタスクを対話形式で実行します。

cd ~/server && claude
> 直近 24 時間の journalctl のエラーを要約し、最も多い原因を 3 つ挙げてください。

cron ジョブで無人実行する

同じタスクは無人でも実行できます。たとえば毎日 7 時に動く cron ジョブにして、結果をメールで受け取る方法です。

0 7 * * * cd /home/aiagent/server && /home/aiagent/.local/bin/claude -p "直近 24 時間の journalctl のエラーと警告を要約してください。サービス名、時刻、考えられる原因を挙げてください。" --allowedTools "Bash(sudo journalctl:*)" 2>&1 | mail -s "サーバー日次レポート" admin@example.com

フラグ -p は対話セッションなしで Claude Code を起動し、--allowedTools は使えるツールをその実行に必要なものだけに制限します。書き込みを伴う操作は、無人実行に含めないでください。cron ジョブの基本的な設定方法は、記事 Linux で cron ジョブを設定する で説明しています。

ステップ 5:Codex CLI(ChatGPT)をインストールしてログインする

インストールとログイン

Codex CLI は、ChatGPT を支えるモデルをコマンドラインで使えるようにする OpenAI のツールです。同じユーザーアカウントにインストールします。

npm install -g @openai/codex
codex --version

ログインには ChatGPT アカウント(Plus、Pro、Team)を使います。codex を起動して「Sign in with ChatGPT」を選び、表示されたアドレスをブラウザーのあるデバイスで開きます。スクリプトで使う場合は、代わりに OpenAI プラットフォームで発行した API キーを設定します。

echo 'export OPENAI_API_KEY="sk-..."' >> ~/.bashrc
source ~/.bashrc

config.toml のサンドボックスと承認モード

Codex には独自のサンドボックスと承認モードが備わっています。どちらも ~/.codex/config.toml で指定します。本番サーバーでは、次の組み合わせが妥当です。

mkdir -p ~/.codex
cat > ~/.codex/config.toml <<'EOF'
approval_policy = "on-request"
sandbox_mode = "workspace-write"
EOF

workspace-write は現在の作業ディレクトリ内での書き込みだけを許可し、on-request はそれを超える操作すべてについて、エージェントに許可を求めさせます。danger-full-access レベルはこの両方を解除するため、本番システムで使うべきではありません。

AGENTS.md のルール

CLAUDE.md と同じようなルールを、Codex は作業ディレクトリにあるファイル AGENTS.md から読み込みます。内容はそのまま流用できます。

cp ~/server/CLAUDE.md ~/server/AGENTS.md
cd ~/server && codex "有効化されているすべての systemd サービスが動作しているか確認し、失敗しているものを最後のエラーメッセージとともに一覧にしてください。"

無人実行には、タスクを引数に取る codex exec "Aufgabe" を使います。これは claude -p に相当します。

ステップ 6:3 つ目の選択肢としての Gemini CLI

Gemini CLI は Google のコマンドラインツールで、同じ仕組みで動作します。こちらも Node.js 上で動き、同じユーザーアカウントにインストールします。

npm install -g @google/gemini-cli
gemini --version

gemini を初めて起動したときは、Google アカウントでログインします。スクリプト用には、環境変数 GEMINI_API_KEY に API キーを設定します。Gemini CLI は、ルールを作業ディレクトリにあるファイル GEMINI.md から読み込みます。ここでも CLAUDE.md の内容をそのまま使えます。無人実行は、タスクを引数にして gemini -p "Aufgabe" で開始します。3 つのツールのどれを使うかは、主にすでにお持ちのアカウントで決まります。サーバー上での作業の進め方は 3 つとも同じで、複数を並行して運用することもできます。

代替案:エージェントを手元の PC で動かし、SSH 経由で作業させる

サーバーに何もインストールしたくない場合は、ノート PC で Claude Code または Codex を起動し、エージェントに SSH 経由でコマンドを実行させます。そのために、サーバーにはエージェントユーザー専用の SSH 鍵を登録し、CLAUDE.md には、サーバー向けのコマンドの先頭に必ず ssh aiagent@server を付けるというルールを書きます。たまの保守ならこれで十分ですが、長めのタスクや cron ジョブはサーバー上で直接動かすほうが適しています。専用の鍵、ホストエイリアス、承認を組み合わせた SSH 接続の詳細と、その後エージェントがどのような手順で本番システムにデプロイするかは、実践レポート AI をサーバーに接続する で紹介しています。

ステップ 7:安全を確保し、制限を設ける

  • 何かを変更するセッションの前には、必ずスナップショットかバックアップを取る。 自動化の方法は サーバーのバックアップ戦略 で紹介しています。
  • 承認モードはオンのままにする。 Claude Code の --dangerously-skip-permissions と Codex の danger-full-access は、使い捨ての VM のためのものです。
  • 秘密情報はエージェントの手の届かない場所に置く。 エージェントユーザーが .env ファイル、データベースのパスワード、顧客データを読めないようにします。エージェントが読んだものは、プロバイダーに送られます。
  • コスト上限は、API キーごとにプロバイダーのコンソールで設定します。
  • 追跡可能性: etckeeper をインストールして /etc 配下のすべての変更を Git に記録し、エージェントの要約も保存しておきます。
  • 受信側は何も変わらない。 いずれのツールも、必要とするのは外向きの HTTPS 通信だけです。ファイアウォール、Fail2ban、ホスティング事業者の DDoS 対策はそのままです。

最初のタスク:手始めに向いた 5 つの依頼

最初のタスクに向いているのは、読む量が多く、リスクのないものです。エージェントの仕事ぶりがどれほど丁寧かをすぐに確かめられ、しかもすぐに役立ちます。

  • ログレポート:「直近 24 時間のエラーと警告をサービスごとにまとめ、考えられる原因を添えて要約してください。」
  • サービスの確認:「失敗しているすべての systemd サービスを最後のエラーメッセージとともに一覧にし、それぞれ何をすべきかを説明してください。何も変更しないでください。」
  • ディスク容量:「最も容量を使っているディレクトリを示し、安全に整理できるものを提案してください。」背景は記事 Linux でディスクがいっぱいになったとき で解説しています。
  • アップデート:「適用待ちのセキュリティアップデートがあるパッケージはどれで、適用後に再起動が必要なサービスはどれですか?」
  • ウェブサーバー:「nginx の設定にエラーや古くなった設定がないか確認し、見つかった箇所をそれぞれ説明してください。」

こうした分析が正確になってはじめて、エージェントに書き込みを伴うタスクを任せる価値が出てきます。その場合も、まずはテストシステムで行ってください。

典型的なエラーと解決策

メッセージ原因と解決策
EACCES: permission denied(npm install -g の実行時)npm がシステムディレクトリに書き込もうとしています。ユーザープレフィックスを設定します。npm config set prefix ~/.npm-global を実行し、export PATH=~/.npm-global/bin:$PATH を ~/.bashrc に追記して、もう一度インストールします。
Node.js version ... is not supportedディストリビューションのパッケージソースから入れたバージョンが古すぎます。ステップ 2 をやり直し、node --version で 22.x が有効になっていることを確認します。
claude: command not foundネイティブインストーラーはプログラムを ~/.local/bin に配置しますが、このディレクトリがまだ PATH に含まれていません。export PATH=$HOME/.local/bin:$PATH を ~/.bashrc に追記し、シェルを再読み込みします。
ログイン時にブラウザーが開かないサーバーでは想定どおりの動作です。表示されたアドレスを別のデバイスで開いてコードを入力するか、API キーに切り替えます。
起動時の ECONNREFUSED またはタイムアウト外向きの HTTPS 通信がブロックされています。外向きのポート 443 に関するファイアウォールルールを確認してください。KernelHost のサーバーでは、外向きの通信は最初から制限されていません。
429 rate limit または overloadedサブスクリプションや API の利用枠を使い切ったか、プロバイダー側が混み合っています。しばらく待ち、無人実行には数分後に再試行する処理を組み込みます。
エージェントがコマンドのたびに確認を求める~/.claude/settings.json の許可リスト、または approval_policy(config.toml 内)を調整します。ただし、追加するのは読み取り専用コマンドだけです。
cron ジョブから空のメールが届くcron では、シェルの環境変数が設定されていません。API キーは crontab か、ジョブが読み込む環境ファイルで設定し、プログラムはフルパスで指定します。

ツールを最新の状態に保つ

ネイティブインストーラーでインストールした Claude Code は、自動で更新されます。npm でインストールしたツールは、1 つのコマンドで最新の状態にできます。

npm update -g @openai/codex @google/gemini-cli
codex --version
gemini --version

新しいバージョンでは、フラグやデフォルト設定が変わることがあります。アップデート後は、無人実行をそのまま続ける前にリリースノートにひととおり目を通し、次の日次レポートにおかしな点がないか確認してください。

結論

サーバー上の AI エージェントは 1 時間で準備できます。ユーザー、sudo 許可リスト、Node.js、ツール、ルールを順に用意するだけです。本当に手間がかかるのは制限の設計で、ここでは意図的に狭く設定しています。制限はタスクが必要とするときに一歩ずつ広げ、決して一律には広げないでください。KernelHost のルートサーバー や 専用サーバー では、そのために有効化が必要なものは何もありません。root アクセス、ディストリビューションの自由な選択、外向きの接続はすべて標準で利用できます。

その後エージェントが本番システムにどのようにデプロイするか、バックアップ、切り戻し手順、承認を含めた流れは、実践レポート AI をサーバーに接続する で説明しています。

まとめ

  • Claude Code、Codex CLI、Gemini CLI は、Node.js 22 があればどの Linux サーバーでも動作し、GPU は必要ありません。
  • エージェントには sudo 許可リスト付きの専用ユーザーを与え、決して root では動かしません。
  • ルールは CLAUDE.md、AGENTS.md、GEMINI.md のいずれかに書きます。読み取り専用コマンドは許可リストに入れ、それ以外はすべて承認が必要です。
  • cron ジョブやスクリプトには、支出上限を設定した API キーを使うのが適切な方法です。無人実行は読み取りだけにとどめます。
  • セッションの前には毎回バックアップを取り、秘密情報はエージェントの手の届かない場所に置き、承認モードはオンのままにします。
  • KernelHost のサーバーには、root アクセス、ディストリビューションの自由な選択、外向きの接続が最初から備わっています。

よくあるご質問

Claude Code にはサブスクリプションが必要ですか、それとも API キーで足りますか?
どちらでも使えます。Claude アカウント(Pro、Max、Team)の場合は、初回起動時にブラウザーでログインします。ブラウザーのないサーバーでは、別のデバイスでコードを入力してログインします。人が付いていない自動化タスクには、環境変数 ANTHROPIC_API_KEY に API キーを設定するほうが適切です。特定の個人に紐づかず、予算で上限を設けられるためです。
ブラウザーのないサーバーで Codex CLI にログインするにはどうすればよいですか?
ChatGPT アカウントでログインする方法と、環境変数 OPENAI_API_KEY を使う方法があります。前者では Codex が表示するアドレスをノート PC やスマートフォンで開き、後者では OpenAI プラットフォームで発行したキーを設定します。cron ジョブやスクリプトには、API キーのほうが確実です。
どの Node.js バージョンが必要ですか?
Claude Code は Node.js 18 以上、Codex CLI は Node.js 22 以上を必要とします。そのため、最初から Node.js 22 LTS を、NodeSource リポジトリから、またはエージェントユーザーのホームディレクトリで nvm を使ってインストールしてください。Debian 12 のパッケージソースにあるバージョンは古すぎます。インストール後は、node --version で有効なバージョンを確認します。まだ古いメジャーバージョンが表示される場合は、ディストリビューションのバージョンが PATH の中で先に見つかっています。
npm install -g が EACCES で失敗するのはなぜですか?
npm がグローバルインストールの際に、ユーザーに権限のないシステムディレクトリへ書き込もうとするためです。npm config set prefix ~/.npm-global でユーザープレフィックスを設定し、~/.npm-global/bin を PATH に追加してから、もう一度インストールしてください。代わりに nvm を使うか、Claude Code であれば npm を必要としないネイティブインストーラーを使う方法もあります。
Claude Code を cron ジョブで実行できますか?
はい。claude -p にタスクをテキストで渡し、使ってよいツールを許可リストで指定します。その際は API キーを使い、ツールを読み取り専用コマンドに限定し、出力はファイルかメールに送ります。システムに手を加える操作は、無人実行に含めないでください。
KernelHost の Windows サーバーでも動作しますか?
はい。Claude Code と Codex CLI は、Windows 上で Node.js を使ってネイティブに、または Windows Subsystem for Linux 上で動作します。ユーザーと sudo 許可リストの手順は、Windows では管理者権限を持たない専用の Windows ユーザーに相当します。KernelHost の Windows Server は Bring Your Own License 方式で、承認、バックアップ、秘密情報に関するルールは Linux とまったく同じように当てはまります。
Claude Code、Codex CLI、Gemini CLI を 1 台のサーバーで並行して使えますか?
はい。3 つのツールは同じユーザーアカウントで並行して動作し、同じ権限を使います。それぞれが作業ディレクトリにある自分用のルールファイルを読み込みます。Claude Code は CLAUDE.md、Codex CLI は AGENTS.md、Gemini CLI は GEMINI.md です。内容は 1 か所で管理し、3 つのファイルすべてにコピーするのが簡単です。どのツールを使うかは、たいていすでにお持ちのアカウントで決まります。
AI エージェントはサーバー上でどのくらいのメモリを必要としますか?
わずかです。言語モデルはプロバイダー側で動作するためです。コマンドラインツールと Node.js がセッション中に使うメモリは、たいてい数百 MB にとどまります。ほかにあまりサービスを動かしていないサーバーなら、2 vCPU と 4 GB RAM で十分です。ウェブサイト、データベース、ゲームサーバーも並行して動かしている場合は、エージェント用に 1 GB ほどの余裕を見込んでください。GPU は必要ありません。
Claude Code、Codex CLI、Gemini CLI はどのように更新しますか?
ネイティブインストーラーでインストールした Claude Code は、自動で更新されます。Codex CLI と Gemini CLI は npm update -g @openai/codex @google/gemini-cli で最新の状態にし、その後 codex --version と gemini --version でバージョンを確認します。フラグが変わることがあるため、アップデート後は無人実行を続ける前にリリースノートを読んでください。
サーバーに Gemini CLI を導入するにはどうすればよいですか?
エージェントユーザーのアカウントで npm install -g @google/gemini-cli を実行し、その後 gemini を起動して Google アカウントでログインします。スクリプト用には、環境変数 GEMINI_API_KEY に API キーを設定します。Gemini CLI はルールを作業ディレクトリにあるファイル GEMINI.md から読み込み、無人実行は gemini -p にタスクをテキストで渡して開始します。
AI エージェントを root で動かしてはいけないのはなぜですか?
指示を誤解したエージェントが root 権限を持っていると、誤った削除コマンドなどによって、最悪の場合はサーバー全体を壊してしまうおそれがあるためです。専用ユーザーと sudo 許可リストを使えば、エージェントが実行できるのは明示的に許可したコマンドだけになります。起こりうる被害はそれらのコマンドの範囲にとどまり、エージェントが何をしたかはいつでもログで確認できます。

Claude Code Codex CLI Gemini CLI ChatGPT AI エージェント Node.js Debian Ubuntu サーバー管理