middlemanでphpを動作させる(認識させる)方法

参考:Legacy Development With Pow

参考:middleman-php

今日もハマったぜw

とあるお客さんの既存ウェブサイトのリテイク的な仕事で。

phpを使っているのだが、あまりにソースがひどいんでランディングページ1個作るのでもしんどい。
どうせならhaml+sass環境にしてphpを出力したい!となりまして。

最近、目下はまっているmiddleman先生でphp出力ができないかなぁ?と思って色々いじってみた。

基本的にはindex.php.hamlとかでファイルを作ればいつものmiddleman buildコマンドでちゃんと「index.php」が出力される。
なのでこの辺りは何も問題がない。至って直感的に作業できる。

しかし、いざプレビューしたら「ソースが表示される」(view-sourceしたときと同じ画面)。
せっかくエラーもなくbuildもできているが肝心のプレビューができないとなるとアップするまで動作確認が取れないので、
そいつは困るわけです。たかがランディングページですし。

ということで、middleman上でphpをちゃんと認識させる方法をメモ。

環境:

MacOS:

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.10.2
BuildVersion:   14C109

apache:

$ httpd -v
Server version: Apache/2.4.9 (Unix)
Server built:   Sep  9 2014 14:48:20

php:

$ php -v
PHP 5.5.14 (cli) (built: Sep  9 2014 19:09:25)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies

その他:

  • powがインストールしている

設定方法

  1. pow上でphpを使えるようにする
  2. middleman上でphpを使えるようにする の2つを行うことになります。

pow上でphpを使えるようにする

1. 必要なgemをインストールする

rack-legacyとrack-rewriteが必要らしい(そもそもこの参考URLに到達するまでが長かった)

gem install rack-legacy rack-rewrite

2. コードをconfig.ruに書く

参考URLの通り、config.ru内に所定のコードを書く。

require 'rubygems'
require 'middleman/rack'

+ require 'rack'
+ require 'rack-legacy'
+ require 'rack-rewrite'
+ 
+ INDEXES = ['index.html','index.php', 'index.cgi']
+ 
+ use Rack::Rewrite do
+   rewrite %r{(.*/$)}, lambda {|match, rack_env|
+     INDEXES.each do |index|
+       if File.exists?(File.join(Dir.getwd, rack_env['PATH_INFO'], index))
+         return rack_env['PATH_INFO'] + index
+       end
+     end
+     rack_env['PATH_INFO']
+   }
+ end
+ 
+ use Rack::Legacy::Php, Dir.getwd
+ use Rack::Legacy::Cgi, Dir.getwd
+ run Rack::File.new Dir.getwd

run Middleman.server

+が付け足したところ。

middleman上でphpを使えるようにする

1. Gemfileにmiddleman-phpをbundleできるように書く

Gemfile

+ gem "middleman-php"

これなんですが普通にgem install middleman-phpとやるのと一緒です。 お好きな方で。 (一応アプリケーション内のことなのでGemfileに書きました)

2. config.rbにphpをactivateするように設定する

config.rb

+ configure :development do
+   activate :php
+ end

一番最後に3行追加で。 ここらへんの設定はmiddleman-phpを参考に。

気をつけるのは「config.rb」の方に書くこと。config.ruではない点に注意。

機械忍者

某SEO会社(?)勤務。 多分日本語よりHTMLの方が得意です。 最近はRubyとかいうキラキラな言語も勉強中です。 SEOはもう標準スキルになってきてると思うので正直もうあんまり昔ほどの熱意は感じません。 新たに躍動してる人も多いですしね。 だれか強化骨格コスプレあったら教えてください。