Skip to content
This repository has been archived by the owner on Apr 13, 2020. It is now read-only.

Commit

Permalink
一応完成版
Browse files Browse the repository at this point in the history
  • Loading branch information
arcage committed Mar 15, 2017
1 parent 6862374 commit 9c35329
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions arcage/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ Author: ʕ•ᴥ•ʔAKJ / @arcage

# ShardsとShard

RubyにGemsがあるように、Crystalにも[Shards](https://github.com/crystal-lang/shards)(シャーズ)というパッケージ管理の仕組みが用意されています。以前はShards単体をCrystal本体とは別にインストールしなければならない時期もありましたが、Crystal v0.8.0からコンパイラ標準のライブラリ依存関係の管理ツールとして採用されたこともあり、最近では(少なくともmacOS用のhomebrewやLinux向けに公式で用意しているパッケージからインストールされた場合には)Crystal本体をインストールすればShardsもセットで利用できるようになっています。
RubyにGemsがあるように、Crystalにも[Shards](https://github.com/crystal-lang/shards)(シャーズ)というパッケージ管理の仕組みが用意されています。以前はShards単体をCrystal本体とは別にインストールしなければならない時期もありましたが、Crystal v0.8.0からコンパイラ標準のライブラリ依存関係の管理ツールとして採用されたこともあり、最近では(少なくともmacOS用のhomebrewやLinux向けに公式で用意されているパッケージからインストールされた場合には)Crystal本体をインストールすればShardsもセットで利用できるようになっています。

ShardsもGemsと同様に、言語本体に標準添付されていないライブラリをインターネットなどから取得して使えるようにしてくれます。このときGemsによってインストールされる個々のライブラリがGemと呼ばれるように、Shardsによってインストールされる個々のライブラリをCrystalではShard(シャード)(注:「Shard」は「石や陶器などの破片/かけら」といった意味。)と呼びます。ただし、CrystalにおけるShardsの役割は、Rubyに対するGemsのそれと完全に同一ではありません。例えば、Gemsが基本的にRubyインタプリタのグローバルな環境にGemをインストールするのに対して、Shardは個々のプロジェクトフォルダ内にShardをインストールします。インストールするShard特定のバージョンに限定したり、開発環境にだけインストールして本番環境にはインストールしないShardを指定することもできます。そうした点では、ShardsはRubyにおけるGems+Bundlerに相当する機能を担っていると言って良いかもしれません(注:Shards本体にはShardの検索機能は実装されていませんが、Shardを検索できる[CrystalShards](http://crystalshards.xyz)や、有用なShardへのリンクを集めた[Awesome Crystal](https://github.com/veelenga/awesome-crystal)といったサイトが利用可能です。)。
Shardsは、Gemsと同じく言語本体に標準添付されていないライブラリをインターネットなどから取得して使えるようにしてくれます。このときGemsによってインストールされる個々のライブラリがGemと呼ばれるように、Shardsによってインストールされる個々のライブラリをCrystalではShard(シャード)(注:「Shard」は「石や陶器などの破片/かけら」といった意味。)と呼びます。ただし、CrystalにおけるShardsの役割は、Rubyに対するGemsのそれと完全に同一ではありません。例えば、Gemsが基本的にRubyインタプリタのグローバルな環境にGemをインストールするのに対して、Shardは個々のプロジェクトフォルダ内にShardをインストールします。インストールするShard特定のバージョンに限定したり、開発環境にだけインストールして本番環境にはインストールしないShardを指定することもできます。そうした点では、ShardsはRubyにおけるGems+Bundlerに相当する機能を担っていると言って良いかもしれません(注:Shards本体にはShardの検索機能は実装されていませんが、Shardを検索できる[CrystalShards](http://crystalshards.xyz)や、有用なShardへのリンクを集めた[Awesome Crystal](https://github.com/veelenga/awesome-crystal)といったサイトが利用可能です。)。

## なぜShardを公開するの?

Expand Down Expand Up @@ -177,7 +177,7 @@ BDDでは、まず実装しようとするライブラリが外部に公開す

おっと、失敗してしまいましたね。

テスト結果には、`Greeting.hello("John")`がテストケースで定義された`"Hello, John!"`ではなく`"Hello, John."`を返している、と出ています。先ほどのソースコードを見直してみると、確かに返り値の最後が`"!"`ではなく`"."`になっていますね。この部分のソースコードを以下のように修正して再度テストを実行してみます。
テスト結果には、`Greeting.hello("John")`がテストケースで定義された`"Hello, John!"`ではなく`"Hello, John."`を返している、と出ています。先ほどのソースコードを見直してみると、確かに返す文字列の最後が`"!"`ではなく`"."`になっていますね。この部分のソースコードを以下のように修正して再度テストを実行してみます。

(注:src/greeting.cr(バグ修正後))
require "./greeting/*"
Expand Down Expand Up @@ -428,7 +428,7 @@ Shard側がバージョンタグをつけてくれていれば、使用する側
(注:v0.1.0以上を使うためのバージョン指定)
version: >= 0.1.0

さらに、これら以外の演算子としてやや特殊な意味合いをもつ`~>`があり、以下のような動きをします
このほかに`~>`演算子がありますが、これは以下のようなやや変わった指定になります

(注: ~> 演算子の挙動)
version: ~> 1.0.2 (注: >= 1.0.2 かつ < 1.1.0)
Expand All @@ -440,8 +440,8 @@ Shard側がバージョンタグをつけてくれていれば、使用する側

以上、筆者の理解できている範囲でざっくりとShardの公開手順を説明してみました。

実際に試してもらえれば、驚くほど簡単にShardを公開できることがご理解いただけるはずです。また、「誰かに使ってもらおう」と思うとShard公開への心理的なハードルが高くなりガチですが、「誰も使わないかもしれないけれど自分が便利だから」と割り切ってしまうと、意外と簡単にそのハードルを乗り越える(もしくは下をくぐり抜ける)ことができるのではないかと思います。少なくとも自分はそうでした。
「誰かに使ってもらおう」と思うとShard公開への心理的なハードルが高くなりガチですが、「誰も使わないかもしれないけれど自分が便利だから」と割り切ってしまうと、意外と簡単にそのハードルを乗り越える(もしくは下をくぐり抜ける)ことができるのではないかと思います。少なくとも自分はそうでした。また、実際に試してもらえれば、驚くほど簡単にShardを公開できることがご理解いただけるはずです

また、Shardsには、ここで紹介できなかったさまざまな機能が用意されていますので、先に紹介した「`shard.yml` specification.」を一度じっくりと読んでみてください。きっと、Shardを使うときにもお役に立ちますよ
あと、Shardsにはここでは紹介できなかった機能がいくつもありますので、先に紹介した「`shard.yml` specification.」を一度じっくり読んでみてください。きっとお役に立ちますよ

ということで、皆さんも自作ライブラリをShardとして公開してみてはいかがでしょうか。

0 comments on commit 9c35329

Please sign in to comment.