こんにちは、hacktkです。
今回は、PHPを使ったwebアプリケーション開発における協働のお話です。
背景
PHPでwebアプリケーションを開発するときは、手元のPCにwebサーバーやDBなどの環境が必要ですよね。
この環境は、エンジニアであればVMなりコンテナなりで準備できますが、非エンジニアにはそう簡単なことではありません。
当社にはエンジニアだけでなく、ディレクター職やデザイナー職の社員も在籍しているため、この「環境をどうつくるか問題」は悩みのタネでした。
そこで現在お試し中なのが、以下のように簡易的に環境を整える方法です。
- PHPのビルトインウェブサーバー
- 社内サーバーのMySQLを共用とする
- その他APIも社内サーバー
※ 当社は全員がOSXで、かつPHP5.4以上が入っていることを前提にできる状態です。
ビルトインウェブサーバーを活用する
PHP5.4以上で使えるビルトインウェブサーバーは、ルータースクリプトを使うことによって、apacheのrewrite処理と同じような動きをさせることができます。
route.phpの例
<?php if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER['REQUEST_URI'])) { return false; // リクエストされたリソースをそのままの形式で扱います。 } require_once __DIR__.'/index.php';
このルータースクリプトを準備して、以下のコマンドを実行すれば開発に使えるビルトインウェブサーバーが起動します。
※ localhostでなく 0.0.0.0
とすると別PCからアクセスもできるようになります。
$ php -S localhost:8000 -t document_root router.php
ただ、このコマンドを非エンジニアに覚えてもらうのは無理なので、簡単なシェルスクリプトにします。
server.shの例
#!/bin/sh -ex ROOT=$(cd $(dirname $0);pwd) sudo php -S 0.0.0.0:80 -t $ROOT $ROOT/route.php
このserver.shは実際にWordPressのプロジェクトで使っているものとほぼ同じなのですが、WordPressが80番ポートでないと動いてくれないのでsudo実行しています。
※ 1024番以下のポートを使う場合は要sudo
このroute.phpとserver.shをドキュメントルートに置いて、 sh ./server.sh
でOKです。
pros/cons
pros
- とにかく手間が少ない(git clone後にserver.sh実行でそのまま動く)
- DBが外にあるため、データまわりのサポートがしやすい
- webサーバーのログがterminalにそのまま出力されるので、サポートがしやすい
cons
- PHPのバージョンが使い分けられない
- SSL/TLS接続ができない
- DBが共用なので、同時変更の問題が起きる
- ビルトインウェブサーバーなのであまり複雑なことはできない
注意したところなど
当社はリモート勤務が多く、東京ー福岡のメンバーでプロジェクトを組むことも多いので、「ちょっとPC見せて」のサポートは難しい状況です。
そのため、サポートのしやすさに重点を置きました。
また、PHPのバージョンによる問題は、コードレビューやstaging環境での確認で防ぐようにしています。
(ここは徐々にテストで自動化したい部分です・・・)
DBは社内の空きiMacにvagrantでMySQLサーバーを立てています。
まとめと、例のあれ
職務のうち、本質的でない部分はできればやりたくないものですよね。
非エンジニアにとってはDockerでさえ大げさすぎるので、現在はこのような方法を試しているところです。(エンジニアは主にvagrantで環境構築しています)
当社は多職種とも協働し、新しいサービスをつくっていけるエンジニアを募集中です。
まずはお話だけでも、お気軽にどうぞ。