そうです Perl6 です。
Perl6 のモジュールは github の perl6/ecosystem というリポジトリで管理されており、新しいモジュールを登録するには、そのモジュールのメタ情報の URL を perl6/ecosystem にコミットするとよい、ということになっている。
この辺に列挙されている様子が見える。すごい。
ecosystem/META.list at master · perl6/ecosystem · GitHub
Perl6 を書いていると、「このモジュールはどこから提供されているものだろう」と調べたくなることがあるのだけど、そういう時はこのデータを元に生成されている json を取ってきて jq でごちゃごちゃやると得られるようだった。
たとえばMonitor::Monit
を提供してるリポジトリが知りたいときはこういう感じで投げると調べられる。実際は curl した結果はどこかに保存しておくとよさそう。というか Perl6 が内部で持ってたりするのかな。。。
$ curl -s http://ecosystem-api.p6c.org/projects.json | jq '.[] | select( .provides | has("Monitor::Monit"))'
{
"resources": [],
"support": {
"source": "git://github.com/jonathanstowe/Monitor-Monit.git"
},
"tags": [
"monitor",
"api",
"system"
],
"version": "0.0.1",
"test-depends": [
"Test",
"CheckSocket"
],
"auth": "github:jonathanstowe",
"license": "perl",
"perl": "6.c",
"meta6": "0",
"name": "Monitor::Monit",
"build-depends": [],
"authors": [
"Jonathan Stowe <jns+gh@gellyfish.co.uk>"
],
"description": "Provide an interface to the monit monitoring daemon",
"depends": [
"HTTP::UserAgent",
"URI::Template",
"XML::Class"
],
"source-url": "git://github.com/jonathanstowe/Monitor-Monit.git",
"provides": {
"Monitor::Monit": "lib/Monitor/Monit.pm"
}
}
今回探していたのは HTTP::Response
なのだけど、探したところ2つのリポジトリから違う物が提供されていることが分かってニッコリ。実際は片方は Role で片方が実装ということのようなのだけど(よくわかってない)、何か難しい世界に来たような気がしますね。
$ curl -s http://ecosystem-api.p6c.org/projects.json | jq '.[] | select( .provides | has("HTTP::Response"))'
{
"version": "1.1.23",
"perl": "6.c",
"description": "Web user agent",
"author": "github:sergot",
"name": "HTTP::UserAgent",
"test-depends": [
"IO::Capture::Simple"
],
"depends": [
"HTTP::Status",
"File::Temp",
"DateTime::Parse",
"Encode",
"MIME::Base64",
"URI"
],
"source-url": "git://github.com/sergot/http-useragent.git",
"provides": {
"HTTP::MediaType": "lib/HTTP/MediaType.pm6",
"HTTP::UserAgent": "lib/HTTP/UserAgent.pm6",
"HTTP::Cookie": "lib/HTTP/Cookie.pm6",
"HTTP::Header::Field": "lib/HTTP/Header/Field.pm6",
"HTTP::Cookies": "lib/HTTP/Cookies.pm6",
"HTTP::Request::Common": "lib/HTTP/Request/Common.pm6",
"HTTP::Request": "lib/HTTP/Request.pm6",
"HTTP::Response": "lib/HTTP/Response.pm6",
"HTTP::Message": "lib/HTTP/Message.pm6",
"HTTP::UserAgent::Common": "lib/HTTP/UserAgent/Common.pm6",
"HTTP::Header": "lib/HTTP/Header.pm6"
}
}
{
"version": "0.1",
"description": "role for HTTP::Server so we can have start building out some servers with interchangeable backends",
"perl": "6.*",
"source-url": "git://github.com/tony-o/perl6-http-server.git",
"depends": [],
"provides": {
"HTTP::Response": "lib/HTTP/Response.pm6",
"HTTP::Request": "lib/HTTP/Request.pm6",
"HTTP::Server": "lib/HTTP/Server.pm6"
},
"author": "github:tony-o",
"name": "HTTP::Server"
}
こちらからは以上です。頑張っていきましょう。
追記
こういうようにすると、特定のモジュールに依存しているパッケージを探すことも出来る。
$ curl -s http://ecosystem-api.p6c.org/projects.json | jq '.[] | select( .depends | .[]? == "HTTP::UserAgent" )'