CPAN 最速検索を自サーバにコピーってみた
最速インターフェース研究会 :: CPAN最速検索 で http://cpan.ma.la/ を知って以来、cpan を貪るときには、いつも CPAN 最速検索を使っていました。
たまにリリースされているはずのモジュールが見つからないことには気がついてましたが、そんなもんかな・・・程度にしか思っていなかったんです。よくよく考えてみると、いつからかわからないけど・・・おそらく辞書データ( http://cpan.ma.la/list )の更新とかが、旨くいっていないっぽいんだろうなぁ〜と・・・。Mouse とかリスト上にみつからないし。
こりゃ困った。コレなしでは生きていけない体になっているし、幸い作者のブログに
とあるので、自分用にサーバに、まるごとコピってみました。Ajax で使うための辞書データ生成は perl でさっくりとでっち上げました。公開されていない perl 部分以外は、まるっとコピーしただけですが、これで満足しているので、これ以上のメンテは予定してません・・・。
http://www.drk7.jp/pub/js/cpanmala/
えーっと・・・まぁ CPAN 最速検索がどういうものかってのは、最速インターフェース研究会 :: CPAN最速検索 を観て頂ければOKとして、データ生成の perl プログラムは晒しておきますので、ご自分のサーバでやりたい方は、どうぞご自由にお持ち下さい。
CPAN 最速検索の設置手順書
- http://cpan.ma.la/index.html を保存する。 ここから保存もできます。
- http://cpan.ma.la/ie_xmlhttp.js を保存する。 ここから保存もできます。
- データ生成スクリプト makedic.pl を作成する。 ここから保存もできます。
#!/usr/local/bin/perl use strict; use warnings; use LWP::Simple; my $source = get("http://www.perl.com/CPAN/modules/02packages.details.txt"); my $fh; open $fh, '>', '02packages.details.txt' or die; print $fh $source; close $fh; my @packages; my @dists; my %dists; open $fh, '<', '02packages.details.txt' or die; while (<$fh>) { chomp; my ( $package, $ver, $dist ) = $_ =~ /^(.+?)\s+(.+?)\s+(.+)$/; next unless $package; next if $package =~ /:$/; unless ( $dists{$dist} ) { $dists{$dist} = $package; push @dists, $package; } push @packages, $package; } close $fh; open $fh, '>', 'list' or die; print $fh join( "\n", @packages ); close $fh; open $fh, '>', 'dist' or die; print $fh join( "\n", @dists ); close $fh;
- 自サーバの適当なディレクトリに設置して、makedic.pl を実行する。02packages.details.txt と list と dist ってファイルが生成される。02packages.details.txt は http://www.perl.com/CPAN/modules/02packages.details.txt そのもの。list と dist は CPAN 最速検索が Ajax 経由でデータロードするファイル。
- http://あなたのドメイン名/設置したディレクトリ/index.html で動きます。後は make.pl をバッチで一日に1回くらい走らせておけば良いと思います。
いやぁ〜これで最新のモジュールも、馴染んだインタフェースで検索できるようになってよかったです。
それにしても、コレはこういうモンだと思いこんでいましたが、思いこみは恐ろしいですね。それが正しいと信じ込んでしまいますから。思いこみのせいで日々いろんなところで失敗してます。はい。(┳ω┳)
コメントやシェアをお願いします!