Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
Typedesign – Prime Four
hannesfritz
42
3.2k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
340
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Designing for Performance
lara
611
70k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Navigating Weather and Climate Data
rabernat
0
510
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
320
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.8k
WENDY [Excerpt]
tessaabrams
12
39k
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、ざっと全体を見てみましょう ・バージョン管理をしないデメリットはいざという時大きい ・チームで最適な戦略を考えて、定期的なバージョン管理を ・テストは書こう
ありがとうございました