ChipでWebページ上のコードを簡単に扱おう #advent11rb

Ruby Advent Calendar jp: 2011 : ATNDの7日目の記事です。昨日は@sakuroさんの/var/log/messagesでした。明日は@sato_ryuさんのhttp://satoryudiary.fluxflex.com/?date=20111208でした。)

みなさんが有用なTIPSを記事に書いたり書かなかったりする中、私はChipというToolを紹介します。
Chipは私が今日(!!)リリースしたツールで、Webページ上のマイクロコードを管理するものです。

authorNari/chip · GitHub

インストール方法:

$ gem install chip

何に使うか?

Web上に書き捨てているコードは結構あると思います。ブログの記事上とか、gistとか。
そういうのをコマンドラインで管理できたら楽しいだろうと思い、作りました。
ちょっとだけ具体例を書いてみましょう。

「おれだけのモンキーパッチ貼っておきますね」

例えば A monkey patch · GitHub をgistに作ったとします。
Chipを使うと以下のように使うことができます。

$ cat a.rb
require "chip"
require_chip "https://raw.github.com/gist/1417282"

p 1.hour

$ ruby a.rb
Installing...
/path/to/.chip.d/https:__raw.github.com_gist_1425982.rb
---
class Fixnum
  def minute; self * 60; end
end
---
Do you install above a program? [yes/no] > yes
60

ChipではWeb上に書き捨てられるモンキーパッチの不満を、それぞれ以下のように解決しています。

  • 名前がない(わざわざつけるの面倒だから) -> URLを名前にすればいいじゃん
  • どこから拾ってきたものか忘れた -> URLを名前にすればいいじゃん
  • コピペするの面倒 -> URLを指定するだけ
「おれが作った読みにくいプログラム貼っておきますね」

二年前のmameさんの記事(Ruby とすてきな難読化 - まめめも)を参考にして簡単なRubyスクリプトを難読化するのは「Rubyistの登竜門」と勝手に言っておりますが、難読化したプログラムはやっぱりブログに貼りますよね。

私も以下のようなプログラムを書いてみました。

#chip

  eval(     %w|   put   s("   H3429el
l0     o6   ,_4   C52   h0i   98    62
63          0p2455!!2   952   0".gsub
(/     \\   d/,   '')   .tr   ("
  _",32    .chr   ))|   *''   )#

でも、わざわざコピペしないと動作が見れないというのは面倒です。

Chipを使うとコマンド一発で動作を見ることができます。
※preタグの中の先頭に"#chip"という文字列があるものを実行します。

$ chip run http://d.hatena.ne.jp/authorNari/20111207/1323185562

ライブラリのサンプルコードをブログ記事で見つけたときにchipコマンド一発で実行できたら素敵だなぁとか、考えています。

「おれが作った便利なプラグイン貼っておきますね」

ChipはChip自身によって拡張できます。ChipではWebページ上のコードを取ってくるやつ(Fetcher)を追加することができます。
例としてTwitterの発言をコードとして取得するFetcherを作ってみました。
Twitter status fetcher · authorNari/chip Wiki · GitHub

Install方法は以下の行を~/.chipに追加するだけです。

require_chip "https://github.com/authorNari/chip/wiki/Twitter-status-fetcher"

ほいで、Welcome to Twitter - Login or Sign upを以下のコマンドで実行します。

$ chip run http://twitter.com/#!/nari3/status/142788923339444224 -f
Hello, world

おしまい

他にも面白い使い方ができそうです。
gemにするほどでもない極めて小さなライブラリはchipで管理できるなぁと思っています。
バージョン管理? URLにバージョン情報があればいいんですよ :D

ちなみにChipは最近(←遅い)江渡さんの本を読んで思いつきました(内容とあまり関連がないけど)。
本当に素晴らしい本ですので、ぜひみなさん読んでみてください。

パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ)

パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ)