質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

Q&A

解決済

2回答

1825閲覧

Dockerでgulp-notifyを使いたい

ayako01

総合スコア27

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

0グッド

0クリップ

投稿2018/08/15 06:02

Docker + gulpで開発環境を構築しています。
gulp-notifyというプラグインを使っているのですが、Docker上で動いているだけでMacのデスクトップに通知がきません。
ホストPC側に通知させることはできないでしょうか?

試したこと

Dockerfileに以下の1行を追加

RUN yum install -y libnotify

試そうとしたけどできなかったこと

https://github.com/fgrehm/vagrant-notify
https://stepquick.net/use-gulp-notify-with-terminal-notifier
vagrant-notifyというのがDockerでも使えるようですが、Dockerの場合のインストール方法がわかりませんでした。

コード

js

1const notify = require('gulp-notify'); 2 3function notify() { 4 return plumber({errorHandler: notify.onError("<%= error.message %>")}); 5}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

残念ながら結論から言うと、
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みたいな環境変数を注入する設定にして配布しましょう。

以下参考サイト

投稿2018/08/16 03:43

編集2018/08/17 02:49
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ayako01

2018/08/17 00:09

もともとローカルでgulpを使っていたのですが、発端は ・人ごとに毎回開発環境を構築するのが面倒なので効率化したい ・少し古いバージョンからあげられないライブラリがある ・環境が違うことで動かない人が出てきた というのがあり、Dockerの導入を決めました。 ローカルに依存してしまうと、また同じ問題になってしまいそうです。 なので、通知はあきらめることにしました。 できない、または難しいということがわかってよかったです!ご回答ありがとうございました!
miyabi-sun

2018/08/17 02:50

事情を聞き、Slackなら割と現実的に実現できそうだったので追記しました。 ご確認くださいね。
ayako01

2018/08/17 03:04

社内ではチャットワークを使っていて同じようなことはできそうですが、若干環境が難しくなるのと、初期工数もかかりそうなので、通知がないと困るという声が多いようだったら追加で検討してみようと思います。 ありがとうございます!
guest

0

https://github.com/codemonauts/gulp-docker-notify
こちらのプラグインをご試用されてみてはいかがでしょうか。

投稿2018/08/15 07:05

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ayako01

2018/08/16 00:01

これも試しましたが状況は変わらず、エラーは出ないけど通知は表示されない状態です。
miyabi-sun

2018/08/16 03:55

実際に読んで調査しましたが、 これ完全に自分専用のもので他人が動かす想定のものではないですね… 詳細は私の回答の方にぶら下げておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問