crystal

Crystal のパッケージマネージャー shards の使い方

More than 3 years have passed since last update.

Crystal は Ruby 風のシンタックスを持つ静的言語です。
shards は Crystal でバージョン v0.8.0 より正式採用されたパッケージマネージャーです。

shards 概要

  • Crystal 製
  • 設定は YAML で shard.yml へ記載
  • 任意の git レポジトリをパッケージのダウンロード先として指定可能
    • github と bitbucket は特に略記が可能
  • branch, tag, commit を使ってパッケージのバージョンを指定可能
    • 範囲指定のような記法も可能
  • Ruby の Gemfile.lock のような働きをする shard.lock を生成

shards のインストール方法

公式のコンパイル済みバイナリを落としてきて適当なパスに配置するか、Crystal でビルドします。crenv を使うと、Crystal のインストールと同時に shards のビルドが走るのでお薦めです。

shards をビルドする場合は、以下のようにして行えます。

$ git clone https://github.com/ysbaddaden/shards.git
$ cd ./shards
$ make
$ ./bin/shards --version
Shards 0.4.0 (2015-09-24)

shards の使い方

依存ライブラリのバージョンを設定ファイル shard.yml に記述し、shards を使ってライブラリをインストールします。

基本的には、Ruby の Bundler などと同じような使い方です。shard.yml は、Crystal v0.7.7 までサポートされていた Projectfile にあたります。

shard.yml 記法

shards の公式ドキュメントである SPEC.md にかなり詳しく書かれているので、ここでは簡単な概要のみ説明します。

shard.yml
name: package_name # あなたのライブラリの名前
version: 0.1.0 # あなたのライブラリのバージョン

dependencies:
  dependency_pkg_1: # 依存しているパッケージ名
    github: user/repo # GitHub に存在する場合
    bitbucket: user/repo # Bitbucket に存在する場合
    git: git://git.example.org/crystal-library.git # 任意の Git レポジトリを指定可能
    version: ~> 0.1.0 # 依存バージョンを指定 (<, <=, >=, >, ~> が使える)
    branch: master # 最新に向けたりなどブランチ名で指定する場合

development_dependencies: # 開発で使う依存パッケージ
  development_dependency_pkg_1:
    ... (略)

license: MIT # ライセンス

shards の使い方

基本的に $ shards と打つだけです。

$ shards --help
shards [options] <command>

Commands:
    check
    install
    update

Options:
    --no-colors
    --version
    --production
    -v, --verbose
    -q, --quiet
    -h, --help

解説

shard.yml は、ただ依存パッケージを列挙していく形で記述し、特に際立った記法ではないので直感的にかけます。

ライブラリのバージョニングは、Semantic Versioning に基づいて行ってください。Git リポジトリ上のタグも、それに基づいて v0.1.0 (プレフィックスとして v をつける) のように作成する必要があります。shards や他の開発者がそのようにバージョニングされていることを期待するので、必ず従う必要があります。

従来の Projectfile とは違い、依存ライブラリのバージョンを解決するために Crystal コンパイルを必要としないので、高速に動作することが期待できます。また、依存ライブラリのバージョンも詳細に指定できるようになり、やっと本格的な開発にも取り組めそうになってきました。

注意点など

  • Projectfile からの移の際は、.crystal, .deps, libs を一旦削除しましょう。何故か動かない場合があります。
  • 依存ライブラリのダウンロード先が .deps から .shards に変更になっていますので、忘れずに ignore しましょう。

まとめ

shards を使うと、Crystal の依存ライブラリを安全に指定することができます。ぜひ使いましょう。