そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

goemonでMojolicious::Liteでの開発速度を加速してみた

先日↓こんなツールがリリースされてたので試してみたら、なかなか快適だった。

Big Sky :: 開発速度を加速するツール、goemon を書いた。

大雑把に説明すると、ファイルの変更を読み取ってリロードやらminifyやらを自動でこなしてくれる補助ツール

ファイル編集からの定形処理を自動化することで、コードを書くことに専念することができる。


昨今じゃ色々とビルドツール的なものが出てきてて、例えば前に使ってみたYeomanなんかを使えば、テンプレート作成からテストまでカバーできる。

Yeomanのチュートリアルの個人的なまとめ - そんな今日この頃でして、、、

確かに便利は便利なんだが、結構覚えなきゃいけないことは多いし、テンプレートとしてあるものを使う分には良いのだけれど、いざ自分好みの環境に適用しようと思うとちょっと面倒くさい・・・

そこまでフロント開発に比重を置いてるわけではないし物覚えも悪い身からすると正直しんどい。


その点goemonはシンプルで学習コストが低く、それでいて柔軟性があるので、今ある環境に気軽に導入できるのが良い。

今回は個人的に愛用してるPerlフレームワークMojolicious::Liteで使ってみた。


導入

goemonの導入あたりはgithubをそのままなぞればOK。

単一バイナリなので面倒くささが無いのが良い。


作業ディレクトリ

いつもの作業用ディレクトリ。

├── myapp.pl
└── public
    ├── test.css
    ├── test.html
    └── test.js

Mojolicious::Liteの場合、静的ファイルはデフォルトで./publicディレクトリ以下に格納される。


設定ファイルの記述

作業ディレクトリで$ goemon -g > goemon.ymlで設定ファイルgoemon.ymlを作成。

内容も一目瞭然、マッチするファイルが変更された際に実行して欲しい処理をcommands以降に文字列として記述していく。

また、プロセス再起動とかライブリロードとかの内部コマンドは:〜で記述する。


今回Mojolicious::Liteで使うためにデフォルトから変更するのは

  • 静的ファイルの置き場を./assetsから./publicに変更
  • 本体である*.plが変更されたらサーバリスタート&ライブリロード
  • (現バージョンだと)minifyしたjsが再帰的にminifyされてしまうっぽいんで力技で防ぐ

で、以下の感じに。

livereload: :35730
tasks:
- match: './public/*.js'
  commands:
  - 'if ! expr ${GOEMON_TARGET_FILE} : ".*\.min\.js" > /dev/null; then  minifyjs -m -i ${GOEMON_TARGET_FILE} > ${GOEMON_TARGET_DIR}/${GOEMON_TARGET_NAME}.min.js; fi'
  - :livereload /
- match: './public/*.css'
  commands:
  - :livereload /
- match: './public/*.html'
  commands:
  - :livereload /
- match: '*.pl'
  commands:
  - :restart
  - :livereload /


各所HTMLヘッダにライブリロード用の記述を追加

静的ファイルなりmyapp.pl内のテンプレートなりのheadタグに下記の記述を追加しておく。

<script src="http://localhost:35730/livereload.js"></script>


起動

要するに$ goemon [いつものコマンド]でよしなにしてくれる。

Mojolicious::Liteならこんな感じ。

$ goemon ./myapp.pl daemon
GOEMON 2015/02/26 00:50:02 goemon.go:380: starting command [./myapp.pl daemon]
GOEMON 2015/02/26 00:50:02 goemon.go:351: loading /Users/*****/goemontest/goemon.yml
GOEMON 2015/02/26 00:50:02 goemon.go:262: goemon loaded /Users/*****/goemontest/goemon.yml
GOEMON 2015/02/26 00:50:02 goemon.go:368: starting livereload
[Thu Feb 26 00:50:03 2015] [info] Listening at "http://*:3000"
Server available at http://127.0.0.1:3000


あとはブラウザでhttp://localhost:3000を開いて確認しつつ、各ファイルを編集していけば良い。

CSSやHTMLファイルを編集すればライブリロードしてくれるし、JSならばminifyもしてくれる。

PLファイルならば記述した通りプロセスを再起動した上でライブリロードしてくれる。


まとめ

言語もFWも選ばないし、必要に応じて外部ツールを連携させることができる。

今回はPerlのMojolicious使ったけど全く同じノリでRubySinatraでも使えるし、altJSをコンパイルさせるとかそういう方向でも使っていけると思う。

簡素ゆえに学習コスト低くてそれほど戸惑う要素もないし、記述次第で応用も効きそうな感じが良い!

mattn/goemon · GitHub


しかし最近Go言語を良く見かけるようになってきましたな。

僕が愛用してるとこだと今回のgoemonしかり、utf8・shifjs混在環境で便利なプラチナサーチャーしかり。

monochromegane/the_platinum_searcher · GitHub


そろそろ手の出し時なのかもしれない。

基礎からわかる Go言語

基礎からわかる Go言語