DashでJava SE 7 日本語ドキュメントに対応させてみた

今年の5月にJava SE 7のAPIドキュメントをはじめとした、Java SE 7のドキュメントの日本語版が公開されました(Java SE7API日本語版提供開始Java SE ドキュメント)。

バージョン6までのように「Java 7 HashMap」のように検索して(Googleなら「日本語のページを検索」に制限すると最初に出てくるようになります)Webブラウザで見るのでももちろんいいのですが、MacユーザとしてはやはりDashで見たいわけです。 ちなみにDashというのはMac/iOSなどのAPIドキュメントをキーワードからインクリメンタルサーチで高速に見ることができるツールで、私は重宝しています。ダウンロードすることでScala, Ruby, Python, Node.jsなどにも対応することができます。ちなみに無料でも使えますが、フルバージョンを購入してないと検索時にたまに数秒待たされるとのことだったので、速攻でポチりました。

DashでJava 7 SE API日本語版を対応できるようにするのにはちょっと面倒くさかったのでやり方をメモっておきます。なおJava APIドキュメントのライセンスで、インターネットでの再配布は許可されていないため、Docsetの再配布をする予定はありません。予めご了承ください。

ドキュメントの取得

いくつかキーワードを変えて検索してみたのですが、どうやらJava SE 7の日本語ドキュメントはzip書庫などでまとめて取得することができないようで、仕方なくスクレイピングで取ってくることにしました。wgetで再帰ダウンロードでもいいのかもしれませんが、リンクされてないページがあると嫌だったので英語版ドキュメントをunzipしたもののファイル構造から日本語ドキュメントをダウンロードするという方法を取りました。

Javadocをdocsetに変換するツールの修正

JavadocをDash用のDocsetに変換するツールがGitHubで公開されていたので取ってきます。

https://github.com/Kapeli/javadocset

ですがこれをそのまま使うと変換中に大量の警告が出力され、Dashに取り込んでもクラスやインターフェイスがほとんど読み込めません。 これはこのツールが英語版ドキュメントの書式にのみ対応しているため、クラス名などを取得するためのキーワードが違う日本語ドキュメントは正しく処理ができないんですね。

ということで、日本語ドキュメントに対応できるようにしたForkをGitHubに用意しました。

https://github.com/mtgto/javadocset/tree/japanese

英語版にはない、表現の微妙な差にハマりました(「〜 内のクラス」と「〜 のクラス」とか)。 使用上の注意として、masterブランチは上記の修正を入れてないので、もし使おうとする人はjapaneseブランチからビルドして使ってください。

Docsetに変換

あとはDocsetに変換してDashに取り込むだけです。 javadocsetをXcodeでビルドして、

javadocset Java /path/to/api

と実行するとJava.docsetが生成されます(/path/to/apiは日本語ドキュメント内のapiフォルダへのパスを入れてください)。 これをDashにインストールすればJava 7のドキュメントが検索できるようになっているはずです。英語版Javaドキュメントがすでにインストールされていて、もう不要でしたら削除しておきましょう。

終わりに

以上でJava SE 7日本語ドキュメントをDashで引くための方法についての説明は終わりです。

参考リンクにも入れましたが、Rubyの日本語リファレンスマニュアルをDash用に対応してくれている人がいるので、よろしければそちらもチェックしてみてください。

参考