サーバー構築を任されたとき、多くの担当者がまず動くものを作ろうと手を動かし始める。しかし構築が3割ほど進んだ段階で「この設計では要件を満たせない」と気づき、やり直しが発生するケースは現場でよく見られる。本記事では、手を動かす前に何を・どの順番で決めるべきかという設計判断の優先順位を整理する。焦点は「どう動かすか」ではなく「何を先に決めるか」に置いている。
「動かしながら考える」が後で崩れる構造
初動の「試してみる」が変更不可な決定を埋め込む
サーバー構築では、最初に置いたOSの選択・ストレージのレイアウト・ネットワークアドレス設計が、後工程のすべての土台になる。試しに動かした環境をそのまま本番に昇格させようとしたとき、/bootのサイズ不足・LVMの未設定・IPアドレスの衝突といった問題が次々と表面化する。ある現場では、試作環境を流用して本番に近い負荷試験を始めた結果、ディスクパーティションの変更だけで丸1日の作業が発生したという話を聞く。「動くこと」と「本番に使えること」は別の基準であり、その区別を最初に意識できているかどうかで後工程の難易度が変わる。
「動かす」と「設計する」は別のフェーズ
構築プロジェクトを「設計フェーズ」と「実装フェーズ」に分けると、設計の決定事項は実装の前提条件になる。設計を固めないまま実装を始めると、個々の作業判断がその場その場で積み上がり、3か月後に構成図を描いても実態と一致しない状態に陥る。特にクラウドとオンプレが混在する環境では、後からネットワーク設計を変えようとすると影響範囲が10サービス以上に及ぶこともある。設計と実装の境界を意識するだけで、手戻りのリスクを大幅に下げられる。
アンチパターン:「動けばOK」という完了定義
「ログインできた」「サービスが起動した」を完了の基準にすると、セキュリティ設定・バックアップ設計・監視設計が後回しになる。後回しにされた項目は、プロジェクトが繁忙期に差しかかると「いつかやる」のまま放置されやすい。このパターンで構築された環境は、引き継ぎ時に「何も文書化されていない」「設計意図が分からない」という状態になりやすく、保守コストが構築コストを超えることがある。完了の定義を「設計要件を満たしていること」に置き換えることが、この落とし穴を避ける第一歩になる。
手を動かす前に決めるべき順番
最初に決める「変更不可」の3点
構築を始める前に最低限固めるべき項目は、(1)ネットワーク設計(アドレス空間・サブネット分割・ルーティングポリシー)、(2)OS・ミドルウェアのバージョン方針、(3)ストレージレイアウト(LVM・パーティション設計)の3点。これらは後から変更する際にサービス停止やデータ移行を伴うため、最初の合意なしに進めるのは危険。5台構成のシステムでも、ネットワーク設計を後から変えると影響するサーバーは全台になる。この3点を設計書として残した上で実装を始めることが、崩れない構築の起点になる。
決め方の優先順位ロジック
設計項目は「依存される側が先」という順で固める。ストレージがなければOSは動かない、ネットワークがなければサービスは外に出られない、認証基盤がなければアクセス制御は設計できない。この依存関係を上流から下流へ向けて書き出すだけで、決定の順番が自然に決まる。判断の優先順位を可視化するには、構成要素を「インフラ層・OS層・ミドルウェア層・アプリ層」に分け、下の層から決定を積み上げる方法が現場では使われている。依存関係の見落としが、後で「あの設計を先に決めておけばよかった」という後悔につながる。
「決定の先送り」が許されるものと許されないもの
設計段階で全項目を確定する必要はなく、「この時点で決めなければ後工程が止まる」項目と「後から追加できる」項目を分けて管理することが重要。例えばモニタリングツールの選定は後回しにできるが、ログの保存先ディレクトリ構造は最初から決めておかないと後で変更が困難になる。判断の先送りを意図的にコントロールすることが、設計フェーズの品質を決める。先送りした項目は「いつまでに決めるか」という期限も合わせて明示しておく。
変えにくい判断・後で変えられる判断の見分け方
「変えにくさ」の判断基準
設計項目が変えにくいかどうかは、「変更時にサービス停止が必要か」「データ移行が発生するか」「他の設計項目への連鎖影響があるか」の3点で判断できる。この3点のうち2つ以上が当てはまる項目は、最初に確定させる対象として扱う。逆に1つも当てはまらない項目は後回しにしても問題が起きにくい。設計の初期段階でこの分類を行うだけで、優先して議論すべき論点が絞り込める。
| 設計項目 | 変更難度 | 主な変更コスト | 先に決めるべきか |
|---|---|---|---|
| IPアドレス体系・サブネット設計 | 高 | ルーティング全体の見直し・全サーバーの再設定 | 必ず先に決める |
| ストレージレイアウト(パーティション・LVM) | 高 | データ移行・サービス停止 | 必ず先に決める |
| 認証基盤(LDAPドメイン設計) | 高 | 全サービスの認証設定変更 | 必ず先に決める |
| OSバージョン・ディストリビューション | 中〜高 | 再構築・パッケージ再評価 | 先に決める |
| ファイアウォールポリシーの骨格 | 中 | ルール全体の見直し | 先に決める |
| モニタリングツールの選定 | 低〜中 | 設定ファイルの移行 | 後回し可 |
| Webサーバー設定・証明書管理方法 | 低 | 設定ファイルの更新 | 後回し可 |
変えにくい設計項目の代表例
IPアドレス体系は変えにくい代表例。サブネットを後から切り直すにはルーティング全体の見直しが必要になり、接続先サービスの設定変更も連鎖する。同様にLDAPやActive Directoryといった認証基盤のドメイン設計も変更コストが高い。一方でWebサーバーの設定ファイルや証明書の更新スケジュールは後から変更しやすい部類に入る。変えにくい項目ほど「決定の根拠」を設計書に明示しておくことが、後の設計レビューで効いてくる。
変更コストを「設計時に」意識する習慣
変更コストを設計時に見積もる習慣のない担当者が、後で「こんなに影響範囲が広いとは思わなかった」と行き詰まるケースは多い。設計判断を下すたびに「これを後で変えるとしたら、何が動かなくなるか」を自問するだけで、リスクの高い決定を早期に識別できる。この習慣は個人の能力というより、設計レビューの際に「変更コスト」を議題に加えることでチームに定着させる性質のもの。形式を整えることより、問いを立てる文化を根付かせることが先決になる。
■ この設計判断を深める一冊[PR]
新しいLinuxの教科書 第2版(三宅英明・大角祐介/SBクリエイティブ)
読める・書けるスクリプトの土台を固める入門書です。脱属人化の第一歩となる基礎体力づくりに向いています。
最小構成から始めて広げる設計の考え方
最小構成の定義と意義
最小構成とは「本番要件を満たす最低限の構成」であり、「動くだけの構成」ではない。冗長化・監視・バックアップを省いた構成はプロトタイプであって最小構成ではない。本番を前提とした最小構成を決めることで、追加する設計要素の優先順位が自然に決まる。「最小」の定義をチームで合意しておかないと、構築の完了定義が担当者ごとにズレる原因になる。
「広げる」設計の鉄則
最小構成から広げるときは、「機能を追加する」のではなく「前提を維持しながら要素を追加する」という視点が重要。例えば単一サーバー構成から冗長化に移行する場合、DNS設定・ロードバランサー・セッション共有の設計が同時に必要になる。1つの要素を追加するたびに「何が変わるか」を確認しながら進めることが、設計の崩れを防ぐ鍵。追加の具体的な手順は手を動かすパートで習得するとして、設計としては「追加時の影響範囲」を先に整理しておく。
拡張シナリオを設計時に想定する
最小構成を固めるときに「将来2倍・3倍に拡張する場合の設計上の制約」を書き出しておくと、後の拡張判断がスムーズになる。例えばストレージを将来的にNASやSANに移行したい場合、最初からファイルシステムの選択肢を絞りすぎると後で移行が困難になる。20台規模のシステムを想定して設計した環境と、5台を想定して設計した環境では、ネットワーク設計の複雑さが大きく異なる。拡張シナリオは「必ず実現する」ではなく「可能性がある」程度でよく、設計の柔軟性を保つための思考実験として位置付ける。
初学者が飛ばしがちな土台の設計項目
セキュリティ設計を「後でやる」にしない
ファイアウォールのゾーン設計・SSHアクセス制限・特権管理の枠組みは、構築開始時に骨格だけでも決めておく項目。後から「追加」するより「最初から組み込む」方が設計の一貫性が保たれる。セキュリティ設計を後回しにすると設定が場当たり的になりやすく、監査時に「なぜこの設定なのか」という説明ができなくなる。特権アカウントの管理方針は1台目を構築する前に決めておかないと、2台目・3台目で方針がブレる原因になる。
命名規則・ラベル設計の軽視
ホスト名・リソース名・タグ設計は地味に見えるが、10台以上の環境になると命名の一貫性がないだけで運用コストが大幅に上がる。「環境(prod/stg/dev)-役割-番号」という体系でホスト名を決めておくだけで、障害時の特定・スクリプト処理・ドキュメントの整合性がすべて改善される。現場では「後から命名規則を統一しようとして1週間かかった」という話もある。命名規則は一度決めたら変えにくいため、最初の合意が設計品質を左右する。
ドキュメント設計は構築開始前に構造だけ決める
構築が完了してからドキュメントを書こうとすると、設計意図が記憶から薄れていることが多い。ドキュメントの構造(何をどこに書くか)だけでも構築開始前に決めておくと、構築しながら記録が積み上がる。特に「なぜその設計を選んだか(採用しなかった選択肢と理由)」を記録する欄を作ることが、後の設計見直し時に効く。文書化を省略すると、担当者が替わった時点でその環境は「誰も設計意図を知らない環境」になる。
「小さく作って確かめる」を成立させる進め方
検証環境を「本番の縮小版」として設計する
検証環境が本番と構成が大きく異なると、検証で問題が出なかった変更が本番で問題を起こす。検証環境は規模は小さくてよいが「設計の構造は本番と同一」にすることが原則。台数は1〜2台に減らしても、ネットワーク構成・OS設定・ミドルウェアの設定体系は本番と同じで管理する。検証と本番の差異が大きいほど検証の意味が薄れ、本番のみで発覚する問題が増える。
「確かめる」ための判断基準を先に定義する
「小さく作って確かめる」を有効に機能させるには、何をもって「確かめた」と言えるかの基準を先に定義しておく必要がある。基準がないまま確認すると「動いたからOK」になりがちで、負荷・セキュリティ・障害時の挙動が未確認のまま本番に進む。判断基準は「機能が動くか」「負荷をかけたときの挙動」「障害時のフェイルオーバー」の3軸で事前に合意しておくのが、現場での標準的なアプローチ。合意のないまま進むと、確認内容が担当者の主観に依存する。
イテレーションを設計段階から組み込む
「小さく作って確かめる」のサイクルを短く回すには、設計段階でイテレーションの区切りを決めておくことが必要。1回のイテレーションで確認する範囲が広すぎると、問題が出たときの原因特定が難しくなる。「ネットワーク構成の確認」「OS基本設定の確認」「ミドルウェア設定の確認」と段階を分けておくと、どの段階で問題が起きたかが明確になり、後戻りのコストが下がる。設計段階で「確認フェーズの区切り」を書いておくことが、実装中の判断ブレを防ぐ。
はじめての構築 設計順チェックリスト
以下は構築着手前に確認すべき設計判断の順序をまとめたチェックリスト。「作業が完了した」ではなく「判断・合意が完了した」の意味でチェックを入れる。
- ネットワーク設計の確定 アドレス空間・サブネット分割・ルーティングポリシーを設計書に明記。変更不可として扱う。
- ストレージレイアウトの確定 パーティション構成・LVMの有無・各領域の用途と想定サイズを決定。
- OSおよびミドルウェアのバージョン方針の確定 ディストリビューション・バージョン・サポート期間の方針をチームで合意。
- アクセス制御の枠組みを決定 特権管理方針・SSHアクセス制限・ファイアウォールゾーン設計の骨格を先に確定。
- 命名規則・ラベル設計の確定 ホスト名・リソース名の命名体系を決め、全台に適用するルールを文書化。
- 「最小構成」の定義をチームで合意 プロトタイプではなく「本番要件を満たす最低限」として定義。
- 設計項目を「変えにくい/変えられる」に分類 各項目に変更難度を付け、後回し可能な項目と不可能な項目を明示。後回しには期限も設ける。
- 設計ドキュメントの構造を先に決める 「なぜその設計を選んだか」を記録する欄を設け、構築と並行して記録できる体制を作る。
- 検証環境の本番同一性を確保する方針を確認 台数は減らしても構成の構造は本番と同一にする方針を合意。
- 「確かめた」の判断基準を先に定義 機能・負荷・障害時挙動の3軸で確認基準を明文化し、担当者間で合意。
- 将来の拡張可能性を設計書に付記 2倍・3倍規模に拡張する場合の設計上の制約を書き出し、ファイルシステム選択など制約になりやすい項目を先に確認。
▶ 手を動かして本番まで到達する
手を動かして本番まで到達しませんか
ここまでの設計判断は、読めば腹に落ちます。ですが「自分の手で本番まで通しきる自信」は、それとは別の話になります。
設計判断を実装力に変える2日間ハンズオンです。
Linuxマスターセミナー