下記でVirtualDocumentRootを使ってPHP環境を作りましたが、apacheの環境変数的には変わってないようで、デフォルトの値が入ってしまいます。(CentOS 6.6に入っているapache 2.2.15で確認しているので新しいのでは治ってるかも)

Macに複数サイトに対応したPHP環境を簡単に作る - komagata

すごく困るんですが、下記のようにPHPで無理やり書き換えればOK。

<virtualhost *:80>
    VirtualDocumentRoot /srv/%0

    # Ref: http://joshbenner.me/blog/quick-tip-get-proper-document-root-when-using-mod-vhost-alias/
    php_admin_value auto_prepend_file /srv/set_docroot_hack.php
</virtualhost>
<directory /srv/*>
    Order allow,deny
    Allow from all
</directory>

/srv/set_docroot_hack.php:


<?php
$_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']);

なんか危ういですね。

TL;DR

ApacheのVirtualDocumentRootlvh.meを使うと簡単。

ApacheのVirtualDocumentRootを使う

Yosemiteデフォルトを想定。

$ sudo vi /etc/apache2/extra/httpd-vhosts.conf
<virtualhost *:80>
  VirtualDocumentRoot /Users/komagata/Sites/%0
</virtualhost>
<directory /Users/komagata/Sites/*>
  Require all granted
</directory>

上記設定で~/Sitesにドメイン名の名前のディクレクトリを作れば動くようになる。(phpとvhostを有効化する設定は各自やっておいてください。)

そのディレクトリ名ですが、foo.lvh.meunk.lvh.meなどlvh.meのサブドメインにすればOK。

lvh.meを使う

VirtualDocumentRootだけだと/etc/hostsにサイトを追加するごとに追記する必要があります。hostsファイルはワイルドカードに対応してないので辛い。

# /etc/hosts
127.0.0.1    *.localhost

こんな風にかければよかったんだけどねぇ。かといってローカルにDnsmasqのようなDNSサーバーを入れるのも億劫です。

ところが127.0.0.1にlvh.meというドメインを割り当ててる傑物がいるとの情報を入手。(名前のLevi cookの略でlvhなのかな?)

% host lvh.me    
lvh.me has address 127.0.0.1
% host foo.lvh.me
foo.lvh.me has address 127.0.0.1

Levi神のお陰で適当にlvh.meのサブドメインを使えばOKになりました!

~/Sites/foo.lvh.me~/Sites/unk.lvh.meのようなディレクトリを作るだけで追加の設定なしにPHPアプリがどんどん作れます。

$ vi ~/Sites/foo.lvh.me/index.php
Hello, <?= $_SERVER['HTTP_HOST'] ?>
$ vi ~/Sites/unk.lvh.me/index.php
Hello, <?= $_SERVER['HTTP_HOST'] ?>

pow併用兄貴の場合

公式Wikiで懇切丁寧に書いてあります。

Running Pow with Apache · basecamp/pow Wiki

チームでのやりとりはSlackですが、仕事の依頼とか外部との仕事関係でのやりとりってFacebook Messengerが多いです。多くないですか?

しかしFacebook Messengerってちょくちょくチェックするにはとても不便で、何故かというとチェックするたびにFacebookのTimelineが目に入って、

「この動画おもしろいな。知り合いにURLを送って置こう。・・・そういえば俺は何をしてたんだっけ?」

となることが頻繁にあるからです。

なのでMacでFacebook Messenger専用のクライアントを色々探してたんですがgoofyが自分の中で決定版で文句無しです。

$ brew cask install goofy

見た目もかわいいし、複数人チャットできるし、無料だし。

あと秋元さんがPHPプログラマー探してるそうなのでご存知の方はぜひ。(ついで感)

追記:

https://www.messenger.com がまさかのスピンオフしたのでブラウザでこのサイトを見るのが一番ですね。

「おい、Nexus6あくしろよ。」

しょっちゅうチェックしてると仕事に影響が出るので書いた。

hurry_up_nexus6/clock.rb at master · komagata/hurry_up_nexus6:

require 'open-uri'
require 'mail'
require 'css_selector'
require 'clockwork'
include Clockwork

NEXUS6_URL = 'https://play.google.com/store/devices/details/Nexus_6_64_GB_%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89_%E3%83%9B%E3%83%AF%E3%82%A4%E3%83%88?id=nexus_6_white_64gb&hl=ja'

Mail.defaults do
  delivery_method :smtp, {
    address:              'smtp.sendgrid.net',
    port:                 '587',
    domain:               'heroku.com',
    user_name:            ENV['SENDGRID_USERNAME'],
    password:             ENV['SENDGRID_PASSWORD'],
    authentication:       :plain,
    enable_starttls_auto: true
  }
end

handler do |job, time|
  html = open(NEXUS6_URL) { |f| f.read }
  status = CssSelector.new.parse(html, '.shipping-status').strip
  if status != '現在在庫切れです。しばらくしてからもう一度ご確認ください。'
    Mail.deliver do
      from     'komagata@gmail.com'
      to       ENV['MAIL_SEND_TO']
      subject  'Nexus6 is now available!'
      body     "Go fast! #{NEXUS6_URL}"
    end
  else
    puts 'Not available...'
  end
end

every(1.minute, 'check_nexus6')

「FRINGE/フリンジ」の J.J. エイブラムスと「ダークナイト」の脚本家ジョナサン・ノーランが贈るわけではない、IT業界のタブーに切り込んだサスペンス実話。

(私本人は真剣にレガシーPHPに取り組んでおります。)

  1. シーズン1
    1. エピソード1
    2. エピソード2
    3. 特別編1 レガシーPHPプロジェクトあるある
    4. エピソード3
    5. 特別編2 phpプログラマーの募集
    6. エピソード4
    7. エピソード5
    8. エピソード6
    9. エピソード7
    10. エピソード8
    11. 特別編3 PHPMatsuri2012
    12. エピソードLAST
  2. シーズン2
    1. エピソード0
    2. エピソード1
    3. エピソード2
    4. エピソード3
    5. 番外編1 ピクルス原理を誤用(応用)する
    6. エピソード4
    7. エピソード5
    8. エピソード6
  3. PHPの落とし穴
    1. PHPの落とし穴1

ツール

レガシーPHP改善・コンサルティングはこちらから承っております。お気軽にどうぞ。

お問い合わせ | 合同会社フィヨルド

レガシーPHP診断を作りました。

回答結果はこちらで見られます。

レガシーPHP診断 - みんなの診断結果

基本的に選択肢の上の方がよりおすすめという感じです。まずは自社の環境がどのような状態か把握するチェックリストとして使っていただければいいかなと思いました。

改善に関してはPHP: The Right Wayが参考になると思います。

関連:レガシーPHP改善日記シリーズ

デデドン!

「Adobeのバカ!(Case sensitiveなファイルシステムを恐れるなんて)いくじなし!」

PDFの編集、文字とかだったらPreviewで行けるんですが、画像を追加とかできないですよね。何か良いソフトありますかねぇ?

初日、行ってまいりました。

流行りの環境うんぬんは単なる手段であり、"経営陣を含めたマインドセットの更新が大事"ってのはありますが、そんな話みんな読みたくないでしょ?

僕が調べた現状と、こういう風に持って行きたいという理想の環境を書き出してみました。

現状

  • 本番環境
    • さくらのマネージドサーバー(FreeBSD)
  • ステージング環境
    • 共有開発サーバー(社内に古めのCentOS)
  • 開発環境
    • 共有開発サーバー(社内に古めのCentOS)
  • ソースコード管理
    • svn
    • 共有開発サーバーのコードを担当者一人が全員を代表してsvnにコミットする。バックアップ的な役割
  • タスク管理
    • 社内の独自タスク管理システム
  • デプロイ
    • 共有開発サーバーのソースをFTPでアップする
  • 開発マシン
    • Windows7
  • コーディング規約
    • PEAR標準コーディング規約をカスタマイズしたもの
  • コードレビュー
    • なし
  • チャット
  • ナレッジ共有
    • 社内の独自情報共有システム
    • 社内の独自日報システム
  • 自動テスト
    • なし
  • サーバー監視
    • なし
  • エラー管理
    • メールが飛ぶ
  • ライブラリ利用
    • なし
  • フレームワーク
    • なし(一部Codeigniter)

理想

  • 本番環境
    • AWS?
    • DigitalOcean?
  • ステージング環境
    • 上記サービス上に構築
  • 開発環境
    • 各自のローカルマシン
      • Vagrant?
      • Docker?
      • XAMMP?
      • 共通開発サーバーに全員分の環境を作る?
  • ソースコード管理
  • タスク管理
    • Github Issue?
    • Pivotal?
    • Trello?
    • これは現状維持でもいいかも
  • デプロイ
  • 開発マシン
    • Mac?
    • Linux?
    • Windows?
  • コーディング規約
    • PSR-4(via @tadsan さん)
    • PSR-2
  • コードレビュー
    • PRベースで行う
  • チャット
  • ナレッジ共有
    • Github Wiki?
    • これも現状維持でいいかも
  • 自動テスト
  • サーバー監視
  • エラー管理
  • ライブラリ利用
  • フレームワーク

感想

正直レガシーPHPの現場というと、"鳴り止まぬクレーム電話"、"デスマ続きで死んだ目をしたプログラマの群れ"などをイメージしてたんですが、現行のシステムでちゃんと商売が回って売上が上がっているし、現状を良くしていきたいというポジティブな雰囲気があったのでそれだけで行ける気がしました。

現行のツール類や開発フローに関しては、皆さんも思ったかもしれませんが、"懐かしい"の一語に付きます。昔は僕らだってみんなこうだったんだよ!

これはレガシーPHP(Legacy PHP)というより古き良きPHP(The good old PHP)と呼びたい感じ。

見えてきた開発環境の今昔

こうやってカテゴリ分けしてみると昔と今で同じ方向ですべてのツールが進んでるように感じます。

昔(って言い切るのはひどいですが)は社内で閉じていて外からは使えません。今のツール群はオープンでどこからでもスマホなどいろんなデバイスで使える傾向にあります。

また、昔のツールは1人または少人数で同期的に使うように出来ていますが、今のツールは多人数・非同期で作業することが前提となっています。

要は「場所・人数・時間」を選ばないように進化してきてるってことですかね。

困っていること

理想に近づけるのにまずやる必要があるのが、みんながひとつの開発環境を使っている現状から個別のローカルで開発してコミットするというフローに変更するところ。

たくさんのサイトが社内の共通開発環境で動いてるのですが、デザイナーも含めてWindowsでローカル開発に変えるには今だとどうするのが一番いいんでしょうか?

XAMPP?Vagrant?Docker?どっかのサーバーに全員分の環境を作る?

もしおすすめがあったら教えていただけるとありがたいです。

世の中のレガシーPHPを減らしたい

レガシーPHPを改善する一連のフローを毎回苦労して行うのは無駄ですよね。レガシーPHPを改善したいと思っている会社さんはたくさんあると思うし、それができる小さい会社やフリーランスのプログラマーもたくさんいると思いますし、求人・お仕事のマッチングもたくさん生まれるのではないかと思います。(前回ご一緒させていただいた @kaz_29さんや@kjirouなど僕が出会えてる人はその本当一部なので)

そこで、上手くいきそうだったらレガシーPHP改善のノウハウを共有するイベントや実際に改善していく集団・コミュニティーが出来たらいいなとおもいます。

関連:レガシーPHP改善日記シリーズ

レガシー坂は終わっていなかった。

3年前のレガシーPHP改善日記を見てレガシーPHPと開発フローの改善したいとのご依頼があったので再びレガシーPHPと格闘することになりました。

今回は皆さんWindowsをお使いとのこと。そこに若干の不安。どうなることやら・・・。

関連:レガシーPHP改善日記シリーズ

Mac版Office 2011は読み取り専用で使うなら無料なんですね。homebrewから入れられるのが嬉しい。

$ brew cask install microsoft-office

"Use Office to view your files for free"を選べばOK。

他社から複雑なレイアウトのExcelとか送られてきた時に。(←腹立つ)