リフレクションで無理やりplayframework2.4のroutesのコメントを取得しつつURL一覧を返すAPIを作る

タイトルの通りのものをやってみたので解説を書きます。


前提として、とても内部実装に依存した話なので、すぐ動かなくなる可能性があります、ご注意ください(play2.4.6の情報)

解説はいいから、コード見せろ、という人はこちらご覧ください

さて、リフレクションの説明に入る前に、そもそもplay2.4には、routesのurl一覧取得メソッドがあります。

router.Routes.documentation

Seq[(String, String, String)]
(httpメソッド、url、Scala上の実装のclass名 + メソッド名)
のTuple3のSeqが返ってきます。

これで十分なら、普通の人はこれ使いましょう。

それで

「router.Routes.documentationメソッド便利だけど、なんか一言ずつ説明のコメントを付け足したい」

「swaggerはなんだかいっぱい書かないといけないし、httpメソッド名などを重複して書かないといけない(?)し、もう少し手軽にやりたい」

「routesのコメントでかけたら便利そう。あれって内部的に保存されてるのかな?」

「リフレクションで無理やり頑張れば取得できたので、blog書いてる(イマココ」

という流れです。最初に書きましたが、もちろんリフレクションなので、version上がったらすぐ動かなくなる可能性があるので、そこのリスクは承知のうえで使いましょう。


playframeworkのroutesは # でコメントを書けるわけですが、それぞれのURLのマッピングの行毎に保存されてるようです。
複数行でも保存されてます。

取得したら、jsonで返すなり、htmlで返すなり、適当に整形するなりして好きに使いましょう