Claude Code 導入の設計と方針

アフィリエイト広告を利用しています

このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です

この記事では、Ubuntu 24.04.3 LTS 上に Claude Code の実行環境を構築するにあたり、手を動かす前に全体像を把握するための構成・方針・作業の流れをまとめています。

AIツールの導入は「とりあえずインストールして動かしてみる」でも始められますが、あとから権限設計やセキュリティを見直そうとすると、手戻りが大きくなりがちです。最初に完成形を把握してから作業に入ることで、各ステップで「なぜこの設定をするのか」が明確になり、迷いなく進められるようになります。

実際の作業手順は、このあとの各記事で1ステップずつ記録していきます。

設計思想

Claude Code は強力なツールですが、何を実行するかをすべてコントロールできるわけではありません。
そこで、この環境では次の方針で進めます。

  • Ubuntu 側は「作業場」に徹する ― Claude Code のインストールとコード生成のみを行う
  • 生成物の実行はメインPC側 ― rsync でファイルを同期してから、メインPCで動かす
  • 外部通信は最小限 ― Anthropic API への通信だけを許可し、それ以外はブロック
  • 万が一の暴走に備える ― 専用ユーザーの権限を絞り、ディスクやリソースにも上限を設ける
  • プロジェクトごとにユーザーを分離 ― A社・B社など案件ごとに専用ユーザーを作成し、他プロジェクトのファイルに一切触れられないようにする
  • データベースは読み取り専用 ― 既存の開発用DBサーバーに接続するが、閲覧のみ。書き込みはメインPCから手動で行う

「便利さ」よりも「安全に回せること」を優先します。

環境の全体像

┌─────────────────────────────────────────────────┐
│  メインPC(Windows 11)                           │
│                                                   │
│  ・コードの実行環境(PHP / MySQL / C++ など)      │
│  ・管理ユーザーで SSH 接続(公開鍵認証のみ)      │
│  ・管理ユーザー経由で rsync でファイルを取得      │
│  ・DB への書き込みはここから手動で行う            │
│  ・git 操作もここで実行                           │
│  ・同期監視スクリプト(PowerShell)で自動 pull    │
└────────────────┬────────────────────────────────┘
                 │ SSH / rsync(メインPC → Ubuntu のみ)
                 │ ※ 管理ユーザーで接続
                 ▼
┌─────────────────────────────────────────────────┐
│  Ubuntu 24.04.3 LTS(VMware)                     │
│                                                   │
│  ┌─────────────────────────────────────────────┐ │
│  │ 管理ユーザー                                 │ │
│  │ ・sudo 権限あり                              │ │
│  │ ・SSH ログイン:メインPCから公開鍵認証       │ │
│  │ ・システム管理(apt, UFW, ユーザー管理)      │ │
│  │ ・必要に応じてパッケージ追加                  │ │
│  │ ・su で各専用ユーザーに切り替え              │ │
│  │ ・rsync の接続先(各専用ユーザーの作業       │ │
│  │   ディレクトリを読み取り)                   │ │
│  └─────────────────────────────────────────────┘ │
│                                                   │
│  ┌─────────────────────────────────────────────┐ │
│  │ Claude Code 専用ユーザー(プロジェクトごと) │ │
│  │                                               │ │
│  │  例:claudecode-a(A社プロジェクト用)       │ │
│  │      claudecode-b(B社プロジェクト用)       │ │
│  │      claudecode-c(C社プロジェクト用)       │ │
│  │                                               │ │
│  │ 【共通の制限】                                │ │
│  │ ・sudo 権限なし                              │ │
│  │ ・Claude Code の実行のみ                     │ │
│  │ ・外部通信:Anthropic API のみ               │ │
│  │ ・DB接続:読み取り専用(SELECT のみ)        │ │
│  │ ・wget / curl / nc / ssh 等 実行不可         │ │
│  │ ・ディスク上限:20GB(ユーザーごと)         │ │
│  │ ・CPU / メモリ制限あり                       │ │
│  │ ・.bashrc 等は変更不可(chattr +i)          │ │
│  │ ・他プロジェクトのホームディレクトリには      │ │
│  │   アクセス不可                               │ │
│  └─────────────────────────────────────────────┘ │
│                                                   │
│  【UFW(ファイアウォール)】                       │
│  ・インバウンド:メインPCからのSSHのみ許可       │
│  ・アウトバウンド:デフォルト全拒否               │
│    → DNS(53)とHTTPS(443)のみ許可             │
│    → DBサーバーへの接続(3306/tcp)のみ許可      │
│    → apt 用通信は管理者が必要時に一時開放        │
└──────────────────┬──────────────────────────────┘
                   │ MySQL(3306/tcp、SELECT のみ)
                   ▼
┌─────────────────────────────────────────────────┐
│  開発用データベースサーバー(既存・別マシン)      │
│                                                   │
│  ・Claude Code 用に読み取り専用ユーザーを用意     │
│  ・個人情報は含まない(ダミー化済み)             │
│  ・書き込みはメインPCから手動で実施               │
│  ・Claude Code は SQL の提案まで                  │
└─────────────────────────────────────────────────┘

作業ステップ一覧

現在のベースライン(Ubuntu 24.04.3 LTS のクリーンインストールと初期設定)を最初に確立し、そこを起点に以下の順で進めます。

ステップ1:Claude Code 専用ユーザー作成

  • プロジェクトごとに専用ユーザーを作成(例:claudecode-a、claudecode-b)
  • 各ユーザーは自分のホームディレクトリのみアクセス可能(他プロジェクトのファイルは見えない)
  • sudo 権限は付与しない
  • SSH ログインは不要(管理ユーザーから su で切り替え)
  • 新規プロジェクト開始時にユーザーを追加、完了時に無効化する運用

ステップ2:SSH 強化

  • パスワード認証を無効化し、公開鍵認証のみにする
  • PermitRootLogin no に設定
  • 必要に応じて fail2ban を導入

ステップ3:UFW の精緻化

  • インバウンド:メインPCのIPアドレスからの SSH(22/tcp)のみ許可
  • アウトバウンド:デフォルト deny に変更
  • DNS(53/udp)と HTTPS(443/tcp)のみ許可
  • DBサーバーへの接続(3306/tcp)を許可(宛先IPを限定)
  • apt 用の通信(80/tcp)は管理者が必要時に一時的に開放する運用

ステップ4:専用ユーザーの制限設定

  • ディスククォータ:20GB 上限
  • リソース制限:ulimit でプロセス数制限、cgroups(systemd スライス)でメモリ制限
  • .bashrc / .profile / .bash_logout を chattr +i で変更不可に
  • ネットワーク系コマンドの実行制限(wget / curl / nc / ssh / scp / sftp)
  • ブラウザの確認・不要であれば削除

ステップ5:初期パッケージのインストール

  • python3(Claude Code が補助的に使用する可能性があるため)
  • build-essential(gcc/g++、コンパイル用)
  • PHP / MySQL / その他の言語環境は、必要になった時点で管理者が追加する

ステップ6:Claude Code のインストール

  • ネイティブインストーラーを使用(sudo 不要、~/.local/bin にインストールされる)
  • インストール手順:curl でスクリプトを取得して実行
  • 認証設定(OAuth または API キー)

ステップ7:rsync 同期の準備

  • 各専用ユーザーのホームディレクトリ内に作業用ディレクトリを作成
  • パーミッションの設定(管理ユーザーから読み取り可能にする)
  • メインPC側に PowerShell 監視スクリプトを配置(フラグ検知 → rsync → Beep通知)
  • rsync は管理ユーザー経由で接続し、各専用ユーザーの作業ディレクトリを pull する

ステップ8:スナップショット取得

  • すべてのセットアップと制限が完了した状態を保存
  • 例:2026-02-XX_claude-code-ready

ステップ9:動作確認

  • メインPCから SSH で接続できること
  • Claude Code が起動し、API と通信できること
  • rsync でファイルを同期できること
  • 専用ユーザーから外部に不正な通信が出ていないこと
  • 制限したコマンドが実行できないこと

想定されるリスクと対策

リスク対策
システムファイルの破壊sudo 権限なしで防止
不正なパッケージインストールsudo なし+外部通信ブロックで防止
外部への不正通信UFW で API と DNS 以外をブロック
ディスク大量消費クォータ 20GB で制限
CPU / メモリの暴走ulimit + cgroups で制限
設定ファイルの改ざんchattr +i で変更不可
ネットワークツール経由の脱出wget / curl / nc 等を実行不可に
プロジェクト間の情報漏洩プロジェクトごとにユーザーを分離、他ユーザーのホームディレクトリにアクセス不可
データベースの破壊・改ざん読み取り専用ユーザーで接続(SELECT のみ)
個人情報の漏洩開発用DBにはダミーデータのみ格納
Anthropic API 経由の情報漏洩API 通信自体は必須のため許容(ホームディレクトリ内に限定)

記事の構成(予定)

この全体概要のあと、各ステップを1記事ずつ記録していきます。

  1. Claude Code 実行環境の設計と構築 ― 全体概要(この記事)
  2. Ubuntu 24.04.3 LTS 初期セットアップ(ベースライン構築)
  3. Claude Code 専用ユーザーの作成と権限設計
  4. SSH の強化(公開鍵認証・ルートログイン禁止)
  5. UFW によるネットワーク制限
  6. 専用ユーザーの制限設定(クォータ・リソース・コマンド制限)
  7. Claude Code のインストールと初期設定
  8. rsync 同期の設定と動作確認
  9. 最終確認とスナップショット取得

※ 作業の進行に応じて、記事の分け方は変わる可能性があります。

セットアップ後の開発ワークフロー

環境が完成したあと、日々の開発は以下の流れで進めます。

Claude Code の起動と終了

Claude Code は常駐プロセスではありません。必要なときに起動し、作業が終われば終了します。

作業開始:
  管理ユーザーで SSH ログイン
  → su - claudecode-a(対象プロジェクトの専用ユーザーに切り替え)
  → claude(Claude Code 起動)

作業終了:
  → /exit または Ctrl+C で Claude Code 終了
  → プロセスは残らない

再開(後日):
  → su - claudecode-a
  → claude --continue(直前のセッションを再開)
  → claude --resume(過去のセッションを選択して再開)

セッション履歴は各専用ユーザーの ~/.claude/sessions/ に保存されます。
プロジェクトごとにユーザーが分かれているため、セッションも完全に分離されます。

プロジェクト完了時はユーザーを無効化し、改修時に有効に戻すだけで復帰できます。

開発サイクル

1. Claude Code に作業を依頼
   └→ コードの生成・修正・リファクタリングなど

2. Claude Code がファイルを更新
   └→ Ubuntu 上の作業ディレクトリ内でファイルが変更される

3. Claude Code が作業完了
   └→ CLAUDE.md に「作業完了時は touch ~/sync-ready を実行する」と
      記載しておくことで、Claude Code が自動でフラグを作成する

4. メインPC の監視スクリプトがフラグを検知
   └→ 管理ユーザー経由で SSH 接続、フラグを確認
   └→ rsync で作業ディレクトリを自動 pull
   └→ フラグを削除、Beep で完了通知

5. メインPC で差分を確認(diff)
   └→ 変更内容を目視レビュー、必要なら手動修正

6. Claude Code にコミットメッセージを用意してもらう
   └→ 変更内容に応じた適切なメッセージを提案させる

7. メインPC でコミット・プッシュ
   └→ git add / commit / push はメインPC側で実行

ポイントは、Claude Code が直接 git を操作しないことです。
コードの生成は Claude Code に任せますが、最終的な判断(差分の承認・コミット)は必ず人間が行います。

データベースに関しても同様です。Claude Code は DB の構造やデータを読んで SQL を提案しますが、実行はメインPC側から手動で行います。

※ git 操作を Claude Code にどこまで任せるかは、運用しながら今後検討します。

次のアクション

この全体像をもとに、まず Ubuntu 24.04.3 LTS の初期セットアップ(ベースライン構築)から実作業を開始します。