sbt

sbt-dao-generatorの互換壊したversion 2リリース

以下のsbt pluginの話 https://github.com/sbt-dao-generator/sbt-dao-generator

sbtが出力するchrome traceをいい感じに加工してgithub actionsで自動出力するものを作った

JSとyamlを数十行書いただけです https://github.com/xuwei-k/sbt-trace-action/commit/a61c1633f8b84caf33a500931ae47ffb583ac6df 以前書いた以下

sbtでそれぞれのsub projectで同じライブラリの異なるversionに依存しているのを検知する方法

昨日のこれ xuwei-k.hatenablog.com の続きのような、関連するような話です。

build.sbt上で依存ライブラリが依存してるライブラリのversionを取得する

タイトルがややこしくて何言ってるかわかりづらいと思うので、ひとまず具体的な例で説明します。 例えば以下のようなbuild.sbtだったときに

Scalaで基本的には警告をエラーにしたいが、特定の警告を警告のままにしたい

というパターンがScala標準で不可能な気がするので、build.sbtで頑張るサンプルを作ってみたのですが、Scala標準で不可能ですよね??? どういうパターンか?をもう少し詳細に説明すると

"META-INF/services/scalafix.v1.Rule" を生成するだけのコードをsbt pluginにしてpublishした

3年以上前に書いたこれ https://t.co/ozAxha1yfSresources/META-INF/services/scalafix.v1.Ruleの生成が面倒だからsbt側で自動生成するやつ作った— Kenji Yoshida (@xuwei_k) February 5, 2022

"scalafixAll --check" するだけのsbt pluginを作った

正確にはそれをするだけのつもりで作りはじめたら、微妙に思い出して追加のtask入れたのでそれだけではないのですが、とりあえず scalafixAll --check するだけの scalafixCheckAll taskの話をします。

sbt 1.11.0からの新しい方式でmaven centralにpublishしてみた

やってみた記録であって、公式の記述と比較して、あまり新しい話はありません。しっかりした情報を知りたい人は、以下の公式情報などを読みましょう https://github.com/sbt/sbt/releases/tag/v1.11.0 https://central.sonatype.org/news/20250326_ossrh_sun…

scalatestの全部入りを使うのはやめましょう、という話

build.sbtに以下のように書くのはやめましょう、という話です libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.19" % "test"

sbtにおいてrootで全てがaggregateされていないことを検知する方法

sbt

前回sbtでaggregateの話を書きましたが、それと関連するようなしないような話 xuwei-k.hatenablog.com

sbtで同じprojectでdependsOnとaggregateを両方設定するのはアンチパターン

sbt

本当に100%アンチパターンなのか?は、場合による気もしつつ、サンプル数はそれほど多くないですが、個人的に今までScalaやってるなかで、結局sbtをよくわからずにこれをやっていて自分が遭遇した時に直す、というのを何度か繰り返している気がしてきたので…

Scala 2におけるshapeless.Genericの導出を数える君を作った

https://github.com/xuwei-k/shapeless-generic-counter shapeless.Generic というのは、case classなどをHListなどと相互変換し、それによってgeneric programmingを実現するためのするためのものです。 結構昔に作られて以来、色々なライブラリの裏側で使…

sbtでのsub project分割とcompile速度の具体的な解説

2024年のScala祭でbuild速度の話をしましたが https://xuwei-k.github.io/slides/matsuri-2024/#1 その中の一部を多少詳細に解説する、というものです。

独自scalafixのruleを同じsbt project内部に置く際の設定方法の説明その2

以前に以下のような記事を書いたのですが xuwei-k.hatenablog.com scalaのversionの関連の解説やsbt-projectmatrixの紹介をして、それはそれで現状では一番わかりづらいと思われる箇所なのですごく重要なのですが、 sbt詳しくない人にとってはよく考えたら上…

実際に仕事で役立っている自作のScala関連OSSツールまとめ

仕事以外でも役立ってるものも多く含んでいますが、仕事きっかけで作ったか、OSSに対して使っていても仕事でもよく使ってる自作ツールについていくつか振り返って紹介してみる記事。 振り返ってみるだけなので、自分のblogやtwitterをかなりしっかり読んでる…

maven centralのpublish用groupId取得でgithubのorganization含めた任意のdomainでの自動化にも対応していた

まず、自分が知ってる限りのざっくりしたmaven centralのpublish申請方法の遷移の歴史

sbt 2がはやく完成して欲しいのでマイルストーンを頑張って試す活動

sbt

をここ1〜2週間、2.0.0-M2が出た後にわりと多くやったので、それの暫定的なまとめの記録を書いておきます。 まず、sbt自体のおおまかな前提知識などをまとめ

2024年10月頃から急にGitHub Actionsで"sbt: command not found"で失敗するようになった人へ

looks like Ubuntu 24 rolled out on GitHub Actions so you might need:- uses: sbt/setup-sbt@v1https://t.co/eGFupLii1O #Scala https://t.co/gW5WATctuj— ∃ugene -Yokota mastodon.social/@eed3si9n (@eed3si9n) October 9, 2024 タイトルの頃を境に、…

JDK 21とmockitoとbyte-buddyの警告とsbtとjavaagent

JDK 21以降、mockito使うとなんか怒られますが、それのsbtでの対策や解決方法を簡単に書きます

sbt-license-report pluginがcoursier使えてないせいで爆遅な件の対策

sbt

という問題が以前から知られています github.com

sbtでcompile errorの情報を値として取得する

若干sbtの内部構造依存な技を使う方法しか見つけられなかったのですが、もしもっと良い方法あったら誰か教えてください。

Scala 3とsbtでreviewdog使う方法

reviewdogというかなり有名なツールがあって、過去何度かblogにも書いたことあるし、今も普段から使っています。 github.com

わざわざsbt-native-packager経由でdocker imageを作る唯一の大きな利点

みなさんはsbtで作ったものを、(単にライブラリとしてではなく全部まとめて)本番環境にデプロイしたりする場合、どういう形式にしてますか? 最近・・・でもないですが、このあたりの選択肢は色々あるというか、sbtやScalaに限らない話なので、 広く捉えれば…

テスト実行に時間がかかった順(遅かった順)で表示するsbt pluginを作った

以下のsbt plugin作った話をします。 github.com 数日前のScalaMatsuri 2024の自分の発表の中で以下のような記述がありましたが https://speakerdeck.com/xuwei_k/scalapuroziekutono-birudosu-du-gai-shan?slide=67

GitHub ActionsのSummaryで直接すぐ見れる形式でsbtのtaskのchartを出す方法

OSSにしてpublishしようかと思っていたけど、細かい部分をいい感じにするのが面倒なので一旦雑に貼り付けておく (publishは後でやるかもしれない、未定) https://github.com/xuwei-k/scalaz/commit/06488c412b2fac78fe33739ae4f7abdfb5c49164 https://github…

1つのsbt projectでjavaagentの定義と利用をするsample。あるいはsbtのTests.Setupの代替案

JVMにはjavaagentという特別な仕組みがあるのを知ってますか? 自分が雑に思いついた具体例を書いておくと、例えばdatadogのtrace用のSDKがjavaagentで実装されてますね。 使用例は色々あるかもしれませんが、javaagentの例や、それの仕組みを詳細に解説する…

sbtのTaskに優先順位の制御が欲しい気がしたので雑に作ってみた話

sbt

タイトルが微妙な言い回しになっているのは、色々と自信がないからですが、とりあえず説明を書いていきます。

sbtで独自のprotobufのoptionを定義し独自のprotoc pluginでそれを処理するsample

これ qiita.com をsbtで1つのrepositoryで実行するsampleを作った、というだけの話。

sbtのtestGroupingを使った並列化や高速化手法の解説

以下の記事の続き的な意味があるので、まずはそちらを読んでください xuwei-k.hatenablog.com そちらの記事で、以下のようなコメントをもらっていましたが

ライブラリを使わずにScalaプログラム内部でclasspathなどを丸ごと引き継いで別のJVMを立ち上げるサンプル

そもそもがかなりレアケースなのですが、一応、稀にありえるシチュエーションとしては 特別な(微妙な)コードをテストしたい scala.sys.exit 自体を至る所で呼び出していて、本来それ自体を改善したいが、一旦それをそのままテストしたい mainスレッドが終わ…