噂のwlinuxでidea動かしてscalaでhelloworldする。

## window側で必要な要素です  
- windows machine(時価)  
- [X410(~~¥4,650~~ ¥580 88%オフ)](https://www.microsoft.com/ja-jp/p/x410/9nlp712zmn9q#activetab=pivot:overviewtab)  
- [wlinux(~~¥2,350~~ ¥1,000 57%オフ)](https://www.microsoft.com/ja-jp/p/wlinux/9nv1gv1pxz6p#activetab=pivot:overviewtab)  

計 ￥1,580  

## wlinux後の初期設定とかいろいろ
※ Hyperを利用してwlinux.exeを叩くと失敗するので注意です。  
~~（少なくとも初期設定のWindow\bash.exeから叩いたらGUIの立ち上がりに失敗しました）~~→できたので[追記](https://qiita.com/nukisashineko/items/02022cd738ba9e527217#%E8%BF%BD%E8%A8%98hyperjs%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95)しました。  

1. X410を起動します。  
2. wlinuxを起動します。
3. **user, passwordを設定します。**
    - ※WSLと同じ仕様なら再変更が非常に面倒くさいので、一発で決めてください。

4. user, passwordの設定以降は次のように行いました

```bash
cd $HOME

# 誤入力・Tab補完時にうるさいベル音の削除（重要）
sudo sed -i "s/# set bell-style none/set bell-style none/" /etc/inputrc

# aptでinstallするものとか(結構時間がかかります)
sudo apt install openjdk-8-jdk gedit bash-completion -y

# git flow avhのインストール
wget --no-check-certificate -q https://raw.githubusercontent.com/petervanderdoes/gitflow-avh/develop/contrib/gitflow-installer.sh && sudo bash gitflow-installer.sh install stable; rm gitflow-installer.sh

# completion（tab補完の調整）
wget https://raw.githubusercontent.com/bobthecow/git-flow-completion/master/git-flow-completion.bash -O $HOME/.git-flow-completion.bash
cat >>$HOME/.bashrc <<EOF
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
EOF
cat >>$HOME/.bashrc <<EOF
if [ -f $HOME/.git-flow-completion.bash ]; then
. $HOME/.git-flow-completion.bash
fi
EOF

#git config
git config user.name "xxxxx"
git config user.email  "xxxxx@example.com"

#github系の調整
mkdir -p $HOME/.ssh/github/
ssh-keygen -t rsa -b 4096 -C "xxxxx@example.com" # ${HOME}/.ssh/github/id_rsa を絶対パスで指定
cat >>$HOME/.ssh/config <<EOF
Host github.com
HostName github.com
IdentityFile ~/.ssh/github/id_rsa
User git
EOF
chmod 600 $HOME/.ssh/github/id_rsa
chmod 600 $HOME/.ssh/config
gedit $HOME/.ssh/github/id_rsa # pbcopy無いのでコピペ
# githubのアカウントにsshkeyを追加する部分は省略

# giboのインストールも省略
```

## ideaの設定編
### お好みのjetbrainsのLinux版を拾ってきて展開してideaを起動する。
```bash
tar zxvf ideaIU-2018.2.4.tar.gz
./idea-IU-182.4505.22/bin/idea.sh
```

！動く！
![run-idea.png](https://qiita-image-store.s3.amazonaws.com/0/86165/55c75594-432b-6dab-71e4-976ea9d3e56e.png)


### 右下からpluginの設定を行って再起動
とりあえず、scalaとsbt。
![install-plugin2.png](https://qiita-image-store.s3.amazonaws.com/0/86165/b20d2fbf-878d-fd75-efe0-af2270e07403.png)
![install-plugin1.png](https://qiita-image-store.s3.amazonaws.com/0/86165/c84f8b2e-6754-5ece-facb-39908155b3ac.png)


### create projectして、hello-worldを書く、テストも書く！
ウェーィ  

```HelloWorld.scala
class HelloWorld() {
  def main (): Int ={
    println("Hello World")
    0
  }
}
```
```HelloWorldSpec.scala
import org.specs2.mutable.Specification
class HelloWorldTest extends Specification{
  "HelloWorld#main" should {
    "return 0" in {
      val helloWorld = new HelloWorld
      helloWorld.main mustEqual 0
    }
  }
}
```



### 「LinuxのWindow」にコピペできるの素敵
`spec2`を利用したいので、`build.sbt`に追記
**windowsのchrome→wlinuxのx401のideaへコピペ**

- **コピペができる！！！**

![copy-on-windows-chrome.png](https://qiita-image-store.s3.amazonaws.com/0/86165/5e5bf99d-95f4-293b-7c88-65e86c353c33.png)
![paste-to-wlinux-idea-window.png](https://qiita-image-store.s3.amazonaws.com/0/86165/07f48b02-058f-d785-7eab-dff72ebd26b2.png)



WindowsとLinuxを行き来するプログラムは大概コピペが最初できなくてつらみがあるので、これはうれしい。
なんて言っても、試しのコーディングの際にササッとコピペできるのがいい。

### sbt shell, test run, debugが一通り動くことを確認
![run-main-from-sbt.png](https://qiita-image-store.s3.amazonaws.com/0/86165/2f30cec0-2030-4df7-5a15-c34b561e4d6c.png)
![run-test.png](https://qiita-image-store.s3.amazonaws.com/0/86165/ea7aff81-7611-e76f-3506-73cb38addb6a.png)
![run-test-result.png](https://qiita-image-store.s3.amazonaws.com/0/86165/bf725350-8cea-1cd3-e3f3-a2306293a93d.png)
![run-debug.png](https://qiita-image-store.s3.amazonaws.com/0/86165/b1ab3123-020e-cc5a-84c0-3f0c2baffcf9.png)


## githubで適当にリポジトリを作ってPush
省略。

## 動作中のメモリとか
16GBの約１０％で1.6GBほどの消費。
プロジェクト作成時にscala本体のsource codeも持ってきたのでそれのせいで重くなってしまった感。

#### before:
![not-run-idea-yet.png](https://qiita-image-store.s3.amazonaws.com/0/86165/3ca18124-ab98-f0db-0c2d-becb24a34169.png)

#### after:
![runned-idea.png](https://qiita-image-store.s3.amazonaws.com/0/86165/e047ad8b-d3ae-66c1-48e6-5eed404bff34.png)



## 感想・総評
昔のWindowsのcmdからじゃ考えられないくらいに開発環境(パッケージ管理・UNIXコマンド・パイプ処理・UX)してる。
desktopで動かしたので、オーバーヘッドによる速度の低下も（aptからの展開時を除けば）余り気にならなかった。
人権のないノートブックからでもコマンドライン操作はほぼ気にならないと思う。
WebServer立ててないので、IP周り（というかファイヤーウォール周り）がどうなってるのかがわからないのでまだ様子見ではある。
1.5kなら電子小物代にもならないので、少しでも気になる人は買っておくと吉かもしれない。
後々7kで口に指をくわえることになるくらいなら、今買ったほうが絶対得。
(~~↑7k高すぎてlinux入れとけばいいやってなりがち~~)
chrome bookのOP1も気になってたけど、こんだけWindowsで動くなら割とどっちでもいい気がしてきた。



## その他
### 今回作ったリポジトリ
https://github.com/nukisashineko/scala_hello_world_from_wlinux


## 追記：Hyper.jsの設定方法

shellとshellArgsを変更する

```javascript
{
    shell: 'wlinux.exe',
    shellArgs: []
}
```
[参考](https://github.com/zeit/hyper/issues/2359#issuecomment-386782242)

### 参考
- [Disable beep of Linux Bash on Windows 10 - Stack Overflow](https://stackoverflow.com/questions/36724209/disable-beep-of-linux-bash-on-windows-10)
- [\[ssh, git\] git や ssh で Bad owner or permissions とエラーが出たら。 - Qiita](https://qiita.com/colorrabbit/items/837810ef6176b3b6f4cc)