はじめに
環境はMacとLinux、WindowsでもvagrantでLinux動かして使っています
だいたいはWeb開発で言語はPHPとNode.js
MailCatcher
メールを送ったりするアプリのデバッグをするときにガチのメールを送るのが憚られるケースもよくあったりするわけですが、そんなときに使えるのがこいつです
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に
sendmail_path = "/usr/bin/env catchmail"
こんな感じにcatchmailというCLIクライアントを設定しておけばいいです(インストールディレクトリにパスが通ってないと見つからない罠はあります)
もっともphp.iniレベルで指定するのは筋がいいアプローチとは思えないので、メール送信についてはSMTPサーバやポートを指定できるライブラリを使ったほうがいいかもしれないです
MailHog
↑のMailCatcherにインスパイアされてGoで作ったというやつ
バイナリ1本で完結してたりMailcatcherのcatchmail同様に似非sendmailみたいなCLIクライアントの mhsendmail もあるので対応プラットフォームならこっちのほうがいいかもしれません
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を
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環境をシームレスに切り替えもできるでしょう