(pre) Hachioji.pm #14とFetchJSの話

8割方書き終えて放置されていた原稿が出てきたので貼り付けておくの巻。

すっかり遅くなってしまいましたが、(pre) Hachioji.pm #14に行ってきました。今回は(今回も?)ぎりぎりまで参加できるかどうかわからず、ハッカソンのテーマが存在していたことすら把握していなかったのですが、日中は3月末のQAハッカソンに向けた下準備の一環としてAcme::CPANAuthorsのサイトの拡充をしつつ、本編の方ではその過程でこさえたツールの話などをしてきました。サイトはいまのところ公開リポジトリにはあげておらず、ハッカソンの成果もまだブランチの中で熟成中ですが、ツールについてはgithubにあげてあるのでこちらにも簡単に書いておきます。

最近FetchJSというツールを書いて使っています。自分がウェブアプリを書くときに使うJSのライブラリをダウンロードしてきてアプリの静的ファイル置き場とおぼしき場所(public_html/static/...とか)に展開するだけのものですが、ライブラリのバージョンの違いをテストするときなど、いちいち公式サイトをググって、minifyされていないものを落としてきて、展開して、検証が済んだら最後にminifyかけて……という作業が面倒になってきたので、コマンドひとつで用事を済ませられるようにしておいた次第。

とりあえず現状で以下のようなサブコマンドが使えます。jQuery UIのようにときどき使っているにもかかわらずまだ対応するコマンドを書いていないものもいくつかありますし、過去のバージョン一覧とか、ダウンロード時にカスタマイズできるようなライブラリの設定まわりの処理もまだ(TinyMCEの言語選択以外)ないですが、その辺は追々実装していくつもり。

$ fetch_js
bootstrap   - fetch Bootstrap from Twitter
flipsnap    - fetch flipsnap (for mobile)
help        - show help
highcharts  - fetch Highcharts
html5       - fetch html5.js
jquery      - fetch jQuery
pjax        - fetch jquery.pjax
prettify    - fetch google-code-prettify
tablesorter - fetch jquery.tablesorter
tinymce     - fetch TinyMCE
zepto       - fetch zepto.js (for mobile)
zoey        - fetch Zoey (mobile web app framework)

自分でよく使うものを追加したければ、こんな感じのモジュールを@INC配下に置いておけばOKです(おすすめのライブラリがあったらぜひ教えてください)。

package FetchJS::Hogehoge;

use strict;
use warnings;
use base 'FetchJS';

sub _run {
  my ($self, $version) = @_;

  $version ||= 'master';

  my $uri = "https://github.com/_user_/_hogehoge_/zipball/$version";

  my $zipball = $self->fetch($uri => "hogehoge.zip");
  $self->unzip($zipball,
    [qr/\.js$/ => 'js'],
  );
}

1;

__END__

=head1 NAME

FetchJS::Hogehoge - fetch hogehoge

やっつけで作ったので、LWPとFurlが無意味に併用されていたり、メインの.pmがごちゃごちゃしていて見通しが悪かったりするので、もしかすると(��CPANにあげる気になったら)別の名前空間でごりっと書き換えてしまうかもしれませんが、使ってみようという方がいらしたら下記からどうぞ。

https://github.com/charsbar/fetch_js

次回の(pre) Hachioji.pm #15は3/24とのことです。