PHP
Linux
Node.js
MacOSX

開発環境に入れて捗ったもの

More than 1 year has passed since last update.

はじめに

環境はMacとLinux、WindowsでもvagrantでLinux動かして使っています
だいたいはWeb開発で言語はPHPとNode.js

MailCatcher

https://mailcatcher.me/

メールを送ったりするアプリのデバッグをするときにガチのメールを送るのが憚られるケースもよくあったりするわけですが、そんなときに使えるのがこいつです
Ruby製でgemコマンドでインストールできます

インストール
gem install mailcatcher
起動する
mailcatcher

起動すると、デフォルトでlocalhostにのみバインドした状態で

  • 1025番ポートでSMTPを話すモックのサーバ(中身は送信されずにmailcatcherに食べられます)
  • 1080番ポートで食べたメールの内容を読めるWebアプリ

が起動します

ポートやバインドするアドレスを変更したい場合は

起動オプション
mailcatcher \
--ip SMTPとHTTP両方にバインドするIP \
--smtp-ip SMTPのみバインドしたいIP \
--smtp-port モックSMTPのポート \
--http-ip WebアプリのみバインドしたいIP \
--http-port Webアプリのポート

で指定できます

テストする場合などPHPのsendmail()やmb_sendmail()でこいつに食べさせたいときはphp.iniに

php.ini
sendmail_path = "/usr/bin/env catchmail"

こんな感じにcatchmailというCLIクライアントを設定しておけばいいです(インストールディレクトリにパスが通ってないと見つからない罠はあります)
もっともphp.iniレベルで指定するのは筋がいいアプローチとは思えないので、メール送信についてはSMTPサーバやポートを指定できるライブラリを使ったほうがいいかもしれないです

MailHog

↑のMailCatcherにインスパイアされてGoで作ったというやつ

https://github.com/mailhog/MailHog

バイナリ1本で完結してたりMailcatcherのcatchmail同様に似非sendmailみたいなCLIクライアントの mhsendmail もあるので対応プラットフォームならこっちのほうがいいかもしれません

nvm

https://github.com/creationix/nvm

Node.jsのバージョン管理用のツールです
バージョンアップが頻繁にあるのでこういうツールを使ったほうがやりやすいです
$HOME/.nvm配下に全てのファイルが格納されるので、システム環境も汚さないのもいいところです
一応、yumなどで入れてあるNode.jsも"system"というラベルで見ることができます

direnv

$HOME/.*rcに細工をしておくとディレクトリの移動を捕捉して、移動した先に.envrcというファイルがあればその内容を実行してくれます

主な使いみちとしてはデータベースなどの接続情報やExpress、先ほどのMailCatcherやMailHogを使う場合はバインドするSMTPのホストやポートを環境変数として設定しておくこと
.envrcだけgitの管理から外しておき、プログラムから環境変数を参照するようにしておけば開発用とデプロイ先でもコードを差し替える必要がなくなりますからね

またnvmとの合わせ技でディレクトリ毎にNode.jsのバージョンを切り替えたりもできます
Node.jsもそれなりに互換性はあるんですがおいそれとアップデートできない大人の事情がある場合もあるので・・・

あるプロジェクトのディレクトリに使用するNode.jsのバージョンを記載した.nvmrcというファイルを置いておき.envrcを

.envrc
source ~/.nvm/nvm.sh
nvm use

と書いておけば、何も考えることなく当該ディレクトリに移動するだけでプロジェクトごとのNode.jsのバージョンの切り替えができます

CentOSでremiから複数バージョンのphp(php-x.y)をyumで入れた場合

/opt/remi/php-xy/enable

の中身を実行させることで切り替えることができます

古めのCentOSで新しめのソフトウェアを入れるときに便利なSoftware Collectionを入れた場合も/opt/配下にあるenableスクリプトがあるので、そちらの中身を実行させればCentOSのバニラな環境とSDL環境をシームレスに切り替えもできるでしょう