Scalaを導入して1年が経ちました

Scalaを導入して1年が経ちました


お久しぶりです。

キャリアDiv. マーケティング企画統括部 データアナリティクス部 マーケティングテクノロジーグループのよしだといいます。

役割としてはデータエンジニアですが、フロントエンドからクラウドでの環境構築まで幅広く手がけています。

この記事はインテリジェンス Advent Calendar 2016の12/4の記事です。

去年のAdvent Calenderで、Scalaを導入した記事(前編, 後編)を書きましたので、その後の1年間を振り返ってみたいと思います。

社内勉強会について

社内勉強会は、現在も引き続き週に1回業務時間の内1時間を使って開催しています。

チームのメンバーも増え、Apache Sparkを使った処理を書く機会も増えることが予想されました。

そこで、新たにドワンゴさんが公開していらっしゃるScala研修用テキストを用いて、
REPLを使いつつ、Javaを知らないメンバーもいるので補足をしながら進めています。

Scalaのコードをメインで書くことが少ないメンバーもいますが、Sparkの書籍にはScalaが出てくることが多いので、
コードが読めないと内容を理解することが難しいので、そういったメンバーにも参加してもらっています。

コードや開発を取り巻く環境の整備や改善について

コードのリファクタリングとアップデート

導入から1年が経つとやはり初期の頃に書いたコードが見づらかったり、理解が少ないためScalaの機能を生かせていないコードだなと感じるようになりました。
初めからテストコードも併せて書いていくことを決めたため、安心してリファクタリングをすることができました。
リファクタリング自体も一気にやるのではなく、少しづつメインラインの開発に影響でない場所を小さいPull Requestで行うことで、ちょっと気になったらとか気分転換にやってみるといったことが出来るようにしました。
小さい単位のPull Requestであれば、レビューする方も疲弊することなく続けることができるのでこの方針は継続してやっていこうと思います。

ライブラリのバージョンをなるべく新しいものを維持していく方針でいましたが、Scalazのバージョンアップについていく際に、一部非互換の変更が入った箇所が広範囲に影響してしまったため、Scalazのバージョンアップを一旦断念しないといけないこともありました。
現在、断念したバージョンアップを再度上げるための準備を進めているところです。

特に、外部のAPIを利用してデータを取得する必要があるものの一部にSOAPが使われていたので、scalaxb + dispatchを利用していますが、出来ればdispatchを止めて別のライブラリにしようと検証している最中です。

去年の記事で上記のように紹介したdispatchをやめて新しいライブラリを使用する件についてですが、こちらについてはSkinny frameworkが用意しているSkinny’s HTTP Clientを利用することで対応いたしました。
これは、scalaxbが用意しているCakeパターンのおかげで最小限の変更で切り替えることができました。

バッチ処理も他のWebアプリから呼びさせるように、Akka httpでのAPIエンドポイントを用意したいと考えているので、
Akkaについても勉強や検証が必要になっていると考えています。
Akkaについては、Akka Streamsはじめとしたエコシステムが整いつつあるので、とても楽しみです。

開発やCIを行う環境としてのDocker

バッチ処理のテストを行う環境として、Dockerを利用するようになりました。

javaのイメージを基にイメージを作成し、MySQLやRedisを利用したテストを実施するために、docker-composeを使ってDockerでテストが完結できるようにしました。
そのおかげで、今までモックやH2 Databaseなどで代替してたテストも実際にクエリなどを発行して確認できるようになって、検証や変更に対応しやすくなりました。

さらに、sbt-native-packagerを利用していたので、そのままテストが終わったものについては、dokcerで動かせるようにしました。

現在、dockerのサーバを利用してバッチ処理を柔軟に実行できるような環境を構築中です。

今後について

継続してScalaを使えるチームとして運用していくためには、勉強会の継続が必要だと感じていますが、
やはり私個人だけでは難しいので、外部の識者の知見を得たいとも考えています。

また、ScalaやSparkを使った開発をよりスケールアップしていきたいので、一緒にやっていきたいメンバーを増やしていければと思っています。