Scala tooling ecosystem
Tomasz Godzik
トマシュ ゴ ジ ク
@ VirtusLab
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197146/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11299492/pasted-from-clipboard.png)
Yay!
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/6619438/virtuslab.png)
Tomasz Godzik
Senior Scala Developer
Who am I
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/6619438/virtuslab.png)
Tomasz Godzik
Senior Scala Developer
also
team lead for Scala Ecosystem Team
Open source tooling
![](https://media2.giphy.com/media/ODDKaQCujDDhHSVFij/giphy.gif)
Goals for the talk
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10033185/pasted-from-clipboard.png)
Show the full scope of the tooling landscape
発表のゴール: Scala開発者ツールの全容を伝える
![](https://media4.giphy.com/media/ZZIEtQHmiTNwuxTOdt/giphy.gif)
Increase confidence in the tooling
発表のゴール: ツールに自信が持てるようにする
![](https://media1.giphy.com/media/RcrwG6jkdakH3QZ5GI/giphy.gif)
Mention some useful features
発表のゴール: いくつか便利な機能を紹介する
![](https://media1.giphy.com/media/QWRtAK9uifSKEZx7LX/giphy.gif)
Tooling landscape
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197129/pasted-from-clipboard.png)
What is a tool?
It's not always clear what is the border between tools and libraries.
For this presentation, a tool is anything that will not be shipped with your code
I am not covering testing frameworks.
この発表での「ツール」は自分のコードと共にリリースされないもの全般を指す
![](https://media2.giphy.com/media/XaAbmtzzz35IgW3Ntn/giphy.gif)
And I couldn't cover every tool I wanted :(
すべてのScalaツールを紹介しきれません :(
![](https://media1.giphy.com/media/7p3e2WCM0VEnm/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10519378/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10523961/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026158/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026156/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/8462019/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/6619432/scalacenter.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/6620029/impure-logo-bloop.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/8461941/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11196815/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11196821/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197056/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197085/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197087/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197091/pasted-from-clipboard.png)
Tool
no.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
❓ Why ❓
Why you might want to use it?
なぜそのツールを使いたいのか?
Tool
no.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
❓ What ❓
What is it actually?
そのツールは何なのか?
Tool
no.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
⚙️ Features if there is anything worth mentioning
⚙️また、各ツールの便利な機能についてお話します。
???
2010
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
- you want to have an IDE experience
- you want direct information from the Scala 2 and 3 compiler
- you want to use new Scala 3 features right from the start
- you want to use different editors
Scala3に関する十分なIDE機能を自分の好きなエディタで使いたいときに使おう
❓ Why ❓
Metals
2010
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026158/pasted-from-clipboard.png)
Language server for the Scala Programming language available to use in your favourite editor.
Metalsは好きなエディタで利用できるScalaの言語サーバー
❓ What ❓
Metals
2010
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026158/pasted-from-clipboard.png)
⚙️ Bazel support released
⚙️ Feature parity between Scala 2 and 3 released
⚙️ Implementations in dependencies released
⚙️ Inlay hints released
⚙️ Better support in broken workspaces in progress
⚙️ Work being done on opt in telemetry in progress
特筆すべき機能
![](https://media4.giphy.com/media/SOb4AcaDitenU4XKdC/giphy.gif)
???
1997
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
- You want to manage and find dependencies
は依存関係を管理・検索したときに使う
❓ Why ❓
Coursier
1997
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11196815/pasted-from-clipboard.png)
Library and command line tool for managing, caching and downloading artifacts.
Coursierは依存関係の管理・キャッシュ・ダウンロードするためのライブラリ・CLI
❓ What ❓
Coursier
1997
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11196815/pasted-from-clipboard.png)
⚙️ Search dependencies using complete-dep command
⚙️ Use coursier as simple package manager via coursier/apps
⚙️ Use Java API without Scala deps for maximum isolation
complete-depコマンド・パッケージマネージャとして利用・Java API
![](https://media4.giphy.com/media/SOb4AcaDitenU4XKdC/giphy.gif)
???
1395
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
- you want uniform formatting across the team and you don't want to waste time on reviews
- you want to use something that is integrated into almost all Scala tooling
- you want to experiment with different styles
チーム間でコーディングスタイルを統一したい・あらゆるScalaツールに対応
❓ Why ❓
Scalafmt
1395
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026158/pasted-from-clipboard.png)
Configurable formatter for Scala programming language
設定可能なScalaのコードフォーマッタ
❓ What ❓
Scalafmt
1395
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026158/pasted-from-clipboard.png)
⚙️ Switch to optional or even fewer braces
⚙️ Automatically add end markers
⚙️ Use a wide choice of settings for optimal look
fewer bracesの設定・end marker追加など
![](https://media4.giphy.com/media/SOb4AcaDitenU4XKdC/giphy.gif)
???
1118
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
❓ Why ❓
- you want to keep your dependencies up to date and limit tech debt
依存ライブラリなどのバージョンを最新に保ちたい
Scala Steward
1118
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197091/pasted-from-clipboard.png)
❓ What ❓
Tool and bot to automatically update dependencies in maven, sbt, mill and Scala CLI projects
sbt/mill/scala-cliの依存を更新するツール・bot
Scala Steward
1118
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197091/pasted-from-clipboard.png)
⚙️ Use it for Scala CLI!
⚙️ Public instance run by VirtusLab
⚙️ Can be run on github actions
scala-cliにも使える! ・VirtusLabが公開インスタンスを提供・github actions
![](https://media4.giphy.com/media/SOb4AcaDitenU4XKdC/giphy.gif)
???
1086
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
❓ Why ❓
- you need to parse or generate Scala code
- you want to get type information outside the compiler
Scalaコードをパース・生成したい。semanticdbを利用したい
Scalameta
1086
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026158/pasted-from-clipboard.png)
❓ What ❓
Compiler independent parser for both Scala 2 and 3.
Also semanticdb plugin for Scala 2 that generates type information in protobuf format.
コンパイラに非依存なScala2/3のパーザー・semanticdb生成のプラグイン
Scalameta
1086
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026158/pasted-from-clipboard.png)
⚙️ Use it with AST explorer to understand parsers better
⚙️ Useful for a number of other tools for automatic refactorings
⚙️ Will be compiled with Scala 3 soon
AST explorer・他ツールが便利に利用可能・もうすぐScala3対応
![](https://media4.giphy.com/media/SOb4AcaDitenU4XKdC/giphy.gif)
???
1064
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
❓ Why ❓
- You want to improve your codebase to avoid common bugs
- You want to add non standard linting
一般的なバグを避けたい・複雑なリントルールを使いたい
Wartremover
1064
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
❓ What ❓
Compiler plugin that provides a number of additional linting options as well as a way to create new ones.
たくさんのリント機能を備えたコンパイラプラグイン・ルール自作も可能
Wartremover
1064
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
⚙️ Create rules specific to your use case using the compiler based API.
⚙️ Take a look at existing rules to help eliminate bugs in your code.
compiler APIを使ったリントルールの自作・既存ルールもたくさん
![](https://media4.giphy.com/media/SOb4AcaDitenU4XKdC/giphy.gif)
???
796
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
- You want to automatically refactor and improve your codebase
自動的にコードベースを改善したい
❓ Why ❓
Scalafix
796
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10523976/pasted-from-clipboard.png)
Automatic refactoring and linting tool for Scala 2 and 3
Scala2とScala3対応の自動リファクタリングツール
❓ What ❓
Scalafix
796
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10523976/pasted-from-clipboard.png)
![](https://media4.giphy.com/media/SOb4AcaDitenU4XKdC/giphy.gif)
⚙️Automatically add types to improve compilation speed
⚙️ Create new rules with a custom API without the need to know the compiler one
型アノテーションの自動追加・型情報を使った独自ルールの作成
???
488
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
❓ Why ❓
- you want to write a simple application or script
- you want to have a simple tool for learning or experimenting
Scalaの簡単なプロジェクトやscriptを作りたい・Scalaの学習に便利なツール
Scala CLI
488
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10519378/pasted-from-clipboard.png)
❓ What ❓
Command line tool for compiling, running, testing and packaging your Scala code.
Scalaコードをコンパイル・実行・テスト・パッケージするためのCLI
Scala CLI
488
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10519378/pasted-from-clipboard.png)
![](https://media4.giphy.com/media/SOb4AcaDitenU4XKdC/giphy.gif)
⚙️ Create scripts with shebang to be easily invoked
⚙️ Easily compile with Scala Native or Native Image
⚙️ Compile markdown files
⚙️ Experiment with ScalaPy and Spark
⚙️ Soon will be the default Scala runner!
shebangでscriptのようにScalaを実行・ネイティブイメージ生成・もうすぐscalaコマンドはscalacliに!
???
423
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
❓ Why ❓
- you don't want to use a physical machine
- you want to easily share your experiments
- you want to provide users with examples of your library
オンラインでScala環境を使いたい・コードを簡単に共有したい
Scastie
423
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197085/pasted-from-clipboard.png)
❓ What ❓
Online web page environment to write and run your Scala code
Scalaコードを書いたり実行できるウェブページ
Scastie
423
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197085/pasted-from-clipboard.png)
⚙️ Built-in Metals support for hover and completions
⚙️ Embed Scastie examples in your docs!
⚙️ Use tree sitter syntax highlighting
⚙️ Scala CLI support coming soon
IDEサポート・ドキュメントにscastieの埋め込み・treesitterによるシンタックスハイライト...
![](https://media4.giphy.com/media/SOb4AcaDitenU4XKdC/giphy.gif)
???
384
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
❓ Why ❓
- you want to type check or run your documentation
- you want to enrich your documentation with some more interactive features
- you want to write custom worksheets
ドキュメント内のScalaコードに対する型チェックなど
Mdoc
384
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026158/pasted-from-clipboard.png)
❓ What ❓
Library for compiling or running Scala snippets in your documentation or outside.
ドキュメント内のScalaスニペットをコンパイル・実行するためのライブラリ
Mdoc
384
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026158/pasted-from-clipboard.png)
![](https://media4.giphy.com/media/SOb4AcaDitenU4XKdC/giphy.gif)
⚙️ Use it to make sure your docs are always up to date!
⚙️ Generate static website with Mdoc and Docusaurus
ドキュメントのコードが正しいかをチェック・docsaurusへの埋め込み
???
80
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
❓ Why ❓
You want to have a ready set of libraries to use as an enhancement of the standard library
シュッと(httpやjsonなどの)便利なライブラリを使いたいとき
Scala Toolkit
80
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026156/pasted-from-clipboard.png)
❓ What ❓
Set of libraries recommended to use, which support all possible Scala version and platform configurations.
推奨されるScalaライブラリのセット・あらゆるScalaバージョンとバックエンドに対応
Scala Toolkit
80
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/10026156/pasted-from-clipboard.png)
![](https://media4.giphy.com/media/SOb4AcaDitenU4XKdC/giphy.gif)
⚙️ Useful for creating scripts for your CI
⚙️ There are other toolkits already such as Typelevel one
⚙️ Requires `//> using toolkit default` in Scala CLI
⚙️ Other tools require specific dependency
スクリプトのために便利・typelevel版・//> using toolkit default
More!
x
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197597/pasted-from-clipboard.png)
- Intellij
- scala native
- scala js
- ammonite
- jardiff
- scalap
- flamegraph
- JMH
- metabrowse
- community build
- tasty query
- tasty inspector
- bloop
- scoverage
- laika
- ZIO Intellij plugin
- scala dependency submission
- sbt version policy
- tasty mima
- mima
- sbt plugins
- scalably typed
- Scala Debug Adapter
- Almond
Please report issues!
問題があったらissueをレポートしてください
![](https://media4.giphy.com/media/kiXmQwK9UQZ8EEYXS6/giphy.gif)
We can come try and organize online sprees or knowledge shares together.
That can be a great way to share knowledge and start to work on the issues that bug you.
オンラインOSS開発会に参加・開催するのは開発に参加する良い方法
![](https://media2.giphy.com/media/BemKqR9RDK4V2/giphy.gif)
Programming Sprees
But remember
Any feedback is useful! Voice it!
あらゆるフィードバックは貴重です!
![](https://media1.giphy.com/media/NbhiwA0C8THIv8KvG5/giphy.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11299574/pasted-from-clipboard.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/1147195/images/11197112/Untitled_1.png)
This presentation
Our Scala 3 roadmap
![](https://media0.giphy.com/media/cQPQy29ONzKs7E8nWp/giphy.gif)
Scala Tooling Ecosystem - Scala Matsuri
By Tomek Godzik
Scala Tooling Ecosystem - Scala Matsuri
- 174