質問: require('gulp-notify'); function notify() { return plumber({errorHandler: notify.onError("<%= error.message %>")}); } ```
回答: 残念ながら結論から言うと、 Dockerを使わないでローカルで行ってくださいと言わざるをえません。 (追記: Slackを使う代替手段を思いつきました、回答の最下部をどうぞ) 以下はその根拠になるように調査しました。 fgrehm / vagrant -notifyをざっくりと斜め読みしました。 ゲストマシン単体では解決できないので、 プラグインがホストマシンで通知だけする単機能のサーバを立ち上げて、ゲストマシンがそこに向かってアクセスするスクリプトを実行することで実現しているようですね。 > > vagrant-notifyというのがDockerでも使えるようですが > > > 想定されているのはVagrantのプラグインにより通知専用サーバを起動させる。 Vagrantで作ったゲストマシン内でDockerをインストールして使い、 Vagrant外側の通知専用サーバへアクセスするという手法を想定しているようです。 もし利用しているのがDocker for Macなら完全に別の話なので忘れましょう。 なので利用しているのがDocker for Macの場合、完全に別のアプローチが必要になりそうです。 gulp-notifyのソースコードを読みながら、 Express等で自力で同じような通知専用のサーバを立ち上げて、 コンテナ内部から`host.docker.internal`へ向けてアクセスすればMacOSに向かってリクエストが飛ばせるのでこれを行う必要があります。 参考サイト: Docker for Macでコンテナの中からホストに繋ぐたった一つの冴えたやり方 しかし、この手法はNode.jsで自分で通知専用のサーバを書いて動かせと言っています。 質問文の意図からするとNode.jsの環境をホストマシンを汚したくないから、 DockerでNode.jsのコンテナ作って動かしているわけですよね。 そのホストマシンでNode.jsのサーバを立ち上げると何をやってるかわからなくなってしまいますね...... ElectronかなんかでGUIの実行ファイルを無理やり作って配布すればローカルは汚れませんが、 それはそれで高度な事になるでしょうね... 実際にgulp-notifyが何やってるのか興味が出てきたので突き止めました。 gulp-notifyはnode-notifierというnpmパッケージを利用して通知機能を実現しています。 ここからはOSで分岐していますが、例えばMacの場合だと`'vendor/terminal-notifier.app/Contents/MacOS/terminal-notifier'`という実行ファイルを自力実装して呼び出しています。 node-notifier/notifiers/notificationcenter.js 別の回答者さんが紹介していた「gulp-docker-notify」も調査してみました。 codemonauts/gulp-docker-notify こちらもやはり私が上記で上げた作戦を利用しているようです。 実行のコア部分は`client.send(message, 9090, 'docker.for.mac.localhost', fn)`と書いてあり、 要するにUDP接続でMacOS本体の9090番ポートにアクセスして変わりに通知してくださいと言ってます。 おいおいDocker for Mac前提かよといった感じのツッコミどころはありますが、概ね私が解説した通りのやり方で実現しようとしているようです。 しかし、このローカルで動いている9090/UDPの通知専用サーバどこやねん。 製作者さんのリポジトリを漁っていたらそれらしきものを見つけました。 codemonauts/macos-gulp-notificationsです。 SwiftならばMacOSのAPI部分に簡単にアクセスできますので、コンパイルして動かせと言ってるわけですね。 いやぁ...Swiftのコンパイルとか完全に管轄外なので、ここから先は案内できませんが...... MacOSでSwiftのコードをドキュメントなしでコンパイルして動かせるほどの腕があるなら試してみてもいいかもしれません。 【おまけ】Slackを代替手段として利用する > > 環境が違うことで動かない人が出てきたというのがあり、Dockerの導入を決めました。 > > > そうなんですねぇ... あ、でしたら代替手段としてSlackというのはどうでしょう? Slackは発言を感知するとChrome等のブラウザ越しに通知が行えます。 でも単なるチャットではなく、SlackにはAPIが備わっており、開発者機能からトークンを生成して特定のURLにPOST通信を飛ばせばSlackの画面以外からでも発言出来るんですよ。 これを利用して、自分用のチャットルームを作ってそこで発言すればgulp-notifiと似たような事が実現出来るはずです。 試しに調べてみると、やはりgulp-slackというパッケージが用意されていて使えるようです。 使ってはいませんが一度試して見てください。 しかし、実際にチームの開発環境構築ということで直接トークンIDを埋め込むのは怖いので一工夫しましょう。 Dockerはコンテナ起動時に環境変数として文字列を外側から注入出来ます。 gulpfile.jsには`process.env.SLACK_HOST`と環境変数を参照するようにしておき、 docker-compose.ymlファイルにSLACK_HOSTみたいな環境変数を注入する設定にして配布しましょう。 以下参考サイト * Slack APIを使用してメッセージを送信する - Qiita * gulp-slack - npm * Node.jsでの環境変数の使い方 * docker-composeで環境変数を使う