TumblrPocketさて、弊社ではしばらく前からScalaを試験的に導入してきていまして、ひとまずバッチを書くところからはじめました。なんだかんだでバッチを書くことって結構あるんですよね。実際にやってみると、想定通りの使用感や事前に知っていた問題点の他にも、やはり想像できなかった疑問や問題は出てきたわけです。多くのものは、他言語を基準に考えてしまうが故の問題だろうと思われるものばかりでしたので、むしろあえてレベルの低い部分を恥ずかしながら公開してみようと考えた次第です。やって書き始めるんですか?情報としてはいろいろある分逆に、scalac?activator?Play2?というように、書き始める前の混乱が若干ありました。今回はバッチから始めたこともあり、とりあえずsbt+play.apiを選択しましたが、Webアプリを作るのであればPlayの方をメインにしただろうと思います。なんかあちこち書いてあることが違いませんか?これはバージョンの壁ですね。Scalaについてもsbtについても、ここ最近のバージョンアップで追加されたことが結構あるので、まず公式を参照するのはもちろんのこと、Google検索の範囲を「1年以内」にして調べたりもしていました。ドットシンタックスなんですか?違うんですか?この疑問はわからんでもないですけども、最近の言語としてはよくある記法なので、これ自体は慣れないとしようがないなーと思います。ライブラリはどれが正しいんですか?Javaのライブラリ資産が使えるというのは利点の一つではありますが、やはりScalaライブラリは扱いが楽な場合が多いようなので、まずScala側を探すことにしました。Try-Catchの書き方がわかりませんだいたいこの件は調べると「あーScalaのcaseてそういうことなのね」となるかと思います。caseが幅広すぎてわかりませんScalaではまずとにかくcaseを中心に書いていくくらいの感覚でいいんじゃないかなと考えています。Listに入れるという方法を基本としています。メモリ効率を考えると悩みますが、他言語からの移行のハードルを下げる意図もあります。マッピング先のクラスは作った方がいいんですか?よく例にあるPersonクラスを作っておくとかそういうあれですね。これは設計というか用途の問題だとも思いますし、扱ってきた言語に感覚が左右されるかもしれませんが、とりあえずは、これが必須でないことがScalaの利点のひとつである、というくらいの仮結論にしています。Javaライブラリの返却値が処理しづらい場合がありませんか?単に方法としてというよりは、この場合のベターはなんだろうか?と考えてしまいました。現時点でもまだ結論が出せていません。書くしかないのですかねぇ。非同期処理は必須ですか?これもまず用途の問題だとは思いますが、できるところは非同期にした方が良いだろうと判断しました。これを機に習得した方が、製品の性能にとっても、自分のキャリアパスにとっても、チームにとってもプラスになるでしょうし。Javaに慣れてるんですが、Javaで書いてもいいですか?個人的には、別にいいんじゃないかと考えています。全体がJavaで完結するわけではない世界というのは、ガチガチのJavaな人にとってはなかなか想像できない場合があるかもしれませんし、利点は感じにくいかもしれませんが、潜在的なキャリアパスと、チームの価値向上へのプラスがあると考えています。結局、Scalaはありですか無しですか?ありだと思います。回答にはいくつかの観点があるように感じましたので、これは改めてまとめたいと思います。技術担当取締役を中心に技術者が書いております。プログラミング・サーバー/クラウド技術などについての小ネタから、システム化にまつわるあれこれや、プログラマー教育、そこから発生する様々な考え方などまでご紹介。