読者です 読者をやめる 読者になる 読者になる

gitbook-plugin-tut-to-scalaをリリースした

けどおそらくもう更新することは無いと思います(´・_・`)

matsu-chara/gitbook-plugin-tut-to-scala · GitHub

www.npmjs.com

なにこれ

  1. gitbookプラグインです。
  2. ```tutという文字列をビルド時に```scalaという文字列に置き換えます。

tutとは

github.com

tutはscalaチュートリアルのような文章をmarkdownから生成するツールです。

たとえば、src/main/tut/add.mdに以下の様なコードブロックを書きます。

\`\`\`tut
1 + 1
\`\`\`

その上で、 sbt tut とすると、markdown中のコードブロックがコンパイルを経て変換されます。 そして、target/scala-2.11/tut/add.md に以下の様なREPLでの実行結果が得られます。

\`\`\`scala
scala> 1 + 1
res0: Int = 2    
\`\`\`

また

\`\`\`tut:silent
1 + 1
\`\`\`

と書くと

\`\`\`scala
1 + 1
\`\`\`

に変換してくれます。

以上のようなとても便利なライブラリなのですが、sbt経由で起動するため処理が終わるまで結構時間がかかるというデメリットが有ります。 gitbookで、少し修正してビルド=>書き直しというプロセスを繰り返したいときは少し気になります。

sbtのタスクから $(npm bin) gitbook build を呼び出してビルドさせるようにすればsbtをいちいち立ち上げる必要はないのですが、 npm scriptsで色々やりたかったのでコンパイルだけCIのフェーズでやってもらうことにしました。

しかしtutでチェックしてもらうためには```tutと書かなければならないのでシンタックスハイライトが効かなくなってしまいます。 対策は簡単で```tutを```scalaに置換すれば良いだけです。 そしてこの置換をgitbookのbuildの際に自動でやってくれるのがこのプラグインという訳です。

gitbookプラグインについて

詳しくは Plugins | GitBook Developers を参照ください。

package.jsonにenginesの指定を忘れないようにすればほぼ大丈夫だと思います。

{
    "name": "gitbook-plugin-mytest",
    "version": "0.0.1",
    "description": "This is my first GitBook plugin",
    "engines": {
        "gitbook": ">1.x.x"
    }
}

あとは https://github.com/matsu-chara/gitbook-plugin-tut-to-scala/blob/master/src/tut-to-scala.js のようにpage.contentがもらえるhookがあるので、 ゴニョゴニョした後pageを返しましょう。

処理が実質一行しかねーじゃねーか!という意義は受け付けます(´・_・`) https://github.com/matsu-chara/gitbook-plugin-tut-to-scala/blob/master/src/tut-to-scala.js#L6

その後

REPLの出力結果貼ってる場合とかtutなら楽勝なのに↑の方法だと対応できないなど色々面倒なケースがあり、 やっぱりsbt起動しっぱなしにしてそこからgitbook buildなりtextlintなり呼んだほうがいいのでは??となっていて、これ使い続けるかわからないですね(´・_・`)