見出し画像

(将棋ソシャゲ)環境構築 Apache+PHP+MySQL

おはようございます。将棋ソシャゲ開発運営室です。

「将棋とソシャゲを融合したゲーム」を作るため、環境構築を行いました。

Apache+PHP+MySQL の環境です。

今回の記事は、私自身のための忘備録的な内容ですが、これから同じような環境を構築する方にとっては参考になるかもしれません。

ネットワーク周りの環境構築もしたのですが、それは次回記事にします。

(参考記事)

前提条件

Windows10 での環境構築を行います。

本記事では次のソフトウェアを自宅のPCにセットアップします。

  • Apache

  • PHP 8.2.5

  • MySQL

  • phpMyAdmin

Visual Studio Code のインストール

何をするにも、まずテキストエディタが必要です。プログラムを書くのにも必要ですが、設定を変更するのにも必要です。

メモ帳でも良いのですが、色々と不便なので、まずは Visual Studio Code をインストールします。厳密にいうと、私の環境では既にインストール済みでした。

私は今後のプログラミング作業は Visual Studio Code で行っていきたいと思います。

Visual Studio Code については、良い参考資料が山ほどあるため、リンクを貼るだけにして詳しい説明は省略します。

(参考文献)

参考文献

私は、次のサイトを参考に、環境構築を行いました。実は、このサイトを見ながら構築すれば迷うところは殆どありません。このサイトを見ても、尚分かりづらい所や、このサイトと違う設定をしたところを取り上げます。

(参考文献)

Apache24 のセットアップ

こちらの記事を参考に行いました。

(参考文献)

ダウンロードとインストール


まず、Apache をダウンロードし、C:\ドライブ直下に解答します。必要なのはApache24フォルダとその中身だけです。
参考文献の記事では別のフォルダに解凍していますが、私はC:\ドライブ直下を使いました。

設定の変更

httpd.conf を編集して設定を変更します。

参考文献では、まず ServerRoot を変更していますが、私はC:\ ドライブ直下にインストールしたため、デフォルトのままで行けます。

次に ServerName の設定です。この設定は何のためにあるのかよく分かっていません。良く分からない設定を変更するのは、たとえ定番の解説サイトに書いてあったとしても躊躇うので、まずは変更しないでやってみました。

そしたら、Apache の起動時にエラーが発生しました。使えないことはなさそうですが、起動時にエラーが出るのは嫌なので、参考文献の通り、「localhost:80」に変更することにしました。

次に、参考文献には書かれていませんが、念のため ServerAdmin を変更しました。これは、サーバ管理者のメールアドレスを設定しまs。

Windows サービスへの登録

Apache が自動起動するように Windows サービスへの登録を行います。登録は次のコマンドで行います。

httpd -k install

これは好みの問題もありますが、コントロールパネルのサービスから、Apache の設定のスタートアップの種類を「手動」に変更しました。

最後に、参考文献には解説が無いですが、ApacheMonitor をスタートアップに登録しました。これで Apache の起動状況を簡単に目視できるようになります。

PHP のセットアップ

こちらの記事を参考に行いました。

(参考文献)

ダウンロードとインストール


まず、PHP をダウンロードし、C:\ドライブ直下に解答します。
参考文献の記事では別のフォルダに解答していますが、私はC:\ドライブ直下を使いました。
そして、PHP のインストールディレクトリのフォルダ名は「php-8.2.5」としました。「C:\php-8.2.5」にインストールしたことになります。

私は、職業上、複数のバージョンの PHP を使うことがあるので、php というフォルダ名にするとバージョンが分からなくなってしまいます。バージョンが分かるようにフォルダ名にバージョン番号まで付ける癖があるのですが、今回もそれに倣いました。

PATH の設定

PHP のインストールディレクトリにパスを通しました。パスを通さなくても動作する言語処理系は存在しますが、PHP はパスを通さないと正常に動作しない場合があります。

既に説明した通り、職業上、複数のバージョンの PHP を使うことがあるので、パスを通すのは好きではないのですが、やむを得ないのでパスを通しました。

php.ini の設定

参考文献にある通り、「php.ini-development」をベースに作成しました。

まず、extension_dir を次のとおり変更しました。

extension_dir = "C:/php-8.2.5/ext"

次の extension を有効にしました。

extension=mbstring
extension=mysqli
extension=openssl
extension=pdo_mysql

mbstring は日本語を使うため、mysqli と openssl は phpMyAdmin で必要になるため、pdo.mysql は私のソシャゲで MySQL を使うためです。pdo.mysql があるなら mysqli は不要ではないかと思う方もいるかもしれませんが、mysqli が無いと、phpMyAdmin が動作しません。

次に mbstring の言語設定を行いました。日本語を指定しています。

mbstring.language = Japanese

参考文献では、この他にも mbstring 周りの設定を変更していますが、私は、よくわからない設定項目を変更するのは、たとえ定番の解説サイトに書いてあったとしても、好きではありません。トラブルが起きた場合に、設定を変更していると、かえって解決しにくい場合があります。よくわからない設定を変更するのはトラブルが起きてからにすれば良いと思っているので、変更しませんでした。

この他、参考文献では、include_path の設定の設定を変更しています。これも、実際に外部ライブラリを使う段階になって変更すれば良いやと思って、変更していません。

その他の設定

この他、参考文献にはありませんが、次の設定を行いました。

display_errors = Off

この設定をしておくと、PHP のプログラムでエラーが発生したとき、画面に(ブラウザ)にエラーが表示されなくなります。これは好みの問題もあると思いますが、私はいつも Off にしています。

error_log = "C:/php_errors.log"

代わりに、エラーのログが出力されるファイルを指定してあげます。これを指定しなくても出力はされるのですが、Apache のフォルダに出力されて分かりづらいので、仕事でも C:\ ドライブ直下に出力しています。

date.timezone = "Asia/Tokyo"

最後に、タイムゾーンを JST に変更します。この設定をしておかないと、date() 関数を使ったとき、(日本から見ると)ズレた時刻が返ってきます。

再度 Apache の設定

Apache から PHP を使えるようにするため、再び httpd.conf を編集します。

次の設定を行いました。

まず、モジュールを読み込む部分の設定に次の設定を加えます。

LoadModule php_module c:/php-8.2.5/php8apache2_4.dll

「c:\php-8.5.2」の部分は、各自、PHP のインストールディレクトリを指定しましょう。

次に、httpd.conf の末尾に次の設定を加えます。

<FilesMatch ".php$">
    AddHandler php-script .php
    AddType application/x-httpd-php .php
</FilesMatch>

これは拡張子 .php のファイルにアクセスがあったときに PHP の言語処理系を動作させることを表しています。

PHPIniDir "c:/php-8.2.5"

これは php.ini の置かれている場所を指定します。

参考文献にはありませんが、私は次の設定を行いました。

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

この設定をしておくことで、例えば http://localhost/ のようにファイル名の指定を省略したアクセスがあったとき、index.php を開くようになります。

設定が終わったら、Apache を再起動して、phpinfo() を実行し、正常にできているかを確認しましょう。

MySQL のセットアップ


こちらの記事を参考に行いました。

(参考文献)

MySQL と MariaDB について

私自身、違いが良く分からないので、仕事でも良く使っている MySQL を使いました。

ダウンロードとインストール

これは、参考文献通りに勧めれば詰まるところは有りません。

ただし、注意事項があります。

まず、Oracle のアカウントを取らなくても MySQL はダウンロードできるということこです。私は勘違いしていて、Oracle のアカウントを取得してしまいましたが、これをやると広告メールが届くようになり、鬱陶しいです。

次に、参考文献に無い内容として「Server File Permissions」という設定項目について訊かれます。
これは、MySQL のデータベースの実体となるファイルが置かれているディレクトリのアクセス権限の設定だと思います。
デフォルトでは、通常のユーザはアクセスできないようになるそうですが、データベースのバックアップには mysqldump コマンドを使えば良いので、これはデフォルトのままにしました。

その他の設定

好みの問題もあると思いますが、私は PATH を通しました。mysql や mysqldump のようなコマンドを、今後沢山使うことになると思いますが、そのたびに、フルパスを打ち込むのは面倒です。

phpMyAdmin のセットアップ

こちらの記事を参考に行いました。

(参考文献)

これは、参考文献通りに進めれば詰まるところは有りません。

注意事項としては、php.ini の設定で mysqli と openssl を有効にしておくということです。

この他に、私は同じジャンルのツールとして、A5:SQL Mk-2 というソフトが好きです。これも導入しました。

MySQL の照合順序

MySQL のデータベースを作成するにあたって、照合順序を何にすればいいのか迷う方がいるかもしれません。私はデフォルトの設定では使い難そうだと思ったので、utf8mb4_bin にしました。これについては、次の資料が参考になります。

(参考文献)

最後に

データベースにユーザマスタを作成し、PHP からアクセスできるか検証するプログラムを書きました。そしたらうまくいきました。

コードはこんな感じになります。データベースのパスワードはマスクして伏せてあります。

<?php
$dsn = 'mysql:dbname=shogi_soshage;host=localhost';
$user = 'root';
$password = '********';

try
{
	$db = new PDO($dsn, $user, $password);
	$sql = 'SELECT user_id, login_id FROM mast_user';
	$stmt = $db->query($sql);
	$user_data = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
catch (PDOException $e)
{
	$errors[] = $e->getMessage();
}

$db = null;
?>
<!DOCTYPE html>
<html lang="ja">
	<head>
		<meta charset="UTF-8">
		<title>将棋ソシャゲ</title>
	</head>
	<body>
		<h1>将棋ソシャゲ</h1>
<?php
if (isset($errors))
{
	foreach ($errors as $error)
	{
		$str = htmlspecialchars($serrortr, ENT_QUOTES, "UTF-8");
		echo "\t\t<p>{$str}</p>\r\n";
	}
}
else
{
	echo "\t\t<table>\r\n";
	echo "\t\t\t<tr>\r\n";
	echo "\t\t\t\t<th>ユーザID</th>\r\n";
	echo "\t\t\t\t<th>ログインID</th>\r\n";
	echo "\t\t\t</tr>\r\n";
	foreach ($user_data as $user_row)
	{
		$user_id = htmlspecialchars($user_row['user_id'], ENT_QUOTES, "UTF-8");
		$login_id = htmlspecialchars($user_row['login_id'], ENT_QUOTES, "UTF-8");
		echo "\t\t\t<tr>\r\n";
		echo "\t\t\t\t<td>{$user_id}</td>\r\n";
		echo "\t\t\t\t<td>{$login_id}</td>\r\n";
		echo "\t\t\t</tr>\r\n";
	}
	echo "\t\t</table>\r\n";
}
?>
	</body>
</html>

このプログラムを実行すると、テーブルタグを使って、ユーザマスタの内容が表形式で表示されます。

今回の記事は以上です。次回は、ネットワークの設定のお話をします。


この記事が気に入ったらサポートをしてみませんか?