All Articles

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

Scoop * Cmder

コマンドライン・インストーラの 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 > EnvironmentSet up environment variables, cmd.exe aliases, codepage に、set LANG=ja_JP.UTF-8 を追記します。

Settings

Cmder のフォントを変更

Settings > General > FontsMain console fontAlternative font (pseudographics, CJK, etc.) を変更します。

Settings

Cmder のホットキーを変更

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

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

Settings

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

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

Settings

Cmder のプロンプトを変更

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

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

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

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

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

最終行の後に 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 のコマンド

bucket をアップデート

scoop update

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

scoop status

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

scoop update アプリケーション名

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

scoop cleanup アプリケーション名

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

scoop install アプリケーション名

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

scoop uninstall アプリケーション名

Scoop をアンインストール

scoop uninstall scoop