これはScalaアドベントカレンダー2016、アドベンター版の11日目です。
http://www.adventar.org/calendars/1492
少し前にコミッターになった、と書きましたが、その後色々やったわけですが、全部書くと長くなりそうなのでひとまずドキュメントの件についてだけ書く。
そもそもの動機や前提として
- しばらく放置されていたので、色々と古い非推奨や消えたメソッド使ってる箇所がある
- そもそもコンパイル時チェックないので、最初から間違ってる箇所もある
- 原作者(n8han)のwebsite http://unfiltered.databinder.net/Unfiltered.html に手動デプロイ?な運用だったらしいが、そもそも今回原作者が全然メンテしなくなったことにより、groupIdまで変えてプロジェクトを複数の新しいコミッターが引き継いだ感じなので、ドキュメントのデプロイ方法から考える必要がある
- 現在はpamflet https://github.com/foundweekends/pamflet というの使ってる。これも原作者同じ(n8han)であり、eed3si9nさんが引き継いだ新しいorganizationに移管されて、一応開発続いてなくもないがそれほど活発じゃない
というわけでissueたてる
https://github.com/unfiltered/unfiltered/issues/353
- https://github.com/lightbend/paradox というのでコンパイルチェックできるんだけどどう思う?
- https://github.com/sbt/sbt-pamflet というの使うとtutみたいにチェックできるらしいよ?でもeed3si9nさんがsbtのサイトに使ってるだけで、微妙にメンテがあれで、masterのテストがコンパイル通らないし、pamfletのSNAPSHOT版に依存していたりするよ
みたいな状況なわけです(それを簡単に上記issueに書いた)。
sbt-pamfletがコンパイルチェック出来るの知らなかったというか、eed3si9nさんも色々と忙しく最低限自分が使う分だけやったあとそこまでしっかりとはメンテしてない?かつ、sbtもparadoxに移行する可能性があるとか? https://github.com/sbt/website/issues/281 色々と微妙な状況でした。
あと他に選択肢ないわけでもなかったが、とくに反対意見なさそうだし、すごく悩むよりもやる気があるうちにさっさとやってしまったほうがいいか、という気持ちにより、わりと独断で勝手にparadox使ってみることにしました。
そもそもparadoxの説明してませんでしたが、簡単に知ってることを書いておくと
- markdownからhtml生成する系のツール
- playframeworkやakkaでやっていたのをsbt pluginにしたやつ(たぶん細かい機能は色々違うが)
- akka-httpのドキュメントで使われてる
- lightbendの他のなにかも、そのうちコレに移行するのだろうか?
- 個人的に最大の特徴としては、コンパイル済みの任意の言語のコードがmarkdownの一部で参照することにより、typesafeなドキュメントが書けたり、その他リンクなどもチェックが働く点
- sbt-site pluginとの連携がある https://github.com/sbt/sbt-site
- その他色々あるが、公式ドキュメントみてくれ http://developer.lightbend.com/docs/paradox/latest/
というわけで、ここから先まずやったこと
- 本体のソースコードと同じリポジトリでもすごく不都合あるわけでもなかったが、なんとなく一緒になってる必要もないな、と思ってリポジトリ分けた https://github.com/unfiltered/website/
- メリットもデメリットもあるかもしれないが?
- リリース版のjarを使うようにしたので、たとえばSNAPSHOTの最新のclassやmethodを参照したコードをドキュメントから参照する形式が不可能になる?が、自動ビルドをやる予定だし、SNAPSHOT版の記述があるとかえってユーザーが混乱することがあり得るので、あえてそれはいいか、みたいな割り切り。それはそもそもversion毎にページ分ければいいのだが、今回はひとまずやってない
- 出来る限り @@snip という、コンパイル済みのコード参照機能を使うように修正(超地味な作業で時間かかった)
- その他、pamfletとparadoxで変数参照の方法などが違った部分を修正
- リンクもtypesafe ?な方式に変更
- 移行の過程で判明した古い記述削除、修正
- 一応履歴残した方がいいか?でも全部残すのもアレだな、と思ったのでgit filter-branchした https://github.com/unfiltered/website/commit/953f3439a04
その後デプロイ関連
- 生成後のhtmlをホストするリポジトリも分けた https://github.com/unfiltered/unfiltered.github.io
- 自動生成の成果物をfetchしなくていいというメリットや、自動生成したリポジトリの権限はできるだけユーザー最小限にしておくことができる、などの違い?
- githubのdeploy keyとtravis-ciの暗号化の仕組み使って、travisからの安全な自動pushの実現 Travis-CI でコミットして GitHub にプッシュする - 公開鍵認証を利用してみる
- 以前 https://github.com/dwango/scala_text のためにやったときは、自動pushも全部シェルスクリプトでやったが http://d.hatena.ne.jp/xuwei/20151126/1448537637 今回はなんとなくsbt-siteとsbt-ghpagesを使ってみた
- @@snip 使う限りにおいては、travisでチェックされるようになったので、ドキュメントないのScalaコードがコンパイル通らなかったらデプロイされない仕組みができた
その他今回paradox使った感想
- コンパイルだけなら、gitbook + tutよりとてもはやい
- もちろんREPL形式で実行結果まで表示できるのはtutにしか出来ないことだが、実際の実行必要ないケースも結構あるし、これで十分な場合もわりとありそう
- pamfletはファイル名の命名規約で勝手にページ順決まるの便利
逆に柔軟性ないともいえるが、別にファイル名とページ名の関係とかあまりこだわらないなら、pamfletのほうが断然楽だと思った。- いや、pamfletは指定しようと思えば指定可能(?)
- インラインで埋め込めないことによるメリット、デメリット
- そもそもJavaやそれ以外の任意の言語importできる。まぁparadoxがある程度Scala用に作られてる感はあるので、不可能でもないが、他の言語界隈の人が使うことはないだろうが
- sbt-pamfletやtutみたいにコンパイラに依存しないことによるメリット
- コンパイラに依存すると色々面倒なわけですが、paradoxはシンプルにコメントで印付けた部分をimportしてくるだけなので、そのあたりはよさそう
だいたいこんな感じかなぁ。unfilteredそのものや、こういう古いOSSメンテして引き取ったりしてることや、いかにしてコストを減らしつつメンテし続けるか?みたいなあたりを本当は色々書きたいが、長くなったし、なによりblog書いてる暇があったらまだまだやること残ってるので、そっちをやりたいので今日はこのあたりで。
しばらく放置されてた分、貢献出来る部分まだ色々残ってるので、貢献してくれる人募集中ですよ