LoginSignup
4
4

More than 3 years have passed since last update.

[入門]Scalaで「Hello World!」してみた

Last updated at Posted at 2018-10-20

環境構築

DockerでScala環境を作りました。バージョンは気にしていないです。
scriptsディレクトリをマウントしてローカルから編集できるようにしています。

├── Dockerfile
├── docker-compose.yml
└── scripts <空のディレクトリ>
Dockerfile
FROM centos:7

# JVM
RUN yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.144-0.b01.el7_4.x86_64
ENV PATH $PATH:$JAVA_HOME/bin
ENV CLASSPATH .:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar

# Scala
WORKDIR /usr/local/lib
RUN yum -y install wget
RUN wget http://downloads.typesafe.com/scala/2.12.6/scala-2.12.6.tgz
RUN tar zxvf scala-2.12.6.tgz
RUN ln -s scala-2.12.6 scala

ENV SCALA_HOME=/usr/local/lib/scala
ENV PATH $PATH:$SCALA_HOME/bin

# sbt
RUN curl https://bintray.com/sbt/rpm/rpm | tee /etc/yum.repos.d/bintray-sbt-rpm.repo
RUN yum -y install sbt
RUN sbt

RUN mkdir -p /opt/scala
WORKDIR /opt/scala

CMD ["/bin/bash"]
docker-compose.yml
scala_sbt:
  container_name: scala_sbt
  build: .
  volumes:
    - ./scripts:/opt/scala
  tty: true

コンテナを作成して起動します。結構時間かかります。

docker-compose up -d

起動したコンテナに入ります。

docker-compose exec scala_sbt bash

もしくは

docker exec -it scala_sbt bash

scalaのREPL(対話型インタープリター)が起動できるか試してみます。

scalaと打って、以下のように出ればOKです。

Welcome to Scala 2.12.6 (OpenJDK 64-Bit Server VM, Java 1.8.0_181).
Type in expressions for evaluation. Or try :help.

scala>

Hello Worldプロジェクトの作成

まず、helloworldプロジェクトを作成します。

cd scripts
mkdir helloworld
cd helloworld

build.sbtを作成します。

build.sbt
name := "hello-world"

version := "1.0"

scalaVersion := "2.12.6"

sbtの標準的なディレクトリ構成の一部を作成します。

├── build.sbt
├── project
│   ├── build.properties
│   └── target
├── src
│   ├── main
│   │   ├── resources
│   │   └── scala
│   └── test
│       ├── resources
│       └── scala
└── target

今回はsrc以下のみ作成します。

mkdir -p src/{main,test}/{resources,scala}

最後にsrc/main/scala/HelloWorld.scalaを作成します。

HelloWorld.scala
object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello World!")
  }
}

ここまでで、ディレクトリ構成は以下のようになっています。

helloworld
├── build.sbt
└── src
    ├── main
    │   ├── resources
    │   └── scala
    │       └──HelloWorld.scala
    └── test
        ├── resources
        └── scala

実行

sbt run

Hello World!が出ればOKです。初回は少し時間かかります。

詰まった箇所

docker-compose

docker-composeでtty: trueとしていないと、コンテナが起動しない。
詳しくはこちら

main関数

argsの部分を省略して、以下のようにしてsbt runしたらエラー。

HelloWorld.scala
object HelloWorld {
  def main(): Unit = {
    println("Hello World!")
  }
}
[error] java.lang.RuntimeException: No main class detected.
[error]   at scala.sys.package$.error(package.scala:26)
[error] (Compile / bgRun) No main class detected.

また、Unitの部分は省略できるようです。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4