Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

mdocのCLI版コマンドをScala 3で動作させるにはcs launchを使うと便利

mdocというツールがある。

scalameta.org

MarkdownにScalaのコードを書くと、自動的にこれをコンパイルして値が埋まった状態にしてくれるというもので、ドキュメンテーションに非常に便利だ。

例えば以下のようなコードスニペットがあるとする:

```scala mdoc
val x: Any = "hello"
x match
case s: String => "string"
case n: Int => "int"
```

これをmdocに通すといい感じにしてくれる:

```scala
val x: Any = "hello"
// x: Any = "hello"
x match
case s: String => "string"
case n: Int => "int"
// res0: String = "string"
```

mdocはCLIツールでも利用できるし、sbt上のプラグインとしても利用できるし、また単純なScalaのライブラリとしてプログラムから呼び出すこともできる。

CLI版mdoc

mdocはcs(Coursier)でインストールできる:

% cs install mdoc

あとは-in-outを指定するだけだ:

% mdoc -in src -out out

するとsrc以下のディレクトリにある.mdファイルのうち、scala mdocというシンタックスハイライトになっている部分が自動的にコンパイルされ、評価結果がコメントとして挿入される。

Scalaのメジャーバージョンを指定する

sbtやscalaのライブラリとして使うときは利用するScalaのバージョンは自明に決まっていたので何も考えることがなかったが、CLI版ではScalaのバージョンについて考えなければならない。

そして、mdoc自体にはScalaのバージョンを指定する仕組みがない。いろいろ探してみた結果、これはmdoc自体のアーティファクトレベルで固定されているらしい。mdocがScala 2系向けにコンパイルされているなら2系でコンパイルするし、3系向けにコンパイルされているなら3系でコンパイルするということらしい。

Coursierを使っている限り、アーティファクトを切り替えるのは難しいことではない。csでインストールしたものをそのまま使う代わりに、cs launchを利用すればよい:

% cs launch org.scalameta:mdoc_3:2.8.0

ただし、詳細なバージョンは指定できない。基本的に最新のものが使われると考えておうたほうがよいだろう。どうしても必要なら手元に持ってきて特定のScalaでビルドしても良いだろう。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?