NVM(Node Version Manager)は、Node.jsを複数インストールして使い分けるためのソフトウェアで、Aboutには以下のような記載があります

nvm is a version manager for node.js, designed to be installed per-user, and invoked per-shell. nvm works on any POSIX-compliant shell (sh, dash, ksh, zsh, bash), in particular on these platforms: unix, macOS, and windows WSL.

windowsでは、WSLでしかどうさしないです
そのため、windowsでは直接公式のnvmを使うことができないです

そこで変わりのものとして、nvm-windowsが有名なようなので、そちらをインストールしてみました
自分は、nvm-setup.zipでインストールしました

現在のバージョンは以下の通り

c:\>nvm --version
1.1.12

使い方のメモ

ヘルプ

c:\>nvm --helop

Running version 1.1.12.

Usage:

  nvm arch                     : Show if node is running in 32 or 64 bit mode.
  nvm current                  : Display active version.
  nvm debug                    : Check the NVM4W process for known problems (troubleshooter).
  nvm install <version> [arch] : The version can be a specific version, "latest" for the latest current version, or "lts" for the
                                 most recent LTS version. Optionally specify whether to install the 32 or 64 bit version (defaults
                                 to system arch). Set [arch] to "all" to install 32 AND 64 bit versions.
                                 Add --insecure to the end of this command to bypass SSL validation of the remote download server.
  nvm list [available]         : List the node.js installations. Type "available" at the end to see what can be installed. Aliased as ls.
  nvm on                       : Enable node.js version management.
  nvm off                      : Disable node.js version management.
  nvm proxy [url]              : Set a proxy to use for downloads. Leave [url] blank to see the current proxy.
                                 Set [url] to "none" to remove the proxy.
  nvm node_mirror [url]        : Set the node mirror. Defaults to https://nodejs.org/dist/. Leave [url] blank to use default url.
  nvm npm_mirror [url]         : Set the npm mirror. Defaults to https://github.com/npm/cli/archive/. Leave [url] blank to default url.
  nvm uninstall <version>      : The version must be a specific version.
  nvm use [version] [arch]     : Switch to use the specified version. Optionally use "latest", "lts", or "newest".
                                 "newest" is the latest installed version. Optionally specify 32/64bit architecture.
                                 nvm use <arch> will continue using the selected version, but switch to 32/64 bit mode.
  nvm root [path]              : Set the directory where nvm should store different versions of node.js.
                                 If <path> is not set, the current root will be displayed.
  nvm [--]version              : Displays the current running version of nvm for Windows. Aliased as v.

バージョン

c:\>nvm --version
1.1.12

インストール可能な一覧

c:\>nvm list available

|   CURRENT    |     LTS      |  OLD STABLE  | OLD UNSTABLE |
|--------------|--------------|--------------|--------------|
|    23.1.0    |   22.11.0    |   0.12.18    |   0.11.16    |
|    23.0.0    |   20.18.0    |   0.12.17    |   0.11.15    |
|   22.10.0    |   20.17.0    |   0.12.16    |   0.11.14    |
|    22.9.0    |   20.16.0    |   0.12.15    |   0.11.13    |
|    22.8.0    |   20.15.1    |   0.12.14    |   0.11.12    |
|    22.7.0    |   20.15.0    |   0.12.13    |   0.11.11    |
|    22.6.0    |   20.14.0    |   0.12.12    |   0.11.10    |
|    22.5.1    |   20.13.1    |   0.12.11    |    0.11.9    |
|    22.5.0    |   20.13.0    |   0.12.10    |    0.11.8    |
|    22.4.1    |   20.12.2    |    0.12.9    |    0.11.7    |
|    22.4.0    |   20.12.1    |    0.12.8    |    0.11.6    |
|    22.3.0    |   20.12.0    |    0.12.7    |    0.11.5    |
|    22.2.0    |   20.11.1    |    0.12.6    |    0.11.4    |
|    22.1.0    |   20.11.0    |    0.12.5    |    0.11.3    |
|    22.0.0    |   20.10.0    |    0.12.4    |    0.11.2    |
|    21.7.3    |    20.9.0    |    0.12.3    |    0.11.1    |
|    21.7.2    |   18.20.4    |    0.12.2    |    0.11.0    |
|    21.7.1    |   18.20.3    |    0.12.1    |    0.9.12    |
|    21.7.0    |   18.20.2    |    0.12.0    |    0.9.11    |
|    21.6.2    |   18.20.1    |   0.10.48    |    0.9.10    |

This is a partial list. For a complete list, visit https://nodejs.org/en/download/releases

全てが見たい場合は、https://nodejs.org/en/download/releasesとのこと

インストールしたいバージョンが特に決まっていなければこちらから選ぶ形になります

インストール

22.11.0のバージョンをインストールしてみます

c:\>nvm install 22.11.0
Downloading node.js version 22.11.0 (64-bit)...
Extracting node and npm...
Complete
npm v10.9.0 installed successfully.


Installation complete. If you want to use this version, type

nvm use 22.11.0

インストールしてあるnode.jsの一覧

c:\>nvm list

    22.11.0
  * 20.18.0 (Currently using 64-bit executable)
  • がついているのが現在選択されているnode.jsのバージョンです

バージョンの切り替え

c:\>nvm use 22.11.0
Now using node v22.11.0 (64-bit)

※プロンプトを管理者権限ありで起動していないと、変更時にユーザーアカウント制御のダイアログが表示されます

選択中のバージョン

c:\>nvm current
v22.11.0
投稿日時: 2024-11-09 11:16:09
更新日時: 2024-11-09 11:57:09

マイグレーションの時に、列の文字数長さの設定でmaxの部分でエラーになるので、それぞれにどんな情報が入っていて、何を設定すべきか調べてみた。

Identityで生成されるテーブルとそれらの関係は以下のとおり

7つのテーブルがあり、Userとそれに関連するテーブルが4つと
Roleとそれに関するテーブルが2つと
UserとRoleを結ぶテーブルが1つの計7つで構成されている

AspNetUsersテーブル

AspNetUserテーブルは、ユーザーに関する主要な情報が格納

列名 nvarchar(max) 内容
Id ユーザーの一意の識別子。通常はGUID(ハイフンあり)
UserName ユーザーのログイン名
NormalizedUserName 検索などの比較で効率的に行うための正規化(大文字)
Email メールアドレス
NormalizedEmail 検索などの比較で効率的に行うための正規化(大文字)
EmailConfirmed メールアドレスによる確認ができたかを示すブール値
PasswordHash ユーザーパスワード(Hash値)
SecurityStamp セキュリティ目的で使用される一意の値
ConcurrencyStamp 同時実行制御に使用。GUIDが使われる
PhoneNumber 電話番号
PhoneNumberConfirmed 電話番号による確認ができたかを示すブール値
TwoFactorEnabled 二要素認証が有効かどうかを示すブール値
LockoutEnd アカウントロックアウトが終了する日時
LockoutEnabled アカウントのロックアウトが有効かどうかのブール値
AccessFailedCount ログイン失敗回数

・AIの見解
PasswordHash・・・一般的なハッシュアルゴリズム(例:SHA256)の出力は64文字程度です。将来的なハッシュアルゴリズムの変更に対応できる余裕を持たせて128文字程度が妥当ではないか

SecurityStamp・・・セキュリティスタンプはGUIDベースで生成されることが多いです。GUIDの文字列表現は通常36文字です。よって36文字

ConcurrencyStamp・・・同時実行制御に使用されるタイムスタンプです。通常GUIDが使用される。GUIDの文字列表現は通常36文字。よって36文字

PhoneNumber・・・国際電話番号を考慮すると15桁程度。中継電話会社経由の番号だと16桁になることもある。電話番号の桁数はいつかわってもおかしくないので多少余裕をもたせるとよさそう。よって20文字

AspNetUserClaimsテーブル

AspNetUserClaimsテーブルは、ーザーに関連付けられたクレーム情報が格納

列名 nvarchar(max) 内容
Id プライマリキーとして機能する一意の識別子
UserId クレームを設定するUserId
ClaimType クレームの種類や名前
ClaimValue クレームの値

クレームは、ユーザーはロールといった概念のほかに情報を追加し細かい認証の制御を行うために使用する
よって、クレームの種類や値を設定するのは開発者次第のためお好きな文字数を設定すればよい
長い名称を使うことなければ64文字とかで十分かなと

AspNetUserLoginsテーブル

AspNetUserLoginsテーブルは、外部認証プロバイダーを使用してログインしたユーザーの情報が格納

列名 nvarchar(max) 内容
LoginProvider 外部認証プロバイダーの名前(例:Google、Facebook、Microsoft等)
ProviderKey 認証プロバイダーがユーザーに割り当てた一意の識別子
ProviderDisplayName 認証プロバイダーの表示名を格納
UserId 該当するUserId

ProviderDisplayNameは、例えばGoogleの認証だとGoogleが格納されています。そこまで長い名前は入るとおもえないので、64文字程度もあれば十分かなと

AspNetUserTokensテーブル

AspNetUserTokensテーブルは、ユーザーに関連する各種トークン情報が格納

列名 nvarchar(max) 内容
UserId AspNetUsersテーブルのIdに対応する、ユーザーの一意の識別子
LoginProvider トークンを生成したプロバイダーの名前を指定
Name トークンの名前や種類を格納
Value トークンの実際の値を格納

どういうときにつかうのか?
パスワードリセット、メール確認、二要素認証、外部認証プロバイダー、リフレッシュトークン、カスタムトークンなどだそうです

AIの見解: OAuth 2.0のアクセストークンは通常200〜400文字程度
JWTベースのトークンは500〜1000文字程度になることがあります
リフレッシュトークンは通常、アクセストークンよりも長くなる傾向があります
トークンのサイズが将来的に大きくなる可能性を考慮する必要があります
よって2000文字程度の長さが妥当では?
とのこと。

AspNetUserRolesテーブル

AspNetUserRolesテーブルは、ユーザーとロールの関連付けに関する情報が格納

列名 nvarchar(max) 内容
UserId UserIdを設定
RoleId RoleIdを設定

AspNetRolesテーブル

AspNetRolesテーブルは、アプリケーション内のロールに関する情報が格納

列名 nvarchar(max) 内容
Id UserIdを設定
Name RoleIdを設定
NormalizedName 検索などの比較で効率的に行うための正規化(大文字)
ConcurrencyStamp 同時実行制御に使用。GUIDが使われる

・AIの見解
ConcurrencyStamp・・・同時実行制御に使用されるタイムスタンプです。通常GUIDが使用される。GUIDの文字列表現は通常36文字。よって36文字

AspNetRoleClaimsテーブル

AspNetRoleClaimsテーブルは、ロールに関連付けられた追加の情報(クレーム)が格納
AspNetUserClaimsのRole版

列名 nvarchar(max) 内容
Id プライマリキーとして機能する一意の識別子
RoleId クレームを設定するRoleId
ClaimType クレームの種類や名前
ClaimValue クレームの値

クレームは、ユーザーはロールといった概念のほかに情報を追加し細かい認証の制御を行うために使用する
よって、クレームの種類や値を設定するのは開発者次第のためお好きな文字数を設定すればよい
長い名称を使うことなければ64文字とかで十分かなと


同時実行制御について

同じレコードを複数のリクエストにより変更を行った際に、どちらのリクエストで変更したのか、判断するために、ConcurrencyStampにGUIDを設定し判断に使っています。

  1. Selectで対象のレコードの情報を取得する
  2. 新しいGUIDを取得する
  3. 対象レコードを取得する際に、1で取得したConcurrencyStampも条件に含めレコードをしぼり更新を行う。その際に新しいGUIDを設定する

これにより、同時実行した場合、更新ができれば自分のリクエストにより更新ができたことになり
更新ができない場合(他のリクエストによりすでにConcurrencyStampの値が変わっていた場合)は更新が失敗することになります

投稿日時: 2024-10-12 06:24:12
更新日時: 2024-10-12 12:13:12

最近の投稿

最近のコメント

タグ

アーカイブ

その他