authors/bcardiff.jpg authors/makenowjust.jpg Brian J. Cardiff TSUYUSATO Kitsune (翻訳) 06 Aug 2020

Shards 0.12.0 がリリースされました!

Shards 0.12.0 がリリースされました!

この Shards のリリースではいくつかのかすり傷のような問題を解決して、言語の異なるバージョンに対して機能する健全なパッケージエコシステムを手軽に可能にする機能を追加し、加えてあちこちを修正する際の摩擦を減らすことにフォーカスしています。リリースのチェンジログにも目を通してください。

注意: この新しいリリースを使うには、Shards をソースコードからビルドするか、1.0.0-pre1 の Crystal がリリースされるまではナイトリー版の Crystal を使う必要があります。

依存関係の shard.yml ファイルがエラーを起こしたときに、より適切なエラーメッセージが表示されるようになりました。この改善は #408 によるものです。

開発の際、依存関係をフォークしたものに切り替えることがあります。このシナリオは複数のコマンドで適切に処理されていませんでしたが、今回のリリースで修正されています。可能なら、Shards は元の依存関係の変更に関わらずバージョン選択を尊重するようにします。もしフォーク元の依存関係が曖昧であれば、エラーが表示されます。

フォーク元の依存関係が曖昧であるというのは、例えば、もしアプリケーションがパッケージ AB を要求していて、2つが C を要求しているにも関わらず、どちらも異なるフォークを参照している場合などがあります。詳細は#419#429を確認してください。

前回のリリースで crystal プロパティが必須になり、そのパッケージが期待するコンパイラと標準ライブラリのバージョンを指定できるようになりました。同時に、--ignore-crystal-version が追加され、このチェックを無視できるようにもなっています。しばしば Shards を指定したものとは異なるバージョンの Crystal と共に動作させたい場合があります。ライブラリのメンテナが、サポートする Crystal のバージョンを選択するときやテストやリリースの際などに、そのような状況になります。

破壊的変更の起こりうる Crystal のバージョン (0.x から 1.x や 1.x から 2.x など) が開発されている間は、プロジェクトの CI でナイトリー版を使い --ignore-crystal-version を指定するのは合理的でしょう。ですが、一度安定版がリリースされてエコシステムがそれに並べば、--ignore-crystal-version は必要なくなります。なお、crystal プロパティは依存関係解決の探索空間を枝刈りするのにも役立っています。

このリリースでは、Shards は SHARDS_OPTS 環境変数を読み取って、追加の CLI オプションとして認識するようになりました。なので、CI のどこかで shards install が実行されている場合は、SHARDS_OPTS=--ignore-crystal-version が利用できます。詳細は#417#420を確認してください。

このリリースの特筆すべき機能は shards のオーバライドです。この機能はまだ初期段階なので、フィードバックをお待ちしています。この機能をリリースすることで可能になるワークフローや単純化されるものがあり、今後の Crystal のメジャーリリースを補助するものになることを期待しています。この機能は#422で実装され、動機は#412で説明されています。

ローカルでのオーバーライド機能は shard.override.yml ファイルを用意するか、SHARDS_OVERRIDE 環境変数で指定したファイルを用意することで有効になります。もし依存関係がオーバーライドファイルに載っていた場合、その他の依存関係のグラフの状態に関わらず、そのバージョンが使われることになります。

上記のロジックによって、次の場合のワークフローが単純化されるでしょう。

  • ある shard の開発者が、新バージョンをリリースして使えるようにする代わりに、手元の開発版のコピーを使いたいとき。
  • 中間の依存関係が新しいバージョンの依存関係と衝突しているのを回避したいとき。
  • わざわざフォークしたり依存関係をいじったりしなくても、深いところにある依存関係のパッチを当てることができます。
  • 開発ワークフローを複雑にすることなく、依存関係の上流の開発版に対するテストをすることもできます。

あなたならこの機能をどのようにして使いますか?