解析

MELPAのサイト には更新日時やダウンロードランキングが記されているが、
いったいどうなってるのかなと思って解析してみました。

w3mからでは見られないのでJavaScript…天敵Ajaxですね(笑)

<script src="js/melpa.js"></script>

という行を見掛けたので、
http://melpa.milkbox.net/js/melpa.js
を眺めてみると、いきなり

// TODO Fix json encoding of versions

という行を見付けたので、jsonで検索。

すると、ありましたありました。

melpa.packageList = m.sync([
  m.request({method: 'GET', url: "/recipes.json"}),
  m.request({method: 'GET', url: "/archive.json"}),
  m.request({method: 'GET', url: "/download_counts.json"})
]).then(function (info) {〜

http://melpa.milkbox.net/recipes.json
http://melpa.milkbox.net/archive.json
http://melpa.milkbox.net/download_counts.json

この3つのjsonを見ればいいということがわかって、
興味がある download_counts.json を見てみました。

形式はシンプルにもこんな感じです。

{
 "/direx": 2,
 "occur-x": 185,
 "org-drill-table": 81,
 "ido-vertical-mode": 6640,
 "rhtml-mode": 1691,
 "flx-ido": 16803,
 "asn1-mode": 66,
 "manage-minor-mode": 220,
 "nummm-mode": 88,
 〜
}

ランキング!

ここでRubyさんに解析していただきましょう。

10000ダウンロード以上のものを並べてみました。

$ ruby -rjson -ropen-uri -rpp -e 'pp
JSON.parse(open("http://melpa.milkbox.net/download_counts.json",&:read)).
sort_by{|p,c| c}.reverse'
[["magit", 80583],
 ["dash", 74866],
 ["auto-complete", 63193],
 ["popup", 56894],
 ["git-commit-mode", 56578],
 ["s", 55007],
 ["flycheck", 50291],
 ["yasnippet", 49654],
 ["git-rebase-mode", 48842],
 ["helm", 48728],
 ["epl", 45257],
 ["pkg-info", 43794],
 ["undo-tree", 38017],
 ["projectile", 37539],
 ["smex", 35607],
 ["zenburn-theme", 34864],
 ["clojure-mode", 34747],
 ["f", 34692],
 ["expand-region", 33792],
 ["markdown-mode", 33788],
 ["haskell-mode", 33079],
 ["smartparens", 31166],
 ["ido-ubiquitous", 30548],
 ["ace-jump-mode", 28794],
 ["rainbow-delimiters", 28299],
 ["paredit", 27662],
 ["cider", 26650],
 ["multiple-cursors", 26461],
 ["js2-mode", 25559],
 ["solarized-theme", 25549],
 ["web-mode", 25479],
 ["gitconfig-mode", 23739],
 ["elisp-slime-nav", 23574],
 ["diminish", 23144],
 ["inf-ruby", 22913],
 ["gitignore-mode", 22594],
 ["exec-path-from-shell", 21003],
 ["gh", 20604],
 ["php-mode", 20335],
 ["coffee-mode", 19772],
 ["color-theme", 19171],
 ["yaml-mode", 19043],
 ["pcache", 18954],
 ["slime", 18237],
 ["company", 17657],
 ["gist", 17526],
 ["logito", 17042],
 ["dired+", 17010],
 ["anzu", 16938],
 ["flx-ido", 16803],
 ["evil", 16554],
 ["flx", 16287],
 ["move-text", 16191],
 ["ack-and-a-half", 15857],
 ["deferred", 15243],
 ["lua-mode", 15126],
 ["ctable", 15023],
 ["color-theme-sanityinc-tomorrow", 14972],
 ["clojure-test-mode", 14207],
 ["browse-kill-ring", 13857],
 ["w3m", 13831],
 ["helm-projectile", 13782],
 ["volatile-highlights", 13555],
 ["simple-httpd", 13327],
 ["guru-mode", 13136],
 ["scss-mode", 13102],
 ["jedi", 13091],
 ["haml-mode", 12944],
 ["flymake-easy", 12916],
 ["epc", 12904],
 ["color-theme-sanityinc-solarized", 12879],
 ["idomenu", 12834],
 ["skewer-mode", 12821],
 ["concurrent", 12649],
 ["popwin", 12200],
 ["grizzl", 12194],
 ["htmlize", 12064],
 ["find-file-in-project", 11911],
 ["erlang", 11846],
 ["go-mode", 11612],
 ["scala-mode2", 11173],
 ["ac-nrepl", 11169],
 ["sass-mode", 10665],
 ["autopair", 10581],
 ["ruby-compilation", 10559],
 ["less-css-mode", 10493],
 ["color-theme-solarized", 10490],
 ["wgrep", 10397],
 ["yari", 10338],
 ["mmm-mode", 10125],
 ["ess", 10034],
 〜
]

なんと1位は magit でした!
人気パッケージですが、1位はちょっと意外でした。

見てみたら git-commit-mode git-rebase-mode gitconfig-mode
gitignore-mode が上位にランキングされていてgit人気の高さを感じました。

dash s f といった短い名前のスタイリッシュライブラリも上位、
依存パッケージでダウンロードさますが、高ランクは定着している証拠です。

auto-complete popup exec-path-from-shell anzu deferred などの
日本人勢もランキングされているのは嬉しい限りです。

整形してみる

それでは、整形してみましょう。

melpa-dl-counts.rb(以下のコードと同一)

#!/usr/local/bin/ruby
require 'json'
require 'open-uri'

JSON.parse(open("http://melpa.milkbox.net/download_counts.json",&:read)).
  sort_by{|p,c| c}.reverse.each {|pkg, dl|
  printf "# %6d %-40s (describe-package '%s)\n", dl, pkg, pkg
}
$ wget -O- http://rubikitch.com/f/melpa-dl-counts.rb| ruby
#  80583 magit                                    (describe-package 'magit)
#  74866 dash                                     (describe-package 'dash)
#  63193 auto-complete                            (describe-package 'auto-complete)
#  56894 popup                                    (describe-package 'popup)
#  56578 git-commit-mode                          (describe-package 'git-commit-mode)
#  55007 s                                        (describe-package 's)
#  50291 flycheck                                 (describe-package 'flycheck)
#  49654 yasnippet                                (describe-package 'yasnippet)
#  48842 git-rebase-mode                          (describe-package 'git-rebase-mode)
#  48728 helm                                     (describe-package 'helm)
#  45257 epl                                      (describe-package 'epl)
#  43794 pkg-info                                 (describe-package 'pkg-info)
#  38017 undo-tree                                (describe-package 'undo-tree)
#  37539 projectile                               (describe-package 'projectile)
#  35607 smex                                     (describe-package 'smex)
#  34864 zenburn-theme                            (describe-package 'zenburn-theme)
#  34747 clojure-mode                             (describe-package 'clojure-mode)
#  34692 f                                        (describe-package 'f)

実行結果の各行でC-e C-x C-eを押せばパッケージの説明が見られます。

本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。