パッケージ
Nimのパッケージシステムはnimbleという物で管理します。
パッケージリストはGitHubで管理されています。 nim-lang/packages
たくさんのコマンドがありますが、ここでは最低限覚える必要があるコマンドだけを解説します。
パッケージ作成
まずはパッケージを作ってみましょう!次のコマンドを打ってみてください。
nimble init
実行するとぞろぞろと英文が出てきます。
例えば/hello
というディレクトリでnimble init
すると次のように表示されるはずです。
$ nimble init
Info: In order to initialise a new Nimble package, I will need to ask you
... some questions. Default values are shown in square brackets, press
... enter to use them.
Using "hello" for new package name
Using "2vg" for new package author
Using "src" for new package source directory
Prompt: Package type? [lib/bin]
Answer: _
いくつかの質問に答えて行くと自動的にディレクトリ構成をしてくれます。
最初の質問では「パッケージタイプはlibですか?binですか?」というものです。
lib
はライブラリとしてNimプログラムをパッケージにする時に、bin
は実行バイナリとしてNimプログラムをパッケージにする時と使い分けます。
ちなみに何も答えずにエンターを押したり、lib
やbin
以外の答えを入力すると再度Answer:
が表示されます。
パッケージタイプを答えると、次は初期状態でのパッケージのバージョンの指定に関する質問がされます。
Prompt: Initial version of package? [0.1.0]
Answer: _
何も入力せずエンターを押すと自動的に0.1.0
指定になります。
バージョンの質問が終わるとパッケージの簡単な説明の入力を促されます。
こちらは空でエンターすると何の説明もないパッケージとなります。
Prompt: Package description? [A new awesome nimble package]
Answer: _
お次はライセンスの選択です。
こちらはパッケージタイプの入力と同様にちゃんと選択しないといけません。
迷ったらMIT
でいいでしょう。
Prompt: Package License? [MIT/BSD2/GPLv3/LGPLv3/Apache2]
Answer: _
最後に動作に必要なNimの最低バージョンの指定があります。
指定しない場合は今動作しているNimのバージョンが自動的に選択されます。
Prompt: Lowest supported Nim version? [0.18.0]
Answer: _
全ての入力が終わると自動的にディレクトリにファイルなどが生成されます。
パッケージ名.nimble
、src/パッケージ名.nim
、tests/test1.nim
、tests/test1.nims
というファイルなどが生成されているはずです。
今回はhello
パッケージとします。
.
├── hello.nimble
├── src
│ └── hello.nim
└── tests
├── test1.nim
└── test1.nims
それぞれのファイルは以下のような物です。
hello.nimble
パッケージの設定ファイル。
ここに依存パッケージの情報やパッケージの概要などが書かれている。
src/hello.nim
メインコードを記述する。
パッケージ内でモジュールとしてコードを分ける場合、2種類の分け方があります。
パッケージ名と同じ名前のディレクトリを作成(ここではhelloディレクトリ)し、そこにメインで使うモジュールを入れると、
hello/モジュール名
でサブモジュールのような形で公開し、こちらも合わせて利用することが出来ます。
private
というディレクトリを作成して、そこにメインで使うモジュールを入れると、private
内のモジュールは公開されず、パッケージのプロジェクト内でのみ利用することが出来ます。
tests/test1.nim
テスト用ファイル。
nimble test
でパッケージのテストが実行でき、そのテスト内容をこのファイルに記述します。
tests/test1.nims
test1用NimScriptファイル。
ここでのNimScriptファイルはhoge.nim.cfg
のような設定ファイルと同じような感じですが、
実際のNimScriptは他にも多様な使い方が出来るので、別のNimScript章を参照してください。
.nimbleファイル
nimbleファイルはパッケージのいちばん重要な設定ファイルです。
nimbleファイルの最小限の書き方は次のとおりです。
# これらの記述は必須項目で、1つでも欠けていると`nimble`は警告を出します。
# Package
#バージョン情報
version = "0.1.0"
# 作成者の名前
author = "Your Name"
# パッケージの概要
description = "Example .nimble file."
# パッケージのライセンス
license = "MIT"
# Deps
# 依存関係 Nimコンパイラの依存記述は必須
requires "nim >= 0.18.0"
# パッケージリストに無くてもGitHubなどに上がっていればこのように指定できる
# requires "https://github.com/2vg/mofuw >= 0.1.0"
task タスク名, "概要"
と記述することで、nimble タスク名
でそのボディに記述されたコードを実行できます。
before タスク名
と記述するとそのタスク名のタスクが実行される前に、ボディに記述されたコードを実行実行されます。
task hello, "this is hello task.":
echo "Hello"
before hello:
echo "helloタスク実行前準備"
# $ nimble hello
# $ helloタスク実行前準備
# $ Hello
また、他にも以下のような項目があります。 optional
skipDirs
: インストール時にスキップするディレクトリ名のリスト。カンマで区切れます。skipFiles
: インストール時にスキップするファイル名のリスト。カンマで区切れます。skipExt
: インストール時にスキップするファイル拡張子のリスト。カンマで区切れます。installDirs
:installFiles
:installExt
:srcDir
- ソースコードを含むディレクトリを指定します。デフォルトはsrc
です。binDir
-nimble build
がバイナリを出力するディレクトリを指定します。デフォルトではbin
です。bin
:backend
: コンパイルに使用するバックエンドを指定します。c
、cc
、cpp
、objc
、js
が指定可能で、デフォルトはc
です。
パッケージのインストール
インストールしたいパッケージがパッケージリストに存在する場合、nimble install パッケージ名
とすることで最新版がダウンロード、インストールされます。
nimble update
# パッケージリストを更新
nimble list
# パッケージリスト取得。
すでにパッケージがインストールされている場合、上書きするかを問われます。 またブランチやバージョンを指定することもできます。
nimble install パッケージ名@#ブランチ名
# ブランチ指定
nimble install パッケージ名@"バージョン"
# バージョン指定
パッケージがパッケージリストに存在しない場合、URLを指定する方法とソースを手動でダウンロードする方法があります。
Githubなどに上がっていればnimble install [URL]
のようにURLを指定することでダウンロード、インストールされます。この場合でもブランチ指定が可能です。
nimbleファイルがサブディレクトリにある場合、URLの最後に?subdir=パス
のようにディレクトリを指定する必要があります。
手動でダウンロードする場合、nimbleファイルのあるディレクトリに移動し、nimble install
とすることでパッケージがインストールされます。この場合ブランチ指定などはできません。
Linux、Macの場合、実行バイナリは~/.nimble/pkgs/
以下に置かれ、~/.nimble/bin/
にリンクが張られます。