play-wsのstandalone版に自動書き換えするscalafixのruleを書いた


https://github.com/xuwei-k/play-ws-scalafix

github.com


歴史とともに、簡単に説明すると

  • play-wsとはhttp clientライブラリである
  • play 2.5くらいまで?は、playframework本体に依存している、という、playとともに少し使うだけなら便利と言えなくもないけど、play関係ないところで使ってしまうと、http clientライブラリ使いたいだけなのにweb frameworkのそれなりな量の依存が全部ついてくる、というだいぶ微妙なデメリットがあった
  • よってplay2.6あたりから、play本体とgithubリポジトリも分離され、standalone版(play本体に依存しない版)が作られた
  • 一方、今までのplay本体に依存しているstandaloneではない方は、standaloneのラッパーになった(2.5以前と同様な使い方で使える)
  • あと内部のasync-http-clientやnettyなどもsbt assemblyでshadingされて、依存が衝突しないようになど、色々改善されてる
  • 詳細は公式ドキュメント読もう https://github.com/playframework/playframework/blob/98eed7c34ef33136cb7/documentation/manual/releases/release26/migration26/WSMigration26.md https://github.com/playframework/play-ws

  • (standaloneではない方の互換を優先するため)standalone版は、class名が変わっている

  • 上記のような感じなので、べつに"standaloneではない方"を積極的に使い続けるメリットはそんなにない(?)ので、(standaloneではない方は現状は非推奨ではないので)べつにすごく急ぐ必要もないが、play本体の依存がついてこないメリットがあるので、可能ならstandalone版に移行したほうがいい、はず
  • とはいえ、大半は単純なclass名の置換だったりするが、大量に使われていると書き換えだるい
  • scalafixのrule書いてpublishした(イマココ

という感じです。使い方はREADME読んでください。

最初にリリースした時点で対応しているのは、tweetした画像で全てですが

  • Client, Request, Responseのそれぞれのclass名の置換
  • jsonxmlとして取得するメソッドは分離されて、型クラス使うようになっているので、それの書き換え

という程度です。他にもWritableのimportやその他色々があるので、まだ全然完璧でもない(というか完璧を目指すのは無理?)、ですが https://github.com/xuwei-k/play-ws-scalafix/issues/1 単にテキスト置換するよりは、多少楽にマイグレーションできるのではないか?と思います。

scalafix便利最高ですね。 scalafix慣れてきたので、これの本体部分は実質数時間程度で作成できるようになってきました(๑•̀ㅂ•́)و✧