Copicode 日本語トップ

本番環境とローカル環境の設定を分ける方法

ローカルでは動くのにロリポップ本番で止まる時は、コードそのものよりも、DBホスト名、URL、ファイルパス、エラー表示、メール送信先などの環境差が原因になりがちです。

この記事では、自作PHPサイトを公開する前に、ローカル、本番、GitHub、AI相談へ出す情報を分ける考え方を整理します。目的は「本番パスワードをGitHubに上げない」「ローカル用設定で本番を上書きしない」「AIに秘密情報を貼らない」ことです。

確認日と対象

確認日: 2026年6月12日。ロリポップでWordPressではない自作HTML/PHPサイトをFTPまたはSFTPで更新し、ローカルPC、GitHub、本番サーバーの設定が混ざりそうな初心者向けです。

大規模フレームワーク、社内システム、クラウドのシークレットマネージャー、WordPress本体やプラグインの設定管理は対象外です。ここでは、小さなPHPサイトで config.php、DB接続、メール送信先、エラー表示を混ぜないための基本を扱います。

作成方針: このページは、Copicodeの実サイト運用、公開前後の確認、GitHubとPHPの公式情報、ロリポップ上のPHP運用をもとに整理しています。構成整理にはAIを補助的に使うことがありますが、危険操作、秘密情報、対象範囲、関連リンクは公開前に確認しています。

先に結論

ローカル用と本番用の設定は、同じファイル名のまま上書きし合わない形にします。GitHubへ上げるのは共通コードと見本ファイルだけです。本物のDBパスワード、APIキー、メール送信先、管理画面情報は、GitHubやAI相談へ貼らず、それぞれの環境だけに置きます。

置き場所置いてよいもの置かないもの
GitHub 共通PHP、見本設定、README、空のテンプレート 本物のDBホスト名、ユーザー名、パスワード、APIキー
ローカルPC 開発用DB、テストURL、テストメール送信先 不用意な本番DB接続情報、公開用APIキー
本番サーバー 本番DB、本番URL、本番メール送信先、ログ設定 ローカル用DB、テスト用URL、画面に出す詳細エラー
AI/Codex相談 伏せ字コード、ファイル構成、エラー文、確認済み項目 パスワード、秘密鍵、DB接続情報、管理画面URL

このページで整理できること

設定を混ぜないための分け方

共通コードはGitHubで管理し、ローカル専用と本番専用の秘密情報はそれぞれの環境だけに置きます。AIには本物の値ではなく、伏せ字にした構成とエラー文を渡します。

PHPサイトでGitHubに共通コード、ローカルに開発用設定、本番にロリポップ用設定、AI相談には伏せ字メモを分けて置く流れの図解

すぐに全部を.envへ移せばよいわけではない

.env や環境変数は便利ですが、ロリポップでFTP運用している小さなPHPサイトでは、置き場所、読み込み方法、GitHub除外、公開フォルダから見えないかを分けて考える必要があります。

  • まずは「共通コード」と「本物の秘密情報」を分ける
  • 見本ファイルには本物の値を書かない
  • GitHubへ上げないファイルは .gitignore で確認する
  • 本番サーバーだけに置くファイルは、FTPで上書き・削除しない
  • 公開フォルダ内に置く場合は、直接URLで見えないかも確認する

1. 分けるべき設定を一覧にする

設定分離は、DBだけの話ではありません。URL、パス、エラー表示、メール送信先、ログ、APIキー、管理画面の扱いもローカルと本番で変わります。

項目ローカル本番混ざると起きること
DBホスト名 localhost やXAMPPのDB ロリポップのDBサーバー名 本番で接続できない、または本番DBをローカルから触る
DB名・ユーザー・パスワード 開発用DB 本番用DB テストデータと本番データを取り違える
サイトURL http://127.0.0.1:8083 など https://example.com 本番でローカルURLへリンクする、リダイレクトが壊れる
エラー表示 原因確認のため表示することがある 画面へ詳細を出さずログで見る 本番でパスや内部情報が見える
メール送信先 自分のテスト用アドレス 正式な問い合わせ先 本番問い合わせがテスト先へ届く、テスト送信が顧客へ届く
アップロード対象 開発中ファイルやメモを含む 公開に必要なファイルだけ 下書き、ログ、秘密ファイルを公開する

2. おすすめのファイル構成

共通処理と秘密情報を分けると、GitHubへ上げるもの、FTPで本番へ置くもの、AIに見せてよいものを判断しやすくなります。ファイル名は一例です。

includes/
  app_config.php
  app_config.example.php
  app_config.local.php
  app_config.production.php
ファイル役割GitHubローカル本番FTP
app_config.php 環境を判定し、必要な設定を読み込む共通処理 上げる 使う 上げる
app_config.example.php 本物の値を入れない設定見本 上げる 参考にする 任意
app_config.local.php ローカル用の秘密情報 上げない 置く 上げない
app_config.production.php 本番用の秘密情報 上げない 基本は置かない 本番だけに置く

3. 共通設定ファイルの例

環境名を見て、ローカル用か本番用の設定を読み込む形にします。ここには本物のパスワードを書かず、別ファイルを読み込みます。

<?php
$host = $_SERVER['HTTP_HOST'] ?? '';
$is_local = in_array($host, ['localhost', '127.0.0.1'], true);

$config_file = $is_local
  ? __DIR__ . '/app_config.local.php'
  : __DIR__ . '/app_config.production.php';

if (!is_file($config_file)) {
  error_log('Config file is missing: ' . basename($config_file));
  http_response_code(500);
  exit('設定ファイルを確認してください。');
}

require $config_file;

本番で exit() の文言にDB名やサーバー内部パスを出さないでください。詳細はログで確認し、画面には短い一般メッセージだけを出します。

4. 見本ファイルには本物の値を書かない

example ファイルはGitHubへ上げてもよい見本です。本物のDB名、ユーザー名、パスワード、APIキー、メールアドレスを入れず、値の意味だけが分かる名前にします。

<?php
return [
  'db_dsn' => 'mysql:host=DB_HOST_HERE;dbname=DB_NAME_HERE;charset=utf8mb4',
  'db_user' => 'DB_USER_HERE',
  'db_password' => 'DB_PASSWORD_HERE',
  'site_url' => 'https://example.com',
  'mail_to' => 'owner@example.com',
  'debug' => false,
];

5. .gitignoreに入れるもの

秘密情報、ログ、バックアップ、ローカルだけのメモはGitHubに上げません。GitHubへ上げる前に git statusgit check-ignore で確認します。

includes/app_config.local.php
includes/app_config.production.php
.env
*.log
backup/
tmp/
deploy.local.ps1
git status --short
git diff --cached --name-only
git check-ignore -v includes/app_config.local.php
git check-ignore -v includes/app_config.production.php

6. 本番へ上書きしないもの

FTPでアップロードする時は、ローカル側の設定ファイルで本番ファイルを上書きしないようにします。本番にしかないファイルをローカル同期で消す事故にも注意します。

本番で守るものなぜ危ないかアップロード前の確認
本番DB接続情報 上書きすると本番だけDB接続できなくなる 変更リストに app_config.production.php が入っていないか見る
本番だけで使う .htaccess 500、リダイレクト、アクセス制御に影響する 変更前の本番ファイルを保存してから1行ずつ確認する
アップロード画像やログ ローカル同期で本番データを消すことがある 同期ではなく、必要ファイルだけアップロードする
問い合わせフォームの本番送信先 本番問い合わせがテスト先へ届く 本番設定の mail_to を伏せ字メモで確認する
Search Consoleや認証用HTML 認証や所有権確認が外れることがある FTPで削除対象に入っていないか見る

7. 公開フォルダ内に秘密ファイルを置く時の注意

理想は、秘密ファイルを公開フォルダの外へ置くことです。難しい場合でも、直接URLで内容が見えないか、PHPとして実行されても何も出力しないか、アクセス制限が必要かを確認します。

AIやCodexに相談する時のメモ

AIに設定分離を相談する時は、本物の値ではなく、伏せ字にした構成、エラー文、どこで止まっているかを渡します。

PHPサイトのローカル環境と本番環境の設定分離について相談します。

使っている環境:
- ローカル:
- 本番サーバー:
- GitHubで管理しているか:

ファイル構成:
- includes/app_config.php:
- includes/app_config.example.php:
- includes/app_config.local.php:
- includes/app_config.production.php:
- .gitignore:

今困っていること:
例: ローカルでは動くが本番でDB接続できない / GitHubへ上げてよいファイルが分からない / 本番設定を上書きしそうで怖い

エラー文:

確認済み:
- git status:
- .gitignore:
- FTPでアップロードするファイル:
- 本番にだけ置く設定ファイル:
- エラー表示とログ:

伏せている情報:
- DBホスト名
- DB名
- DBユーザー名
- DBパスワード
- APIキー
- 管理画面URL
- FTP情報

本物の秘密情報は貼っていません。
初心者向けに、次に確認する順番と、GitHubやFTPで事故りやすい点を教えてください。

ロリポップや制作会社へ問い合わせる時の文面

サーバー側の仕様や設定場所を確認したい時は、秘密情報を伏せたまま、症状と確認済みのことだけを送ります。

PHPサイトのローカル環境と本番環境の設定分離について確認したいです。

対象サイトURL:

困っている症状:
例: ローカルでは動くが本番でDB接続できない / 本番で設定ファイルが読み込めない / エラー表示をログ確認に切り替えたい

確認済みのこと:
- 本番側に設定ファイルを置いています
- GitHubには本物のDB接続情報を上げていません
- ローカル用設定と本番用設定を別ファイルにしています
- 直接URLで秘密ファイルの内容が見えないか確認中です

確認したいこと:
1. 本番で安全に設定ファイルを置く場所や注意点はありますか。
2. PHPのエラー表示やログ確認の設定で推奨される方法はありますか。
3. DB接続情報の確認で、サポートへ伝えてよい項目と伏せるべき項目を教えてください。

DBパスワード、APIキー、FTP情報、管理画面ログイン情報は送っていません。

公開前チェック

確認見ることできていない時
ローカルURL ローカル用DBとテスト送信先を使っている 本番DBへつながる設定を外す
本番URL 本番用DB、URL、メール送信先を使っている 本番用設定ファイルの有無を確認する
GitHub パスワード、秘密鍵、APIキーが入っていない push前に止まり、履歴に入った場合はキー変更も検討する
FTP 本番設定ファイルをローカル版で上書きしていない アップロード対象を変更ファイルだけに絞る
エラー 本番では詳細を画面に出しっぱなしにしない ログ確認へ切り替え、画面表示を短い文言にする

公式情報で確認するところ

Copicodeでは初心者が作業しやすい順番に並べ替えています。Git、PHP、ロリポップの仕様は変わることがあるため、最終確認は公式情報も合わせて見てください。

確認したいこと公式情報この記事での使い方
Gitで無視するファイル GitHub Docs Ignoring files .gitignore に秘密ファイルを入れる時の基本確認に使います。
PHPのエラー表示やログ PHP Manual error_reporting ローカルと本番でエラー確認方法を分ける考え方に使います。
ロリポップのPHP設定 ロリポップ公式 PHP設定 PHPバージョンやphp.ini設定を確認する時に使います。
DB設定の分離 PHPのDB設定を安全に分ける方法 DB接続情報だけをさらに詳しく分けたい時に使います。

次に読む記事

次の状態進むページ
DB接続情報だけを安全に分けたい PHPのDB設定を安全に分ける方法
ロリポップで自作PHPサイト全体を保守したい ロリポップで自作PHPサイトを安全に更新する入口
AIやCodexに本番修正を頼む前に確認したい AIコードを本番に入れる前後の安全確認入口
FTPで削除・上書きしてはいけないファイルを分けたい FTPで削除してはいけないファイル一覧
本番だけincludeが読み込めない ロリポップでPHP includeが本番だけ読み込めない時の確認順番