41
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ScalazよりもCatsを使いましょう

Last updated at Posted at 2019-04-29

問題

scalaで関数型プログラミングを調べると真っ先に出てくるライブラリとしてScalazCatsがあるが、これらの違いとどちらを使えばいいのかがわからない。
またこれらは混在させていいのだろうか?

回答

catsを使いましょう(理由は以下で解説しています)。

混在させるとお互いのライブラリ内の同名のクラスでも(例: scalaz版Monadcats版Monad)型が非互換であるため混乱が起きやすいです。
なるべくcatsのみを使い、やむなく混在せざるを得ない場合はcats側に寄せることをおすすめします。

またargonaut-io/argonautcirce/circeなどほぼ同じ目的のライブラリでScalaz版とCats版が存在するケースがありますが、上記の理由でなるべくCats版を使うことをおすすめします。

解説

Scalaz

Scalazはscala上で関数型プログラミングをすることを支援するライブラリです。
2008/11/30にリポジトリが作られました。
各種モナドや便利な型クラスを導入してくれます1

Cats

Catsもまたscala上で関数型プログラミングをすることを支援するライブラリです。
2015/01/25にリポジトリが作られました。
こちらもScalazとほぼ同じ概念を導入してくれます。

Catsが生まれた背景(ScalazのCoC問題)

この2つは非常によく似ています。
以下のscaladocを見ればわかりますがクラスでも同名同機能のものや異名同機能のものが多数あります。

ではなぜCatsが生まれたかというと、Scalazで過去ある騒乱があったためです。

OSSコミュニティがある日突然壊れたときにどうすればいいか - xuwei-k

こちらが非常に詳しいのですが2、簡単に説明すると

  1. scalazの初期からcontributeしている開発者の一人Tony Morris(@dibblego)が粗暴な振る舞いをしていた3
  2. 我慢できなくなった他のscalaz開発者が彼をCoC(Code of Conducts)を使ってscalaz開発から追い出そうとした
  3. 数ヶ月の論争の末、クーデターは失敗したがコミュニティに大きなダメージを残しScalazの評判も低下した
  4. 上に嫌気が差した?人4がscalaz代替であるcatsを作成した

という流れが2014~2015年ごろにあったようです。

Catsを使うべき理由

1. CatsはScalazを元にいくつかの点で改善されている

型クラスの名前やクラスの継承関係などを見ればわかりますが、互換性や歴史的経緯によりScalazでは修正したいけどできない点をCatsは後発である利点を生かして修正しています。

pointメソッドではなくpureメソッドへ統一されていることなどがわかりやすいと思います。

2. Catsにリソース(物・ドキュメント・人)が流れている

CatsはScalazと比べて後発ですが、Maven Repositoryで見るとすでにscalaz-coreよりもcats-coreの方が利用ライブラリが多い状態です。

GithubのStarの点でもCatsは大幅に後発であるにもかかわらずScalazの3/4のStarを獲得しています。
https://star-history.t9t.io/#scalaz/scalaz&typelevel/cats

また、以下のGoogleトレンドから見ても2017/04頃を境にScalazとCatsの人気が入れ替わっていることがわかります。

scala scalaz, scala cats - 調べる - Google トレンド

あくまで個人的感覚ですがここ2年以内に作られたライブラリはscalazよりcatsに依存しているケースが多いです。

3. Scalaコンパイラ開発元の(実質的な)公式サポートライブラリからscalazが外れた

scalaの開発元(lightbend)はscala/community-buildsというリポジトリでscalaの主要なライブラリとscalaのnightly-buildとの互換性をチェックしています。

そこにはScalazもCatsも含まれていたのですが、先日scalazが取り除かれました。

それに対する意見や説明などは次が詳しいです。

建前と本音が入り混じり分かりづらいですが、結局のところ件のCoC問題が尾を引いているのだと思います。

  1. 独習 Scalaz — 独習 Scalazが詳しいです

  2. というか当事者の記録ですね

  3. 怖いScalaの怖い発言の例がすべて件の人だったり、twitter覗くと「Scalaを書かなくていいとはなんと素晴らしい日なんだろう!」と発言していたり。もっとも後者はコミュニティを追い出された後ですが。

  4. scalazでクーデターを起こしていた人とは別の人らしいです

41
24
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?