7言語に同時に入門する。

入門するのは以下の言語！

- Nim
- Elixir
- Go
- Lua
- Python
- Scala
- Dart


今回は環境構築してHello Worldするところまでです。

では早速環境構築していきます。

ちなみに、今回インストールするマシンはWindows機(Surface)となっております。
## 環境構築編
### Nim

[https://trap.jp/post/452/](https://trap.jp/post/452/)
ここを参考にしつつ進めていきます。

Nimのインストールページ（windows用）

https://nim-lang.org/install_windows.html

NimはC言語に一回変換してから実行形式にするトランスパイラ的なやつなのでC言語のコンパイラが必要です。

公式ページでMingWというのがおすすめされてたので今回はこれを入れます。
上記のページの下の方にNotes about compiler dependenciesという部分があるのでそこにあるリンクからDLしました。

7zipとかで解凍して出てきたファイルを今回はC:devに入れます。
そして環境変数に追加。環境変数はコントロール パネル>システムとセキュリティ>システム>システムの詳細設定>環境変数でいじれます。
システム環境変数のPathのところに追加します。
今解凍したMingWの中のbinの階層をしていします。今回だとC:\dev\mingw64\binになります。

そのあとPowerShellで

```powershell
gcc -v
```
で動作確認します。
なんか出てきたらOKです(だと適当過ぎるので一番最後にバージョンが表示されていること程度は確認します)。

さて、本命のNim自体のインストールです。

Mac、Linuxだとchoosenimというのが使えるらしいです。
一応Windowsでも使えそうだったけれど、公式ページでUnixの方でしか紹介されていなかったのでやめておきました(マイナーな言語でマイナーなバグを踏んではかなわないので)。
バージョン管理できないので辛さはありますが、まぁ所詮趣味なので良いでしょう。

https://nim-lang.org/install_windows.html
NimのダウンロードページからDLしてきます。
ダウンロードしてきたら解凍します。

解凍したファイルを今回はC:\devに入れます。
ついでになんとなく解答したフォルダからバージョン名を消して単なるnimにしました(ようはC:\dev\nimの中にbinとかfinish.exeが入っている状態)。

でnimくんも環境変数に追加します。

今回もシステム環境変数のPathにnimのbinを追加します(今回の例ではC:\dev\nim\bin)。

で、PowerShellで

```powershell

nim --version
```

で動作確認します。一行目にバージョンが出てくるはずです。
無事に出てきたらnimの環境構築はおしまいです。お疲れ様でした。

ちなみになんですが、finish.exeを実行して適当に環境変数を設定してもらおうと思ったらうまくできなくて手動で設定しました。


### Elixir

Elixirくんもインストーラーから
https://elixir-lang.org/install.html

と、思わせつつ、Chocolatyが使えるのでこっちでインストールします。
ChocolatyというのはUbuntuとかのapt-get的な存在です。つまりアップデートがコマンドでできる！
ちなみにnimでもChocolatyが使えはするんですけど、nimの最新バージョンが0.19.4に対してChocolatyで入れようとするとバージョンが0.11.2だったのでやめました。アップデートプリーズ(やり方がわからなくてできない)。
Elixirは最新が1.8.1に対してChocolatyで入れたときのバージョンが1.8.0で微妙に遅れてはいますが、まぁ許容範囲かな、って感じです。ElixirのインストールページでもChocolatyが載っているのでそのうち更新されるのでは、と思っています。

いや、インストーラーからやるわって人はインストーラーをDLしてNextを押し続ければインストールされるのではないかな。公式に
>Click next, next, …, finish

って書いてあるし。

さて、Chocolatyを使うにはChocolatyをインストールしないといけないわけですが、今回のマシンには諸事情によりすでにインストールしていたため、詳細なやり方をかけません。

一応参考URLをいくつか載せておくのでそちらを参考にどうぞ……。

https://chocolatey.org/docs/installation
https://qiita.com/konta220/items/95b40b4647a737cb51aa

さて、今回はすでにインストールされているChocolatyを使うので念の為Chocolaty自体のアップデートを確認しておきます。

```powershell

choco upgrade chocolatey

Chocolatey v0.10.11
Upgrading the following packages:
chocolatey
By upgrading you accept licenses for the packages.

You have chocolatey v0.10.11 installed. Version 0.10.13 is available based on your source(s).
Progress: Downloading chocolatey 0.10.13... 100%

chocolatey v0.10.13 [Approved]
chocolatey package files upgrade completed. Performing other installation steps.
The package chocolatey wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[N]o/[P]rint):
```

どうやらアップデートがあったみたいなのでyでアップデートします。

そのあとPowerShellを再起動しろ、みたいなメッセージが流れるので一回閉じてもう一度PowerShellを起動します。

そしたら以下のコマンドを実行します。

```powershell

cinst elixir

Chocolatey v0.10.13
Installing the following packages:
elixir
By installing you accept licenses for the packages.
Progress: Downloading erlang 21.2... 100%
Progress: Downloading Elixir 1.8.0... 100%

erlang v21.2 [Approved]
erlang package files install completed. Performing other installation steps.
The package erlang wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[N]o/[P]rint):
```

こんな感じで出てくるのでyを押してエンターします。
あと、これを見る感じこのコマンドだけでElixirだけではなく、Erlangもインストールしてくれるみたいですね。
ElixirはErlangという言語の仮想マシン上で動くのでErlangのインストールも必要となっております。JavaにおけるScalaみたいなものです。

Erlangのインストールが終わったらElixirのインストールについても聞かれます。

```powershell

Elixir v1.8.0 [Approved]
elixir package files install completed. Performing other installation steps.
The package Elixir wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[N]o/[P]rint):
```

yを押してインストールしていきます。

一応PowerShellを閉じてから開き直してElixirの動作確認をします。

```
elixir --version
```

でバージョン確認をします。
一行目にErlangのバージョンが表示されて次にElixirのバージョンが表示されました。
これにてElixirの環境構築は終了です。


### Go

一応GoのDLページ
https://golang.org/dl/

ここを見つつ進めます。
https://qiita.com/yoskeoka/items/0dcc62a07bf5eb48dc4b

どうもChocolateyが使えそうなので一応最新バージョンとChocolateyの方のバージョンを確認します。
最新は1.12.1に対してChocolateyが1.12で良い感じなのでChocolateyを使ってインストールしていきます。

```
choco install golang
```

これを打つといつもの通り

```
Chocolatey v0.10.13
Installing the following packages:
golang
By installing you accept licenses for the packages.
Progress: Downloading golang 1.12... 100%

golang v1.12 [Approved]
golang package files install completed. Performing other installation steps.
The package golang wants to run 'chocolateyinstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[N]o/[P]rint):
```

こんな感じで聞かれるのでいつも通りyを入力します。
終わったらPowerShellを閉じて開き直します。

そしたら

```
go version
```

でバージョン確認をします。

シンプルに一行でバージョンが表示されました。
バージョンが表示されたのでこれでGoの環境構築はおしまいです。

ちなみに、参考に貼ったQiitaの記事では環境変数を設定していますが、私の場合確認したら環境変数が設定されていました。


### Lua

ここを参考にしつつ進めます。
http://yohshiy.blog.fc2.com/blog-entry-291.html

てきとうにzipを落としてきます。

~~私は何も考えずに1つ目のDLリンク(http://luabinaries.sourceforge.net/download.html)から落としてきました。
参考にしたページでは1つ目の方には最新版がない、となっていましたが、私が見に行ったときには最新版(5.3.5)があったのでとりあえずはどっちでもいいと思います。~~

~~さて、落としてきたZipを解凍したところ以下のファイルが出てきました。~~

~~lua53.dll
lua53.exe
luac53.exe
wlua53.exe~~

~~参考にしているページではwlua53.exeについて書かれていないのでおとなしく同じ方でDLすれば良かったと少し後悔していますが、必要なファイルはあるっぽいので気にせず行きます。~~

~~どうも、解凍したところに環境変数を設定するみたいなので、解答したファイルを移しておきます。~~

~~C:\dev\lua~~

~~の中に上記の4ファイルがある状態にしました。
ここを環境変数に追加します。これまでと同じようにシステム環境変数のpathに追加していきます。
追加したら~~

~~lua -v~~

~~でバージョンを確認します。~~

1つ目のDLリンクから落としてきたらうまく動かなかったので参考にしたページ通り2つ目のDLリンクから落としてきます。

どうも、解凍したところに環境変数を設定するみたいなので、解凍したファイルを移しておきます。

C:\dev\lua

この中に3ファイルがある状態にしました。
ここを環境変数に追加します。これまでと同じようにシステム環境変数のpathに追加していきます。
追加したら

```
lua -v
```

でバージョンを確認します。
無事に出てきたのでこれでLuaの環境構築は終了です。


### Python

Chocolateyくんが使える(最新3.7.2でChocolateyも3.7.2だった)ので使っていきます。
すこし調べた感じAnacondaが一式揃っていて便利な感じもありましたが、機械学習が主目的ではないので普通に入れます。
いまいち理解しきってないですが、Pythonはデフォルトでvenvというコマンドが使えて仮想環境が作れるらしいです。要はデフォルトでバージョン管理ができるようなものなのだろうか。

ともかくChocolateyでPythonを入れていきます。

```
choco install python

Chocolatey v0.10.13
Installing the following packages:
python
By installing you accept licenses for the packages.
Progress: Downloading python3 3.7.2... 100%
Progress: Downloading chocolatey-core.extension 1.3.3... 100%
Progress: Downloading python 3.7.2... 100%

chocolatey-core.extension v1.3.3 [Approved]
chocolatey-core.extension package files install completed. Performing other installation steps.
 Installed/updated chocolatey-core extensions.
 The install of chocolatey-core.extension was successful.
  Software installed to 'C:\ProgramData\chocolatey\extensions\chocolatey-core'

python3 v3.7.2 [Approved]
python3 package files install completed. Performing other installation steps.
The package python3 wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[N]o/[P]rint):
```

いつもどおりこんな感じで聞かれるのでyを押します。

で、pipも一緒に入れます。
pipはパッケージ管理ができるやつらしいです。どうせなので一緒に入れます。

```
choco install pip

Chocolatey v0.10.13
Installing the following packages:
pip
By installing you accept licenses for the packages.
Progress: Downloading easy.install 0.6.11.4... 100%
Progress: Downloading pip 1.2.0... 100%

easy.install v0.6.11.4 [Approved]
easy.install package files install completed. Performing other installation steps.
The package easy.install wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[N]o/[P]rint):
```

こちらもいつもどおりyを押していきます。

そのあとなんか途中でエラーが出た気がしますがyを押していきます。
多分pythonがインストールされてないよ的なことを言われたのでおそらくPythonを入れたあとにPowerShellを開き直さないでやったのが悪いのだと思います。

PowerShellを開き直してPythonのバージョンを確認します。

```
python --version
```

でバージョンが出てきたのでpythonのインストール自体は大丈夫そうです。
pipの確認もします。

```
pip --version
```

こちらもバージョンが出てきたので無事pipの方も大丈夫そうです。

というわけでこれにてPython完了です。

### Scala

次はScalaです。

と、言いたいところですが、すでにこのPCには構築してしまっていたので参考リンクだけ貼ります。

https://dwango.github.io/scala_text/sbt-install.html

ScalaのバージョンとJDKのバージョンには注意しましょう。私はこれで少しハマりました。

ちなみに、Chocolateyがすでに入っていた諸事情はこれです。


### Dart
最後にDartです。

これもChocolateyが使える(最新2.2.0でChocolateyも2.2.0)ので使っていきます。

というか公式のインストールページ( https://www.dartlang.org/tools/sdk )にChocolateyの事書いてありますね。

といことでインストールしていきます。

```
choco install dart-sdk
```

後ろに--preをつけるとdev release(要は開発中の不安定版)を入れられるみたいですが、今回は安定版を入れます。
このコマンドを入れると

```
Chocolatey v0.10.13
Installing the following packages:
dart-sdk
By installing you accept licenses for the packages.
Progress: Downloading dart-sdk 2.2.0... 100%

dart-sdk v2.2.0 [Approved]
dart-sdk package files install completed. Performing other installation steps.
The package dart-sdk wants to run 'chocolateyInstall.ps1'.
Note: If you don't run this script, the installation will fail.
Note: To confirm automatically next time, use '-y' or consider:
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[N]o/[P]rint):
```

いつものyを入力するやつが出てくるのでyを入力します。

終わったらPowerShellを開き直してバージョン確認します。

```
dart --version
```

これでバージョン確認ができたのでDartの環境構築は終了です。
お疲れ様でした。


## Hello World編
無事環境構築が終わったので各言語でHello Worldしていきます。
### Nim

ではNimに入門していきましょう。
https://qiita.com/nunulk/items/e3679ce256b8071e5255

適当な階層でhelloWorld.nimファイルを作ります
そして中身に

```nim:helloWorld.nim

echo "Hello World"
```

と書きます。

コンパイルは

```powershell

nim c -r helloWorld.nim
```

こんな感じです。

これでhelloWorld.nimと同じ階層にhelloWorld.exeができます。
-rで自動的に実行までしてくれるのでHintがいろいろでたあとにHello Worldが出力されます。
ちなみに一回目のコンパイルはそこそこ時間がかかりますが、二回目以降はキャッシュされるため、短くなります。確か二回目以降は差分だけがコンパイルされると聞いた記憶があります。

### Elixir

Elixirに入門します。
https://elixir-lang.jp/getting-started/introduction.html

helloWorld.exs
というファイルを作ります。

中身は

```elixir:helloWorld.exs

IO.puts "Hello world from Elixir"
```

で

```
elixir simple.exs
```

実行できます。

コンパイルして実行したかったのですが、コンパイルするにはちゃんとプロジェクトを作らないとできないっぽかったのでここでは一旦諦めます。

### Go

Goに入門していきます。
https://golang.org/doc/install

公式にご丁寧にHelloWorldが書いてあったのでコピペしました。
適当なところにhelloWorld.goファイルを作って以下をコピペ。

```go:helloWorld.go
package main

import "fmt"

func main() {
	fmt.Printf("hello, world\n")
}
```

コンパイルは

helloWorld.goの階層で

```
go build
```
でコンパイルできました。
これ、ファイルを指定していないから、同じ階層にmainを持つファイルが2つあったらどうなるんだろうか……。
コンパイルしたらHelloWorld.exeができるので実行するとHelloWorldがでてきます。

ちなみに

```
go run helloWorld.go
```
みたいに書くとビルドして実行までしてくれます。

### Lua

Luaに入門しましょう。
https://dotinstall.com/lessons/basic_lua

適当なところにhelloWorld.luaを作ります。

中に

```lua:helloWorld.lua
print("Hello World")
```

を書いて

コマンドで

```
lua helloWorld.lua
```

で実行してくれます。
スクリプト言語なのでコンパイルは特にないです。

### Python

Pythonに入門します。
https://www.python-izm.com/introduction/execution/

今回入れたのはPython3系なのでhelloWorld.pyというファイルを作って以下のように入れます。

```python:helloWorld.py
print('Hello World')
```

そしたら次のコマンドで実行します。

```
py helloWorld.py
```

うまく行かなかったら

```
C:\Python37\Scripts
```

みたいなところに環境変数を通したりすると動くような気がします。
私はVSCodeのターミナルでやっていて、最初うまく動かなかったんですけど、lintがどうのこうの言われて入れたら動いたのでそんな感じです(適当で申し訳ない)。


### Scala

Scalaに入門していきます
https://dwango.github.io/scala_text/sbt-compile-execute.html

ここを見る感じプログラム本体だけではなく、設定ファイル的なものも必要っぽいので一緒に作ります。

適当に階層を切って

```
helloWorld.scala
build.sbt
```

を作ります。
それぞれの中身は

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


```scala:build.sbt
scalaVersion := "2.12.8"

scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked", "-Xlint")
```

こんな感じで作ったら

sbtを起動させてrunさせるとコードが実行されます。

```
sbt
(sbtが起動し終わるのをまつ)
run
(コンパイルを待つ)
Hello World
```

みたいな感じです。()のところにはログが出ます。ログが出てる間にいろいろファイルとかフォルダが生成されます。
sbtの起動が長いのは一回起動させたら起動させっぱなしで毎回ではないので問題ないと思います。
コンパイルも2回目以降は早いので最初だけ待ちます。

### Dart

最後にDartに入門します。

https://www.dartlang.org/samples

適当にhelloWorld.dartファイルを作って中身を以下のようにします。

```dart:helloWorld.dart
void main() {
  print('Hello World');
}
```
あとは実行しておしまいです。

```
dart helloWorld.dart
```

スクリプト言語なのでコンパイルとかなくそのまま実行されて結果が表示されます。


## 終わり

同時に7言語もやると環境構築はともかく、HelloWorldだけでも時間がかかるので他の人はやめておこうね。

次回はFizzBuzzの予定。

他にも良い題材があれば教えてもらえるとありがたいです。