パッケージ

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プログラムをパッケージにする時と使い分けます。

ちなみに何も答えずにエンターを押したり、libbin以外の答えを入力すると再度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: _

全ての入力が終わると自動的にディレクトリにファイルなどが生成されます。

パッケージ名.nimblesrc/パッケージ名.nimtests/test1.nimtests/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: コンパイルに使用するバックエンドを指定します。ccccppobjcjsが指定可能で、デフォルトは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/にリンクが張られます。