scala
掲題の通り。evictedはプロジェクトの依存性を全て確認し、依存性が衝突していたりbinary incompatibleの可能性があるものを検出できる。 手元にあった古いプロジェクトで試してみた様子: % sbt > evicted [warn] Found version conflict(s) in library depe…
この記事ははてなエンジニアアドベントカレンダー2025の15日目の記事だ。遅くなってすみません。 qiita.com HNSWというデータ構造がある。 en.wikipedia.org このデータ構造は、あるクエリした点からの(近似的な)近傍のデータを求めるのに最適化されている…
Maven Centralへのアーティファクト登録の際に必要になるPGP鍵の生成と公開、そしてGitHub Actionsシークレットへの登録を同時にやってくれるツールとして、scala-pgp-bootstrapを書いた。 github.com 使い方は簡単で、Coursierを持っているならcs launch de…
mdocというツールがある。 scalameta.org MarkdownにScalaのコードを書くと、自動的にこれをコンパイルして値が埋まった状態にしてくれるというもので、ドキュメンテーションに非常に便利だ。 例えば以下のようなコードスニペットがあるとする: ```scala mdo…
他の言語の非同期プリミティブと比べてもOxかなり良いな〜という記事です。 先日Ox v1.0.0がリリースされた。Oxはプログラミング言語Scalaの非同期処理ライブラリで、Java 21から搭載されたVirtual Threadの機能を活用して、非同期処理のための道具を使いや…
LambrollというOSSがある。 github.com AWS Lambdaのデプロイを簡単にしてくれるツールで、非常に使い勝手が良いので仕事で愛用している。 そんなLambrollと、同様に簡単にScalaを書けるようにしてくれるScala CLIとを組み合わせてみたらどうなるだろう、と…
tl;dr deserialize serialize デフォルト値がある フィールドがない場合はデフォルト値にフォールバックする 値がデフォルトと同じならフィールドごと削除する デフォルト値がない フィールドがない場合は例外を投げる 値をセットする //> using dep com.lih…
生きているとEnumをJSONにしたり、JSONをEnumに戻したりしたくなることがある。エンジニアの仕事の半分はJSONという煮干しを作ったりそれを戻したりすることなので、もはや呼吸をするようにエンコードしたりデコードしたりする。ええ?YAMLがお好き?すみま…
import scalanative.runtime.filename filename // => "./target/scala-3.3.6/foobar" いわゆる$0が得られる。 (環境 Scala Native 0.5.7)
Scala CLI 1.8.1がしばらく前にリリースされていた。このリリースの主な変更は、using fileディレクティブで URL を展開する機能が利用できるようになったことだ。 github.com この記事ではこの機能について紹介する。 Scala CLI とは Scala CLI とはVirtusL…
じゃんけんという遊びがある。 じゃんけんは、離散的に定義された三つの手(グー・チョキ・パー)の非推移的な優劣関係――グーはチョキに勝ち、チョキはパーに勝ち、パーはグーに勝つ――を用いて勝敗を決定する二人以上参加可能な競技的ゲームです。遊戯手順は…
Redditを見ていると便利そうな記事を発見した。 lukastymo.com この記事では、MutexやSemaphore、そしてCyclic Barrierの使い方について解説している。 セマフォとは同時に一定数のみがリソースにアクセスできるようにする、つまり「いくつまでなら同時に使…
ここではsttp4前提で書くがsttp3でもたぶん同じ。 sttpについて説明しておくと、Scalaで利用できるHTTPクライアント実装で、操作体系がシンプルで簡単であり、なおかつ複数のバックエンド(JDK標準のクライアントを使うものとか、もっと並行性制御を強化され…
この書評は、掲題書についての一個人の考えを述べ、改善に資せんとするものである。つまりここから先に書かれていることの冒頭には遍く「私見では」と見えない文字で書かれているということだ。 この本は初学者向けの教科書または副読書として不適切であり、…
Redditを見ていたところ面白いコンパイラプラグインを発見したので紹介する。 Redacted Redactedは、case classの特定のフィールドをtoString()から除外し、***で塗り潰して見えなくできるコンパイラプラグインだ。 polentino.github.io github.com Redacted…
Scalaには言語サーバとしてMetalsというのがあり、LSPを喋ったりビルドサーバと協調してコンパイルを回したりしてくれる。 scalameta.org VSCodeでも使われる定番の言語サーバであり、Scala開発者の半分くらいはこれを使っているはず。ロゴがかわいい。 そん…
Scalaのパターンマッチは変数を使って分割代入ができる。 val xs = 1 :: 2 :: 3 :: Nil xs match { case head :: tail => s"head is $head" // => "head is 1" case _ => "not found" } これはxsに対してまずhead :: tail という式にマッチが試みられ、head…
Scalaコンパイラは、特定の警告メッセージに対してad-hocに警告からエラーに昇格させ、コンパイルを失敗させることができる。 以下のscalac optionを設定することで non-exhaustive match だけエラーにできる: -Wconf:msg=match may not be exhaustive:error…
val xs = List(1, 2, 3, 4, 5, 6, 7, 8, 9) xs.lift(4) // => Some(5) xs.lift(42) // => None liftというのはある関数をOptionを返すように加工するようなときに使われる慣例的な名前で、今回は暗にapplyのことを指している。 www.scala-lang.org 元々lift…
Cats Effect をいじっていたら、foreach_というメソッドを見付けた。これはCats Effect独自のメソッドではなくて、Catsに用意されている。 これはほぼtraverseと同じだ: import cats.effect.IO import cats.syntax.all.* def message(who: String): IO[Strin…
Scala 3 には篩型(refinement types)を実現するためのライブラリであるIronが存在する。 blog.3qe.us このライブラリを使うと、非負整数とか、8桁の文字列とか、UUIDといった、元々の型に加えて制約を加えたものをそのまま型情報に載せて扱うことができる…
Scala Native 0.5.7がリリースされた。 github.com 主要なアップデートはリリースノートに書かれているが、面白いと思ったので紹介する。 Scala Nativeとは(おさらい) バイナリ互換性 C++標準ライブラリへの依存が削減 clasのvtableのレイアウトが最適化さ…
Scala CLIはScalaの便利コマンドラインツールで、スクリプト実行やREPL、パッケージングなどをやってくれる。今回はスクリプティングの話。 blog.3qe.us Scala CLIはビルドサーバを起動する Scalaはコンパイル型の言語であり、JVMでコンパイラが動作するとい…
こんな文字列があるとする: val s1 = "foo" val s2 = "" これを、以下のような感じにしたいことはまあまあある: val s1a = Some("foo") val s2a = None つまり、以下のようなルールだ: 文字列sが空の場合、None。 それ以外の場合は、Some(s)。 素朴にmatchを…
先日、言語の塩漬けビリティの話がネットで盛り上がっていた。 言語とそれをとりまくエコシステムの塩漬けビリティみたいな概念が、†生産性†みたいな概念とは独立した軸に存在しているような気がしており、JavaとかCは異常にこのへんが手堅く、だから選ばれ…
Scala 3.6.2が出た!やったー! github.com Scala 3.6.2は、Scala 3.6系の最初の正式なリリースで、数多くの機能が追加された。この記事ではそのうち主要な機能を紹介する。また、正確さよりも分かりやすさを優先してザックリ書いているところがあるので、そ…
作った。 www.npmjs.com github.com esbuildとはJSのバンドラであり、めちゃくちゃ高速に動作するのがウリである。 esbuild.github.io そして今回自分が作製したこのプラグインを使うと、esbuildがScalaのコードのimportを見付けると勝手にビルド・バンドル…
これは、前人未踏の地に飛び込んでいった漢たちの物語・・・ ツッコミ所がいっぱいあると思います。どんどんツッコんで賑やかしてください。ISUCONの経験がそんなにあるわけではないので、アホみたいなことをしているかも。俺をBIGにしてください! また、書…
cleanするとだいたい治る。 docsプロジェクトにドキュメントを書いているときは docs / clean してから再生成するとよい。 なんでこんな壊れ方するのかは謎 これはScala Advent Calendar 2024の7日目の記事です。 qiita.com
ScalaでDockerイメージを作る話は定期的に書いている。しかし今回が一番簡単です。 blog.3qe.us blog.3qe.us blog.3qe.us まじで何回書いてんだという話だが、Dockerコンテナはあまりにも日常の一部になってしまっているので、ScalaでもDockerコンテナが簡単…