Lambdaカクテル

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

Invite link for Scalaわいわいランド

scala

値の検証もコンパイラにやらせよう: Scala 3でRefinement TypesやるにはIronっていうライブラリが良さそう

Scala 3でRefinement Types(篩型)を実現するライブラリIronに入門したので紹介します。最初はRefinedに入門しようとしてたら、Scala 3ではあまり動かなかったのでそのままIronに入門しました。 tl;dr Refinement Typesっていうのを使うと、普段動的にチェッ…

Scala製のドキュメンテーションジェネレータLaikaに入門した

個人的に興味があって触る機会があったので、公式サイトで勉強しながらまとめた。 typelevel.org Laikaとは Laikaを試す Laikaがデフォルトで対応しているフォーマット ExtensionBundle Laikaと副作用 Laikaをsbtプラグインから利用する 応用 Laikaとは Laik…

Scala 3はScala 2の標準ライブラリを使っていたりする

先日Scalaわいわいランド(ScalaのコミュニティDiscordサーバ)で、Scalaを最近勉強しだしたという方から Scala3を使っていて気づいたんですけど、Scala2で記述されたライブラリを呼んでいる部分があることに気づきました という話を聞いた。言われてみれば、S…

Scala3で引数の型によって他の引数を有効化したり無効化したりする

そんなシチュエーションあるんか?と思うけど、ある。 今Chrome Devtools ProtocolをScalaで実装してて、もう動くところまで行ってるんだけど、スクリーンショットを撮影するAPIがこんな感じで定義されている。 chromedevtools.github.io このうちquality引…

JSONの差分を取ってJSON Patchを得るにはdiffsonがおすすめ

こういうツイートを見た。 Scala (or Java) で、jsonのdiffをpatchファイルみたいな感じでわかりやすいテキストで出力してくれるライブラリないかなあ。そしてjacksonに依存してないといいな— Arthur (@Arthur1__) 2024年1月13日 現代のプログラミングではJS…

Scala 3のシンタックスではforループでdoを使うことがある(カッコ付けたければ不要)

こういうツイートを見かけた。 Scala3 って for-yield じゃなくて for-do なの???— りと (@rito_528) 2024年1月8日 言われてみれば、たまにScala 3のコードサンプルでそういうの見たことあるな~と思った。ので調べたメモ。 tl;dr 値を返したいときはyiel…

SN bindgen: CヘッダファイルからScalaの型定義を生成する + ネイティブにtree-sitterを呼び出してみた

ScalaをネイティブバイナリにコンパイルするプロジェクトであるScala Nativeというのがある。 scala-native.org 2023年現在では多くのScalaライブラリがScala Nativeに対応しているため、特に難しい対応をしなくてもネイティブバイナリを得られるようになっ…

Cloudflare WorkersにScala.jsをデプロイした

意外とやったらできたので記事にします。 実際に動いている様子はこちら。 cloudflare-worker-scala-exercise.pages.dev ソースコードはこちらです。 github.com 感想 やること Cloudflare Workersってなによ 目指す構造 Scala.jsを書く project/plugins.sbt…

関数型プログラミング: map結果を引数とのペアにしたいときはStateが便利だったりする(StateTもあるよ)

この記事では、Scala 3と関数型ライブラリであるCatsを時折使いつつ、Stateモナドを利用することでmap結果にうるおいを与えられるという話題を紹介します。 よくある処理: mapしてからペアにする まあまあよくある: メソッドはたまに値返さないことがある ま…

初心者向け: Scala CLIでScalaをはじめよう

この記事は Scala Advent Calendar 2023の19日目の記事です。19日って「あ〜今月が終わる」ってなるちょうど良い塩梅の日付ですね。 qiita.com この記事では、Scalaの総合ツールであるScala CLIを利用する様子を紹介し、Scala CLIでScalaのちょっとしたアプ…

Scalaで一定のコレクションを無限に繰り返すようなストリームを作る

このような、一定の要素を無限に繰り返したリストが欲しいことがある。無限に続くリストは通常のリストでは扱えないため、ストリームを使わなければならない。Scala 2.12まではストリームのためにStreamを使い、2.13以降はLazyListを使うことになっている*1*…

シンプルで使いやすいマイクロHTTPフレームワーク『Cask』を紹介するよ

今日はScalaで動作するマイクロHTTPフレームワークであるCaskを紹介したいと思います。Scalaを見る目が変わると思います。Scalaはけっこう複雑寄りのエンタープライズグレードの超強いライブラリが多いような気がするのですが、今回ご紹介するのはとてもeasy…

AWS Lambda FunctionをScala.jsで書いて爆速Scalaを満喫しよう

この記事は、Scala Advent Calendar 2023の5日目の記事です。 qiita.com 大遅刻してしまいましたが、Scalaは遅延評価できるのでモーマンタイですね。 この記事では、Scalaをクラウドネイティブな環境で使う例の紹介として、ScalaをJavaScriptコードにトラン…

『データ指向プログラミング』読んだ / OOP以前とDOPとの対比と差分などについて

先々月あたりに邦訳が出た『データ指向プログラミング』を読んだ。めちゃくちゃざっくり言うとオブジェクト指向における「データと振舞いの一体化」というドグマを手放させるもので、めちゃくちゃざっくり見るとC言語的な構造化プログラミングの世界に回帰す…

PyPIのScala版、Scaladexにコントリビュートした

Scalaのライブラリを検索・一望・依存性定義をコピペできたりする便利なサイトであるScaladexにコントリビュートした。という話を自慢するだけのエントリです。 Scaladexとは ScaladexとはRubyにおけるrubygems.org、PythonにおけるPyPIの、Scala版である。…

Google CloudのCloud FunctionsでScalaを実行する

仕事でCloud Functionsを触る機会があったのでメモ。この記事はScala Advent Calendar 2023の2日目の記事です。 qiita.com 昨日の記事はこちら。 zenn.dev AWSがLambdaを提供しているのと同じく、Google CloudはCloud Functionsというサービスを提供している…

OpenAIのAudio Transcription APIで遊んだ

最近OpenAIがオーディオ系のAPIをいくつか出していた。といってもけっこう前の話だ。 そんな中、最近OpenAIが色々なサービスを展開している。自分も触って習熟しておいたほうが、面白いアイデアを思い付いたときにすぐにプロダクトを作れて役に立つはずだ。…

Airframe RPCでRxRouterにコンストラクタ引数を渡すにはbindを使う

先日Airframe RPCで遊んだ。 blog.3qe.us が、Routerをインスタンス化するときにコンストラクタ引数を渡せないという問題があった。 import wvlet.airframe.http.netty.Netty import wvlet.airframe.http._ object Server extends App { // Create a Router …

Scalaユーザから見たNext.jsの楽しさ

最近所用でNext.jsを集中的に触る機会があった。一番好きな言語はScalaで、仕事でもプライベートでもよく書いているのだけれど、Next.jsの体験がとても良く、楽しかったのでたくさん試行錯誤したくなった。この体験を良い感じにScalaに還元できたら面白いな…

ScalaのRPCライブラリAirframe RPCを使うとNext.js風に簡単にサーバ=クライアント通信できる

Scalaの便利かつモジュラーなライブラリ群であるAirframeシリーズに収録されているAirframe RPCで遊んでみたところ、とても面白かったので紹介。 wvlet.org wvlet.org あらすじ Airframeとは Airframe RPC Scala(JVM)とScala.jsとでサーバクライアント通信を…

自前でOG:Image生成メカニズムを構成する方法

こういう画像を作る仕組みを作った。 画像を生成したい人は世間にそこそこいるかもしれないし、自分は比較的?簡単な方法でそれを達成した。せっかくなのでやり方をみんなに教えようと思ってこの記事を書いている。 全てのソースコードは以下にOGImagekunと…

ScalaTestでのテスト処理の前後に特定の処理を実行する方法

ScalaのテストフレームワークであるScalaTestでは、他のテストフレームワーク同様に、各テストの前後に特定の処理を挟むためのbefore / afterの仕組みが用意されている。 環境 Scala 3.3.0(2系でも変化はないはず) ScalaTest 3.2.17 各テストの前後に処理を…

関数型言語で登場する高カインド型(Higher-Kinded Types; HKT) と(* -> *) -> *みたいなやつの早わかりメモ

高カインド型(Higher-Kinded Types; HKT)とその表記について勉強したのでメモ。高階関数を知っているレベルからHKTをどう表記するかまでメモする。プログラミング言語として主にScalaを用いているが、Scalaでしか分からない概念は極力排している。知ってる部…

Kyoto.js 20で『ブログ内引用グラフを自作して引用一覧を作った話』を発表しました #kyotojs

Kyoto.js 20で掲題の通りの発表をLTとしてやらせてもらいました。資料は以下です。 www.3qe.us kyotojs.connpass.com 動機 僕はここ最近Scala.jsというAltJSテクノロジーを追いかけているのですが、ちょうどKyoto.jsがあるという情報を聞き付け、ここ最近の…

Scalaで文字列から数値を得るには.toIntOptionがオススメ

Scala 2.13以降では、文字列型Stringから各種の数値を得るためのメソッドが標準ライブラリに用意されており、これを使うことで簡単に文字列から数値を得られるようになっている。parseIntやtoIntと違ってエラーを起こさないので便利。 //> using scala 2.13.…

刮目せよ!! 2023年秋、TS連携もファイルサイズもUIもイケるようになった最近のScala.js事情の紹介

最近Scala.jsの話をすると結構な人がRTしてくれる。TypeScriptの他にAltJSには今どんなのがあるのかな、という話に引用RTでScala.js今アツいですよという話をしたら結構ウケた。世間的にはTypeScript alternativeに興味がある人も多いようだ。一方、ネットに…

RSSフィードをDiscordに流せるツール『rss2discord』のご紹介

RSSをDiscordに流したいって思ったこと、ありますよね?私もそうでした。しかしながら調べてみると単体でRSS配信を行うツールはないようで、なんでもできる多機能botがそのうちの機能の1つとしてRSS機能を提供していたりする。けどRSSを配信するためだけに別…

Scalaわいわいランドに参加するボタンをブログにつけました

プログラミング言語Scalaの日本語コミュニティとして、ScalaわいわいランドというDiscordサーバを運営している。 メンバーは順調に増えている一方、これから学ぼうという人にリーチしてほしいので定期的にTwitterで宣伝しているのだけれど、どちらかといえば…

ScalaのCatsにifMという便利なやつがある

ScalaのCatsにifMという便利なやつがある。IO[Boolean]に対して条件分岐を適用して、trueの場合とfalseの場合とで異なるIOを返すというもの。別にIOでなくとも良くて、Monadなどの仲間であればifMは定義されている。例えばOption[Boolean]に対してもifMが使…

Scalaのfs2でIOの実行結果をストリームに戻すにはevalMapを使う

プロのfs2使いにとっては常識なんだろうけど、常識がないからこうして勉強している。 fs2: 3.9.2 import cats.effect.IO import fs2.Stream val heavyProcess: String => IO[Int] = ??? // すごい時間がかかって返ってくる val stream = Stream("The answer …

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