Scalaことはじめ

# こんな方へ最適な記事です
- 広く様々な言語を操ってきた~~器用貧乏~~フルタックエンジニアさんで、Scalaをこれから勉強してみようかなと思っている方
- オブジェクト指向言語と関数型言語の特徴をざっくりでも分かっている方
    - この2つが ( ﾟДﾟ)ﾎﾟｶｰﾝ な方はバファ○ンが必要になるかもしれません

かく言う私もこの一味ですので、一緒に理解を深めていけたら幸いです。

# Scalaってなに
考えても仕方ないので、まずはWikipedia先生にでも聞いてみましょうか。
https://ja.wikipedia.org/wiki/Scala
> Scala（スカラ）はオブジェクト指向言語と関数型言語の特徴を統合したマルチパラダイムのプログラミング言語である。

私はここで「マルチパラダイムのプログラミング言語」ってなに、と思って早速立ち止まってしまいました。ぼんやりとは分かるんですけど、人にちゃんと説明しろと言われると... :sweat_smile: 
てことで色々調べてみました。その中で自分が一番腹落ちできた訳は、
**マルチパラダイムのプログラミング言語 = 複数の考え方を持ったプログラミング言語**
パラダイムとは「ものの見方や考え方、枠組み」のことだそう。左脳より右脳がよく働く私としてはIT Mediaの記事が一番すんなりパラダイムを受け入れることができました。スッキリ。

- 参考サイト: [この絵、何に見えますか？――あなたの“思い込み”をテストする](http://www.itmedia.co.jp/bizid/articles/0905/29/news009.html)

複数の考え方を持った言語だなんて、とってもステキではないですか！オラ、ワクワクしてきたぞ！

# Scalaってどんな発音？
発音なんてどうでもいいだろ！っていう人もいると思うのですが、私は意外と気にするタチです。
たとえば「橋」「端」「箸」って同じ「はし」ですが、発音や話の前後関係から**推測して**みんな理解してると思うんです。てことは意外と曖昧。発音が違うと、認識の齟齬が発生しやすいんですよね。人が思っていることって想像以上にバラバラ。「あの人はこう思っているはず」っていう思い込みってこわいわよね～パラダイムパラダイム～。(くわばらくわばら～的発音で)
...話が反れましたが、幸いなことに先述のWikipediaに正しいScalaの発音が分かるYoutube動画がリンクされていました。正しい発音は知ってて損はしないですし、聴いてみましょう。

- [SF Scala: Martin Odersky, Scala -- the Simple Parts](https://www.youtube.com/watch?v=ecekSCX3B4Q)

...どうでしょう？私の耳には「カ」にアクセントが付いているように聞こえました！そして「アムラー」みたいな最後を延ばす発音でもなかったですね。カタカナで表現するならば
**「スカァラ」**
ですかねぇ。
※社内やチーム内でのローカル発音があれば、それに従ったほうが脳(CPU)の使用率は上がらなくて良いかも... :smirk: 

# 開発環境を整える
やっと本題に入った感があります。早速ですが公式のGetting Startedへアクセスしてみましょう。
https://docs.scala-lang.org/getting-started.html

> There are two main ways people prefer to work in Scala.
1. Using an IDE.
2. Using the command line.
>> Scalaでプログラミングする際に好まれる方法は主に2つあります。
1. IDE(統合開発環境)を使う。
2. コマンドラインを使う。

意訳してますがニュアンス命です。さあ、どちらを使って勉強しましょうか～？
なんとなくここって大事な分岐点な気がするのです。公式さんの「recommended for beginners」の言葉に素直に従うのであれば、１のIDE、IntelliJになります。ただ、IntelliJの人となりが不明なのでちょっと調べてみました。(慎重派)
### [IntelliJ](https://ja.wikipedia.org/wiki/IntelliJ_IDEA)とは？
- 正式名称: IntelliJ IDEA(インテリジェイ アイディア)
- 無償版のCE(Community Edition)と有償版のUE(Ultimate Edition)がある
    - [CEとUEの違い(公式サイト)](http://www.jetbrains.com/idea/features/editions_comparison_matrix.html)

IntelliJを提供するJetBrainsの日本代理店である[Samuraismさんのサイト](https://samuraism.com/jetbrains/intellij-idea/quickstart/basics-and-installation)によると、Webアプリの開発をしたい人(=私)であればUEにするべきだそう。とは言え個人的に勉強したいフェーズの現時点での購入は非現実的であるため、今回はひとまずUEをインストールし、30日間無償試用としました。
個人的には最近Visual Studio Codeがお気に入りなので、IntelliJの無償試用が終わったらコマンドラインの使用にもチャンレジしてみたいです。

- コマンドライン×Visual Studio Codeのセットアップ参考サイト: [Scalaをはじめる](https://qiita.com/satoshi_noda/items/687f364adc8cf72a9ee6)

気持ちも固まったところで、Scalaのダウンロードページを見て行きましょう
https://www.scala-lang.org/download/
## 1. Java 8 JDKがインストールされているか確認する
> Make sure you have version 1.8.

```console:MacOS(High-Sierra)
terraphic@macbook-pro ~ $ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
```
MacはOK

```console:Windows10
C:\Users\terraphic>java -version
'java' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
```

ひぃ！入ってなかった！PC買い替え直後とはいえ、私とjavaの距離が遠いことがここで露呈。お恥ずかしい。

## 2. Java 8 JDKをインストールする
ちなみにJDKは"Java Development Kit"の略です。JDKのSE(Standard Edition)をインストールしましょう。2018年7月現在、Java 10 JDKとJava 8 JDKが主流ですが、Scala公式さんが8と指定しているので8をインストールしましょう。
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2018年7月現在、`8u181`がダウンロードできると思います。
インストール後は忘れずにbinまでのPATHも通しておきましょう～。

※参考※ Oracleさんのダウンロードサイトでのアップデート提供期限にご注意ください。
http://www.oracle.com/technetwork/jp/java/javase/overview/index.html
> オラクルは2019年1月以降、Java SE 8の公開されたダウンロードサイトでのアップデートの提供を終了します。 バグの修正やセキュリティ修正などのメンテナンスされたJava SE 8や、以前のバージョンが引き続き必要な場合、Oracle Java SE Advanced, Oracle Java SE Advanced Desktop, またはOracle Java SE Suiteでの長期サポートにおいて入手が可能となります。

## 3. Scala IDE "IntelliJ"をインストールする
Jet BrainsサイトからUltimateをダウンロードしてインストールしましょう
http://www.jetbrains.com/idea/download/index.html

インストールについて特筆するべきことは特にないですが、初回起動時に私は以下プラグインをインストールしました。

- Default plugins 全て
- Featured plugins
    - Scala
    - Live Edit Tool
    - IdeaVim
    - NodeJS

ご参考: [IntelliJ pluginインストール方法詳細](https://www.jetbrains.com/help/idea/installing-updating-and-uninstalling-repository-plugins.html)


# やはし最初は"Hello World!"
[Getting Started with Scala in IntelliJ](https://docs.scala-lang.org/getting-started-intellij-track/getting-started-with-scala-in-intellij.html)の「Creating the Project」を見ながら"Hello World!"
画像が不鮮明で申し訳ないですが、UIの雰囲気だけでも分かっていただければと思います。(一身上の都合でMacキャプチャ)

Project作成時、Scala SDKダウンロード部分が公式の説明と若干異なっていました。
![Project作成](https://qiita-image-store.s3.amazonaws.com/0/224579/5aa7ade0-4ac9-4cb5-4dc4-927d96fa9b22.gif)

Object作成はすんなりいけました。ハロー、ワールド。
![Object作成](https://qiita-image-store.s3.amazonaws.com/0/224579/98f9447f-7c5c-9e53-77a8-78bac6f1f01f.gif)




# お役立ちリンク
- [日本語版Scala 概要](https://docs.scala-lang.org/ja/overviews/)
- [日本語版Scala チートシート](https://docs.scala-lang.org/ja/cheatsheets/)
- [Scala コーディング規約](https://docs.scala-lang.org/style/index.html)
- [IntelliJ IDEA キーボードショートカットコマンド集](https://www.jetbrains.com/help/idea/mastering-keyboard-shortcuts.html)

# おわりに (感想)
ちょっと前...と思っていたらずいぶん前（光陰矢の如し）、TwitterがRuby on RailsからScala(and Java)へ移行するニュースを聞き、その当時から気になっていたScala。ご縁があってまたScalaの名前を聞く機会があり、興味が沸いたので勉強してみることにしました。
今回はGetting Started部分のみの記事となりましたが、今後は[Next Step]()や[Tutorial](https://www.scala-exercises.org/scala_tutorial/terms_and_types)、[機能紹介ツアー](https://docs.scala-lang.org/tour/tour-of-scala.html)に挑戦し、理解を深めていきます。
最後に、たくさんの参考サイトに感謝いたします。