Goでmoo/meowクローンつくってみた

Go言語の練習にMarkdownファイルをブラウザ上でリアルタイムで閲覧できるツール moo / meow を Goで書き直してみました。 Server-Sent Events を使ってリアルタイムで処理します。 Faster Than CAT で ftcat という名前にしています。 大好きなゲーム FTL をもじりました。meowがネコの鳴き声でmeowよりは速いってことで。

ftcat - https://github.com/hhatto/ftcat

インストールと使い方

$ go get github.com/hhatto/ftcat
$ ftcat MDFILE.md

モチベーションと得られた知識

作り始めた当初はあまり意識していなかったのですが、 今回は結果的にGoroutineとChannelの練習になりました。

fsnotify でMarkdownファイルの変更を待ち受け(Goroutine)て変更があればChannel経由で通知、 eventsource でサーバからServer-Sent-Events送信するブローカ的なGoroutineを準備、 ブローカがファイル変更をChannel経由で受け取りそれをそのままブラウザ側に送信するようなイメージです。

ちょいと文章だと説明わかりにくいので興味あるかたはソース読んでみてください。 空行とテンプレートのHTML含めて170行程度ですので。

その他使用したモジュールは以下の通りです。

  • github_flavored_markdown (MarkdownからHTMLへの変換)
  • open-golang (コマンド起動時にブラウザを開く. MacOSXの open コマンドを各OSで透過的に使えるようにしている.)

むすび

やはりGoは書いていて気持ちいいですね。

次はGoの画像処理ライブラリまわりのネタを書こうと思ってます。 では。