本番環境とローカル環境の設定を分ける方法
ローカルでは動くのにロリポップ本番で止まる時は、コードそのものよりも、DBホスト名、URL、ファイルパス、エラー表示、メール送信先などの環境差が原因になりがちです。
この記事では、自作PHPサイトを公開する前に、ローカル、本番、GitHubへ置く設定を分ける考え方を整理します。目的は「本番パスワードをGitHubに上げない」「ローカル用設定を本番へ上書きしない」「本番だけのファイルを消さない」ことです。
設定を混ぜないための分け方
共通コードはGitHubで管理し、ローカル専用と本番専用の秘密情報はそれぞれの環境だけに置きます。
分けるべき設定
| 項目 | ローカル | 本番 |
|---|---|---|
| DBホスト名 | localhost やXAMPPのDB | ロリポップのDBサーバー名 |
| DB名・ユーザー・パスワード | 開発用DB | 本番用DB |
| サイトURL | http://127.0.0.1:8083 など | https://example.com |
| エラー表示 | 表示して原因を見つける | 画面に出さずログで見る |
| メール送信先 | 自分のテスト用アドレス | 正式な問い合わせ先 |
| アップロード対象 | 開発中のファイルを含む | 公開に必要なファイルだけ |
おすすめのファイル構成
共通処理と秘密情報を分けると、GitHubへ上げるもの、FTPで本番へ置くものを判断しやすくなります。
includes/
app_config.php
app_config.local.php
app_config.production.php
app_config.example.php
| ファイル | 役割 | GitHub | 本番FTP |
|---|---|---|---|
app_config.php | 共通の読み込み処理 | 上げる | 上げる |
app_config.local.php | ローカル用の秘密情報 | 上げない | 上げない |
app_config.production.php | 本番用の秘密情報 | 上げない | 本番だけに置く |
app_config.example.php | 設定見本 | 上げる | 任意 |
共通設定ファイルの例
環境名を見て、ローカル用か本番用の設定を読み込む形にします。実際のDBパスワードは別ファイルへ置きます。
<?php
$is_local = in_array($_SERVER['HTTP_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)) {
exit('設定ファイルが見つかりません。');
}
require $config_file;
.gitignoreに入れるもの
秘密情報、ログ、バックアップ、ローカルだけのメモはGitHubに上げません。公開フォルダへ置く場合も、外から見えない場所にするかアクセス制限を確認します。
includes/app_config.local.php
includes/app_config.production.php
*.log
backup/
.env
本番へ上書きしないもの
FTPでアップロードする時は、ローカル側の設定ファイルで本番ファイルを上書きしないようにします。
- 本番のDB接続情報が入った設定ファイル
- 本番だけで使う
.htaccess - 本番だけにあるアップロード画像やログ
- 問い合わせフォームの本番送信先
- Search Consoleや認証用のHTMLファイル
公開前チェック
| 確認 | 見ること |
|---|---|
| ローカルURL | ローカル用のDBとテスト送信先を使っている |
| 本番URL | 本番用のDB、URL、メール送信先を使っている |
| GitHub | パスワード、秘密鍵、APIキーが入っていない |
| FTP | 本番設定ファイルをローカル版で上書きしていない |
| エラー | 本番では詳細を画面に出しっぱなしにしない |