{{tag>windows, php, builtin_server, xdebug, git, vscode}}
====== Windows 上で DokuWiki 開発環境を構築 ======
DokuWiki の動作検証やプラグイン開発に必要な開発環境を簡単に作る方法をご紹介します。
開発環境の構築目標としては、**DokuWiki およびプラグイン動作検証のためにステップ実行と変数参照ができる環境を構築すること** とします。
なお、HTML / JavaScript 側のデバッグはブラウザのデバッグツールを使えるので、省略します。
===== 必要なソフトウェア =====
* [[ https://windows.php.net/download/ | PHP for Windows ]]
* [[ https://xdebug.org/download | Xdebug ]] 自分がインストールした PHP にあったバイナリを選択してください。
* [[ https://gitforwindows.org/ | Git for Windows ]] Git 管理に必要です。
* [[ https://code.visualstudio.com/ | Visual Studio Code ]]
* [[ https://www.dokuwiki.org/dokuwiki | DokuWiki ]]
===== 環境構築手順 =====
- PHP のインストール
- Xdebug のインストール
- Git for Windows のインストール
- Visual Studio Code のインストール
- DokuWiki のダウンロード
- git の初期化と .gitignore の作成
- PHP ビルトイン Web サーバのデバッグ実行
- Visual Studio Code でデバッグリスナの開始
==== 6 git の初期化と .gitignore の作成 ====
ここに本家が設定している .gitignore があり、参考になります。
https://github.com/splitbrain/dokuwiki/blob/master/.gitignore
履歴や差分は捨てて、コンテンツ、添付ファイル、本体とプラグイン、設定ファイルを Git 管理にするには、以下の設定で。
data/attic/
data/cache/
data/index/
data/locks/
data/meta/
data/media_attic/
data/media_meta/
data/tmp/
複数人でソース管理を行う場合は、設定ファイルはディレクトリ名を変更して雛形だけ共有し、各人の設定ファイルは別ディレクトリで管理してシンボリックリンクを作成すると良いのでは?
==== 7 PHP ビルトイン Web サーバのデバッグ実行 ====
私は普段から Git Bash を使用しているため、その前提で書いていますが、Windows の Command Prompt などを使用する場合は $DOKU_INC を %DOKU_INC% に読み替えてください。
DOKU_INC=/path/to/dokuwiki
cd $DOKU_INC
# Xdebug 2.x まで
php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=1 \
-dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 \
-S localhost:8080 index.php
# Xdebug 3 以降では各種オプション体系が変更されている
php -dxdebug.mode=debug -dxdebug.start_with_request=1 \
-dxdebug.client_port=9000 -dxdebug.client_host=127.0.0.1 \
-S localhost:8080 index.php
===== その他の設定 =====
==== Hosts ファイルの設定 ====
通常、開発環境のデータベースは localhost で接続可能な環境が多いかと思いますが、レンタルサーバと開発環境で設定ファイルを同期させる場合、開発環境でもレンタルサーバーで指定されたデータベース名と同じ名前で接続できる必要があります。
本番環境のデータベース接続定義を開発環境と共有する運用方法は、多人数で開発を行う場合には絶対お勧めできません。また、ソースコード・リポジトリを公開環境に置く場合は、絶対に避けるべき運用方法です。お一人様開発でプライベートリポジトリの場合にのみ、自己責任でお願いします。
Linux 等であれば、/etc/hosts ファイルを直接編集すれば良いですが、Windows は hosts ファイルの場所がディレクトリ階層の深い場所にあり、何かと面倒です。
そのため、[[http://softwarefactory.jp/ja/products/hostsfilemanager/|Hosts File Manager]] というソフトを使い、レンタルサーバー上のデータベース名をローカルホストのエイリアスとして設定できます。簡単に hosts ファイルの編集ができ、お勧めです。
==== ポートフォワーディング ====
また、同じ理由でレンタルサーバと開発環境のデータベースポート番号が異なる場合は、Windows 標準のポートフォワーディング機能を使用します。
# 127.0.0.1:3366 を 127.0.0.1:3306 に転送
netsh interface portproxy add v4tov4 listenport=3366 listenaddr=127.0.0.1 connectport=3306 connectaddress=127.0.0.1
# 設定の確認
netsh interface portproxy show all
# 設定の削除
netsh interface portproxy delete v4tov4 listenport=3366 listenaddr=127.0.0.1
==== シンボリックリンクの解決 ====
Windows 上で開発しようとした際に最も問題になるのは、シンポリックリンクでしょう。Git Bash 上でシンボリックリンク操作を行うと、作れた様な気になりますが、実態は単なるファイルコピーであり、変更が反映されません。。。
Windows には mklink という機能があり、これを使うとシンポリックリンクが作成できます。
管理者権限でコマンドプロンプトを起動し、以下を実行します。(DOKU_ROOT にセットするディレクトリパスは DokuWiki を展開したディレクトリによみかえてください)
set DOKU_INC=C:\dokuwiki
cd %DOKU_INC%\lib
mklink /D components ..\api\Components
cd %DOKU_INC%\data\pages
mklink /D apps ..\..\api\Pages
* ウィンドウズなので、ディレクトリ記号は円マークです。
* /D をつけないと、ファイル同士のシンボリックリンクとなります。
* mklink は UNIX のシンボリックリンクと、SRC / DST の引数の順番が逆です。
==== メール送信 ====
DokuWiki のメール送信は、ホストの mail コマンドを呼び出しますが、Windows には Mail コマンドは存在しません。
外部の SMTP サーバーに直接メールを送れれば、Linux でも Windows でもどちらでも利用できます。
これを実現する SMTP Plugin というプラグインがありますので、Windows で開発する場合は必要になるかも知れません。