Erlangはじめました
一ヶ月ほど前くらいからErlangを触り始めた@mtgtoです.それまでは主にScalaを書いてました.Erlangはまだ駆け出しなのですごいE本を片手にコードを書くわけですが,OTPやライブラリを使うときにはAPIの説明を読む場面が多々あります.
私はAPIドキュメントを高速に検索・閲覧できるDashというMacアプリを愛用しています.このアプリではErlangもサポートされているのですが,残念ながらOTPのモジュールのみしか対応していません.今回紹介するedocsetを使えば外部ライブラリも閲覧できるようになります.Dashのわかりやすい説明はDash の使い方などをご参照ください.
なおライブラリ名は「Erlang + docset」(docsetはDash用のドキュメントファイルの拡張子)という意味です.
デモ
試しにcowboyのAPIドキュメントをDashから見る様子を動画にしてみました.画像をクリックでYouTubeに飛びます.
動画ではcowboyのAPIドキュメントを見ていますが,私の環境(Erlang 17.4)でcowboyのrebar doc
をするとsrc/cowboy_protocol.erl
の処理に失敗するので適当にコードをいじってEdocが生成できるようにしてあります.
使い方
現在のedocsetはreber doc
コマンドにフックして動くため,その設定を追加します.edoc_opts
に{doclet, edocset_doclet}
と{xml_export, xmerl_xml}
を追加します(xml_exportの設定をしないと出力されるHTMLがxmerlで読めない形式になるため).
{edoc_opts, [
{doclet, edocset_doclet},
{xml_export, xmerl_xml}
]}.
{deps, [
{edocset, ".*", {git, "git://github.com/mtgto/edocset.git", {branch, "master"}}}
]}.
rebar.config
の編集が終わったらrebar get-opts compile
してからrebar doc
するとXXXX.docset
が生成されます.
$ rebar doc
==> cowboy (doc)
$ find . -name '*.docset'
./cowboy.docset
あとはXXXX.docset
をダブルクリックすればDashにライブラリのAPIドキュメントがインストールされて検索できるようになります.
ライブラリの中でやってること
Dash用のDocはHTMLのドキュメントと,モジュール・関数・タイプのURLが保存されたsqlite3データベースからなっています.
Edocの生成がユーザーから要求されると,最初にデフォルトの操作であるHTMLドキュメントの生成を行い,その後HTMLをxmerlでパースしてモジュール・関数・タイプの一覧をsqlite3に保存しています.
「Erlang sqlite3」でGoogle検索して最初に出てくるalexeyr/erlang-sqlite3を使ってみたのですが,私の環境では生成される*.soが使えなかったので(たぶんこれと同じ問題),フォークを使っています.というかフォークの数多すぎ・・・
まとめ
Erlangの勉強がてらDash用のAPIドキュメントを生成するライブラリを作りました.プロセスやサーバーはほとんど登場しませんがファイル操作やXML操作などに触れることができてよかったです.
最後に,DashはJava, Ruby, Goなど様々なAPIドキュメントに対応してるので本当におすすめのアプリです.Windows,iOS,Android版もあるようなので宗教上の理由でMacが使えない人にも使えると思います.