その他
    ホーム技術発信DoRuby仕事で使うScala入門

    仕事で使うScala入門

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    プログラミング言語Scalaは、昨今注目が集まっている「関数型プログラミング」を実際のプロジェクトで実践するのに適した有力なプラットフォームです。本エントリではScalaの概要について紹介します。

    Scalaとは

    スイス連邦工科大学のMartin Odersky教授によって開発されたプログラミング言語です。
    Scala(スカラ)という名前は、言語設計の理念であるスケーラブル(Scalable)という言葉からとられています。

    特徴について箇条書きでいくつか挙げると

    • JVM(Java仮想マシン)で動作し、Javaで書かれたライブラリやクラスを利用することができる
    • 静的型付け+型推論を行いJVM用のclassファイルにコンパイルされる
    • オブジェクト指向と関数型プログラミングの双方をサポートする(マルチパラダイム)
    • Java8で導入されたラムダ式などの高度な機能をを簡潔な文法で使うことができる

    などが挙げられます。

    文法は、基本的にJavaやC++などのスタンダードな文法をベースにしていますが、OCamlやHaskellなどの関数型言語に近い簡潔な記述ができるように工夫がこらされています。
    弊社で主に使われているRubyにも若干似ているため、親しみが持てるひともいるかもしれません。

    本家Webサイト
    http://www.scala-lang.org/

    Scalaの開発体制

    Odersky教授によって開発が始まったScalaですが、現在では教授らが設立したTypesafe社を中心に、 オープンソースソフトウェアとして精力的に開発が続けられています。
    https://github.com/scala/scala

    開発環境の構築

    JDK 1.6以上がインストールされたPCであれば、すぐにインストールして動かすことができます。
    http://www.scala-lang.org/download/

    また、Macを使っていれば、Homebrewで簡単にインストールすることができます。

    しかしなんといってもおすすめは、ScalaをサポートしたIDEをインストールして、その中で開発することです。

    IntelliJ IDEAを使いましょう。フルスペックのUltimate Editionは有償ですが、軽量版のCommunity Editionが無料で使えます。
    https://www.jetbrains.com/idea/

    現在Emacs, Vimを使っているひとは、設定やプラグインによってキーバインドを合わせることができるので問題ありません。私はIdeaVimというVim互換のキーバインドを実現するプラグインを使っています。

    長年Eclipseを使っていてもどうしても手放せない、というひとは Scala IDE for Eclipseというプラグインを入れるとScalaが使えるようになるみたいですよ。
    http://scala-ide.org/

    最初の一歩

    お約束として、Hello Worldを書いてみましょう。Scalaのコードはいろいろな方法で実行することができます。

    • コンパイルなしでスクリプトとして実行する
    • REPL(Read Eval Print Loop)の対話環境で実行する
    • .classファイルにコンパイルしてJVMで直接実行する

    お仕事で使う場合も、対話環境でいろいろ試しながらコンパイル用のソースコードを書き進めるやり方が便利です。

    対話環境でHello World

    コマンドラインから scalaコマンドで対話環境を起動します。 scala> という文字列がプロンプトです。

    
    % scala
    Welcome to Scala version 2.11.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71).
    Type in expressions to have them evaluated.
    Type :help for more information.
    
    scala> println("Hello World!")
    Hello World!
    
    scala> _
    

    println()というのが画面に文字列を出力するメソッドです。正式には Console.println() ですが、デフォルトでimportされているため直接使うことができます。

    スクリプトでHello World

    拡張子 .scala のファイルにコードを書き、 scalaコマンドで実行します。

    
    % cat hello.scala
    println("Hello World!")
    % scala hello.scala
    Hello World!
    

    ソースコードに書いたメソッドがそのまま実行されるので、Rubyなどのスクリプト言語とほぼ同じように書くことができます。

    コンパイルしてHello World

    
    % cat HelloWorld.scala
    object HelloWorld {
      def main(args: Array[String]): Unit = {
        println("Hello World!")
      }
    }
    % scalac HelloWorld.scala
    % ls
    HelloWorld$.class	HelloWorld.class	HelloWorld.scala
    % scala HelloWorld
    Hello World!
    

    これで、ソースコードを書き、コンパイルしてからそれを実行することができました。

    Javaでは public static void main(String args[]) というシグニチャのメソッドを含むクラスを定義しますが、 Scalaのクラスにはstaticメソッド(Rubyでいうクラスメソッド)というものが存在せず、同じようなことをするためにはクラス(class)ではなくオブジェクト(object)というものを定義します。
    Scalaで定義されたobjectも、コンパイルするとJVM用のクラスファイル(拡張子が.class)にコンパイルされます。
    用語が紛らわしいですね。でもすぐに慣れます。

    おわりに

    Scalaという言語がどういうものなのか、その概要を駆け足で説明しました。
    インストールも実行も簡単ですので、是非ためしてみて下さい。