Clojure
GitHub
ClojureDay 10

Github上のprofile.cljから、使われているLeiningenプラグインを調べてみた

More than 3 years have passed since last update.

よく使われているLeiningenプラグインの調査

概要

github上で公開されている profile.clj ファイル124個を調査し、使われているLeiningenプラグインの出現頻度を調査した。

背景と問題点

Leiningenプラグインは便利だが、便利なLeiningenプラグインを見つけるのは手間がかかる。さらに、
最もよく用いられている手法は「詳しい人から教えてもらう」というものだが、
この手法は知り合いが少ないボッチプログラマにとっては適用が難しい。

提案手法

一部のClojureプログラマは、Leiningenの設定ファイルであるprofile.cljをインターネット上に公開している。また、そのようなユーザーは比較的情報感度が高く、レベルが高いプログラマである事が期待される。よって、インターネット上に公開されているprofile.cljを網羅的に調べ、利用されているプラグインを数え上げることによって、システマティックに良プラグインを発見できることが期待される。

実装

今回は、Githubを対象とした。Github上で公開されているprofile.cljを気合いで検索してURLのリストを作成し、それをClojureプログラムを書くことにより処理して、各プラグインの出現回数を計測した。対象としたのはAppendixで述べる124個のファイルである。なお、依存関係によって暗黙に導入されるプラグインは考慮されていない。

結果

以下に計測結果と、上位プラグインの簡単な説明を示す。各プラグインへのURLは、著者らの豆腐メンタルと時間的に無理だったので本項では割愛した。

プラグイン 登場回数 概要・備考
lein-pprint 42 プロジェクトの属性とか設定項目を表示してくれる
cider/cider-nrepl 30 Emacs上での定番開発環境。
lein-ancient 28 依存ライブラリのバージョン情報/更新チェック
lein-exec 28 コマンドライン上からClojureプログラムを実行できる。ワインライナーのようなこともできるようになる。
lein-kibit 27 Clojureプログラムのlintツール
lein-midje 27 clojure.testより柔軟なテストフレームワークMidjeのLeiningenプラグイン
lein-clojars 24 (Clojarsへのデプロイツールだが、Leiningen本体が対応したため現在では不要)
lein-try 24 新しいライブラリをお手軽に試したいとき、project.cljに追加しなくても一時的にREPLで試すことができる
lein-marginalia 21 ソースコードのドキュメンテーションツールであるMarginaliaのLeiningenプラグイン
lein-difftest 20 clojure.testの結果表示を改善する
lein-cljsbuild 17 ClojureScriptの必須プラグイン
jonase/eastwood 16 Clojureプログラムのlintツール
codox 12 Clojureで書かれたAPIのドキュメント生成ツール
lein-ritz 12 EmacsのLisp環境SLIMEのためのプラグイン
lein-bikeshed 11 Clojureプログラムのlintツール
lein-cloverage 11 ソースコードカバレッジツール
lein-localrepo 11 ローカルのMavenリポジトリからプラグインやライブラリをインストールできる
lein-immutant 10 アプリケーションフレームワークWildFlyを使うためのLeiningenプラグイン
lein-swank 10 (ritzかCIDERを使いましょう。This project is no longer under active development.)
lein-typed 9
lein-expectations 6
lein-simpleton 6
lein-vanity 6
lein-catnip 5
lein-midje-doc 5
cljs-template 4
com.aphyr/prism 4
com.jakemccrary/lein-test-refresh 4
com.palletops/pallet-lein 4
hiccup-bridge 4
lein-bin 4
lein-licenses 4
lein-noir 4
lein-outdated 4
jonase/kibit 3
lein-autoreload 3
lein-beanstalk 3
lein-checkout-deps 3
lein-create-template 3
lein-datomic 3
lein-drip 3
lein-environ 3
lein-guzheng 3
lein-html 5
lein-ring 3
lein-tar 3
lein-tarsier 3
org.timmc/nephila 3
quickie 3
refactor-nrepl 3
clj-stacktrace 2
environ/environ.lein 2
joodo/lein-joodo 2
lein-annotations 2
lein-autoexpect 2
lein-autotest 2
lein-cljs 2
lein-clr 2
lein-debian 2
lein-depgraph 2
lein-deps-tree 2
lein-describe 2
lein-droid/lein-droid 2
lein-gentags 2
lein-gnome/lein-template 2
lein-grep 2
lein-miditest 2
lein-newnew 2
lein-ns-dep-graph 2
lein-open 2
lein-pedantic 2
lein-shell 2
lein-spell 2
mvxcvi/whidbey 2
org.bodil/lein-noderepl 2
pallet/lein-template 2
perforate 2
varspotting 2
alembic 1
lazytest 1
lein-antlr 1
lein-cascalog 1
lein-checkouts 1
lein-clojuredocs 1
lein-difftest/lein-difftest 1
lein-dynalint 1
lein-gorilla 1
lein-light 1
lein-oneoff 1
lein-plz 1
lein-release/lein-release 1
lein-test-out 1
org.clojars.strongh/lein-init-script 1
org.clojars.tcrawley/lein-release 1
org.clojure/tools.nrepl 1
org.danielsz/lein-runit 1
radagast 1
speclj 1

Appendix

調査したURLのリスト:
#=()を用いた、read時に処理が起動されるようなコードが含まれているものもあるが、これは計測時に除外している)

https://gist.github.com/devn/4403577
https://github.com/mjwillson/dotfiles/blob/master/.lein/profiles.clj
https://github.com/zcaudate/vinyasa/blob/master/profiles.clj.sample
https://github.com/teropa/hiccups/blob/master/profiles.clj
https://github.com/ckirkendall/enfocus/blob/master/profiles.clj
https://github.com/ardumont/dot-files/blob/master/profiles.clj
https://github.com/tmarble/clj.emacs.d/blob/master/lein.profiles.clj
https://github.com/bitemyapp/dotfiles/blob/master/.lein/profiles.clj
https://github.com/technomancy/lein-profiles/blob/master/src/leiningen/hooks/profiles.clj
https://github.com/pallet/clj-jclouds/blob/master/profiles.clj
https://github.com/pallet/pallet-aws/blob/master/profiles.clj
https://github.com/noprompt/matilde/blob/master/lein/profiles.clj
https://gist.github.com/jamesmacaulay/5603176
https://github.com/pallet/rbenv-crate/blob/master/profiles.clj
https://github.com/pallet/lein-pallet-crate/blob/master/profiles.clj
https://github.com/mcohen01/dotfiles/blob/master/profiles.clj
https://github.com/alanning/meteor-crate/blob/master/profiles.clj
https://github.com/sritchie/awaze/blob/master/profiles.clj
https://github.com/magomimmo/ciao/blob/master/profiles.clj
https://github.com/hyPiRion/dotfiles/blob/master/.lein/profiles.clj
https://github.com/marick/lambda-jam/blob/master/profiles.clj
https://github.com/pallet/forever-crate/blob/master/profiles.clj
https://github.com/dgrnbrg/dotfiles/blob/master/profiles.clj
https://github.com/denno-clojure/mascarpone/blob/master/profiles.clj
https://github.com/hugoduncan/hornetq-clj/blob/master/server/profiles.clj
https://github.com/hugoduncan/hornetq-clj/blob/master/example/profiles.clj
https://github.com/pallet/maven-resolver/blob/master/profiles.clj
https://github.com/pallet/ami-crate/blob/master/profiles.clj
https://github.com/bostonaholic/dotfiles/blob/master/profiles.clj
https://gist.github.com/samaaron/5684888
https://github.com/bodil/leiningen-for-dummies/blob/master/profiles.clj
https://github.com/RyanMcG/dotfiles/blob/master/.lein/profiles.clj
https://github.com/harob/dotfiles/blob/master/.lein/profiles.clj
https://github.com/Leonidas-from-XIV/dotfiles/blob/master/home/.lein/profiles.clj
https://github.com/proger/unixconf/blob/master/lein/profiles.clj
https://github.com/jamii/emacs-live-packs/blob/master/profiles.clj
https://github.com/sundbp/dot_files/blob/master/lein/profiles.clj
https://github.com/hozumi/dot_files/blob/master/.lein/profiles.clj
https://github.com/drewr/dotfiles/blob/master/d/.lein/profiles.clj
https://github.com/misfo/dotfiles/blob/master/.lein/profiles.clj
https://github.com/jeluard/dotfiles/blob/master/lein/profiles.clj
https://github.com/jwhitbeck/dotfiles/blob/master/.lein/profiles.clj
https://gist.github.com/loliveira/5610163
https://gist.github.com/stianeikeland/8235512
https://github.com/jimbarritt/dot-files/blob/master/.lein/profiles.clj
https://github.com/benburkert/dotfiles/blob/master/lein/profiles.clj
https://github.com/ccann/dotfiles/blob/master/profiles.clj
https://github.com/gworley3/daemontools-crate/blob/master/profiles.clj
https://github.com/ilkka/dotfiles/blob/master/home/.lein/profiles.clj
https://gist.github.com/m9dfukc/6110867
https://github.com/asmala/dotfiles/blob/master/leiningen/profiles.clj
https://github.com/azumafuji/dotfiles/blob/master/profiles.clj
https://github.com/citizenparker/dotfiles/blob/master/profiles.clj
https://github.com/AlexBaranosky/.lein/blob/master/profiles.clj
https://github.com/nathanic/dotfiles/blob/master/config/lein-profiles.clj
https://github.com/gauravagarwalr/Script-BackUp/blob/master/OS%20X/.lein/profiles.clj
https://github.com/gauravagarwalr/Script-BackUp/blob/master/OS%20X/.lein/profiles.clj
https://github.com/crooney/dotfiles/blob/master/lein/profiles.clj
https://github.com/jaju/config/blob/master/rc/lein-profiles.clj
https://github.com/borh/dotfiles/blob/master/lein/profiles.clj
https://github.com/cola-zero/cola-zero-dotfiles/blob/master/lein/profiles.clj
https://github.com/feltnerm/dotfiles/blob/master/lein/profiles.clj
https://github.com/zonpantli/dotfiles/blob/master/.lein/profiles.clj
https://github.com/zonpantli/dotfiles/blob/master/.lein/profiles.clj
https://github.com/nickmbailey/HomeDir/blob/master/.lein/profiles.clj
https://github.com/cldwalker/leinfiles/blob/master/profiles.clj
https://github.com/haruyama/Settings/blob/master/.lein/profiles.clj
https://github.com/cldwalker/leinfiles/blob/master/profiles.clj
https://gist.github.com/devn/4403577
https://github.com/sandhu/emacs.d/blob/master/profiles.clj
https://github.com/magomimmo/fb/blob/master/profiles.clj
https://github.com/bitemyapp/dotfiles/blob/master/.lein/profiles.clj
https://github.com/niftyn8/dotfiles/blob/master/lein/profiles.clj
https://github.com/dgrnbrg/dotfiles/blob/master/profiles.clj
https://github.com/zerowidth/dotfiles/blob/master/lein/profiles.clj
https://github.com/bodil/leiningen-for-dummies/blob/master/profiles.clj
https://github.com/RallySoftware/rally-emacs/blob/master/profiles.clj
https://github.com/expez/dotfiles/blob/master/profiles.clj
https://github.com/marick/lambda-jam/blob/master/network-free-install/lein/profiles.clj
https://github.com/mcohen01/dotfiles/blob/master/profiles.clj
https://github.com/bostonaholic/dotfiles/blob/master/profiles.clj
https://github.com/edn-format/data.edn/blob/master/profiles.clj
https://github.com/goldfeld/dotfiles/blob/master/profiles.clj
https://github.com/gfredericks/dotfiles/blob/master/.lein/profiles.clj.symlink
https://github.com/NSinopoli/dotfiles/blob/master/.lein/profiles.clj
https://github.com/Leonidas-from-XIV/dotfiles/blob/master/home/.lein/profiles.clj
https://github.com/DAddYE/dotfiles/blob/master/.lein/profiles.clj
https://github.com/ubolonton/dotfiles/blob/master/.lein/profiles.clj
https://github.com/mjwillson/dotfiles/blob/master/.lein/profiles.clj
https://github.com/amdt/dot-files/blob/master/profiles.clj
https://gist.github.com/haksior/9ff315afcf4e68f07e37
https://github.com/drewr/dotfiles/blob/master/d/.lein/profiles.clj
https://gist.github.com/friemen/5153156d765265fe5c13
https://github.com/frankiesardo/dotfiles/blob/master/.lein/profiles.clj
https://github.com/hyPiRion/dotfiles/blob/master/.lein/profiles.clj
https://github.com/misfo/dotfiles/blob/master/.lein/profiles.clj
https://github.com/roryk/dotfiles/blob/master/lein/profiles.clj
https://github.com/lunaryorn/dotfiles/blob/master/clojure/.lein/profiles.clj
https://github.com/tmarble/clj.emacs.d/blob/master/lein.profiles.clj
https://github.com/danielsz/dotfiles/blob/master/leiningen/profiles.clj
https://github.com/jr0cket/dot-files-ubuntu/blob/master/.lein/profiles.clj
https://github.com/julienXX/dotfiles/blob/master/profiles.clj
https://github.com/matlux/coretyped/blob/master/profiles.clj
https://github.com/jonschoning/dotfiles/blob/master/.lein/profiles.clj
https://github.com/ardumont/dot-files/blob/master/profiles.clj
https://github.com/harob/dotfiles/blob/master/.lein/profiles.clj
https://github.com/kjw/dot-files/blob/master/profiles.clj
https://github.com/davejacobs/dotfiles/blob/master/lein/profiles.clj
https://github.com/jamii/emacs-live-packs/blob/master/profiles.clj
https://github.com/hozumi/dot_files/blob/master/.lein/profiles.clj
https://github.com/noprompt/matilde/blob/master/lein/profiles.clj
https://github.com/jetmind/dot/blob/master/profiles.clj
https://github.com/bengillies/homedir/blob/master/.lein/profiles.clj
https://github.com/jrheard/dotfiles/blob/master/home/.lein/profiles.clj
https://gist.github.com/jcrossley3/6144603
https://gist.github.com/mcandre/5323679
https://github.com/denno-clojure/mascarpone/blob/master/profiles.clj
https://github.com/samroberton/dotfiles/blob/master/clojure/lein/profiles.clj
https://github.com/Gonzih/dotfiles/blob/master/.lein/profiles.clj
https://github.com/haruyama/Settings/blob/master/.lein/profiles.clj
https://github.com/ilkka/dotfiles/blob/master/home/.lein/profiles.clj
https://github.com/chaptastic/dotfiles/blob/master/lein-profiles.clj
https://github.com/oakes/play-clj-examples/blob/master/minimal-3d/android/project.clj