LoginSignup
4
4

More than 5 years have passed since last update.

EdocをDash用に変換してくれるライブラリ「edocset」を作りました

Last updated at Posted at 2014-12-18

Erlangはじめました

一ヶ月ほど前くらいからErlangを触り始めた@mtgtoです.それまでは主にScalaを書いてました.Erlangはまだ駆け出しなのですごいE本を片手にコードを書くわけですが,OTPやライブラリを使うときにはAPIの説明を読む場面が多々あります.

私はAPIドキュメントを高速に検索・閲覧できるDashというMacアプリを愛用しています.このアプリではErlangもサポートされているのですが,残念ながらOTPのモジュールのみしか対応していません.今回紹介するedocsetを使えば外部ライブラリも閲覧できるようになります.Dashのわかりやすい説明はDash の使い方などをご参照ください.

なおライブラリ名は「Erlang + docset」(docsetはDash用のドキュメントファイルの拡張子)という意味です.

デモ

試しにcowboyのAPIドキュメントをDashから見る様子を動画にしてみました.画像をクリックでYouTubeに飛びます.

Demo video

動画では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で読めない形式になるため).

rebar.config
{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が使えない人にも使えると思います.

リンク

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4