非エンジニアのための開発環境を準備する

こんにちは、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です。

f:id:hacktk:20160823195649p:plain

pros/cons

pros

  • とにかく手間が少ない(git clone後にserver.sh実行でそのまま動く)
  • DBが外にあるため、データまわりのサポートがしやすい
  • webサーバーのログがterminalにそのまま出力されるので、サポートがしやすい

cons

  • PHPのバージョンが使い分けられない
  • SSL/TLS接続ができない
  • DBが共用なので、同時変更の問題が起きる
  • ビルトインウェブサーバーなのであまり複雑なことはできない

注意したところなど

当社はリモート勤務が多く、東京ー福岡のメンバーでプロジェクトを組むことも多いので、「ちょっとPC見せて」のサポートは難しい状況です。
そのため、サポートのしやすさに重点を置きました。

また、PHPのバージョンによる問題は、コードレビューやstaging環境での確認で防ぐようにしています。
(ここは徐々にテストで自動化したい部分です・・・)

DBは社内の空きiMacにvagrantでMySQLサーバーを立てています。

まとめと、例のあれ

職務のうち、本質的でない部分はできればやりたくないものですよね。
非エンジニアにとってはDockerでさえ大げさすぎるので、現在はこのような方法を試しているところです。(エンジニアは主にvagrantで環境構築しています)

当社は多職種とも協働し、新しいサービスをつくっていけるエンジニアを募集中です。
まずはお話だけでも、お気軽にどうぞ。

ゼロからサービスを開発し育てていきたい。そんなwebエンジニアを募集します