👑

Apple Silicon MacでNimの開発環境を構築してみる

2021/04/01に公開

はじめに

こんにちは、春から高校生になるNeoです。
先日、M1搭載のMacBook Airが届きました。使ってみた感想としては、とても早くて快適!!!!って感じです。しかもバッテリーの持続が超長いので、3時間ずっと使っていてもバッテリーがほとんど減りません。買って損はないと思います。

さて本題に入ります。この記事は、一筋縄ではいかないM1でのNimの環境構築をしてみようという記事です。ややこしい部分が多かったので、記事として残しておこうと思います。

Nimのインストール

前のmacと同様にchoosenimで、、と思いましたがM1には対応していない模様。
さらに少し調べると、M1ではNimのコンパイルがうまくいかないというissueが報告されていて、コンパイルするにはNimのソースコードを少しだけイジらなければいけないようです。
https://github.com/nim-lang/Nim/issues/16211#issuecomment-766165184
仕方ないのでソースコードをgit cloneし、次のような操作をします。

terminal
git clone https://github.com/nim-lang/Nim # ソースコードをclone
echo 'export $PATH="$HOME/Nim/bin:$PATH"' >> ~/.zshrc # pathを通す
cd Nim
git clone -q --depth 1 https://github.com/nim-lang/csources_v1.git csources
./build_all.sh

これで本当にコンパイルできるようになったのか心配なので、試しにプロジェクトを作り、cligen[1]を用いて適当なコマンドを作ってコンパイルしてみると……(プロジェクト名は気にしないでください[2])

ちゃんとコンパイルできました!これでM1上でのNimの開発環境は整った…と思っていた矢先に、あることに気がつきました。

VS CodeのNimの拡張機能が動かない

セーブして明らかにエラーになるところがあっても一切指摘してくれないし、入力補完すら効きません。そしてセーブすると右下のポップアップにはNo 'nim' binary could be found in PATH environment variableの文字が……
このNo 'nim' binary could be found in PATH environment variableについてググってみると、環境はWin10ですがまったく同じエラーメッセージを受け取っているというissueを見つけました。詳しく覗くと、Linux環境でも同じエラーを吐いている方がいて、その方が提示してくれた解決方法を参考にしてやってみることにしました。
https://github.com/pragmagic/vscode-nim/issues/91#issuecomment-526690576

terminal
sudo ln -s ~/Nim/bin /usr/local/bin # usr/local/binにNimバイナリのシンボリッリンクを貼る

これでいけると思ったら、今度はOperation not permittedというメッセージが返ってきて、コマンドが失敗してしまいました。
このメッセージでさらにググると、どうやら最近のMacはセキュリティ強化のためroot権限でも干渉できないディレクトリが設定されているらしく、変更するにはリカバリーモードでコマンドを打ち込む必要があるようです。やり方の解説はこちらのサイトが分かりやすかったです。

設定の変更が終わり、再び↑のコマンドを実行してみると、ちゃんとシンボリックリンクが貼られました。
VS Codeの画面に戻ってエラーや補完を確認してみたところ、しっかり動作しました!

inim

おまけですが、NimのREPLであるinimもインストールします。

terminal
nimble install inim
echo 'export $PATH="$HOME/.nimble/pkgs/inim-0.6.1:$PATH"' >> ~/.zshrc

おわりに

結構時間をかけてしまいましたが、その結果、超快適な開発環境にすることができました。皆さんもぜひ、M1とNimで最高の開発環境をお楽しみください!

脚注
  1. https://github.com/c-blake/cligen ↩︎

  2. 高校の新入生への課題で百人一首を覚えなければいけないので、おぼえるためのCLIツールを作っています。 ↩︎

GitHubで編集を提案

Discussion