Nim nighty build版をAWS cloud9などで気軽に試せるようにしてみた。

#Nim nighty buildを試したい人に。
Nimの情報を定期的に追いかけはじめると気がつくことが、Nim本家のリポジトリが毎日のように更新されていること。
バージョン1.0に満たないnimが活発に開発されているのは良いことなのだが、Nimフォーラムでのディスカッションが、本家リポジトリに反映されている様子を見ていると、nighty build版のNimを試したくなってくる。
（...自分の場合は、byte周りのライブラリの（小）変更が気になっている）

幸い、nimでは、nighty build版をすぐに試せるような仕組みが提供されている:

![スクリーンショット 2018-02-04 11.49.19.png](https://qiita-image-store.s3.amazonaws.com/0/16455/27a3d442-b704-9e88-d8c9-c9de95af62dc.png)

以上、という感じなんだけれど、お試しにあたってはちょっとした注意点などがあるので、仮想環境上のubuntuなどでnimのnighty build版を気軽に試せるスクリプト群を用意してみた（やっつけでつくっただけでできないこともあるので、慣れている方からアドバイスいただけるとありがたいです）。

#[1]はじめ方
nighty build版のはじめ方は、ubuntuのターミナルで、以下のコマンドを叩くだけ。
（gccとgitが入っている）ことが前提。

```
git clone https://github.com/kmry/nim_nighty_space
cd nim_nighty_space
make Nim
```

*（以下、全てのmakeコマンドはnim_nighty_spaceフォルダ内で実行）*

makeすると、本家からnimのソースを持ってきてgccのビルドがはじまる。
私の場合、こうしたことは無料版のAWS cloud9でお試しするんだけれど、ここではコンパイルが終わるまでだいたい２０分くらいかかった。

ビルド終了後は、nim -vでバージョン確認ができる。

```
$ nim -v
Nim Compiler Version 0.17.3 [Linux: amd64]
Copyright (c) 2006-2018 by Andreas Rumpf

git hash: 8e2405164a333993da7742c02947d49f28d422b1
active boot switches: -d:release
```

Nimをビルドするgccのバージョンは多少古くても大丈夫。Cloud9の場合は、
C++ワークスペースを作成しておけば良いだろう。

![スクリーンショット 2018-02-04 13.20.49.png](https://qiita-image-store.s3.amazonaws.com/0/16455/827725e9-f60c-2cc2-43bf-f7044c2a78a2.png)


##make Nimがしていること。

簡単なスクリプトなんで中を見てもらえば良いだけなんだけど、一応。

まずは、本家の指示通りにソースコードからビルドしてkochしている。

```.sh
git clone https://github.com/nim-lang/Nim.git
cd Nim
git clone --depth 1 https://github.com/nim-lang/csources.git
cd csources
sh build.sh
cd ../
bin/nim c koch
./koch boot -d:release
```

ただ、この時点ではパッケージマネージャのnimbleなどが使えないので、ツール類をビルドする１行を追加した。

> ./koch tools

この時点で、Nim/bin以下にnim、nimbleなどの実行バイナリができているので、~/.bash_profileにpathを追記してsourceすることでnim/nimbleコマンドが通るようにしている。

#[2] nimble用のフォルダ設定を準備

make p=プロジェクト名でbaseフォルダ以下にnimble向けの設定をできるようにしてみた。
ディフォルトでプロジェクト名はtest1なので、makeと叩くと、nimbleが走り、プロジェクトの設定(プロジェクト作者名や、libかbinかの設定、ライセンス形態など)を尋ねられる。
その後、nim_nighty_spaceフォルダ以下のような構成になるはず:

```
 tree -d -L 2
.
├── Nim #容量が気になる際はソースコード類は消しても良い。
│   ├── bin
│   ├── build
│   ├── ci
│   ├── compiler
│   ├── config
│   ├── csources
│   ├── dist
│   ├── doc
│   ├── examples #ここにnimのコード例がある。
│   ├── icons
│   ├── lib
│   ├── nimcache
│   ├── nimsuggest
│   ├── tests
│   ├── tinyc
│   ├── tools
│   └── web
├── base
│   └── test1
└── init #ここはインストール用のスクリプトなどで不要なら消しても良い
```
## 実行
make runでhello worldがビルドされようになっている。ビルド後のtest1フォルダは以下のような構成となる。
(ステーブル版のnimより、nimbleはディフォルトでフォルダ構成など踏み込んだ設定をするようになっている模様)

```
$ tree
.
├── src
│   ├── nimcache
│   │   ├── stdlib_system.c
│   │   ├── stdlib_system.o
│   │   ├── test1.json
│   │   ├── test1_test1.c
│   │   └── test1_test1.o
│   └── test1.nim #このファイルを編集する。
├── test1
├── test1.nimble
└── tests
    ├── test1.nim
    └── test1.nims
```

スクリーンショット:

![スクリーンショット 2018-02-04 14.14.24.png](https://qiita-image-store.s3.amazonaws.com/0/16455/32803f36-76ed-dafc-17af-f5bd323acbfa.png)



また、make cpProj p=コピーしたい名前で、Nimのexampleフォルダからソースコードをコピーしたプロジェクトを作成できるようにした（手抜きなので、examples直下のファイルのみ）。examples　フォルダ以下にはいろいろな例題ソースコードがあるので、のぞいてみてほしい。

```
 tree examples/ -L 1
examples/
├── allany.nim
├── c++iface
├── cgi
├── cgiex.nim
├── cross_calculator
├── cross_todo
├── debugging.nim
├── filterex.nim
├── fizzbuzz.nim
├── hallo.nim
├── htmlrefs.nim
├── htmltitle.nim
├── httpserver2.nim
├── keyval.nim
├── keyval2.nim
├── maximum.nim
├── myfile.txt
├── objciface
├── parsecfgex.nim
├── readme.txt
├── ssl
├── statcsv.nim
├── talk
├── transff.nim
├── tunit.nim
└── unix_socket
```

この方式を応用すれば、（原始的ながら）テンプレートとなるプロジェクトからそれらしいプロジェクトを生成するといったこともできるようになるのだろう（そのためにはnimbleをちゃんと勉強しなければ、、、）。

#[3] （番外編）コマンドライン上のエディタでnimコードを書きたいならば。

nighty版を試すならば、お試し用の環境でコード編集したいですよね。nanoだとすぐにいやになるだろうし、neovimなどのnim向け設定はけっこう面倒（前に設定してたけどやり方忘れちゃった、、）。

ということで、すぐにnim向けの設定ができるコマンドライン上のエディタを見つけました。その名は、spacemacs。知ってる人はもちろん知っているEmacsの高機能お手軽版だ(emacsのカスタマイズ設定集、のはず)。最大の特徴はディフォルトでviのキーバインドが使用可能なこと（参考　 [Spacemacs入門その1](https://qiita.com/nobkz/items/a0df6c87107401effd4c)）。
そして、nim向けの導入が数秒で（１行追加で）行える。初回起動時はいろいろと設定しているらしく時間がかかるが、起動後は、無償版cloud9(}DD2GB、RAM512MBの非力VPS環境相当)でもちゃんと動いてくれる。
ふだんvimを使っていない人でも、サーバーを触る人ならばviのキーバインドにはそれなりになじみがあるだろうし、spacemacsはviキーバインドでなかなかに使いやすい。ということで、けっこうおすすめ。

spacemacsをubuntu環境に導入したい人はmake Nim実行前にemacs25_space.shへのコメントを外しておく

```
Nim: # at first
	bash init/nim_nighty.sh
	bash init/make.profile.sh
	#bash init/emacs25_space.sh　<--ここのコメントを外す
```

か、bash init/emacs25_space.shを直接実行して、emacsバージョン25をインストールし、spacemacsを導入して欲しい。インストールはちょっとした設問込みで１０分以内のはず。

spacemacsとnimの関係は、もう少しspacemacsが使いこなせた後に書くとして、以下に、参考までのいくつかスクリーンショットを貼っておく。

## ①Spacemacs起動画面

![スクリーンショット 2018-02-04 13.56.24.png](https://qiita-image-store.s3.amazonaws.com/0/16455/3ace5338-08c8-2d2e-1266-884b8310e287.png)


補完はivyが軽くて良いとのことなので、そちらに設定している。
![スクリーンショット 2018-02-04 13.56.50.png](https://qiita-image-store.s3.amazonaws.com/0/16455/dfb16787-b8f1-0bc8-1091-0e12aac9922b.png)

##②Nim向けコンフィグの設定


![スクリーンショット 2018-02-04 14.19.29.png](https://qiita-image-store.s3.amazonaws.com/0/16455/71b11002-1e5d-489c-b852-91e5043b23b1.png)

spacemacsがロードするレイヤーを指定するdotspacemacs-configuration-layers内に
nimを追記するだけで良い。dotspacemacs-configuration-layers　へのショートカットは、[space fed]

##③Nimプロジェクトファイルを開く

make em p=プロジェクト名で、該当するnimファイルを開けるようにした。（make them -> make'emのイメージ？）spacemacsでフォルダ内の閲覧などの作り込みはそのうちに（cloud9前提の場合、spaceamacsはただのエディタで困らないのもので...）　。

例えば、exampleフォルダからannnay.nimをコピーして、開く場合、以下のようにする。

```
make cpProj p=allany
make em p=allany
```
こんな感じとなる(spacemacsをフルスクリーンにして、spacemacsオンリーの環境にすることも可)
![スクリーンショット 2018-02-04 15.59.53.png](https://qiita-image-store.s3.amazonaws.com/0/16455/286e1611-b976-7b1c-cdf6-bab8af4e9732.png)

以上、後半手抜きで申し訳ないですが、情報提供まで。
もっと良いやり方している方がおられたら教えてください ;)