Scalaやったことないけど始めてみたいと思ってる人へのオススメ環境作り
とりあえずScalaをhomebrewとかでインストールすればREPLで実行できるけど、やっぱりIDEとか使った方がやりやすいです。その環境を作るのも結構簡単なのでそれを紹介。僕も始めて2ヶ月ぐらいなので、これからScalaに入門してみたいって人向けの記事です。
Intellij IDEAさえあれば始められるのでやってみてください!
IDE(Intellij IDEA)の設定
- Intellij IDEAをインストールする
- Intellij IDEA起動して起動メニューでConfigure > Plugins > Browse Repositories...
- scalaって入力して
Scala
とSBT
をInstallして再起動
プロジェクトを作る
- 起動メニューでCreate New ProjectでScala > SBTを選択してプロジェクトを作成
- 作成されたプロジェクトが開くけどIntellijがプロジェクトを構成してくれるまで2,3分待つ
- 右下のタスク実行中の途中経過の表示が終わったらsrcディレクトリとかできてこんな画面になる
エントリポイントとなるコード作成
- Javaでいうmain関数となるところ
- src/scala配下にNew > Scala ClassでKindはObjectにしてApplication.scalaを作成する
- 以下のようなコードを書く。
extends App
がポイント - 実行時の引数は
args
で配列形式でとれる
object Application extends App { if (args.length > 0) { println("Hello world" + args(0)) } else { println("Hello world") } }
SBT経由でアプリケーションを実行
- 左下のSBT Consoleを開いてStart SBTの再生ボタンを押す
- 何やらコンソールに色々表示されて入力待ち状態になる
run
と打つと引数なしで実行 。実行時に引数も渡せる
ちょと応用編: grep処理を書く
import scala.io.Source import java.io.File object Application extends App { args.headOption.map { pattern => val file = new File("src/main/scala/Application.scala") val source = Source.fromFile(file) source.getLines() .zipWithIndex .filter(x => x._1.matches(s".*$pattern.*")) .map(x => (x._1.trim, x._2 + 1)) .foreach(x => println(s"${x._2}: ${x._1}")) source.close() } getOrElse { println("usage: run pattern") } }
args.headOption.map
は第1引数があればというような意味。下の方のgetOrElse
がなかった場合の処理- Optionという概念はScalaの特徴的なやつ。便利なことは後々分かってくるはずなので最初はスルーでもOK
source.getLines()
でファイルを1行ずつ読み込む.zipWithIndex
で(1行ごとの文字列, 0始まりのindex)というタプルがとれる- タプルの1番目は
._1
、タプルの2番目は._2
でとれる .filter
でJavaのパターンマッチで引っかかったやつだけを返す.map
でfilterした内容について変換(文字列はトリム、indexは行番号にするために+1)を適用してそれを返す.foreach
は今まで処理した結果を標準出力に表示- これで、
run file
とか実行すればgrep内容が出力されます
まとめ
とりあえずこんな感じでScalaを始められます!
上のgrep処理はApplication.scala
をgrepしてるだけだけど、カレントディレクトリ配下のファイル全てをgrepするとかやってみたりしてるうちにScalaのことが少しずつ分かってくると思います。
それぞれの言葉は分からなくてもとりあえず触ってみると楽しいです。