少し前にLenovo製のChromebookであるIdeaPad Duetを買いました。
そとで記事を書いてみる的なことは試してみたものの、基本的な利用パターンはAndroidアプリ主体では面白みがありません。
そこで、そろそろ「開発環境としても扱ってみよう」と思い立ち、Nimのビルド環境を用意してみました。
4ステップで導入するNim
- Linuxアプリを有効化する
- Nim(とNimble)をセットアップする
- IDE(code server)を導入する
- CLIのビルドと実行をしてみる on Chrome
Linuxアプリを有効化する
以前の記憶などではそこそこ手間のかかるLinux環境の用意も、今となってはChromebook側の機能として提供されています。1
「設定」>「Linux(ベータ版)」>「オンにする」という手順を踏むだけでLinuxコンテナの用意をしてくれます。楽ですね。
最終的には、ターミナルがインストールされて起動するので、そこから後続の作業を進めていきましょう。
Nim(とNimble)をセットアップする
さて、インストールされたLinux環境はDebian 10系となっています。つまりàpt
が使えます。
そのため、何も考えずにsudo apt update
からのsudo apt install nim
でセットアップ完了!!
...といきたいところですが、そうは問屋がおろしません。
attakei@penguin:~$ apt list nim
Listing... Done
nim/stable 0.19.4-1 arm64
stableリリースのNNimは未だに1.0系にはなっていないんですね。
というわけで、testingリリースから1.4系をインストールしてきます。
なにはともあれ、リリースパッケージ情報を追加
# Generated by distrobuilder
deb https://deb.debian.org/debian buster main
deb https://deb.debian.org/debian-security buster/updates main
# ここから下を追加
deb https://deb.debian.org/debian testing main non-free
からの、何も考えずにインストール
$ sudo apt install nim/testing
...(略)...
$ nim --version
Nim Compiler Version 1.4.2 [Linux: arm64]
Compiled at 2020-12-02
Copyright (c) 2006-2020 by Andreas Rumpf
active boot switches: -d:release
$
$ nimble --version
nimble v0.12.0 compiled at 2020-12-02 13:39:46
git hash: couldn't determine git hash
ここまでで、少なくともnim
,nimble
の両コマンドは実行できそうです。2
Hello world by Nimble
Nimble経由で最短でCLIを作ってみましょう。
$ nimble init trynim
Prompt: Your name? [Anonymous]
Answer:
Prompt: Package type?
Answer: binary
Prompt: Initial version of package? [0.1.0]
Answer:
Prompt: Package description? [A new awesome nimble package]
Answer:
Prompt: Package License?
Answer: Apache-2.0
Prompt: Lowest supported Nim version? [1.4.2]
Answer:
Success: Package trynim created successfully
$ cd trynim
$ nimble run trynim
Verifying dependencies for trynim@0.1.0
Building trynim/trynim using c backend
Hello, World!
ここまでで、Nimのビルド環境の準備はOKそうです。
他に外部ライブラリが必要な場合は、apt
経由で適宜インストールしましょう。
IDE(code server)を導入する
Linux環境上には、Vimがインストールされています。
もちろんこの環境での開発も頑張れるのですが、せっかくなのでVSCodeでの開発も体験してみましょう。
とはいえ、Linux環境上で日本語入力まで考慮するとfcitxやらで面倒らしいので、今回はちょっと楽して code-server
によるVSCode導入をしてみます。
code-server
簡単に書くと、「ブラウザ上でVSCodeを使えるようになるサーバーアプリケーション」です。
GitHubのCodespacesをローカル環境で実現する感じになります。
インストール
インストールスクリプトが用意されています。楽ですね。
$ curl -fsSL https://code-server.dev/install.sh | sh
このコマンドで、必要なローカルフォルダの用意、パッケージのダウンロードとインストールなどをまるっと実施してくれます。
なお、
To have systemd start code-server now and restart on boot:
sudo systemctl enable --now code-server@$USER
Or, if you don't want/need a background service you can run:
code-server
と出るように、systemdへのサービス登録もできるのですが、今回はひとまずCLIでサーバー起動して運用してみます。3
起動
とりあえずcode-server
コマンドで起動してみます。
設定ファイルが存在しない場合は、この時点で設定ファイルがデフォルト設定で作成されます。
インストール済みのChromeで http://localhost:8080
にアクセスすると、code-serverが表示されます...が、パスワードの入力を求められます。
設定ファイルは~/.config/code-server/config.yaml
なので、開いてpassword
に記載されている値を使って認証しましょう。4
使用感としては、CodespacesやVSCodeのリモートアクセスと同じ感じになります。
(フォルダ移動がOS側ではなく、VSCodeのUI上での挙動になります)
ターミナルも起動するので、これで開発はできそうです。拡張のインストールも簡単にできるので、シンタックスハイライトや補完も割と普通に動きます。
パフォーマンス検証タイム
ところで、頑張って環境構築してみましたけど、実際のところ開発に耐えられるんでしたっけ?
というわけで、NimのWebアプリケーションフレームワークのjesterを土台にして試してみました。
最小ビルド
jesterのREADMEの最小ソースをビルドしてみました。(.nimbleファイルにjester追加して、nimble install jester
実施後の状態)
$ date && time nimble build demo && date
Sun 20 Dec 2020 12:41:55 PM JST
Verifying dependencies for demo@0.1.0
(略)
real 0m10.445s
user 0m10.076s
sys 0m1.417s
Sun 20 Dec 2020 12:42:06 PM JST
$ date && time nimble build demo && date
Sun 20 Dec 2020 12:42:43 PM JST
Verifying dependencies for demo@0.1.0
(略)
real 0m6.434s
user 0m5.627s
sys 0m0.815s
Sun 20 Dec 2020 12:42:50 PM JST
1回目がいわゆる初回ビルドで、なにも変えずにもう一度ビルドをしてみたのが2回目です。
流石にちょっとばかり処理時間がかかりますね。4 5
とはいえ、本格的な開発をするわけでもない予定なので、そのあたりは逆に心に余裕を持つための時間と考えることにしましょう。
今後
そもそも想定としては、そこまでガチガチにこの環境ではありません。
ので、この環境で1,2機能ぐらいの編集あたりを実際に試して、面倒かそうじゃないかを体感したいかなと思います。