Help us understand the problem. What is going on with this article?

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

環境構築

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の部分は省略できるようです。

suaaa7
最近勉強している内容: Python, Kubernetes
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした