ScoopでCmderとNode.jsをインストール

投稿日:

コマンドライン・インストーラのScoopを使用し、コンソール・エミュレータのCmderと、JavaScript環境のNode.jsをインストールした際のメモ。

Scoopのインストール

PowerShellのバージョンを確認

Scoopのインストールにはバージョン3以上のPowerShellが必要なので、PowerShellを起動して確認します。

$psversiontable.psversion.major

Scoopのインストール先を変更

普通にインストールを始めると、ユーザー・フォルダ(All Users用はProgramData)内のscoopフォルダにScoop本体や管理するアプリケーションが入りますが、起動ドライブに入れずに済むものはなるべく入れたくないので、Scoopのインストール先を変更します。

PowerShellで環境変数にSCOOP(All Users用はSCOOP_GLOBAL)を登録します。

[environment]::setEnvironmentVariable('SCOOP','Scoopのインストール先のパス','User')
$env:SCOOP='Scoopのインストール先のパス'

All Users用の環境変数登録には管理者権限が必要なので、管理者権限でPowerShellを起動します。

[environment]::setEnvironmentVariable('SCOOP_GLOBAL','All Users用のScoopのインストール先のパス','Machine')
$env:SCOOP_GLOBAL='All Users用のScoopのインストール先のパス'

PowerShellの実行ポリシーを変更

PowerShellでローカル・スクリプトを実行出来るよう、実行ポリシーを変更します。

set-executionpolicy remotesigned -scope currentuser

Scoopをインストール

PowerShellでScoopのインストール・スクリプトを実行します。

iex (new-object net.webclient).downloadstring('https://get.scoop.sh')

Scoopのヘルプを表示

インストールが終了したら、動作確認を兼ねてヘルプを表示してみます。

ここからはコマンドプロンプトでも可。

scoop help

extras bucketを導入

インストール出来るアプリケーションのコレクションをbucketと呼び、Scoopのインストールと同時に利用出来るmain bucketに目的のCmderとNode.jsはありますが、更にインストールしたいアプリケーションを増やすため、extras bucketも導入します。

scoop bucket add extras

目的のアプリケーションが見つからない場合は、awesome-scoopで探してみましょう。

jfut bucketiyokan-jp bucketのように、日本語版アプリケーション用のbucketを公開している方もいらっしゃるようです。

scoop bucket add jfut https://github.com/jfut/scoop-jfut.git
scoop bucket add iyokan-jp https://github.com/tetradice/scoop-iyokan-jp

versions bucketを導入

Scoopは最新バージョンしかインストール出来ませんが、過去のバージョンもインストール出来るようversions bucketを導入します。

scoop bucket add versions

Cmderのインストール

PowerShellやコマンドプロンプトでは味気ないので、Cmderをインストールします。

Cmderを検索

まずはCmderを検索してみます。

scoop search cmder

Cmderをインストール

main bucketにCmder(cmder)があると確認出来たのでインストールします。

scoop install cmder

Cmderを起動

スタートメニューのScoop Appsフォルダ内にショートカットが作成され、起動出来るようになります。

環境変数のPathに登録されているScoopのインストール先のshimsフォルダにcmder.exeのshimが作成され、コマンドラインからも起動出来るようになります。

cmder

コンテキストメニューにCmder Hereを追加

コンテキストメニューからCmderを起動出来る、Cmder Hereをコマンドラインで追加します。

cmder.exe /REGISTER USER

All Users用のCmder Hereは管理者権限で追加します。

cmder.exe /REGISTER ALL

lsコマンドでの文字化けを解消

lsコマンドを実行すると日本語のフォルダ名やファイル名が文字化けするので、Cmderの起動時に文字コードの設定をします。

Settings > Startup > EnvironmentのSet up environment variables, cmd.exe aliases, codepageに、set LANG=ja_JP.UTF-8を追記します。

Cmderのフォントを変更

Settings > General > FontsのMain console fontとAlternative font (pseudographics, CJK, etc.)を変更します。

Cmderのホットキーを変更

コピーは文字列を選択するだけで出来るし、Ctrl+Cは割り込みに使用したいので変更します。

Settings > Keys & Macroの右上にある検索ボックスにCtrl+Cと入力し、表示されたホットキーを選択、Choose hotkeyのCを削除します。

ペーストは右クリックで出来るので変更します。

Settings > Keys & Macroの右上にある検索ボックスにCtrl+Vと入力し、表示されたホットキーを選択、Choose hotkeyのVを削除します。

Cmderのプロンプトを変更

デフォルトのプロンプト(λ)では、カーソルキーの上下でコマンドヒストリを表示させるときに表示が崩れる場合があるようなので、Cmder の Prompt を修正する方法 — 適当に だらだらと 楽しくを参考に変更します。

Scoopのインストール先のパス\apps\cmder\current\vendor\clink.luaをエディタで開き、21行目のlocal function set_prompt_filter()から49行目のendまでをコピーします。

Scoopのインストール先のパス\persist\cmder\configフォルダ内にprompt.luaを作成し、ペーストします。

23行目のlocal lambda = "λ"をlocal lambda = ">"に変更します。

1行目のlocal function set_prompt_filter()をlocal function set_my_prompt_filter()に変更します。

最終行の後にclink.prompt.register_filter(set_my_prompt_filter, 1)を追記します。

local function set_my_prompt_filter()
    -- get_cwd() is differently encoded than the clink.prompt.value, so everything other than
    -- pure ASCII will get garbled. So try to parse the current directory from the original prompt
    -- and only if that doesn't work, use get_cwd() directly.
    -- The matching relies on the default prompt which ends in X:\PATH\PATH>
    -- (no network path possible here!)
    local old_prompt = clink.prompt.value
    local cwd = old_prompt:match('.*(.:[^>]*)>')
    if cwd == nil then cwd = clink.get_cwd() end

    -- environment systems like pythons virtualenv change the PROMPT and usually
    -- set some variable. But the variables are differently named and we would never
    -- get them all, so try to parse the env name out of the PROMPT.
    -- envs are usually put in round or square parentheses and before the old prompt
    local env = old_prompt:match('.*%(([^%)]+)%).+:')
    -- also check for square brackets
    if env == nil then env = old_prompt:match('.*%[([^%]]+)%].+:') end

    -- build our own prompt
    -- orig: $E[1;32;40m$P$S{git}{hg}$S$_$E[1;30;40m{lamb}$S$E[0m
    -- color codes: "\x1b[1;37;40m"
    local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;39;40m{lamb} \x1b[0m"
    local lambda = ">"
    cmder_prompt = string.gsub(cmder_prompt, "{cwd}", cwd)
    if env ~= nil then
        lambda = "("..env..") "..lambda
    end
    clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", lambda)
end

clink.prompt.register_filter(set_my_prompt_filter, 1)

Node.jsのインストール

Node.jsを検索

scoop search nodejs

Node.jsの最新版をインストール

main bucketに最新版(nodejs)があると確認出来たのでインストールします。

scoop install nodejs

Node.jsのバージョンを確認

環境変数のPathに登録されたScoopのインストール先のパス\apps\nodejs\current\binとScoopのインストール先のパス\apps\nodejs\currentが反映されるようCmderを再起動し、Node.js, npm, npxのバージョンを確認します。

node -v
npm -v
npx -v

Node.jsの推奨版をインストール

main bucketに推奨版(nodejs-lts)があるのでインストールします。

scoop install nodejs-lts

Node.jsのバージョンを確認

環境変数のPathに登録されたScoopのインストール先のパス\apps\nodejs-lts\current\binとScoopのインストール先のパス\apps\nodejs-lts\currentが反映されるようCmderを再起動し、Node.js, npm, npxのバージョンを確認します。

node -v
npm -v
npx -v

Node.jsを最新版に切り替え

最新版(nodejs)の後に推奨版(nodejs-lts)をインストールしたら、推奨版(nodejs-lts)に切り替わっていたので、最新版(nodejs)に切り替えてみます。

scoop reset nodejs

環境変数のPathが書き換えられ、Scoopのインストール先のパス\apps\nodejs\current\binとScoopのインストール先のパス\apps\nodejs\currentが先頭に移動し、最新版(nodejs)に切り替わります。

Node.jsを推奨版に切り替え

最新版(nodejs)から推奨版(nodejs-lts)に切り替えてみます。

scoop reset nodejs-lts

環境変数のPathが書き換えられ、Scoopのインストール先のパス\apps\nodejs-lts\current\binとScoopのインストール先のパス\apps\nodejs-lts\currentが先頭に移動し、推奨版(nodejs-lts)に切り替わります。

prefixを確認

パッケージをグローバル・インストールしたら、コマンドが見つからずにエラーになってしまったので、npm configで設定を確認したら、ユーザー・フォルダ内の.npmrcに、過去にインストールしていたnodist用のprefixが設定されたまま残っていました。

npm config ls
; userconfig ユーザー・フォルダのパス\.npmrc
prefix = "nodistのインストール・フォルダのパス\\bin"

; builtin config undefined
cache = "scoopのインストール・フォルダのパス\\persist\\nodejs-lts\\cache"

このままパスを通して使用出来るようにすると、Node.jsを推奨版(nodejs-lts)から最新版(nodejs)に切り替えても、同じフォルダ内にパッケージがインストールされてしまうので、.npmrcからprefixを削除します。

再びnpm configで設定を確認すると、prefixがNode.jsの推奨版(nodejs-lts)用に変わりました。

npm config ls
; builtin config undefined
cache = "scoopのインストール・フォルダのパス\\persist\\nodejs-lts\\cache"
prefix = "scoopのインストール・フォルダのパス\\persist\\nodejs-lts\\bin"

Node.jsを最新版(nodejs)に切り替えてからnpm configで設定を確認すると、prefix(とcache)がNode.jsの最新版(nodejs)用に変わりました。

npm config ls
; builtin config undefined
cache = "scoopのインストール・フォルダのパス\\persist\\nodejs\\cache"
prefix = "scoopのインストール・フォルダのパス\\persist\\nodejs\\bin"

これで、グローバル・インストールしたパッケージが同じフォルダ内にインストールされてしまう問題や、コマンドが見つからずにエラーになる問題が解消されました。

アップデート

アプリケーションのアップデートを確認

scoop status アプリケーション名

アプリケーションをアップデート

scoop update アプリケーション名

アプリケーションの旧バージョンを削除

scoop cleanup アプリケーション名

アプリケーション名を*にすると全アプリケーションの旧バージョンを削除出来ます。

scoop cleanup *

Scopeのアップデートを確認

scoop status

Scopeをアップデート

scoop update

ScopeのアップデートにはGitが必要ですが、既にインストール済なので、次回のアップデート時にScoopからインストールしてみます。

アンインストール

アプリケーションをアンインストール

scoop uninstall アプリケーション名

Scopeをアンインストール

scoop uninstall scoop
The following two tabs change content below.

isonishi

小規模ウェブサイトの制作を請け負うフリーランサーです。職種はフロントエンドエンジニアが近いと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です