Play Framework 2.9.0 に送ったPull Request

そろそろPlay Framework 2.9.0が出そうですね。ということで自分の送ったPull Requestをまとめてみました。 大きいところだとTwirlのScala 3対応ですね。いい感じにエラーメッセージ出すのにdottyとかsbtまで調べることになって沼でしたがたぶんなんとかなり…

ハロウィンかぼちゃを育てる

ご近所さんにハロウィン用のかぼちゃを育てている人がいて、毎年ハロウィンになると家の前にかぼちゃで作ったジャック・オー・ランタンを並べている。真似してみた。 ポイント 育てる難易度はあまり高くない。食用かぼちゃと違ってハロウィン用の観賞用かぼ…

ScalaMatsuri 2022でCats Effect 3の話をしました

speakerdeck.com 純粋関数型スタイルのプログラミングは私はあまりやって来なかったんですが、たまには違ったことをやってみようかなと思って発表してみました。年末年始にTypelevelの技術スタックをいろいろ見ててhttp4sとかさわってみてたりしたんですが、…

Play Frameworkの開発チームに入れてもらいました

Play FrameworkがLightbendの手から離れる という発表が昨年の10月にあったんですが、それをきっかけにやりとりして Play FrameworkのGitHub Team に入れてもらいました。 しばらく待ちの状態だったんですが、先週くらいから動き初めたところです。とりあえ…

最近のタグジャンプ事情を調べた

テキストエディタのタグジャンプ機能、最近はどんな感じなのかなあと思って調べていました。 結論としては10年前とあまり変わっていないみたい。というか新しいツールが出てきていなくて、進化が止まっている印象。 ctags exuberant-ctagsは2009年のリリース…

Emacs + Metals + lsp-mode でScalaを書く

最近重たい処理走らせてる時とかにIntelliJが遅くてつらかったのでEmacsでもある程度コード読んだり書けたり出来るようにしました。 最近はLSPが人気あるようでEmacsでもlsp-modeというのが結構使われているみたい。Scalaの場合はLSPとしてMetalsを使うこと…

EmacsをTerminalとして使う

emacs-libvterm っていうのを見つけたのだけどこれがすごく良いので紹介します。 emacs-libvterm https://github.com/akermu/emacs-libvterm EmacsにはTerminal系の機能としてterm-modeやeshellなどがあるんですが、遅かったり、クセが強かったりで使えてま…

TypeScriptでgRPCしたいがいろいろあってよくわからない

用語 grpc/grpc-node: Node.js向けの公式プロジェクト grpc-tools: grpc/grpc-node が提供しているパッケージ grpc_tools_node_protoc: grpc-toolsに含まれるコマンド agreatfool/grpc_tools_node_protoc_ts: grpc_tools_node_protocで吐いたコードに .d.ts …

個人用のscala-stewardを動かす

scala-stewardを使い始めました。 ちょっと使うだけならscala-stewardのrepos.mdにプルリクエスト送るだけで良くて便利なんですが、個人の雑多なプロジェクト全てにそれをやるのはちょっと気が引けるので自前でも動かせるようにしました。 今だとGitHub Acti…

sbtn 便利かも

sbt 1.4.0 から sbtn という機能が追加されました。 https://eed3si9n.com/sbt-1.4.0-beta Native thin client sbt 1.4.0 adds an official native thin client called sbtn that supports all tasks. > https://github.com/sbt/sbtn-dist/releases/tag/v1.4…

Modules should be fast and side-effect free と Guice は言っているがPlay Frameworkはそうなってはいない話

github.com Modules should be fast and side-effect free Modules should be fast and side-effect free(モジュールは速くて副作用なしであるべき)と Guice の Wiki にはあります。 これは Guice モジュールの中で DB に接続したりスレッド開始したりする…

PlayのCache APIでMemcachedやRedisの代わりにRDBを使う

Play frameworkはキャッシュのためのAPIを play.api.cahe というパッケージで提供しています。play.api.cache はそのバックエンドとして、CaffineやEhcacheが選択でき、またサードバーティのライブラリを使えばMemcached, Redisなどをバックエンドにすること…

いつもJavaConvertersでうまくいくとは限らない

ScalaとJavaのコレクションを相互に変換するには scala.collection.JavaConverters が便利です。例えばJavaのコレクションに .asScala をつければ、JavaのコレクションをラップしたScalaのコレクションが作られます。ただし、いつも .asScala で済むとは限り…

JasperReportsでPDFを作成する

JavaでPDFを作成するJasperReportsの使い方について解説します。少し古いライブラリですが企業がバックについてますし、継続的にメンテナンスはされているようです。 JasperReportでPDFを作成するには、 JasperReport Studioでテンプレートを作成する Javaプ…

例外をcase classとして定義してはいけない

Scalaで独自の例外を定義する場合 class MyException(message: String) extends RuntimeException(message) と case class MyException(message: String) extends RuntimeException(message) のどちらが良いでしょうか。タイトルで言っちゃってますが、まず…

AirframeでPlayを動かそうとした

taroleoさんが開発しているAirframeが最近Twitterのタイムラインで話題になっていることが多いので、そろそろ触ってみようかと思い、とりあえずPlay frameworkのDIコンテナをGuiceからAirframeに置き換えるというのをやって見ました。結果は失敗に終わったん…

Homebrewを使うのをやめた

プログラムのお仕事してるといろんな言語やツールをインストールするのが大変ですが、パッケージ管理ツールとかを使うと今度はそのパッケージ管理ツール由来のトラブルに巻き込まれたりするんですよね。それが面倒でHomebrewとかなんとかenvとか使わなくなっ…

play-jsonでReads/Writes/Formatを定義しなくてもよくする

play-jsonはReads/Writes/Formatを定義するのが面倒とよく言われるので、shapelessの練習も兼ねて作ってみました。 https://github.com/tototoshi/play-json-generic scala> import play.api.libs.json._ import play.api.libs.json._ scala> case class Per…

Akka Streamをいい感じに停止させる

Akka Streamを使ったサーバーを書いていて、サーバーの終了処理を行う時にstreamを停止させる必要が出てきました。どうしたら良いでしょうか。 いきなり ActorSystem#terminate とりあえずAkka Stream自体の終了のさせ方。これは無理やり ActorSystem#termin…

slick2とslick3を同居させる

slick2からslick3への移行はAPIが根本的に変わったためにめちゃくちゃ大変です。blocking-slick を使った方法なども知られていますが、ちょっと使って良いものかは悩みます。 blocking-slickを使っても使わなくてもslick2からslick3への書き換えを一度にやる…

circeについて

混迷極まるScalaのJsonライブラリ事情ですが、最近はcirceというライブラリもメジャーになってきました。ただ個人的にはあまり仕事では採用する気にはならないライブラリです。 catsに依存している circeの売りとして、cats以外のライブラリに依存していない…

Scalaのcase classに副作用のある振る舞いを持たせる時のパターン

不変オブジェクトを使ったプログラムを書く時に便利なcase classですが、case classのメリットを生かしつつ副作用を扱うためにはどのような書き方をするのが良いでしょうか。具体的には外部APIやデータベースへのアクセスをcase classを使ってどう実装するの…

typesafe configの設定パスをscalaのコードで表現する

ScalaMatsuriの感想ブログです ScalaMatsuriでscala.metaの話を2つ聞いて面白そうと思ったので私もやってみました。 typesafe configをscala.metaとscalameta/paradiseのmacro annotationで設定パスを文字列ではなくscalaのコードで表現できるようにしたやつ…

Scalaで#map系メソッドで副作用を起こすとバグるやつ

遅延評価と副作用は相性悪いよねって話です。 Scalaでforeachではなくmapの中で副作用を起こすとたまに評価タイミングによるわかりづらいバグに遭遇することがあります。 次のコードはMap#mapValuesの中でscalikejdbcで書き込みを行おうとするコードです。 …

for式の中のEitherでifを使いたい

scala 2.12ではJava8対応の変更が多く、派手な変更は多くはありませんでした。そんな中でEitherがright-biasedになったのは割とキャッチーなのではないでしょうか。Eitherには今までflatMapなどのメソッドがなかったので、for式の中で使うときなど、いったん…

Scala関西 Summit 2016に参加しました

sbt再入門ということで、sbtの主にKeyとScopeについてデモを中心に発表させていただきました。 デモを中心にするのは自分としては挑戦のつもりだったけれど、やっぱり難しくて心残りなところもありました。 とはいえ発表中に実際にsbtを触りつつ話を聞いてく…

giter8 & sbt new

最近はactivator newを使っている人が多いんだと思いますが、5年くらい前?はgiter8というツールが使われていました。 giter8は一時期Typesafe Stackにも含まれるほどだったんですが、なぜか見捨てられてしまいます。 その後皆さんご存知の通りactivator new…

7つのクラスローダー 7つの世界

Playを触っていると謎のClassNotFoundExceptionが発生することがあります。 もしかしてそれはDEVモードだけで起きてはいないでしょうか? 先日、開発中のPlayアプリケーションで、ある依存ライブラリからClassNotFoundExceptionが発生するという現象にあたり…

インターフェースで副作用を分離する

techlife.cookpad.com この記事、わざわざgemを作ったりしていて、まあそのgem自体は便利そうだからいいと思うんですが、時刻以外の場合はどういうアプローチをしてるんでしょうか。そのたびにgemを作るんでしょうか。 そんなに悩まなくとも、オブジェクト指…

自宅仕事環境(2016/05)

PC MacBook Pro (Early 2013) 主にScalaをコンパイルするのに使用する。 キーボード PFU Happy Hacking Keyboard Professional2 Type-S 白/無刻印(英語配列)出版社/メーカー: PFUメディア: エレクトロニクス クリック: 21回この商品を含むブログ (3件) を…