Lambdaカクテル

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

Invite link for Scalaわいわいランド

2024-01-01から1年間の記事一覧

Scala 3.6が出たので見所を紹介するよ

Scala 3.6.2が出た!やったー! github.com Scala 3.6.2は、Scala 3.6系の最初の正式なリリースで、数多くの機能が追加された。この記事ではそのうち主要な機能を紹介する。また、正確さよりも分かりやすさを優先してザックリ書いているところがあるので、そ…

esbuildでScala.jsをビルドして呼べるようにするプラグインを作った話

作った。 www.npmjs.com github.com esbuildとはJSのバンドラであり、めちゃくちゃ高速に動作するのがウリである。 esbuild.github.io そして今回自分が作製したこのプラグインを使うと、esbuildがScalaのコードのimportを見付けると勝手にビルド・バンドル…

プロジェクトS: Scala 3で #ISUCON 14に出て優勝せよ (点数: 0点)

これは、前人未踏の地に飛び込んでいった漢たちの物語・・・ ツッコミ所がいっぱいあると思います。どんどんツッコんで賑やかしてください。ISUCONの経験がそんなにあるわけではないので、アホみたいなことをしているかも。俺をBIGにしてください! また、書…

Laikaでlaika.io.internal.errors.ParserErrors: Multiple errors during parsing: Duplicate path: / (no matching file paths)が出たら見るページ

cleanするとだいたい治る。 docsプロジェクトにドキュメントを書いているときは docs / clean してから再生成するとよい。 なんでこんな壊れ方するのかは謎 これはScala Advent Calendar 2024の7日目の記事です。 qiita.com

sbt-jibでScalaのDockerイメージを簡単に作ろう

ScalaでDockerイメージを作る話は定期的に書いている。しかし今回が一番簡単です。 blog.3qe.us blog.3qe.us blog.3qe.us まじで何回書いてんだという話だが、Dockerコンテナはあまりにも日常の一部になってしまっているので、ScalaでもDockerコンテナが簡単…

篝火を掲げよ #cohackpp

晩秋の空に照らされて高いところから白い煙を吹き出す鈍色のチューブと鉄骨を時速250キロですり抜けながら、おれは紅白ぺぱ合戦に向かっていた。空はぽかんと晴れていた。銀髪になりつつある富士山が拝めそうだったが、窓が反対側で足しか見えなかった。Conn…

Scala Nativeでjava.nio.channels.AsynchronousServerSocketChannelがないと言われたら見るページ

Scala Nativeでhttp4sなどを使おうとするとビルドタイミングでこのようなメッセージが出たりする: Found a call to not defined static method Member(Top(java.nio.channels.AsynchronousServerSocketChannel),D4openL42java.nio.channels.AsynchronousChan…

Scala.jsでSyntaxError: Cannot use import statement outside a module出たら見るページ

Scala.jsでSyntaxError: Cannot use import statement outside a moduleが出ることがある。 環境 val scala3Version = "3.5.2" addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.17.0") tl;dr .withOutputPatterns(OutputPatterns.fromJSFile("%s.mjs")し…

Scalaではクラスのコンストラクタ引数とフィールドを同時に定義できる

こういうツイートを見た。 Scalaのフィールド、class名のすぐ後ろのかっこ内に書くのとbodyに書くの何がちがうん— Neo (@GlassesNeo) 2024年11月24日 Scalaのフィールド、class名のすぐ後ろのかっこ内に書くのとbodyに書くの何がちがうん つまり、この二者は…

暮らしは局所最適でいい

近所のスーパーで、これを買っておくべきか、いや買わざるべきかと逡巡していた。もしかしたらそのうち必要になるかもしれないし、まったくそんなことはないかもしれない。 しばらくうろついた挙句、買わずに出てきた。 似たようなことは他にもある。この技…

ScalaでスナップショットテストをするならSnapshot4sが良さそう

最近仕事でスナップショットテストを実施した。一定の仕様でデータを文字列で吐き出す機能があり、その出力が入力に対して安定しているかどうかを保証しておきたいのだ。その時はvitestに搭載されている機能を利用した。 vitest.dev ざっくり言うと、スナッ…

文章を読むことが苦手になっていく

家の便座が漏電して、ぶっ壊れてしまった。冷たい!と声をあげそうになってしまったのは数日前で、気付くと便座が冷たいしランプが点灯していない。コンセントを刺し直すとしばらく動いているのだが、またしばらくすると動かなくなっているのだ。うーんどう…

Scalaの勝手マスコット Scala-kun を作りました

作った Scalaの非公式なキャラを作った。 GitHubにSVGがあります。CC BY-SA 4.0でライセンスしているので、それに基いて勝手に使ってください。例えば、スライドに挿入したり(スライド末尾や適当な場所にクレジットしてください)、ライセンスを継承すること…

ibus-skkが起動しなくなったけどログ見たら直せた

GNOMEを47にアップデートしたところibus-skkが動かなくなってしまった。 しかしこれでは大変困るので同僚に相談していたところskk辞書が壊れてない?という指摘を受けたので確認したらそれだった。 備忘録ついでにメモしておく。 環境 openSUSE Tumbleweed W…

ScalaでZIPファイルを簡単に扱うならos-libが便利そう

会社では定期的にScalaの新たなトピックを確認したり共有したりする会をやっている。そこでScalaのRedditを見ていると、os-libのバージョンアップが知らされていた。 見ると最近のバージョンではos-libはZIPを扱えるようになっていた。APIも便利そうなので紹…

Scala 3でクラスフィールドの初期化順の困りを回避できるSafe Initialization機能が便利なので紹介したい

突然だがこのScala 3のコードはコンパイルするだろうか。先に正解を言っておくと「コンパイルする」(Scala 3.5.0)。 class Foo: val x = y val y = 42 では、このFooに向けて以下の呼び出しを行うとどうなるだろう? Foo().x 驚くなかれ、この式は0に評価さ…

Pulumi(Besom)でリソース名が自動的に変化するのを防ぐ

PulumiとはIaCツールである。 www.pulumi.com 競合としてTerraformとかCDK Terraformがある。PulumiはSDKを持つ好きなプログラミング言語で好きなプロバイダのリソースを記述できる面白いアーキテクチャになっていて、例えばKubernetesやCloudflare、AWSなど…

sbt-native-packagerでCorrettoを利用するにはdaemonUserUidをいじるといい

案外まとまった手順がネットになかったので放流しておきます。 どういうときに読むか sbt-native-packagerでDockerイメージを作成しようとしたら /bin/sh: adduser: command not found と表示されたとき sbt-native-packagerとは ScalaをDockerやdebパッケー…

Scalaでもコードとテストを同じディレクトリに配置できる(テストのコロケーション)

社のSlackでこういう発言を見た。 Go みたいにプログラムとテストを同じ dir に入れたい。 そういえば、テストとコードを同じ場所に配置する言語をよく見かける。こうした、テストとコードを同じ位置に置くという思想を(テストの)コロケーションと呼ぶようだ…

Play frameworkでJSONに余計なフィールドが含まれているときにエラーにするには

Reads[A]にはcomposeWithメソッドがあるため、これを利用して余分なフィールドを検出できる。composeWithは、いったん別のReadsを事前に経由させるメソッド。 Scala 3.3.0、play-json 3.0.4で確認した。 前提 まず、あるcase classと、余分なフィールドを含…

Scalaのfs2でテクニカルなStreamを作りたいときはPullを使うといい

Scalaにはfs2という非同期ストリーミング処理を生産的に行えるライブラリがある。ストリーミング処理なので、沢山のデータがどんどん流れてきたり、ビッグデータ的な情報を扱う企業でよく利用されている。 fs2.io speakerdeck.com 最初から非同期処理に対応…

なぜDBから引くときに1000件ずつchunkingするのか、説明できますか

MySQLやPostgreSQLといったRDBMSからデータを引いてくるとき、扱うデータの規模によっては、1000件ずつLIMITをかけて順に引いていくということがある。 以前slow queryが出たらよくやっていたのを思い出して、ふとこのあたりってどういう根拠があってやって…

ヤモリくん

数日前、マンションの廊下に出た拍子にヤモリくんが家に入ってきてどこかに行ってしまった。 暑かったのでホモサピエンスの巣で涼みたかったのかもしれないが、そのときは急いでいたのでそのままヤモリくんに留守番、まさに家守をさせていたが、とうとうその…

Scala 3のsummonって何?

Scala 3にはsummonという関数がある。普段はあまり使うことがないが、知っておくとusingまわりのデバッグにも使えるとても便利なやつだ。この記事ではsummonの便利な利用法を紹介する。 docs.scala-lang.org 型の一致を確認する summonの典型的なユースケー…

心に原風景を飼っておく

わりと多くの人間には、原風景や基盤となる心象風景みたいなものがあると思う。自分の場合、出身地である佐賀の雄大な(何もないとも言う)田園風景とか、のどかな県民性とか、気候が穏やかであることが、原風景としてすぐに思い浮かぶ。 心が安定している人と…

金がない

先日ぶっ倒れたり帯状疱疹になったりした。色々あって具合が悪かったのだ。 blog.3qe.us blog.3qe.us したら普通に金がどんどんなくなっていって、自分は3割負担だけど、普通に口座の残高が尽きた。このときばかりはキューバ国民*1になりたいと思った。病気…

Cats EffectのResourceで安全にリソースをむすんでひらいてしよう

Scalaの非同期処理フレームワークであるCats Effectには、非同期処理のためのバラエティ豊かな部品が沢山揃っていて、これらを組み合わせることで簡単に柔軟な非同期処理を書けるようになっている。 中でもよく登場する部品がResourceだ。Resourceを利用する…

Cats Effectの*>と>>の違いは何?Scaladocはあるの?調べてみました!

tl;dr どちらも「左を実行してから右を実行」であることに変わりない *>は再帰セーフではない 値渡し(IO[B])していることに起因する >>は再帰セーフ 名前渡し(=> IO[B])していることに起因する 特に理由がなければ>>を使おう Scaladoc しっかりScaladocに説…

「ちゃんと」やるべきか検討するステップをちゃんと踏みたい

仕事で、あるタスクについて同僚が状況整理から始めていて良かった。その過程で色々と見落しや気付いてなかったポイントが出てきてお得だ。自分は「やりながら考えたらなんとかなるっしょ」みたいな性質で、細かい部分を見落しがちだから助かる。 仕事という…

Feral: Cats EffectとScala.jsを使って高性能なAWS Lambda Functionを迅速に作ろう

現代のクラウドネイティブな開発においてはいわゆるFaaS(Function as a Service)が欠かせない存在となりつつある。AWSではAWS Lambdaとして、Google CloudではCloud Functionsとして提供されるこのサービスは、小さなコード片をマシンのデプロイを行うことな…

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