この記事では、「Nim」というシステムやアプリケーション開発用プログラミング言語について詳しく解説していきます。

今回ご紹介する内容は以下の通りです。

  • Nimの基本情報
  • Nimの注目ポイント
  • Nimのメリット・デメリット
  • Nimを使ってできること
  • NimとRustの相違点
  • Nimのインストール・ダウンロードについて
  • Nimと多言語を連携させる方法
  • Nimの使用方法

この記事を読めば、これらのことがわかります。

Nimを使ってみたい人はぜひご一読ください。


Nimについて

この項目では、Nimの基礎知識を確認しましょう。


概要

Nimは最初に述べたとおり、システムやアプリケーションを開発する時に使用するプログラミング言語

C言語の処理速度・メモリの効率性を高めたりできるコンパイル言語です。


コンパイル言語とは何か

コンパイル言語(compiler language)は、コンパイラ言語・コンパイラ型言語とも呼ばれます。

コンパイル言語とは、ソースコードをコンパイルをおこなう前にオブジェクトコードへ変換しておく言語のことです。

プログラミング言語には、他に「インタープリタ言語」というプログラム解釈をしつつ実行する言語もあります。

これに比べてコンパイル言語はパフォーマンスが優れています。

コンパイル言語の代表格はJavaやC言語、C++など。


名称

読み方は「ニム」。元々は、Nimrodと呼ばれていました。


開発・設計者

Nimの開発者であり設計者はアンドレアス・ランプフ氏。


設計テーマ

「高い効率性」「高い表現性」「美しさ」がNimの設計テーマです。


ライセンス

MITライセンスを採用しています。


料金

オープンソースであるため無料で使えます。プランによっては有料になる心配は要りません。


動作環境

「Windows」や「macOS」、「Linux」などで動かすことが可能です。


歩み

2005年、アンドレアス・ランプフ氏が開発をスタート。2008年に、Nimで記述されたコンパイラが発表されるに至りました。

現在は、開発者であるアンドレアス・ランプフ氏以外にもボランティアグループが開発をおこなっています。


使用されることが多い用途

色んなプログラミングに使われるNim。

たとえば、Webサーバーゲームコマンドラインアプリケーションなどに使われています。


似た働きをするツールについて

Nimと同じような役割を担うものにはRustPythonGo言語などがあります。

当記事では、そのうちRustとの違いについてご紹介しています(「NimとRustの比較」参照)。


Nimの特徴

この項目では、Nimの持つ特徴についてご紹介します。

  • 型推論がある静的な型付け
  • C言語の処理スピード向上メモリの効率性アップ
  • Python・Rubyのような構文
  • 強いメタプログラミング
  • 多言語に対応している
  • GC(ガベージコレクション)の性能が高い

以上の特徴からわかるように、Nimは主流のプログラミング言語に負けることがない特徴を有しています。


Nimを学ぶメリット

Nimを勉強するメリットにはどんなものがあるでしょうか。

この項目では、Nimを学習・使用するメリットについて解説します。

前項目「Nimの特徴」と重複する内容もありますが、1つ1つ丁寧に説明していくのでNimを学ぶか迷っている人は必見です。


シンプルな構文

コードを記述する際、複雑な記述が必要になる言語もあります。

そういった言語は読みにくいですし修正も難しかったりします。

しかし、Nimの構文はとても簡潔です。

「Nimの特徴」でも紹介しましたが、Nimの構文はPython・Rubyのようにわかりやすく、取っつきやすいといえるでしょう。


メモリの安全性が高い

Nimの仕組み(オプションチェックなど)がメモリの安全性を高めます。


メタプログラミング機能が強い

Nimには強いメタプログラミング機能を搭載したコア言語が入っています。

Nimの中に入っているメタプログラミング機能は「テンプレート」「マクロサポート」「ジェネリック」など。

これらのおかげで、命令型言語や関数型言語、宣言型言語など様々なプログラミングパラダイムに対応しています。


C言語にコンパイル可能

NimソースコードはC言語にコンパイル可能です。


JavaScriptにもコンパイル可能

C言語だけでなく、JavaScriptにもコンパイルできます。

JavaScriptバックエンドが含有しているのが理由です。


C言語やC++、Objective Cなどにラッピングできる

C言語やC++、Objectiveライブラリへバインド可能です。


様々なコードエディタに対応している

「Atom」や「Visual Studio Code」、「Vim」などのコードエディタがNimに対応しています。


非常に小さなバイナリを生成可能

依存関係がない、極小のバイナリを生成することができます。


Nimの注意点

高速で記述がスムーズにできる言語・Nim。

そんなNimにも導入する上で気をつけたい「デメリット」が存在します。

ここでは、Nimを使うなら知っておきたい注意点について確認しましょう。

Nimは書きやすいシンプルな構文(Pythonに似た構文)なのが魅力の1つ。

書きやすいだけでなく読みやすいのでコード記述がスムーズにおこなえる上、表現が多様にできるので自由に記述することができます。

しかし、その「表現力の高さ」はメリットにもなり、デメリットにもなるのです。

個人でコーディングをおこなう場合は問題ありません。

問題は、複数人でコーディングをおこなう場合です。

表現方法がたくさんあるため、コーディングルールがきちんと定まっていない場合は統一感がない仕上がりになる可能性があるでしょう。


Nimの機能

Nimの主な機能についてご紹介します。


Nimble

NimbleはNimのパッケージマネージャ(パッケージ管理システム)のこと。

Gitリポジトリ・Mercurialリポジトリを経由して配布する分散パッケージ管理を実現します。


GC(ガベージコレクション)

NimにはGC(garbage collection)が搭載されています。

GCとは、プログラムが動的にキープしたメモリ領域の中で「これは不要だ」と判断した領域を自動で解放できる機能のことです。

遅延参照カウント(サイクル検出もおこなう)を基にこれをおこないます。


スタックトレースを出力する

例外によってNimアプリケーションがクラッシュしてしまった場合、終了前にスタックトレースの出力が可能です。

これには、例外をデバッグするにあたって必要となる情報を全て含みます。


NimとRustの比較

Nimと似た働きをするプログラミング言語としてRustやPython、Go言語があるというのは「Nimについて」で述べました。

そのうち「Rust」との違いに焦点を当て、どういう相違点があるかについて解説していきます。


Rustとは?

Nimの比較対象として挙げた「Rust」とはどんなプログラミング言語かについて簡単に説明しましょう。

Rustの読み方は「ラスト」。

安全性や実用性の高さ、そして同時に実行できる性能スピードの速さなどが魅力なプログラミング言語です。

マルチパラダイム言語で開発はMozilla。


類似点

NimとRustは共通点が多数あります。

どちらもコンパイル言語ですし、型推論、静的型付け言語である点なども同じです。


テンプレートやマクロ機能などの充実度

充実度はNimに軍配があがるでしょう。

DSL記述、定型文などを回避できるので、最初に学ぶのに良いプログラミング言語としても人気が高いです。


コーディングの自由度

自由度についても、NimがRustより柔軟性が高いです。

ただ、「Nimの注意点」でも述べましたが、チームで開発する場合、書き方がバラバラになってしまう恐れがあります。

チームでNimを使う場合はルール設定を事前にしてから挑みましょう。


Nimの導入方法

ここでは、Nimの導入手順について解説します。


公式サイトにアクセス

まずはNimの公式サイトにアクセスしましょう。

トップページ上にある「Download」をクリックしてください。


OSを選ぶ

「Windows」「Unix(mac、Linux)」かを選択する画面に移行するので、自分の環境に合ったものを押下してください。

この記事では「Windows」を選んで先へ進みます。


インストール方法を選ぶ

「choosenim」「Scoop(Windowsのみ)」「ソースコード」のいずれかのインストール方法を選択しましょう。

Nimのソースコードがないなら、「choosenim」を選んでみてください。

choosenimは複数のNimがインストールされている際、安定版と最新の開発版との間でバージョン切り替えを容易におこなえるインストーラーです。


コマンド実行

  1. curl https://nim-lang.org/choosenim/init.sh -sSf | sh

コマンドを実行すると、Nim使用状況データを匿名で送信しても良いかを質問されます。

これに対して「y」「n」で答えましょう。どちらを選んだとしてもOK。

ここまでできたら、あとはインストールが完了するのを待つだけです。


Nimの使い方①基本

Nimにmain関数は不要です。

  1. echo “A-Star”

これだけで OK。

  1. nim c -r [ファイル名]

実行する際もかなり簡単です。上記のコードは「nim complie –run [ファイル名]」を短縮したものです。

なお、リリースバージョンの生成をおこないたい場合は以下を記述しましょう。

  1. nim c -d:release [ファイル名]


Nimの使い方②Learn

公式サイトのトップページから「Learn」タブをクリックしてみてください。

「Learn」では、Nimの基本的な使い方を学べます。初心者でもわかりやすく解説されているのでNimをインストールしたら、まずここを読むと良いでしょう。

なお、「Learn」の中身は全て英語で書かれています。

「英語は苦手だから…」と逃げることなく、翻訳ツールなどを使ってでも読むのがおすすめです。

基礎的な知識がたくさん詰まったページなので、読まないでいるのは勿体なくもあります。


Nimの使い方③ドキュメント

「Learn」でひととおり基本的な使い方を学び終えたら、Nimの使い方を記したドキュメント(資料)に目を通してみましょう。

「Documentation」タブよりアクセス可能です。


Nimの使い方④書籍

最近はNimを使っているユーザーが運営するサイトなどで情報を調べるのが多いかもしれません。

しかし、Nimの開発に携わっている人の書籍を読むのもNimを学ぶ方法としてありです。


Nimの使い方⑤多言語との連携方法

Nimは、C言語やC++、JavaScriptなどの多言語と連携させることができます

実際に、Nimと他の言語を連携させる場合はどうすれば良いのでしょうか。

この項目では、C言語の関数をNimで使う方法についてご紹介します。

まずはCのファイルを作成しましょう。Cの拡張子は「.c」でも「.h」でも好きなほうを選んでください。

ここでは「astar.c」とします。

  1. int star(int x){
  2.     return x+7;
  3. }

Cのファイルに記述したら、次にNimで宣言しましょう(ファイルは「astar.nim」)。

  1. proc star(a:cint):cint{.header:”[astar.cのパス]”,importc:”star”.}
  2. echo star(20)

ここまでできたら「astar.nim」をビルドしてください。

  1. > nim c -r astar.nim
  2. 27


まとめ

以上、Nimについての解説でした。

Nimは色んなプログラミング用途で使うことができる便利さと記述のシンプルさ、そしてスピード感を持つプログラミング言語です。

オープンソースなので導入するのに余計なコストがかかる心配も要りません

  • 効率良く自由度の高いプログラミングをおこないたい
  • とにかくスピード重視
  • たまにはPython以外の言語を触ってみたい
  • RustかNimかでずっと迷っている

上記にあてはまる人は、Nimの導入を検討してみてはいかがでしょうか。