Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
npmパッケージのバージョン管理
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ayosh
May 26, 2022
1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
npmパッケージのバージョン管理
ayosh
May 26, 2022
More Decks by ayosh
See All by ayosh
『フロントエンド開発入門 プロフェッショナルな開発ツールと設計・実装 』
yoshii27
0
21k
Featured
See All Featured
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
720
Six Lessons from altMBA
skipperchong
29
4.3k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Believing is Seeing
oripsolob
1
140
Building AI with AI
inesmontani
PRO
1
1.1k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
We Are The Robots
honzajavorek
0
250
30 Presentation Tips
portentint
PRO
1
320
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
330
Agile that works and the tools we love
rasmusluckow
331
21k
Transcript
npmパッケージの バージョン管理
npmパッケージのバージョン管理
してますか?
開発中のプロジェクトが 依存しているパッケージ
把握してますか?
今回の勉強会の目的 • 前提としてnpmの概要をおさらい、理解する • package.jsonを使ったnpmパッケージのバージョン管理の方法を知る • npmパッケージのバージョン管理の重要性を理解する
npmとは Node Package Manager node.jsのモジュールを管理するツール
npmとは npmは、世界最大のソフトウェアレジス トリです。あらゆる大陸のオープンソー ス開発者がnpmを使ってパッケージの 共有や借用を行っており、多くの組織 がnpmを使って個人の開発を管理して います。 https://docs.npmjs.com/about-npm
npmは、3つの独立した要素で構成さ れています。 • webサイト • Command Line Interface •
レジストリ npmとは https://docs.npmjs.com/about-npm
npmは、3つの独立した要素で構成さ れています。 • webサイト • Command Line Interface •
レジストリ npmとは https://docs.npmjs.com/about-npm
npmは、3つの独立した要素で構成さ れています。 • webサイト • Command Line Interface •
レジストリ npmとは https://docs.npmjs.com/about-npm
https://www.npmjs.com/
npmは、3つの独立した要素で構成さ れています。 • webサイト • Command Line Interface •
レジストリ npmとは https://docs.npmjs.com/about-npm
npmは、3つの独立した要素で構成さ れています。 • webサイト • Command Line Interface •
レジストリ npmとは https://docs.npmjs.com/about-npm
npmとは $ npm install axios
package.json ・対話形式でよく使われる項目を設定し(未入力ならデフォルト値を設定してくれる)、 package.jsonを生成する $ npm init
package.json package.jsonが配置されているプロジェクトのルートディレクトリで 上記コマンドを実行することで、package.jsonの情報に応じたパッケージがローカルに一 括インストールされる。 $ npm install
package.json ・https://docs.npmjs.com/cli/v8/configuring-npm/package-json ・name ・version ・description ・keywords ・ ・ ・
package.json ・https://docs.npmjs.com/cli/v8/configuring-npm/package-json ・dependencies ・devDependencies ・peerDependencies ・bundleDependencies ・optionalDependencies ・https://docs.npmjs.com/cli/v8/configuring-npm/package-json ・dependencies
・devDependencies ・peerDependencies ・bundleDependencies ・optionalDependencies
dependencies | package.json ・https://docs.npmjs.com/cli/v8/configuring-npm/package-json#dependencies ・プロジェクトが直接依存するパッケージを記載 ・パッケージ名とバージョンの範囲を記載する ・$ npm install
<package name> でdependenciesに追記される "dependencies": { "axios": "^0.24.0" }
devDependencies | package.json ・https://docs.npmjs.com/cli/v8/configuring-npm/package-json#devdependencies ・テストツールやタスクランナー等、開発に必要なパッケージを記載する ・$ npm install <package
name> --save-dev でdevDependenciesに追記される "devDependencies": { "jest": "^27.4.5" }
バージョンの指定 | package.json $ npm install axios { "dependencies": {
"axios": "^0.24.0" } }
バージョンの指定 | package.json 0.24.0 セマンティックバージョニング プロジェクトやライブラリをリリースする際のバージョン指定に関するルールを決 めたもの https://semver.org/lang/ja/ https://docs.npmjs.com/about-semantic-versioning
メジャーバージョン: 大規模な変更が起き、過去のバージョンとの互換性が失われるとき バージョンの指定 | package.json 0.24.0 マイナーバージョン: 過去のバージョンとの互換性は失われないが新規機能の開発や機能改善が行われたとき
パッチバージョン: 主にバグ修正が行われたとき
バージョンの指定 | package.json ^0.24.0 バージョンの範囲を指定する https://github.com/npm/node-semver#ranges ^ ~
バージョンの指定 | package.json ^0.24.0 ^(キャレット) ・一番左の0以外の数字を変更しないような変更を許容する ^1.2.3 ≒ >=1.2.3
<2.0.0-0 ^0.2.3 ≒ >=0.2.3 <0.3.0-0 ^0.0.3 ≒ >=0.0.3 <0.0.4-0
バージョンの指定 | package.json ~0.24.0 ~(チルダ) ・マイナーバージョンが指定されていればパッチバージョンの変更を許容する ・指定されていなければマイナーバージョンの変更を許容する ~1.2.3 ≒ >=1.2.3
<1.(2+1).0 ≒ >=1.2.3 <1.3.0-0 ~1.2 ≒ >=1.2.0 <1.(2+1).0 ≒ >=1.2.0 <1.3.0-0 (Same as 1.2.x) ~1 ≒ >=1.0.0 <(1+1).0.0 ≒ >=1.0.0 <2.0.0-0 (Same as 1.x)
package-lock.json ・package.jsonだけでは、インストールされるパッケージのバージョンが毎回同じになる事 は保証されない。 ・$npm install 実行時にpackage-lock.jsonが生成される ・実際にインストールした全ての依存パッケージが記録される "node_modules/axios" : {
"version": "0.21.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.2.tgz" , "integrity": "sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg==" , "dependencies" : { "follow-redirects" : "^1.14.0" } }, axiosが依存するパッケージのバージョンも記載されている
なぜバージョン管理をする必要があるのか
「バージョン固定ではダメなんですか?」
バージョン管理をしない場合のデメリット ・新しいバージョンで入る機能が使えない(開発効率の低下) ↑これらの理由で特定のパッケージのバージョンを上げたくなる(もしくは上げる必要に 迫られる)事になった時、最新バージョンと離れれば離れるほど、追従は難しくなっていく ・セキュリティの修正が提供されずに、脆弱性を放置したままになりかねない
どうやって管理する?
バージョンを上げる方法 ・$ npm outdatedコマンドと$ npm updateコマンド ・バージョンロックファイルの削除と再生成 頻度とタイミング ・できるだけ頻繁に定期的に、でも負担にならない頻度
・依存パッケージに脆弱性が発見されたとき ・自動化(dependabot, Renovate) バージョン管理戦略 どの戦略をとっても、安全なリリースには充実したテストが必要
バージョン管理戦略 $ npm outdatedコマンドと$ npm updateコマンド ・$ npm outdated コマンドで更新が必要なパッケージを確認
・$ npm update コマンドでバージョンを更新する $ npm outdated Package Current Wanted Latest Location Depended by axios 0.21.2 0.23.0 0.24.0 node_modules/axios npm-sample axiosの0.21.2がインストールされていて、package.jsonには^0.23.0の指定、 この時の最新バージョンが0.24.0 $ npm upgrade コマンド実行で、CurrentがWantedに揃うようにパッケージが更新される
バージョンを上げる方法 ・$ npm outdatedコマンドと$ npm updateコマンド ・バージョンロックファイルの削除と再生成 頻度とタイミング ・できるだけ頻繁に定期的に、でも負担にならない頻度
・依存パッケージに脆弱性が発見されたとき ・自動化(dependabot, Renovate) バージョン管理戦略 どの戦略をとっても、安全なリリースには充実したテストが必要
まとめ ・担当プロジェクトのpackage.json、ざっと全体を見てみましょう ・バージョン管理をしないデメリットはいざという時大きい ・チームで最適な戦略を考えて、定期的なバージョン管理を ・テストは書こう
ありがとうございました