Quantcast
Channel: Sider Blog
Viewing all articles
Browse latest Browse all 182

Yarnサポートおよびnpmパッケージのインストール動作変更のお知らせ

$
0
0

こんにちは、Sider開発チームの木庭です。

このたび、待望のYarnサポートの紹介と、npmパッケージをインストールする際の動作変更についてアナウンスをいたします。これらの変更はまだ適用されておらず、2019/8/20に皆様に提供する予定です。

今回の変更の影響を受けるのは、npmからインストール可能な以下の解析ツールとなります。

特に、ESLint、styelintを使用中で package.jsonがリポジトリ内に存在しないケースでは、解析が正しく動作しなくなる可能性があります。そのため、事前に本記事をご覧いただき、設定をご確認いただけますと幸いです。

以下、それぞれの変更点について、詳しく見ていきます。

Yarnサポート

かねてよりご要望の多かった、Yarnサポートを実施いたします。この変更をリリース後、Siderはリポジトリ内に yarn.lockファイルを見つけると、npm installコマンドを実行する代わりに yarn installコマンドを実行します。

これにより、package.jsonに書かれてあるツールのバージョンではなく yarn.lockに書かれてあるバージョンで解析が実行されるため、より皆様の開発環境に近い状態で解析が実行されることになります。結果として、Siderでの解析失敗を減らすことにつながり、解析失敗時のデバッグがより容易になると私たちは考えています。

例えば、以下のような package.jsonyarn.lockファイルがリポジトリ内にあるとします。

package.json:

{"devDependencies": {"eslint": "^5.10.0"
  }}

yarn.lock:

eslint@^5.10.0:
  version "5.10.0"

Yarnサポート以前は、ESLint 5の最新バージョンである eslint@5.16.0が解析に使用されます。一方、Yarnサポート以後は yarn.lock内に記載してある eslint@5.10.0が解析に使われることになります。

npm ciの利用

Yarnと同様に、Siderはリポジトリ内に package-lock.jsonファイルを見つけると、npm installコマンドの代わりに npm ciコマンドを実行するようになります。この場合も、yarn.lockと同様 package-lock.jsonに記載されているバージョンがインストールされますので、より開発環境に近い動作が期待できます。

また、npm cinpm installよりも高速ですので、解析時間の短縮が期待できます(npm ciの詳細については、npmのドキュメントをご参照ください)。

ちなみに、まれなケースだとは思いますが、 yarn.lockpackage-lock.jsonが同時に存在する場合、エラーとなりますのでご注意ください(Yarnもまた、その場合は警告を表示します)。

npmパッケージインストールの動作変更

今回のリリースで、npmパッケージインストールのデフォルトの挙動が変更になります。具体的には、sider.ymlで制御可能な npm_installオプションを省略した場合の挙動が変わります。

npm_installオプションの初期値:

  • 変更前: false
  • 変更後: true

この初期値の変更と、Yarnおよび npm ciのサポートをまとめると、変更後の動作は以下のステップとなります。

  1. package.jsonが存在するかチェックする。存在しない場合は、Sider提供のデフォルトバージョンを使用する。
  2. package.jsonかつ yarn.lockが存在する場合、yarn installを実行する。
  3. package.jsonかつ package-lock.jsonが存在する場合、npm ciを実行する。
  4. package.jsonが存在するが yarn.lockpackage-lock.jsonも存在しない場合、npm installを実行する。
  5. node_modulesディレクトリに対象となる解析ツールがインストールされたかチェックする。
  6. ツールがインストールされている場合、そのインストールされたバージョンを使用する。
  7. (何らかの理由で)ツールがインストールされてない場合、デフォルトバージョンを使用する。

ツールがインストールされなかった場合、Siderの解析結果ページとログページに警告が出力されます。それらの警告やログを参考に、package.jsonなどの設定を見直してみてください。

この npm_install省略時の挙動は、明示的に npm_install: trueを指定した場合でも変わりません。

また、npm_install: falseが指定された場合は、これまでと同様にインストールは実行されず、デフォルトバージョンが使用されます。インストールを回避したい場合は、明示的に npm_install: falseを指定してください。

ツールバージョン制約の追加

npmやYarnによってインストールされるツールのバージョンについて、制約が追加されました。ここでの「制約」とは、サポートされるバージョン範囲のことです。これは、Siderの動作を保証するための措置です。この制約に違反すると、解析が失敗します。

最低バージョンはSider解析の実行統計データをもとに決めたので、ほとんどのケースでは問題にならないと思われます。しかし、万が一この制約の範囲外のバージョンを使用したいケースが発生した場合は、サポートまでお知らせください。

以下、各ツールのバージョン制約となります。

  • ESLint: 3.19.0 ≦ x < 7.0.0
  • TSLint: 5.0.0 ≦ x < 6.0.0
  • CoffeeLint: 1.16.0 ≦ x < 3.0.0
  • stylelint: 8.3.0 ≦ x < 11.0.0

いずれのツールも、最新バージョンは利用可能です。この制約については、変更リリース後にドキュメントに反映します。

ツール設定ファイルからの自動インストール機能の廃止

今回の変更で、各ツールの設定ファイルの内容から必要なプラグインを自動で検出してインストールする機能が廃止されます。対象のツールは以下の通りです。

  • ESLint
  • stylelint

例えば、ESLintの設定ファイル(例..eslintrc.json)に以下のように記述されていた場合、Siderは eslint-plugin-reactを自動でインストールしようとします。

{"plugins": ["react"]}

しかし、この機能は様々なフォーマットの設定ファイル(例えば、JSONやYAML、JavaScriptなど)を解析する必要があるために実装の難易度が高く、加えてユーザーの皆様の環境でこの挙動を再現することが難しいため、廃止とすることが決定しました。

もしこの機能を使用している場合は、以下の例のように package.jsonに依存プラグインを明示的に追加することで代用できます。詳細は、各プラグインのドキュメントをご確認ください。

{"devDependencies": {"eslint": "^5.15.1",
    "eslint-plugin-react": "^7.14.3"
  }}

まとめ

変更内容は以上の通りです。今回の変更は、ユーザーの皆様の体験をより良いものすることを目的としており、できるだけ既存の解析を失敗させないように配慮しています。しかしながら、万が一リリース後に解析が失敗するようになった場合は、サポートまでフィードバックをいただけると幸いです。

再度繰り返しますが、リリース予定日は2019/8/20となります。

今回のアナウンスについて、フィードバックをいただけると非常に助かります。何かお気づきの点や疑問点がございましたら、お気軽にSiderの右下のチャットからお問い合わせください。


Viewing all articles
Browse latest Browse all 182

Trending Articles