Homebrew で Apache, MySQL, Phpbrew, rbenv, nodebrew, pyenv をお手柔らかにお願いします

即効性の回答を提供するのでは無く、何故それを使用するに至ったのか、それを使ってどうだったか、という方面に重きを置いています。(キリッ!
なので、藁をもすがる思いで辿り着いた方には非常に申し訳無く思います。
いや…その…自分がやりたいのは「環境構築」ではなく、「そこから先」なんですがねぇ…ヤレヤレですわ…いやーフロントエンドマターなのか、アーキテクトマターなのか何ともですが、いずれにせよ、この辺を事も無げにできる方々ってスゴイ、と。

Homebrew で Apache, MySQL, Phpbrew, rbenv, nodebrew, pyenv をお手柔らかにお願いします

目指すべき環境は下記。

  • 一言で言ってしまうと「イチイチ sudo しなくて良い環境」という事で、コマンドを叩く行為そのもの、設定ファイル編集時、ログファイル更新時、あたりが一般ユーザでできる事で、OSX がプリインストールしている環境だと、どうしてもこの操作が要求されるし、だからと言って chmod 0777 というのもなぁ、だった
  • 各プログラム言語、特に PHP を複数バージョンが管理できる環境を目指して…なのだが、これは…後述の VirtualBox, Vagrant で環境ごと管理した方が良い気がしてきている…
  • 更には、 Apache/MySQL/PHP の WordPress 、および、 WP-CLIWordmoveSass …つまり Ruby や RubyGemsGulp がマトモに動けば良いかと

基本的には直接インストールせずに Homebrew でインストールできるならばコチラを使用…ただし、 Homebrew Cask までは使用せず。
とは言え、今回は Quick Look 関連以外では見送ったが、 HOMEBREW_CASK_OPTS を変更する方法が この先も問題無く使えるならば 、次回のOSクリーンインストール時には使っていきたいと思う。

以下、インストール順に記述したが、最低限、Apache よりも後に Phpbrew 、および Phpbrew による各バージョンの PHP を入れた方が良いと思う。

Apache 2.4 via Homebrew

return to toc

インストール

return to toc

$ brew install httpd24

事前にTapしなくて良いの?だけど、しなくても良かった…正確には、何をTapしろと Homebrew 側が返答するのでそれに従って…何をTapしたのか忘れた…改めて brew tap でTapした一覧を見ると、 homebrew/apachehomebrew/dupes が表示されているので、どちらかは意識的にTapした筈。

確かにインストールに関する情報は日本語で多々あるが、数年前の情報が多く…
今も事前にTapするのか、果たしてそれが今も正しいTapなのか疑問だったのと、仮にもパッケージ管理システムである Homebrew なので、何かが足りないと途中で止めてユーザ側にコマンドを要請するなり、勝手にTapからインストールするだろうという希望的観測(開き直って)…ついでに言うと、この段階で失敗しても改めてOSをクリーンインストールすれば良いかと。

httpd.conf

return to toc

特筆すべき事は無いが、DocumentRootAllowOverridenone になっているので、変な場面で妙にハマる可能性あり。
…まさかコレが .htaccess に関係するとは…という知識の無さ…1

80番ポート

return to toc

導入中に調べて分かった事(知らなかった事)だが、 Apache が80番ポートを指定できる権限を持つのは管理者権限で、ユーザ権限だと80番以外のポートの指定になる…というのをどこかで読んだ記憶が…
もしかしてこのため、 MAMPXAMPP もだったか…) で80番指定しているから MAMP の Apache 起動時に毎回管理者ログインダイアログが出てくる?…知りませんでした…
Homebrew 経由の Apache でも、デフォルトの 8080 から80番に変更できなくは無いみたいだが2 、ざっと調べた限りでは何となく面倒そうなのと、こうすると結局 sudo する必要がありそうなので変更せず。
これには何となく引っかかったけど、近頃ではポート番号指定のプロダクトが多く、今となってはあまり気にならない気がする…一方で、 Chrome にWeb履歴が残っていると(だけなのか…不明)、 localhost:8080/hoge/ と入力したのに localhost/hoge/ みたいな挙動があり、かなりイラッと来る…
で、自由にポート番号指定できるなら 114514 とか指定したくなって調べたが、最大値が 65536 なので多分無理…実行していないので詳細不明。

MySQL 5.7 via Homebrew

return to toc

$ brew install mysql

相変わらず自分にとっては、設定が鬼門だなぁと。
(変にヒットしても困るので)詳細な記述は避けるが、HOGE.local.pidupdating できない系のエラーって、HOGE.local.pid がパーミションの関係で書き込めない、という直接的なエラー以前に、まずは my.cnf の内容を疑ってみるべきかと…もっとも、どこにエラーが吐き出されるのか、そもそも自分が指定したディレクトリにエラーが吐き出されるのか…という微妙な問題が残るが…
何となくだが、別のマシンで設定した my.cnf をそのまま持ってきてパスの変更程度で起動するよりも(言わんや旧バージョンの my.cnf は以ての外…)、少しずつ my.cnf を追加して状況を確認する、というのが遠回りだけど確実かなぁと。
例えば、各プロパティ?の区切り記号で用いるハイフンとアンダースコアって何か違いがあるの?とか、値はダブルクォーテーションで囲むの不要なの?とか、今それを確認する気力は、無い…

今回自分も遂に導入したセキュリティが強化されている件… mysql_secure_installation も含めて、今後何度かインストールして勘所を掴まないと何とも言えない状況…

これは恐ろしく不確定な情報だが… mysql.server start の前に微妙に記述エラーが存在した my.cnf を使っていきなり mysql_secure_installation を実行したからなのか何なのか(まぁ、自分が阿呆なんですが)、前述のpidエラーが出たと認識…
更に、brew uninstall mysql だけしか行わなかった…データファイル群を消していなかった…のか何なのかで、やはりpidのエラー…
三度目は rm -rf /usr/local/var/mysql/ も行って再インストールして、何とか動いた…という状況…

なお、phpMyAdmin は導入しない方針で、じっくりとデータを見たい時は Sequel Pro (に、慣れる)、データベース作成・ユーザ作成・権限付与時などは mycli で。
特に mycli は補完機能が効くので便利かと。

Phpbrew via Homebrew

return to toc

直接インストールすれば…だけど、できれば一元管理したかったので…

確か Homebrew のポリシーとして、 OSX に存在するプログラムは極力そちらを利用する、という方針だったか。
なので、Apache も PHP もそれに従って別枠の Tap を導入して…って Homebrew インストール後に脊髄反射的に brew install する curlgitwget って…
いずれにせよ、以前は複数の PHP を導入するのは面倒だなぁという印象だったが、今回は腹を括った。

全く無い事も無い可能性として(未だに)、PHP5.1 で完結した開発環境を強いられる可能性が 10% 以下( MySQL もそれに従う可能性がある)、同様に、PHP4.x が数%以下で存在する。
もっとも恐ろしく確率的に低い PHP4.x でオーダを受けた場合、無理ですと断るか、まずは最新環境にしてお願いですからと哀願するか(「いやクライアント様の意向なので無理」と回答の可能性が 99.99% )、果たして未だに PHP4.x を構築できる仮想環境が存在するのか不明だが…
ヘタをすると、自分のスキルだと環境構築だけで1週間はかかりそうな…の割にはギリギリになってこちらに3日でお願い、とかねぇ…実際ありそうで…向こうさんの状況を察しない訳でも無いにしても…

そこまで想定するのはどうなのかと思うが。
自分の場合、稀に良くあるのが、自分で書いたスクリプトが、今・少し前のバージョンは非推奨で Notice なエラーを吐く関数が、それ以降のバージョンでは完全なエラー扱いになっている場合がほとんど、というのが、PHP のバージョンの差異で気を付ける場面になる。
なので例えば PHP 旧バージョンから新バージョンへのアップデートや稼働確認ならば、泥臭くて面倒ではあるがともかく、旧バージョンで閉じた環境下でお願いされても、例えると、40年前以上の車をビンテージ感覚で乗りこなす訳でも無く、いかなる理由があろうと自分のセカイに篭って使用している、みたいな…車の場合はともかく、IT業界はまだそこまで環境が成熟した状況では無いので、正直、食指が沸かない…

Phpbrew のインストール

return to toc

$ brew install phpbrew

夢でなかったと思うけど、コレをすると PHP7 までインストール…「いやいやいや、 PHP7 は自分にはまだ早いし、そもそも PHP7 は Phpbrew で管理する予定だから」と苦笑しつつ削除した…のだが、後述する WP-CLI を Homebrew でインストールしても確か同様だったので、「あーつまり、 PHP7 使ってね、 PHP5.x は Phpbrew で管理してね」という Homebrew 側からのお達しなのかと…不明だけど、そう理解している…
例えば、brew deps phpbrew すると、php70 が出力されているので夢ではなかった筈… Composer も同様。

PHP のインストール、その1

return to toc

Phpbrew のドキュメントを見れば分かる通り、それまでは全くと言っていい程、意識する必要が無かったPHPのモジュールを自力で選択する必要に迫られて、何が必要なのかと…

ざっと見て、+default +apxs2 程度で充分かなぁと思いつつ、日頃お世話になっているレンタルサーバで php -m して、Phpbrew の Variant と比較した結果のインストールのコマンドが下記。
当然ながら完全に合致しない Variant も存在したが(xml関連など)、その辺はニュアンスで…全部入りにしても良かった気もする…
…一応言っておきますが、このコマンドを信用・過信しない様にお願いします…

$ phpbrew install 5.4.45 \
  +bcmath+bz2+calendar+ctype+curl+dom+exif+fileinfo+filter+fpm+ftp+gd+gettext+gmp+hash+iconv+imap+json+mbstring+mhash+mysql+openssl+pcntl+pcre+pdo+phar+phpdbg+readline+session+soap+sockets+sqlite+tokenizer+wddx+xml+xml_all+xmlrpc+zip+zlib \
  +apxs2=/usr/local/bin/apxs

こんな長いコマンドを自力で叩いた…実際には別途コピペしただけだが…のは初めてじゃないかと。
このログを tail -f していると、コンパイルで大量のワーニングが出てヒヤヒヤしたが。3

+apxs2

return to toc

当初は apxs ではなく httpd.conf の絶対パスを指定しないで大丈夫なのか不安だった。
失敗覚悟で上記の長いコマンドを流すと、Phpbrew 側で勝手に LoadModule php5_module libexec/libphp5.4.45.so を然るべき箇所に追記しつつ、実体も /usr/local/Cellar/httpd24/2.4.X/libexec/ に格納した模様…
ディレクトリのパーミション云々との話も聞くが、特に自分は何もせず。
/usr/local/bin/apxs の明示的な指定が必要なのか不明だが( which apxs で問題無く返って来る)、このオプション無しでインストールする勇気が、無い…
と言うか、そもそもの apxs というものを知らなかった。

更には httpd.conf に下記を追加、だけで良いのか確信が持てないが、とりあえず動いているので。

<FilesMatch \.php$>
  SetHandler application/x-httpd-php
</FilesMatch>

GD

return to toc

インストールで +gd を明示的に指定しているが、phpinfo() してもGDをハンドリングしていなかった。
…良く分かってないが…

$ phpbrew ext
Loaded extensions:
 [*] bcmath
 [*] bz2
  :
Available local extensions:
 [ ] dba
 [ ] enchant
 [ ] gd
  :
$ phpbrew ext install gd

…と phpbrew ext install すると、環境によるが autoconf を要求されて止まるので、brew install autoconf して再実行で少なくとも、phpinfo() を見る限りでは、使える状態になっている。

brew doctor でのワーニング

return to toc

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!

Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and what additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew provided
script of the same name. We found the following "config" scripts:
    /Users/MorryMasahiko/.phpbrew/php/php-5.6.22/bin/php-config

以前 MAMP 使用時も MAMP の PHP のパスを .bashrc に記述して同様の状態…対策を諦めた…心配するな無視しろと言われましても…
消極的回避策で phpbrew offbrew doctorphpbrew switch 5.x.x するか、そもそものワーニングを無視している。

Composer via Homebrew

return to toc

Phpbrew で PHP のバージョンごとに…なのかどうか不明…に管理するのか、 Homebrew で管理するのか…自分が何を言っているのか…
とりあえず Homebrew で管理する事に。

$ brew search composer
homebrew/php/composer
homebrew/x11/composer-completion
$ brew install homebrew/php/composer

とりあえずパッケージをインストールして確認したところ、特に問題は無さそうな。
ちなみに、ファイル名を composer.json ではなく、 COMPOSER.json としても問題無さそうな模様で、これは Gulp ( GULPFILE.js )も同様。
ファイル名を大文字にして何が嬉しいのかと言うと、 Finder やターミナルでファイル一覧を見た場合、基本的には先頭に表示されるので…まぁそれだけですが。

Apache で LoadModule するという事

return to toc

phpinfo() で見る限り、phpbrew off していても問題無く然るべきPHPを掴んでいるなぁと。
当たり前と言われればそれまでだが…

とりあえずのマイルストーン

return to toc

PHPで簡単なスクリプト、 MySQL を掴んだりマルチバイト文字列関数が Apache で動く事を確認して、おそらく問題は無さそうなので次の段階へ。
自分はPHPフレームワークや Idiorm を使って MySQL を素で扱う事はしないので毎度毎度コーディングを調べる羽目になる。

WP-CLI via Homebrew

return to toc

前述の段階でも、 WordPress のZIP展開からの環境構築は可能だが、既に自分は WP-CLI の環境に慣れているので。
これもインストールは下記、ただし、PHP7 もインストールされた筈で、この段階で Homebrew の PHP7 を受け入れる事を前提に…

$ brew install homebrew/php/wp-cli

関係無いが、一見問題無く WordPress がインストールできて動いていたのだが。
パーマリンクをこのブログのURLの様な状態( /%postname%.htm )にしたかったので、それに従って管理画面から変更して( wp rewrite structure でも可能)、自動的に .htaccess が問題無く作られているのに 404
この原因を探っていくうちに、前述の AllowOverride の問題に辿り着いた、というのが実際のところ。
当初はポート番号指定のURLがマズイのかと疑って調べたが、マルチサイト関連では以前は存在した模様だが、という情報が多くヒットして、しかしながら問題はそこに無かった、と。

地味にありがたいのは、テーマインストールでしか確認していないが、グループ・オーナーの件が問題にならないのか、「要求されたアクションを実行するには、WordPress が Web サーバーにアクセスする必要があります」が出ない点か。

rbenv via Homebrew

return to toc

$ brew install rbenv

これも(以下略
自分は Ruby を開発に使わず、 RubyGems の使用がメインなので複数のバージョンの Ruby を導入する事は考えにくいが。
安定バージョンである 2.3.1 を導入。
ruby-build は手動で導入だったか、自動的に導入されたか…

Wordmove via RubyGems

return to toc

$ gem install wordmove

特に問題無く pull できた… push は未確認。
…のだが、事前準備に必要な SSHPassbrew install sshpass できないので「 Installing SSHPass · GitHub 」参照。
サイトの情報によっては、このフォーミュラのURLが違う…

下記のメッセージが将来遺恨残すだろうなぁと思う…とは言え、レンタルサーバのマターなので何とも。

Warning (Code 3090): Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.
Warning (Code 3090): Changing sql mode 'NO_AUTO_CREATE_USER' is deprecated. It will be removed in a future release.

nodebrew via Homebrew

return to toc

$ brew install nodebrew

これ(以下略
自分は Node.js そのものでの開発はしていないが、Gulp を使いたかったので…つまりは npm になるのかもしれないが。
とりあえずは安定バージョン…公式によると、v4.4.5 との事なので、それを導入。
その後、Gulp で Stylus + nib が動く事を確認。

pyenv via Homebrew

return to toc

…元々ここまで行う気は無かったのだが。
Composer で Idiorm をインストール、 ./vendor/j4mie/idiorm/docs/ を見ていると、 Makefile やら *.rst ファイルやらで、これは何かと確認したところ、 Sphinx の元ネタだった。
…以前、某氏から関西のワークショップに誘われていた事を思い出しつつ、せっかくなのでメイク・ビルドしてみようかと環境を整えた次第。

pyenv ・ Python のインストール

return to toc

$ brew install pyenv

なお、他のバージョン管理コマンドと同様、 Homebrew で pyenv のインストールの後にパスを通す必要があるが割愛。
同様に、 pyenv で Python のインストールも割愛。
とりあえず 2系列・3系列の安定?バージョンをそれぞれインストール、普段は2系列を使う予定…そもそも3系列との違いを把握していない。

Homebrew で例のアレ

return to toc

出る…増えた、スルー。

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
 :
script of the same name. We found the following "config" scripts:
    /Users/MorryMasahiko/.pyenv/shims/python-config
    /Users/MorryMasahiko/.pyenv/shims/python2-config
    /Users/MorryMasahiko/.pyenv/shims/python2.7-config
    /Users/MorryMasahiko/.pyenv/shims/python3-config
    /Users/MorryMasahiko/.pyenv/shims/python3.5-config
    /Users/MorryMasahiko/.pyenv/shims/python3.5m-config
    /Users/MorryMasahiko/.phpbrew/php/php-5.6.22/bin/php-config

pip

return to toc

$ pip install --upgrade pip

pyenv で Python をインストールした時点で pip も同時にインストールされている模様だが、 pip search でパッケージの有無を確認したところ、最新版にアップデートすれば、とのメッセージが出たのでそれに従って上記を実行。
Sphinx に関しては話題が逸れるので割愛するが、 Idiorm の Building the Docs に従って make html すると、 sphinx-build でメイク・ビルドしている模様で、事前に sphinx と共にインストールする必要あり…他サイト参照。

PHP のインストール、その2…とても曖昧、とても不勉強

return to toc

事の起こりは、 imagejpeg 関数が使えず、ではどうすれば?で、 PHP の再インストールを選んだ。
…のだが、「PHP のインストール、その1」ではコンパイルが通らず…何だろ…当時と今(2016年9月下旬)とでは「何が」変わったのか…全く不明でもあり、前述のサンプルは 5.4 だが、当時 5.6 も同様に通ったのだが。
今となっては PHP の再インストールではなく、もしかしたら Phpbrew の Extension Installer で何とかできたのかもしれないが…
と言うか、 PHP のエクステンションという概念そのものが分かってない、とも。

phpbrew install 5.6.26 \
+bcmath+bz2+calendar+ctype+curl+dom+exif+fileinfo+filter+fpm+ftp+gd+gettext+gmp+hash+iconv+imap+json+mbstring+mhash+mysql+pcntl+pcre+pdo+phar+phpdbg+readline+session+soap+sockets+sqlite+tokenizer+wddx+xml+xml_all+xmlrpc+zip+zlib \
+apxs2=/usr/local/bin/apxs \
+openssl=/usr/local/opt/openssl \
-- --with-jpeg-dir=/usr/local/Cellar/jpeg/8d/lib

以降、GD関連の設定は前述と同じ。

どぉにも、 Homebrew で更新した「何か」が絡んでいる気がするが未調査。
あと20回ぐらいインストールを経験すれば何かが分かるかもしれないが、いかんせん、コンパイルに時間がかかるので…
正直なトコロ、こういうので苦しむのだったら、素直に VirtualBox, Vagrant を使って閉じた環境を構築した方が良いのではないかと感じている。

Menu of this post

  1. 1. はじめに…
  2. 2. Homebrew で Apache, MySQL, Phpbrew, rbenv, nodebrew, pyenv をお手柔らかにお願いします
  3. 3. ついでに VirtualBox, Vagrant で PHP 5.3, MySQL 5.0 もお手柔らかにお願いします
  4. 4. お手柔らかにお願いしてのモロモロ
  5. 5. 補足)個人用チートシート(もどき)

Footnotes

  1. 1. どうにもこの .htaccess に関する説明サイトって、記述に冗長性があると言うか…本来そうなのだろうけど…即効性の回答を期待するのは困難な印象で、これは様々なケースを考慮した結果、複雑・冗長な記述になるのかもしれないけど… MySQL の本家も同様かなぁ…こちらは仕方無い気がするけど…

  2. 2. いい加減な情報になるが…以前、試しに Homebrew で httpd24 をインストールした時、 808080 に変更したのだが、何か挙動が変だった記憶がある…いや、自分が悪いのですが。

  3. 3. …以前「オープンソースはソースコードが手元に云々」という話をよく聞いたけど、そこから障害部分のソースを特定して、なんてとてもとても…まぁ所詮自分はその程度なんだという事で。