Maven Central å ¬éå¶éäŸå€å¯©æ»ã®ããã
æ®éã«æå¿ã®äººãå ¬éããŠãããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã Maven Central ã®å ¬éå¶éãäžåã£ãŠããå Žåã¯ãäŸå€å¯©æ»ãç³è«ããã¹ãã ãšæãã
æ®éã«æå¿ã®äººãå ¬éããŠãããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã Maven Central ã®å ¬éå¶éãäžåã£ãŠããå Žåã¯ãäŸå€å¯©æ»ãç³è«ããã¹ãã ãšæãã
ãã«ãã¯æ§ã
ãªã¿ã¹ã¯ãå®è¡ãããããæ¢åã®ã©ã€ãã©ãªãããŒã«ãåå©çšããããšãå€ããsbt ã®ãã©ã°ã€ã³æ©æ§ã¯ãã¡ã¿ãã«ãã«ã©ã€ãã©ãªã远å ããããšã§ãã®ãããªåå©çšãå¯èœãšããã軜ãã®ã¿ã¹ã¯ããgpg ã®ãããªå€éšããŒã«ãšã®çµ±åããã®ã«ã¯äžåºŠãããããããã¡ã¿ãã«ãã«ã©ã€ãã©ãªã远å ãç¶ããã®ã¯ãäžå¯èœã ã£ãã奜ãŸãããªãã£ããããå ŽåããããäŸãã°ãScalafix ã Coursier ã¯ç¹å®ã® Scala ããŒãžã§ã³ã§æžãããŠãããããã㯠sbt 2.x ã 1.x ã䜿ã£ãŠãã Scala ããŒãžã§ã³ãšéäºæã§ãããããããªãããã®ãããããã©ã°ã€ã³ã»ã¯ã©ã¹ãã¹ã®éé¢ãšããæŠå¿µãææåºãŠããããšãããã®ã§ãæ¬çš¿ã§è§£èª¬ããŠãããããšæãããœãŒã¹ã¯ãã©ã°ã€ã³ã»ã¯ã©ã¹ãã¹ã®éé¢ã¬ã·ããåç
§ã
2023幎1æã« Netflix ã®ããŒãœããªãŒãŒã·ã§ã³ãšãªã³ã¡ã³ããŒã·ã§ã³éšã®ããŒãªã³ã°ããŒã ã«å ¥ç€Ÿããã3幎åã®å€åã®åŸã2026幎7æ13æ¥ããã£ãŠéè·ãããAI for Member Systems ãš AI Platform ãšãã 2ã€ã®çŽ æŽãããéšçœ²ã«åå ããŠãNetflix瀟ã®åç£ç¢ç£šãšå€æ§æ§ãšããã«ã«ãã£ãŒã身ãæã£ãŠäœéšã§ããããšãæè¬ããŠããã
æ°æ¥åã« Maven Central Repository ã Maven Central å ¬éå¶éãä»®å°å ¥ããããã®èæ¯ã¯ Brian Fox ããã® Open Publishing, Commercial Scale ã«ãŸãšããããŠãã:
ãªãŒãã³ãœãŒã¹ãªãããžã§ã¯ãã®ã¡ã³ãããæ®éã«ãªãªãŒã¹ãããŠããã®ã¯åé¡ç¡ããããããå€§èŠæš¡ãªåçšå£äœã Maven Central ã SDKããšãŒãžã§ã³ããèªåçæã¯ã©ã€ã¢ã³ããçµ±åã¢ãžã¥ãŒã«ããã®ä»ã®åçšãœããã®ã³ã³ããŒãã³ãã®æ«ç«¯åé ãã£ã³ãã«ãšããŠäœ¿ã£ãŠããã®ã¯å¥åé¡ã ã
ãšããããšã§ãé«å®¹éãå¿ èŠãšããåçšå£äœã¯ Maven Central Publisher Pro ã«ç§»è¡ããªãŒãã³ãœãŒã¹ã®ãããžã§ã¯ãã¯ãªãªãŒã¹ã®ãµã€ãºãåæžããããäŸå€å¯©æ»ã®ç³è«ãããŠãããšããããšãããã
ä»ãããæžããŠããæç¹ã§ã¯ããã¡ã€ã«ãµã€ãºã®ä»®å¶éã¯æããã 80 MB ãšãªã£ãŠããã
ãããçºç«¯ãšããŠãScala ã©ã€ãã©ãªã¡ã³ããã®å€ããåæã«æ°ä»ããããã®ã Scala 3 ãçæãã Scaladoc ã®ãã¡ã€ã«ã®ãµã€ãºãç°æ§ã«å€§ããããã€ãã³ãŒãã® JAR ãã倧ãããunzip -l ã§èŠããŠã¿ããšãScaladoc JAR ã®äžã«ãã©ã³ããšã VirtusLab/Inkuire æ€çŽ¢ãšã³ãžã³ã¿ãããªãã®ãå
¥ã£ãŠããŠããã¡ã€ã«ãµã€ãºãéœå 2.5 MB 以äžãšãªã£ãŠãã:
203030 01-01-2010 00:00 webfonts/fa-solid-900.eot
309828 01-01-2010 00:00 fonts/Inter-Regular.ttf
314712 01-01-2010 00:00 fonts/Inter-Medium.ttf
315756 01-01-2010 00:00 fonts/Inter-SemiBold.ttf
316100 01-01-2010 00:00 fonts/Inter-Bold.ttf
370523 01-01-2010 00:00 scripts/scaladoc-scalajs.js
747545 01-01-2010 00:00 webfonts/fa-brands-400.svg
918991 01-01-2010 00:00 webfonts/fa-solid-900.svg
939517 01-01-2010 00:00 scripts/inkuire.js
åœåº§ã®ãã®ããšããŠãå
šéšã®ãã©ã³ããš scripts/inkuire.js ãåé€ãããã©ã°ã€ã³ã sbt 1.x ãš 2.xç³»ã®äž¡æ¹ã§äœã£ã:
sbt ãããžã§ã¯ãã代衚ã㊠sbt 2.0.0 ã®ãªãªãŒã¹ãã¢ããŠã³ã¹ããŸããsbt 2.0 ã¯ãScala 3 ãš Bazel äºæãªãã£ãã·ã¥ã»ã·ã¹ãã ã«åºã¥ããæ°ãã sbt ã¡ãžã£ãŒã»ããŒãžã§ã³ã®ç³»åã§ãã
sbt 2.x ã¯åŒãç¶ã Semantic Versioning ã«æºæ ããŠãªãªãŒã¹ãããã®ã§ããã©ã°ã€ã³ã¯ 2.xç³»ãã£ãšåäœããããšãæåŸ ããããŸããæ¯é䜿ã£ãŠã¿ãŠãäžå ·åãªã©ãããã°å ±åããé¡ãããŸãã
ããã¯ä»¥åã«æžãã sbt ãšè¥¿éšæä»£ã®å±±åž«ãã¡ ãšãã sbt/sbt ã Gittensor ãšããååã®ã¯ãªããé貚ããŒã¹ã®ãªãŒãã³ãœãŒã¹æžè³ããã°ã©ã ã«è¿œå ãããçµæãšããŠå€§éã® AI ããŒã«ã䜿ã£ããã«ãªã¯ãäœå人ãã®ãŠãŒã¶ããæ¥ãŠãããšãã話ã®åŸæ¥è«ã ããšãããããéé±å±±ã¯ééããããšã«ããã
åã¯ãæå¿ã§ sbt ãš Zinc ã®ã¡ã³ããããã£ãŠããŠãããã㯠Scala ãšããããã«ãã»ãã©ãã€ã ã〠JVMãJSããã€ãã£ãã察象ãšãããã«ãã»ãã©ãããã©ãŒã ãªããã°ã©ãã³ã°èšèªãé§åããããŒã«ãã§ã€ã³ã®äžéšãæ ã£ãŠãããScala èšèªã¯ 20幎è¿ãåããããããç¹ã« 2009幎㫠Twitterç€Ÿãæ¡çšããŠä»¥éãApache SparkãLinkedInãMorgan StanleyãINGãAirbnbãSpotifyãNetflixãåœå ã ãšãªã¯ã«ãŒãããã¯ã³ãŽããµã€ããŒãšãŒãžã§ã³ã瀟ãªã©ã§æ¡çšäºäŸããã£ãã
çµå¹Žã® Scala ã®å声ãšã¯äžæ©ãããŠãsbt ã Zinc ãäŸç¶ãšããŠããããªãããžã§ã¯ãã§ãåºæ¬çã«ã¯åå人㚠Scala Center ãšã®ååããããŠäžéš Scala ãŠãŒã¶ãš EFPLãLightbend/Akka瀟ãJetBrains瀟ãVirtusLab瀟ãDatabricks瀟ãGradle瀟ãªã©ã®ããŒã«æ åœã®äººãã¡ãã圢æãããå 茪ã®äººãã¡ãéã£ãŠãããã³ã³ããªãã¥ãŒã·ã§ã³ã§éçºãè¡ãããŠããŠãã ãããããŒã©ã³ããšãã¹ã€ã¹ã® Scala ã«ã³ãã¡ã¬ã³ã¹ã«é¡ãåºããŠãããšãäºãé¢èãã§ããŠããã
æ¬çš¿ã§ã¯ Scala 3 ã®å·®åã³ã³ãã€ã«ãšãé¢é£ããåé¡ã«ã€ããŠã¿ãŠãããScala 2.12 ãš 2.13 ã®å·®åã³ã³ãã€ã«ã¯ããçšåºŠå®å®ããŠãããšæãããåã®äœ¿ã£ãŠããæèŠã ãš Scala 3 ã¯å£ããããæ°ãããããã®åå ã調æ»ããŠãä¿®æ£æ¡ã scala/scala3#24171 ãšããŠéãããšæãã
æ¬çš¿ã§ã¯ãHedgehog for Scala ãšããããããã£ãŒã»ããŒã¹ã»ãã¹ãã»ãã¬ãŒã ã¯ãŒã¯ãç°¡åã«ç޹ä»ããããHedgehog for Scala ã¯ãJacob Stanley ãããš Nikos Baxevanis ããå ±èã® Haskell Hedgehog ãšããã©ã€ãã©ãªãåºã« 2018幎ãã Charles O’Farrell ãããå®è£ ãããã®ã§ãæè¿ã§ã¯ Kevin Lee ãããäž»ã«ã¡ã³ããã³ã¹ãè¡ã£ãŠããã
æ¬çš¿ã¯ sbt 2.x éçºã«é¢ããèšäºã§ãsbt 2.x ãªã¢ãŒããã£ãã·ã¥ãBazel äºæãª sbt 2.x ãªã¢ãŒããã£ãã·ã¥ãé ¢é¶ãããŒã4ãããŒã5 ãªã©ã®ç¶ç·šã ãåã¯åäººã®æéã䜿ã£ãŠ Scala Center ã EngFlow ã® Billy ãããªã©ã®ãã©ã³ãã£ã¢ã®äººãšååã㊠sbt 2.x ã®äœæ¥ãããŠããŠããã®ãããªèšäºã¯ãã«ãªã¯ã³ã¡ã³ãã®æ¡åŒµçã§ãå°æ¥ sbt ã«å®è£ ããããããããªãæ©èœãå ±æã§ããããããšæã£ãŠããã
sbt 2.0 ideas ã§åºããã¢ã€ãã£ã¢ãšã㊠sbt query ãšãããã®ããã:
sbt query åç §ãã¯ãšãªã¯ãµããããžã§ã¯ãããµããåããã®ã«äœ¿ãããšãã§ããã
sbt-projectmatrix ãããã©ã«ãã§äœ¿ãããããã«ãªããšããµããããžã§ã¯ãã®æ°ã¯å¢å ããããšã«ãªããå€§èŠæš¡ãªã³ãŒãããŒã¹ã§äœæ¥ããŠãäººã¯æ¢ã«å€§éã®ãµããããžã§ã¯ããåãæ±ã£ãŠãããããããªãã
sbt 2.0 ã§ã®ã¿ã¹ã¯éçŽã«ããããµããããžã§ã¯ãã®ãµããåãæ©æ§ãããã§ææ¡ããã:
sbt .../test
sbt abc.../test
sbt ...@scalaBinaryVersion=3/test
ã¹ã©ãã·ã¥æ§æã«ãããçµ±åããããšããã¢ã€ãã£ã¢ã¯the GitHub discussion ã«ãã㊠Adrien Piquerez ãããææ¡ãããã®ã ã
print ã³ãã³ããšçµã¿åãããäŸã :
sbt:root> print .../name
foo / name
foo
bar / name
bar
baz / name
baz
name
root
ãã®ãšã ... ã¯ãå
šãµããããžã§ã¯ããæå³ããsbt 1.x ã«ããã print name ãšå矩ã ãæ¬¡ã«ãååã b ããå§ãŸããµããããžã§ã¯ãã ãã衚瀺ããŠã¿ã:
æ¬çš¿ã¯ sbt 2.x éçºã«é¢ããèšäºã§ãsudori part3ãsbt 2.x ãªã¢ãŒããã£ãã·ã¥ãBazel äºæãª sbt 2.x ãªã¢ãŒããã£ãã·ã¥ãé ¢é¶ãããŒã4 ãªã©ã®ç¶ç·šã ãåã¯åäººã®æéã䜿ã£ãŠ Scala Center ã EngFlow ã® Billy ãããªã©ã®ãã©ã³ãã£ã¢ã®äººãšååã㊠sbt 2.x ã®äœæ¥ãããŠããŠããã®ãããªèšäºã¯ãã«ãªã¯ã³ã¡ã³ãã®æ¡åŒµçã§ãå°æ¥ sbt ã«å®è£ ããããããããªãæ©èœãå ±æã§ããããããšæã£ãŠããã
ä»é±ã¯ã³ããã«ããå·ã®æµèŸºã®çºã§é ãå€äŒã¿ãåã£ãŠå°å ã®ã¹ã±ããŒã¹ãããããã§ãã¯ããããå°ãå·ãããªæµ·ã«å ¥ã£ãããããã¹ã¿ãŒã»ããŒã«ãé£ã¹æ¯ã¹ããããŠãããã¹ã±ããŒããããæµ·éã³ã®åéã« sbt ã«ããããã¹ãã®ãªã¢ãŒãã»ãã£ãã·ã¥ã®äœæ¥ãããããé¢é£ããå®éšããããããŠãããéçºçšã®èŠæžãšããŠãããã«çµæãå ±åãããã
é
¢é¶ãããŒã4ã§ã¯ compile ã¿ã¹ã¯ã®ãªã¢ãŒãã»ãã£ã·ã¥ãèŠããcompile ããã£ãã·ã¥ã§ããã°åœ¹ç«ã€ã®ã¯ééãç¡ãããCI (ç¶ç¶ççµ±å) ã·ã¹ãã ã®å€ãã®æéã¯ã³ãŒãã®ã³ã³ãã€ã«ã§ã¯ãªããã¹ãã«å²ãããããšãå€ãã®ã§ã¯ãªãã ããããBazel ã¯æ°æ¡éãã«é«é㪠CI ã®æ§èœãå©ãåºãããšããããããã®äžã€ã®çç±ãšããŠããã©ã«ãã§ã® test ã³ãã³ãããªã¢ãŒãã»ãã£ãã·ã¥åãããŠãããšããããšãæãããããèšãæãããšãBazel ã䜿ã£ãå Žåããã CI ãã·ã³äžã§ãã¹ããäžåºŠå®è¡ããããšãã€ã³ããããå€ãããŸã§ã¯ãã®ãã¹ãçµæã¯ãã£ãã·ã¥ããç¶ããã
sbt äžçŽè
ã®èªè
ã®çããã¯ãsbt ã«ã¯æ¢ã«ããŒã«ã«ã§å·®åãã¹ããè¡ã testQuick ããããããªãããšãæ°ã¥ããããããªããtestQuick ã®é£ç¹ã¯ããã£ãã·ã¥ã®ç¡å¹åã«ã¿ã€ã ã¹ã¿ã³ããçšããããããã«ãçã«éå¯é (non-hermetic) ã§ããã®ãããã·ã³éã§åçŸæ§ãç¡ãããšã ãæ¬çš¿ã§ã¯ããã·ã³éã§å®å
šã«å
±æã§ãã sbt 2.x ã®ãã¹ãã»ãã£ãã·ã¥ãèå¯ããã察å¿ãããã«ãªã¯ã¯ sbt/sbt#7644 ã ã
æ¬çš¿ã¯ sbt 2.x éçºã«é¢ããèšäºã§ãsudori part3ãsbt 2.x ãªã¢ãŒããã£ãã·ã¥ãBazel äºæãª sbt 2.x ãªã¢ãŒããã£ãã·ã¥ãªã©ã®ç¶ç·šã ãåã¯åäººã®æéã䜿ã£ãŠ Scala Center ãšåŒ·åã㊠sbt 2.x ã®äœæ¥ãããŠããŠããã®ãããªèšäºã¯ãã«ãªã¯ã³ã¡ã³ãã®æ¡åŒµçã§ãå°æ¥ sbt ã«å®è£ ããããããããªãæ©èœãå ±æã§ããããããšæã£ãŠããã
2024幎4æã®æ®µéããäžå¿ Bazel äºæã®ãªã¢ãŒããã£ãã·ã¥æ©èœãå ¥ã£ãŠããããã®å®è£ ã¯ãã£ãã·ã¥ãããå¯äœçšãšããŠãã¡ã€ã«ã»ã¢ãŠããããããµããŒããããèšãæãããšããŸã£ãããªãã·ã³ã§ãã«ããè¡ã£ããšããŠãããªã¢ãŒãã»ãã£ãã·ã¥ã最ã£ãŠããã°ãã³ã³ãã€ã©ãå®è¡ãã代ããã« JAR ãããŠã³ããŒãã§ãããšããç®æ®µã ã
ããããå®éã«å·®åã³ã³ãã€ã«ãè¡ãã«ã¯ãã£ã¬ã¯ããªã«ä»»æã®æ°ã®ãã¡ã€ã«ãäœãããšããµããŒãããå¿ èŠããããé 匵ãã°ä»ã®æ¹æ³ãããã®ã ããä»ã®ãšãããã£ã¬ã¯ããªããµããŒãããã®ãçŸå®çãªæ¬¡ã®ã¹ãããã ãšæãã
ãã¡ã€ã«ã»ãã£ã¬ã¯ããªã®ãã£ãã·ã¥å㯠sbt 2.x ãªã¢ãŒããã£ãã·ã¥ã§åæããæ§ã ãªãã£ãã·ã¥é¢é£ã®åé¡ã«åœããããšã«ãªã:
sbt/sbt#7621 ã«ãããŠãDef.declaraOutputDirectory ãšããæ°ããã¢ãŠãããããå°å
¥ãã:
Def.declareOutputDirectory(dir)
ããã¯ã¿ã¹ã¯å
ã§åŒã³åºãããšãã§ãã£ã¬ã¯ããªã®ã¢ãŠããããã宣èšãããããã¯ãã¿ã¹ã¯ã®è¿ãå€ã®åãšã¯ç°ãªãããšã«æ³šæãäŸãã°ãcompile ã¿ã¹ã¯ã¯ Analysis ãè¿ãããæšªã§ *.class ãã¡ã€ã«ãçæããŠãäºåã«åãæ±ºãããããã£ã¬ã¯ããªã䜿ã£ãŠä»ã®ã¿ã¹ã¯ã¯ãã®å
容ã䜿ããšããããšãè¡ãããŠããã宣èšããããšã§ãã®æµããããå°ãæç€ºçã«ãªããå
·äœäŸã ãšãã®ããã«ãªã:
import sjsonnew.BasicJsonProtocol.given
lazy val someKey = taskKey[Int]("")
someKey := (Def.cachedTask {
val conv = fileConverter.value
val dir = target.value / "foo"
IO.write(dir / "bar.txt", "1")
val vf = conv.toVirtualFile(dir.toPath())
Def.declareOutputDirectory(vf)
1
}).value
[NativeLink][nativelink] ã¯æ¯èŒçæ°ãããªã¢ãŒãå®è¡ããã¯ãšã³ãã§ãRust ã§å®è£ ãããŠãããé«éã§ããããšã«ãã ãã£ãŠããããªãŒãã³ãœãŒã¹ã ããNativeLink Cloud ãšãããµãŒãã¹ãè¡ã£ãŠããŠãç¡æã§ã詊ãã§ãããšåéã® Adam Singer ãããèšã£ãŠããã
@ifdef 㯠Scala ã³ã³ãã€ã©ã»ãã©ã°ã€ã³ã§ãScala èšèªã«ãããæ¡ä»¶ä»ãã³ã³ãã€ã«ãå®è£
ãããifdef 0.3.0 ã§ã¯ Scala.JS ãš Scala Native ã®ãµããŒãã远å ããã
| Scala Version | JVM | JS (1.x) | Native (0.5.x) |
|---|---|---|---|
| 3.x | â | â | â |
| 2.13.x | â | â | â |
| 2.12.x | â | â | â |
äœã§ Scala 3 ããããªã«æšãã®ããšèãããããšãããã®ã§ããªã¹ã圢åŒã§æžãåºããŠã¿ããé ã¯ç¹ã«ç¡ããããã¯åã Scala 3 ãã©ãæžããŠããããšããå°æ¥ã©ãæžãããã®ãã¿ãããªå人çãªå¥œã¿ã«åºã¥ããŠããã®ã§ãããã¯æ³šæããŠã»ããã
æ¬çš¿ã¯ sbt 2.x ãªã¢ãŒããã£ãã·ã¥é¢é£ã®ç¬¬3éšã ãããæ°å¹Žèªåã®æéã䜿ã£ãŠ sbt 2.x ã®éçºãè¡ã£ãŠããŠãæè¿ã¯ Scala Center ã«ãæäŒã£ãŠããã£ãŠããããããã®èšäºã¯ãã«ãªã¯ã³ã¡ã³ãã®æ¡åŒµçã§å°æ¥ sbt ã«å®è£ ããããããããªãæ©èœãå ±æã§ããããããšæã£ãŠããã
çŽ1幎å sbt 2.x ã«ãããèªåãã£ãã·ã¥ã»ã¿ã¹ã¯ã®èšèšã®ææ¡ã RFC-1: sbt cache ideas ã§è¡ãããsbt 2.x ãªã¢ãŒããã£ãã·ã¥ãã§ã¯å®è£ ã®è§£èª¬ãè¡ã£ã:
someKey := Def.cachedTask {
val output = StringVirtualFile1("a.txt", "foo")
Def.declareOutput(output)
name.value + version.value + "!"
}
ãªã¢ãŒããã£ãã·ã¥ã¯ããã·ã³éã§ãã«ãã®çµæãå
±æããããšã§åçãªæ§èœã®æ¹åãå¯èœãšããã2020幎ã«ãå㯠sbt 1.x ã®ã³ã³ãã€ã«ãã£ãã·ã¥ãå®è£
ãããããã compile ã¿ã¹ã¯ã«éãããŠããããææãªæ§èœåäžãããããšãäœäŸãå ±åãããŠãããæè¿ã ãšãLeveraging sbt remote caching on a big modular monolith (2024) ã«ãããŠãTeads 瀟㮠Sébastien Boulet ããã以äžã®ããã«æžããŠãã:
å®å šãã£ãã·ã¥ã»ãããã®å Žå㯠sbt ãã«ã㯠3å30ç§ããããå šãŠã®ã¿ã¹ã¯ããã£ãã·ã¥åãããŠããããã§ã¯ç¡ãã®ã§ãã¯ãæ°åããã£ãŠããŸãã(äžç¥) äžæ¹ãScala Steward ããã«ãªã¯ãéã£ãŠã©ã€ãã©ãªãæŽæ°ãããªã©ããŠå®å šãã£ãã·ã¥ã»ãã¹ããã£ãå Žåã¯å šãŠããªãã«ãããããã¹ããå®è¡ãããããã㯠45åãããããã®ãããå®å šãã£ãã·ã¥åããããã«ã㯠92% å¹çåãããŠãããšèšããã
å®éã«ããšã³ãžãã¢ãçµéšããã®ã¯ãã®äž¡æ¥µç«¯ã®éã®ã©ããã«äœçœ®ããŠãå°å ¥ãã倿Žã«å¿ããŠèãããã«ãæéã®å€åãããã
sbt 2.x ã®ãã£ãã·ã¥ã«æ»ããšããããŸã§ã®æ compile ã¿ã¹ã¯ãäŸã«æ±çšçãªæ©æ§ãäœãããã®åºç€ãå
¥ãæ¿ããããšã«éäžããŠããã®ã§ããªã¢ãŒãã»ãã£ãã·ã¥ãšèšãã©ãŸã ã忣ãã®éšåã«ã¯æãåºããŠããªãã£ããæ¬çš¿ã§ã¯ãããèŠãŠããã
ãã㯠Scala Advent Calendar 2023 ã® 23æ¥ç®ã®èšäºã§ãã21æ¥ç®ã¯ããã£ã¡ããã®path äŸååã£ãŠäœ? 調ã¹ãŠã¿ãŸãã!ã§ããã
ãªã¢ãŒããã£ãã·ã¥ã¯ããã«ãã®çµæãå
±æããããšã§åçãªæ§èœã®æ¹åãå¯èœãšãããMokhov 2018 ã§ã¯ã¯ã©ãŠãã»ãã«ãã»ã·ã¹ãã (cloud build system) ãšãåŒã°ããŠãããããã¯ãåã Blaze (çŸåšã¯ Bazel ãšããŠãªãŒãã³ãœãŒã¹åãããŠãã) ã®ããšãèããŠä»¥æ¥é¢å¿ãæã¡ç¶ããŠããæ©èœã ã2020幎ã«ãå㯠sbt 1.x ã®ã³ã³ãã€ã«ãã£ãã·ã¥ãå®è£
ãããreibitto ããã®å ±åã«ãããšã以åã¯å
šãŠãã³ã³ãã€ã«ããã®ã« 7åããã£ãŠãããã15ç§ã§çµããããã«ãªã£ããããããä»ã«ã 2x ~ 5x éããªã£ããšããå ±åãä»ã®äººãè¡ã£ãŠããããããã¯æåŸ
ã®æãŠãå
容ã§ããããšã«ééããªãããçŸè¡ã®æ©èœã¯å°ãäžåšçšã§ compile ã¿ã¹ã¯ã«ãã䜿ããªããšããéçãããã2023幎ã®3æã«ãRFC-1: sbt cache ideas ãšããŠçŸç¶ã®èª²é¡ãšå¯Ÿçã®èšèšã®ã¢ãŠãã©ã€ã³ãæžãåºããŠã¿ãã以äžã«èª²é¡ããŸãšãã:
compile ã®ãªã¢ãŒããã£ãã·ã¥ãããã³ãã®ä»ããã€ãã®ã¿ã¹ã¯ã«å¯ŸããŠãã£ã¹ã¯ãã£ãã·ã¥ãå®è£
ããããã«ã¹ã¿ã ã¿ã¹ã¯ãåå ã§ãããœãªã¥ãŒã·ã§ã³ãæãŸããã12æäžã¯é©åœã«èªåã§ãããžã§ã¯ããéžãã§ æ¯æ¥å°ãã§ãããããäœæ¥ããŠããããããã°ã«æ°è¡ãã€èšé²ããã #decemberadventure ãšããããã·ã¥ã¿ã°ãã€ããŠæçš¿ãããšããç¬ãã¢ãã³ãã Mastodon çéã®äžéšã§æµè¡ã£ãŠãŠãåã® december adventure 2023 ãšããŠãsbt 2.x ã®ãªã¢ãŒããã£ãã·ã¥ã«ææŠããŠã¿ãããšæã£ããå®è£ ã®ææ¡ã¯ GitHub #7464 ã§ãæ¬çš¿ã§ã¯ãææ¡ãã倿Žç¹ã®è§£èª¬ãè¡ããæ³šæ: sbt ã®å éšæ§é ã«é¢ããäºåç¥èã¯ãããŸãå¿ èŠãšããªããããã«ãªã¯ã³ã¡ã³ãã®æ¡åŒµçã®ãããªãã®ãªã®ã§äžçŽã¬ãã«ã®èªè ãæ³å®ããŠãããããšããã«ãªã¯æ®µéãªã®ã§æžããŠããå ãã詳现ã¯ã©ãã©ãå€ãã£ãŠãããããããªãã
ã³ãŒãããŒã¹ã倧ååããã«ã€ããèªåãªãã¡ã¯ã¿ãªã³ã°ãè¡ãããšãã§ããèšèªããŒã«ããããšäŸ¿å©ã ã幞ããªããšã«ã2016幎㫠Scala Center ã Scalafix ãäœã£ãŠããããå ¬éæã®ããã°èšäºã®äžã§ Ãlafur Geirsson ããã¯:
Scalafix ã¯ãç°¡åãããããªããå調ã«ç¹°ãè¿ãããã³ãŒã倿ãåãæã€ããšã§ãããªããæèãåãã䟡å€ã®ããããšã«éäžããããšãã§ããŸãã倧ãŸãã«èª¬æãããšãScalafix ã¯ãœãŒã¹ãèªãã§ãéæšå¥šæ©èœã®äœ¿çšãæ°ãã代æ¿ãžãšå€æããå ã®ãœãŒã¹ã«æžã蟌ã¿ãŸãã
ãšè§£èª¬ããŠããŠãScala 3 ãã€ã°ã¬ãŒã·ã§ã³ãåæ©ã«ãªã£ãŠããããšããããããã
çŸåšã¯ãScalafix 㯠Brice Jaglin ãããã«ãã£ãŠã¡ã³ããããŠããŠãScala 3 ãã€ã°ã¬ãŒã·ã§ã³ä»¥å€ã§ãäžè¬ã®ãªã³ãã£ã³ã°ããªãã¡ã¯ã¿ãªã³ã°ã®ããŒã«ãšããŠäœ¿ãããŠãããäŸãã°åç°ãã (xuwei-k) ãªããã¯æ°çŸã® Scalafix ãæžãããããããã®äžéšã¯ xuwei-k/scalafix-rules ã«ãå ¬éãããŠããã
Scalafix ç¬ç¹ã®ç¹åŸŽãšããŠãsyntactic (æ§æç) ãš semantic (æå³è«ç) ãšãã2çš®é¡ã®ã«ãŒã«ãããã
syntactic rule 㯠Scalafix CLI ããããã°è¯ãã®ã§ãBazel ãšã®çµ±åã¯ç¹ã«å¿ èŠç¡ããäžæ¹ã§ãsemantic rule 㯠semanticdb ãªã©ãæž¡ããŠåããããå°ãäœæ¥ãå¿ èŠãšãªãã
æé ã®æŠèŠ
ch.epfl.scala:scalafix-cli_<scalaVersion>:somethingã解決ããorg.scalameta:semanticdb-scalac_<scalaVersion>:4.8.4ã解決ããscala_binary ã®ã¿ãŒã²ãããå®çŸ©ããscalafix(...) ã«ã¹ã¿ã ã»ã«ãŒã«ãå®çŸ©ããupstream_scala_library(...), semanticdb(...), scalafix(...) ã«å±éãã scala_library(...) ãã¯ããå®çŸ©ãã3rdparty äŸåæ§ã®è§£æ±ºã«ã¯çŸåšããã€ãã®æ¹æ³ããã£ãŠãã©ããéžãã§ãæ§ããªããåãä»ã®ãšãã詊ããã®ã¯ bazel-deps ãš MODULE.bazel ã§äž¡æ¹ãšãåããã以äžã¯ Bzlmod ã䜿ã£ãäŸããã®æç²ã :
ä»é±æ«ãvirtual/Tokyo ãã€ããªããã® ScalaMatsuri ãéå¬ãããããŸãã¯ãç»å£è ã®çãããã¹ãã³ãµãŒå瀟ãåå è ã®çããã«ã瀌ããŸãã
åã®ãã€ããªãããšããããšã§ãè³ããªãç¹ãå€ã ãã£ããã©ããæåããã«ã³ãã¡ã¬ã³ã¹ã ã£ãã®ã§ã¯ãšæããåã¯ã16åã® ScalaMatsuri ã¹ã¿ããã®äžå¡ãããããã¡ã€ã³ã®ã»ãã·ã§ã³ãšé£ã³ã³ã³ã§ã®ç»å£è ãšããŠåå ãããŠããã£ãã
äžè¬è«ãšã㊠Bazel ã¯ãã¢ãããŒãžã§ã³ãã³ã°ãšãã£ãŠã(JUnit ã Pandas ãªã©) ã©ã®ã©ã€ãã©ãªã§ãã¢ããªãå ã®å šãŠã®ã¿ãŒã²ãããåäžã®ããŒãžã§ã³ã䜿ããšãã圢æ ã奜ãã ã¢ãããŒãžã§ãã³ã°ã¯ãã¢ããªãå ã§çºçãããããŒãžã§ã³è¡çªãåçã«æžãããããããã³ãŒãåå©çšæ§ãæ¹åããããšãã广ãããã ããããå®éã«éçšããŠã¿ããšå šç€Ÿãäºäººäžèç¶æ ã«ãªããšããæ¬ ç¹ãåºãŠããã äŸãã°ãµãŒãã¹ AãBãCãD ã®å šãŠã Big Framework 1.1 ã䜿ã£ãŠãããšããã°ã¬ (regression) ããããããããªãã®ã§å šãŠãåæã« Big Framework 1.2 ã«ç§»æ€ããã®ã¯äººçè² è·ãé«ãã£ããããã ãããªãããªã§æ°å¹Žãçµã¡ãBig Framework 2.0 ããªãªãŒã¹ãããŠããã£ã±ããããæ¡çšã¯ãªã¹ããŒãªã®ã§ã¯ãšããããšã«ãªãã
Scala ãšã³ã·ã¹ãã ã§ã¯ãsbt ãçšããŠã©ã€ãã©ãªäœè ãã©ã€ãã©ãªãè€æ°ã® Scala æšæºã©ã€ãã©ãªããã®ä»ã®ãã¬ãŒã ã¯ãŒã¯ã«å¯ŸããŠãã«ããããšããã®ã¯æ®éã«è¡ãããŠããã ããã¯ã¯ãã¹ãã«ããšåŒã°ããŠããã(x86 ãã aarch64 ãªã© CPU ã¢ãŒããã¯ãã£ããŸããã ã³ã³ãã€ã«ãã¯ãã¹ã³ã³ãã€ã«ãšèšã£ããããããããšã¯å¥ãªããšã«æ³šæ)
ãã®ã¯ãã¹ãã«ããšããæŠå¿µã¯ãåãã©ã³ãå ã§äžé·æã«æž¡ã£ãŠè²ã ãªè»žã®ãã€ã°ã¬ãŒã·ã§ã³ãå¯èœãšããããšãããBazel ã«ãããŠãæçšãªãã®ãããªãããšæã£ãŠããã äŸãã°çŸè¡ã®ã¢ããªãã Scala 2.12 ã ãšããŠãåŸã ã«ãã€ã°ã¬ãŒã·ã§ã³ãè¡ã£ãŠã»ãšãã©ã®ã¿ãŒã²ããã Scala 2.12 ãš Scala 2.13 ã®äž¡æ¹ã§ãã«ãå¯èœãªç¶æ ãžæã£ãŠããã ããã¯ãäžéšã®ããŒã ãå šç€Ÿã«å è¡ããŠæ°ããŒãžã§ã³ã詊ãã€ã€ãã³ãŒãããŒã¹ãšããŠã¯æ®éã«é²ãã§ããããšãã§ããã
å é±ã@ianocããã« Bazel ã§ã¯ãã¹ãã«ããå¯èœãšããæ©æ§ãæããŠããã£ãã åãã¡ããã£ãã®ã¯ Python ã®å€éšã©ã€ãã©ãªã®åãæ¿ãã ããæ¬çš¿ã§ã¯ Scala ã®ã¯ãã¹ãã«ããå®è£ ããã (æãåºããšå»å¹ŽãLong Cao ãããããŒã«å ¥ãè¡åã§åŸ ã£ãŠããéã«ãã®èª¬æã詊ã¿ãŠãããæ°ãããããåœæã¯ãã®ãã¯ããã¯ãéåžžã«åŒ·åãªãã®ã ãšåãã€ãã€ãçè§£ã§ããªãã£ãã)
ãŸãåºæ¬ãå
ã«èšããšãã«ãŒãã® WORKSPACE å
ã§ãµããã£ã¬ã¯ããªãåç
§ãã local_repository ã宣èšããŠãå
¥ãåã¯ãŒã¯ã¹ããŒã¹ãäœãã
å®è¡æã« --override_repository ãªãã·ã§ã³ã䜿ã£ãŠããããå¥ã®ã¯ãŒã¯ã¹ããŒã¹ãžãšãªãŒããŒã©ã€ãããã
ãã®ããŒã«ã«ã»ãªããžããªã¯å®æ°ããã¯ãããã¡ã€ã«ãå«ãã¿ãŒã²ãããªã©ãå
¬éããããšãã§ããããã䜿ãããšã§äœã§ããªãŒããŒã©ã€ãã§ããã¯ãã ã
å㯠Twitter瀟㮠Build/Bazel Migration ããŒã ã§ã¹ã¿ããã»ãšã³ãžãã¢ãšããŠå€åããŠãããä¿¡ããããªããã㪠2幎ã®åŸã2022幎11æ17æ¥ããã£ãŠéè·ãã (äŒæ¥è²·ååŸã®ã¬ã€ãªãã§ãä»»æã§ããããŸãé¢ä¿ç¡ãããåã¯ä»»æéè·åžæã®ãªãã¡ãŒãåã£ã)ãTwitter瀟ã¯ãåç£ç¢ç£šã倿§æ§ããã㊠Flock ãæ§æããå šãŠã®äººã«å¯ŸããŠæº¢ãåºãåªãããšããããªãç¹å¥ãªæåãæã£ãè·å Žã ã£ãããããéè¿ã§çµéšããŠããã®äžå¡ãšãªãæ©äŒãåŸãããšã«æè¬ããŠããã(Flock ã¯ãé³¥ã®çŸ€ããã®æã§ã瀟å ã§ã® Twitter瀟ã®éç§°)
以äžã¯éå»2幎ã®ç°¡åãªæ¯ãè¿ãã ãå°æ¬çš¿ã§ã®æ å ±ã¯ãæ¢ã«å ¬éãããŠããããŒã¯ãããŒã¿ã«åºã¥ããŠãããè²·ååŸããã¡ã®ããŒã ã ãã§ã 10å以äžã®ã¡ã³ããŒã Twitter瀟ãæããã®ã§ãåšç±ã»å å«ã LinkedIn ãããã¡ã€ã«ãžã®ãªã³ã¯ãæ¬çš¿åæã«è²Œã£ãã
sbtãBazelããã®ä»å€ãã®ãã«ãããŒã«ã«ãããŠãããã¹ãããšããçšèªã倿§ãªã¬ãã«ã«ãŸãããããšãå€ãããã ãããææ§ç¡ãå®çŸ©ããŠããããšã¯ç¹ã«äºåãäºåŸåŠçã䞊ååŠçãªã©ãèãããšãã«åœ¹ã«ç«ã€ã®ã§ã¯ãªãããšæãã
å ã«æžããŠããŸããšããã¹ãã«ã¯ä»¥äžã® 4ã€ã®ã¬ãã«ããã:
æäžäœã®ã¬ãã«ã¯ãã«ãã»ããŒã«ããŠãŒã¶ã« test ã³ãã³ããšãšããŠæäŸãããã®ã ã
test ãšæã¡èŸŒãããã¿ãŒããã«ãã sbt --client test ãšæã¡èŸŒããšãsbt ã®ã³ãã³ãã»ãšã³ãžã³ã¯ãtestããéçŽãªã¹ãã«åæããããµããããžã§ã¯ãå
ã§ã®ã¿ã¹ã¯å®è¡ãžãšæã¡äžããã
äŸãã° root ãµããããžã§ã¯ãã core ãš util ãšãããµããããžã§ã¯ããéçŽããå Žåãtest 㯠root/Test/testãcore/Test/testãutil/Test/test ã®äžŠåå®è¡ã ãšè§£éãããã
åã¯ãã®æ¯ãèããã³ãã³ãã»ãããŒããã£ã¹ããšåŒãã§ãããbazel testl example/... ãšæã¡èŸŒããšãBazel 㯠example1/ ãã£ã¬ã¯ããªä»¥äžã®å
šãŠã®ãã¹ãã»ã¿ãŒã²ãããååž°çã«ã¯ãšãªããŠãçºèŠããããã¹ãã»ã¿ãŒã²ããã䞊åçã«ãã¹ããããå ±éããŠããã®ã¯ãã³ãã³ããšããŠã®ãã¹ããããã¹ãã¢ãžã¥ãŒã«ãéçŽããŠããããã䞊åå®è¡ããããšã ã
Test ã³ã³ãã£ã°ã¬ãŒã·ã§ã³ã®ãã¢ãšããŠè¡šããscala_test(...) ã®ãããªäœããã®ã¿ãŒã²ãããšããŠè¡šãã
Bazel 㯠rules_scala ã® scala_test_suite(...) ã®ãããªååä»ãã®ãã¹ãéçŽãæäŸãããBazel ã«é¢ããŠå°ãè£è¶³ããŠãããšããã¹ãã»ã¢ãžã¥ãŒã«ã®åŠçã¯éåžžã«åªç§ã ãšããããšã ã
ããã©ã«ãã§ãã¹ãã®çµæã¯ãã£ãã·ã¥ããããã£ãã·ã³ã°ã¯ãªã¢ãŒãã»ãã£ãã·ã¥ãžãšèšå®ããããšãã§ãã
å®è¡ç°å¢ããªã¢ãŒãã»ãã·ã³ãžãšèšå®ããããšãã§ããã
ãã®ãããã©ãããããäžããç°å¢ãæŽããã°äœçŸãã®ãžã§ããèµ·åããããšãã§ããã
ãŸããã¿ãŒã²ããã¯åŸæ¥ã®ãã«ãããŒã«ããã现ããäœãããçè«äž .scala ãã¡ã€ã«ããšã«
scala_test(...) ã¿ãŒã²ããã宣èšããŠ(å¥ã®ãã·ã³ã§)䞊åå®è¡ããããšãã§ããã
JUnitãMUnitãScalaTestãSpecs2ãHedgehogãVerify ãªã©ã® JVM ãã¹ããã¬ãŒã ã¯ãŒã¯ã¯é¢é£ãããã¹ãã»ã¡ãœãããã¯ã©ã¹ããªããžã§ã¯ããçšããŠã°ã«ãŒãåããã
Scala ã§ã¯ããããã®ãã¹ãã»ã¯ã©ã¹ã FunSuite ã®ããã«ãsuiteããšåä»ããããããšãããããJUnit ã«ããã Suite ã¯
è€æ°ã®ãã¹ãã»ã¯ã©ã¹ãéçŽããç¹æ®ãªãã¹ãã»ã¯ã©ã¹ãæãã
Ãlaf ããã® olafurpg/setup-scala ã䜿ã£ãŠãããžã§ã¯ãã JDK 17 ã§ãã¹ãããç°¡åãªè§£èª¬ãããŠã¿ããSetting up GitHub Actions with sbt ã§ããã¥ã¡ã³ãåãããŠãã以äžã®èšå®ãã¹ã¿ãŒãå°ç¹ãšããã
name: CI
on:
pull_request:
push:
jobs:
test:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
java: 11
jobtype: 1
- os: ubuntu-latest
java: 11
jobtype: 2
- os: ubuntu-latest
java: 11
jobtype: 3
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v1
- name: Setup
uses: olafurpg/setup-scala@v13
with:
java-version: "adopt@1.${{ matrix.java }}"
- name: Build and test
run: |
case ${{ matrix.jobtype }} in
1)
sbt -v "mimaReportBinaryIssues; scalafmtCheckAll; +test;"
;;
2)
sbt -v "scripted actions/*"
;;
3)
sbt -v "dependency-management/*"
;;
*)
echo unknown jobtype
exit 1
esac
shell: bash
äŸãã°ãjobtype ã 3 ã®å Žå㯠JDK 8 ã䜿ããããšããŠãjobtype ã 1 ãš 2 ã®å Žå㯠JDK 17 ã§ãã¹ãããããšãããsbt-ci-release 㯠JDK ãæã£ãŠããã®ã« jabba ã䜿ã£ãŠãããããããæžããŠããæç¹ã§ã¯å瀟㮠openjdk 17.0 ãã£ã¹ããã jabba ã«ãŸã äžãã£ãŠããªããããããEclipse Adoptium æ§å AdoptOpenJDK ãããã€ããªãåºãã®ã§ã«ã¹ã¿ã JDK ã¢ãŒããå©çšããŠåŒ·åŒã«äœ¿ãããšãå¯èœã :
ãã¯ãã¯æ¥œãããã€åŒ·åãªããŒã«ã ãã䜿ãããã¯å®³ãããã責任ãæã£ãŠé©åºŠã«ãã¯ããæ¥œããã§ã»ããã
ãã¯ããšã¯äœã ããã? ãããã説æã¯ãã¯ãã¯ã³ãŒããå
¥åãšããŠåãåããã³ãŒããåºåããããã°ã©ã ã ãšããããããèªäœã¯æ£ããããmap {...} ã®ãããªé«é颿°ãååæž¡ããã©ã¡ãŒã¿ã®ããã«äžèŠã³ãŒãã®ãããã¯ãæž¡ããŠåã£ãŠããæ©èœã«èŠªããã§ãã Scala ããã°ã©ãã«ã¯ãã³ãŒããå
¥åãšããŠåãåããã®æå³ãäžèŠåããã¥ãããããããªãã
以äžã¯ãåã Scala 3 ã«ãç§»æ€ãã Expecty ãšãã assersion ãã¯ãã®çšäŸã :
scala> import com.eed3si9n.expecty.Expecty.assert
import com.eed3si9n.expecty.Expecty.assert
scala> assert(person.say(word1, word2) == "pong pong")
java.lang.AssertionError: assertion failed
assert(person.say(word1, word2) == "pong pong")
| | | | |
| | ping pong false
| ping pong
Person(Fred,42)
at com.eed3si9n.expecty.Expecty$ExpectyListener.expressionRecorded(Expecty.scala:35)
at com.eed3si9n.expecty.RecorderRuntime.recordExpression(RecorderRuntime.scala:39)
... 36 elided
äŸãã° assert(...) ã§ååæž¡ãã®åŒæ°ã䜿ã£ããšãããããã®å€ãåŸãã¿ã€ãã³ã°ã¯å¶åŸ¡ã§ããã false ããåŸãããšãã§ããªããäžæ¹ãã¯ãã§ã¯ãperson.say(word1, word2) == "pong pong" ãšãããœãŒã¹ã³ãŒãã®åœ¢ãã®ãã®ãåãåããå
šãŠã®åŒã®è©äŸ¡å€ãå«ãã ãšã©ãŒã¡ãã»ãŒãžãèªåçæãããšããããšãã§ãããé 匵ã£ãŠæžãããšæãã° Predef.assert(...) ã䜿ã£ãŠãæã§ãã®ãããªãšã©ãŒã¡ãã»ãŒãžãæžãããšãã§ããããéåžžã«éå±ãªäœæ¥ãšãªãããã¯ãã®å
šè²ã¯ããã ãã§ã¯ç¡ãã
ãããããã¡ãªèãæ¹ãšããŠã³ã³ãã€ã©ã¯ãœãŒã¹ã³ãŒãããã·ã³ã³ãŒããžãšç¿»èš³ãããã®ã ãšãã®ãããã確ãã«ããããåŽé¢ãããããã³ã³ãã€ã©ã¯ä»ã«ãå€ãã®äºãè¡ã£ãŠãããåæ€æ» (type checking) ã¯ãã®ãã¡ã®äžã€ã ããã€ãã³ãŒã (ã JS) ãæåŸã«çæããä»ã«ãScala ã³ã³ãã€ã©ã¯ã©ã€ããŠã§ã€ããªèšŒæã·ã¹ãã ãšããŠæ¯ãèããã¿ã€ããåŒæ°ã®ååãããªã©æ§ã ãªãšã©ãŒãäºåã«ãã£ãããããJava ã®ä»®æ³æ©æ¢°ã¯ãScala ã®åã·ã¹ãã ãäœãè¡ã£ãŠããããã»ãšãã©ç¥ããªãããã®æ å ±ã®ãã¹ã¯ãäœãæªãããšãã®ããã«åæ¶å»ãšãåŒã°ãããããã®åãšã©ã³ã¿ã€ã ãšããäºå æ§ã«ãã£ãŠ Scala ã JVMãJSãNative äžã«ã²ã¹ãã»ããã°ã©ãã³ã°èšèªãšããŠååšããããšãã§ããã
å®éšç sbt ãšããŠãé ¢é¶ (sudori) ãšããå°ããªãããžã§ã¯ããäœã£ãŠãããåœé¢ã®äºå®ã¯ãã¯ãåšãã Scala 3 ã«ç§»æ€ããããšã ãsbt ã®ãã¯ããåè§£ããŠãåå°ããäœãçŽããšãã課é¡ã ããã㯠Scala 2 ãš 3 ã§ãäžçŽè åãã®ãããã¯ã§ãåèªèº«ã詊è¡é¯èª€ããªãããã£ãŠããã®ã§ãèŠãæžãã®ãããªãã®ã ãšæã£ãŠã»ããã
åè:
äœã«ãäŸåããŠããªãåºç€ãšãªã Convert ãšãããã®ãç¹å®ã§ããã
abstract class Convert {
def apply[T: c.WeakTypeTag](c: blackbox.Context)(nme: String, in: c.Tree): Converted[c.type]
....
}
Tree ãåãåã£ãŠ Converted ãšããæœè±¡ããŒã¿åãè¿ãéšå颿°ã®è±ªè¯çã¿ãããªãã®ã«èŠãããConverted ã¯ã以äžã®ããã«åãã©ã¡ãŒã¿ãšã㊠[C <: blackbox.Context with Singleton] ãåã:
final case class Success[C <: blackbox.Context with Singleton](
tree: C#Tree,
finalTransform: C#Tree => C#Tree
) extends Converted[C] {
def isSuccess = true
def transform(f: C#Tree => C#Tree): Converted[C] = Success(f(tree), finalTransform)
}
ãã®ããã«çŽæ¥ Treeãã€ãŸãæœè±¡æ§ææš (AST) ãæ±ãå€ã Scala 2 ãã¯ãã®å®è£
ã®å
žåçãªäŸã ããScala 3 ã§ã¯ãã£ãšç¶ºéºã«é«åºŠãªã¬ãã«ã§ã¡ã¿ããã°ã©ãã³ã°ãè¡ã仿ããšã㊠inline ãªã©ãããã®ã§ãããããå§ããã®ãéåžžã¯æšå¥šãããã
ãã ãããã®å Žåã¯æ¢åã®ãã¯ããç§»æ€ããŠããã®ã§ã¯ã©ãŒããªãã¬ã¯ã·ã§ã³ (quote reflection) ã«ã²ãšã£é£ã³ããããã㯠Scala 2 ãã¯ãã«äŒŒãŠããæãã ã
å®éšç sbt ãšããŠãé ¢é¶ (sudori) ãšããå°ããªãããžã§ã¯ããäœã£ãŠãããåœé¢ã®äºå®ã¯ãã¯ãåšãã Scala 3 ã«ç§»æ€ããããšã ãsbt ã®ãã¯ããåè§£ããŠãåå°ããäœãçŽããšãã課é¡ã ããã㯠Scala 2 ãš 3 ã§ãäžçŽè åãã®ãããã¯ã§ãåèªèº«ã詊è¡é¯èª€ããªãããã£ãŠããã®ã§ãèŠãæžãã®ãããªãã®ã ãšæã£ãŠã»ãããããã¯ãã®ããŒã2ã ã
åè:
build.sbt ãã¯ããšèšãããŠæãã€ãã®ã¯ .value ã䜿ã£ã Applicative do ãã¯ããªããããªãããšæããåŒã³æ¹ãšããŠã¯ãããã¯åŒã°ãªã人ããããããããªããããã®åœä»€åãã颿°åãžã®å€æãæ
ã£ãŠããã®ã¯ãã¡ãã£ãšå€ãã£ãååãæã€ Instance class ã®ã³ã³ãããªã³ã :
/**
* The separate hierarchy from Applicative/Monad is for two reasons.
*
* 1. The type constructor is represented as an abstract type because a TypeTag cannot represent a type constructor directly.
* 2. The applicative interface is uncurried.
*/
trait Instance {
type M[x]
def app[K[L[x]], Z](in: K[M], f: K[Id] => Z)(implicit a: AList[K]): M[Z]
def map[S, T](in: M[S], f: S => T): M[T]
def pure[T](t: () => T): M[T]
}
trait MonadInstance extends Instance {
def flatten[T](in: M[M[T]]): M[T]
}
Scaladoc ã§ãèšåãããŠããããsbt ã¯å
éšã«ç¬èªã® Applicative[_] åã¯ã©ã¹ãå®çŸ©ããŠãããMark ã 2012幎 (Scala 2.10.0-M6 ããã) ã«åæãã 2ã€ã®çç±ãçŸæç¹ã§ãåœãŠã¯ãŸããã¯äžæã ããã¯ãã¯ãããªæãã :
sbt 1.5.1 ããããªãªãŒã¹ãã¢ããŠã³ã¹ããããªãªãŒã¹ããŒãã®å®å šçã¯ããã«ãã - https://github.com/sbt/sbt/releases/tag/v1.5.1 ãæ¬çš¿ã§ã¯ Bintray ãã JFrog Artifactory ãžã®ãã€ã°ã¬ãŒã·ã§ã³ã®å ±åãããã
ãŸã㯠JFrog瀟ã«ãsbt ãããžã§ã¯ãããã³ Scala ãšã³ã·ã¹ãã ãžã®ç¶ç¶çãªãµããŒããããŠããã£ãŠããããšã«ã瀌ãèšãããã
sbt ãã³ã³ããªãã¥ãŒã¿ãŒæ°ãšãã©ã°ã€ã³æ°ã«ãããŠäŒžã³çãã ã£ãææã« Bintray ã®åœ¢ãããåé¡ããã£ããå人ã®ã³ã³ããªãã¥ãŒã¿ãŒã« Ivy ã¬ã€ã¢ãŠãã®ã¬ããžããªãäœã£ãŠãsbt ãã©ã°ã€ã³ãå ¬éããŠãããã解決åŽã§ã¯éçŽããããšããåé¡ã ãGitHub ã® sbt ãªãŒã¬ããŒãŒã·ã§ã³ã§ãã©ã°ã€ã³ã®ãœãŒã¹ãè€æ°äººã§æµåçã«ç®¡çããããšãã§ããããã«ãªã£ããããã€ããªãã¡ã€ã«ã®é ä¿¡ã¯èª²é¡ãšããŠæ®ã£ãŠãããåœæã¯ sbt ã®ããŒãžã§ã³ãããå€ãã£ãŠãããšããã®ãããã2014幎㫠Bintray ãæ¡çšããŠãæé·æã®é ä¿¡ã¡ã«ããºã ãæ ã£ãŠããããããã«åãã¡ã¯ sbt ã® Debian ãš RPM ã€ã³ã¹ããŒã©ãŒããã¹ãã£ã³ã°ããã®ã« Bintray ã䜿ã£ãŠããŠããã㯠Lightbend 瀟ãæã£ãŠãããŠããã
2021幎2æãJFrog 㯠Bintray ãµãŒãã¹ã®çµäºãã¢ããŠã³ã¹ããããã®çŽåŸãããJFrog 瀟ã¯åããããã³ã³ã¿ã¯ãããŠããŠãäœåãããŒãã£ã³ã°ãã¹ã±ãžã¥ãŒã«ããŠãããããopen source sponsorship ãã°ã©ã³ãããŠããããããã€ã°ã¬ãŒã·ã§ã³çšã®ããŒã«ãããããããããšãäžè©±ã«ãªã£ãŠããã
ä»çŸåš Scala Center ã«ã©ã€ã»ã³ã¹ãããJFrogãã¹ãã³ãµãŒããŠãããã¯ã©ãŠãã»ãã¹ã㪠Artifactory ã®ã€ã³ã¹ã¿ã³ã¹ã皌åããŠããããArtifactory ã®ã€ã³ã¹ã¿ã³ã¹ããšäœåºŠãæžãã®ãé·ãã®ã§ãæ¬çš¿ã§ã¯ Artsy ãšåŒã¶ãsbt 1.5.1 ããªãªãŒã¹ãããããšã§ããã€ã°ã¬ãŒã·ã§ã³ã¯å®äºãããšæãã
Artsy ã® sbt-plugin-releases ã¯ãªãŒããªã³ãªãŒã«ããäºå®ã ããã®ããããã©ã°ã€ã³äœè
ã®äººã¯ãSonatype OSSRH ã«ç§»è¡ããå¿
èŠããããorganization åã®èš±å¯ãäžããããå
¬é㯠sbt-ci-release ã§èªååã§ããã
ç«çª: 19æ¥ç®ãFunctionK ãšãã Rúnar ããã«ããã©ã³ã¯2å€çžæ§ã®ãšã³ã³ãŒãã£ã³ã°ããããŠé«ã©ã³ã¯å€çžãå¯èœã«ãããšäºèŠããã Resource ããŒã¿åã«é¢ããŠã
sbt 1.1.0 ã§åã¯çµ±äžã¹ã©ãã·ã¥æ§æãå®è£ ãããããããæ°å¹Žçµã£ã仿¥ã«ãªã£ãŠãå€ã sbt 0.13 ã§ã®ã·ã§ã«æ§æã廿¢å§åããããã® pull request ãéã£ãã#6309
æãè¡ããšããŠãbuild.sbt ã®ããã®æ§æ§æã廿¢å§åã«ãããšãã話é¡ãåºãŠããã
will you also deprecate `scalacOptions in (Compile, console)` in *.sbt and *.scala files? I hope so
— Seth Tisue (@SethTisue) February 16, 2021
ãçµ±äžãã¹ã©ãã·ã¥æ§æãããåä»ããããã®ã¯ã·ã§ã«æ§æãšãã«ãå®çŸ©æ§æãçµ±äžããããã ããã®ãããã·ã§ã«ã®æ§æ§æã廿¢å§åãããªãã°ãskip in publish ã scalacOptions in (Compile, console) ãšãããµãã« in ãäœ¿ãæ§ build.sbt æ§æãåæã«å»æ¢å§åãããšããã®ã¯çã«ããªã£ãŠããã
build.sbt ãçµ±äžã¹ã©ãã·ã¥æ§æãžãšå€æãã syntactic Scalafix rule ãã¡ãã¡ãã£ãšäœã£ãã®ã§ããã§ç޹ä»ãã - https://gist.github.com/eed3si9n/57e83f5330592d968ce49f0d5030d4d5
ãããžã§ã¯ãã git ã§ç®¡çããããããã¯ã¢ãããåãããšã
$ cs install scalafix
$ export PATH="$PATH:$HOME/Library/Application Support/Coursier/bin"
$ scalafix --rules=https://gist.githubusercontent.com/eed3si9n/57e83f5330592d968ce49f0d5030d4d5/raw/7f576f16a90e432baa49911c9a66204c354947bb/Sbt0_13BuildSyntax.scala *.sbt project/*.scala
å®å šã«ã¯æ£ç¢ºãããªãããæåã§å šéšããããã¯ãã·ã ãšæãã
bisect.sh ã¯ãã«ãæžã¿ã®ã³ã³ãã€ã©ã Scala CI Artifactory ããå©çšããããšã§æéãç¯çŽã§ããã