ClojureでWebアプリケーションをつくるときに、Joda-Timeに依存しないようにする
今日はそんな話を少しだけさせてほしいです。
何故、Joda-Timeに依存してはいけない?
依存していても問題ない、と言えば問題ないです。ですが、JSR-310(Date and Time API)がリリースされたJava 8以降を使っていれば、あえてJoda-Timeを使う必然性はありません。 Java 8がリリースされたのが2014年なので、いい加減Joda-Timeに依存しなくてもいいのではないでしょうか。 何故、今更Joda-Timeの話?
上述の通り、Java 8がリリースされて既に5年が経過しています。Java界隈的にはJava 13, 14あたりに興味津々といったところでしょうか。個人的には、Java 14のRecordsあたりに興味があります(JEP 359: Records (Preview))。 色々工夫してもなんだかんだRingが邪魔になっていたので、遂に依存から外れてくれると思うと清々しい気分です。 clj-timeは使ったらダメなの?
端的に言えば、Java 8以降を使っている、かつ新しいプロジェクトを始めたばかり、であれば一考の余地はあります。後述する通り、ClojureコミュニティにおいてもDate and Time APIを利用する動きはあります。また、clj-timeのREADMEには以下のように書かれています。 If you are using Java 8 or later, consider using the built-in Java Time instead of Joda Time -- and look at clojure.java-time if you want a Clojure wrapper for that, or cljc.java-time for a thin Clojure(Script) wrapper. See Converting from Joda Time to java.time for more details about the similarities and differences between the two libraries.
こちらもDate and Time APIを使うことを考えてくれ、という見解です。
Date and Time API wrapper群雄割拠問題
さて、Joda-Timeを利用しているclj-timeを依存関係から外したのはいいですが、じゃあ次は何を使えばいいんでしょうか。Date and Time APIをラップしたライブラリが既に2,3あるので、何も知らなければ戸惑うでしょう。 ただ、cljc.java-timeやtickを使いたいなと思ったときに、本当に透過的に扱えるライブラリを使うべきかは考慮した方が良いでしょう。根本的にプラットフォームが違う以上、どうしても差異が生まれることがありますし、ライブラリを使うことにこだわって苦労するくらいなら、違うものだと割り切って扱った方がよいこともあるはずです。 まとめ
Date and Time APIを使っていこう