トップページ

Windowsのカスタマイズ

はじめに

Windowsを使い始める前にやっておくべきことを紹介します。

パーティションの分割

WindowsはCドライブにインストールされます。したがってWindowsを再インストールするとCドライブに作成したデータはすべて削除されてしまいます。このような場合に備えてCドライブとは別のドライブにデータを保存するのが一般的です。

PCでは物理的に1台しかないハードディスクを論理的に複数のハードディスクとして扱うことができます。具体的にはハードディスクを区画(パーティション)に分割し、その区画にドライブを割り当てます。

Cドライブが占有しているハードディスクにDドライブを追加するには、Cドライブのパーティションを圧縮して空いたスペースに新しくパーティションを作成し、そのパーティションにDドライブを割り当てます。詳細についてはWindowsでパーティションを増やすには?を参照してください。

パーティションの暗号化

WindowsがインストールされているCドライブ(が割り当てられているパーティション)をシステムドライブ(システムパーティション)といいます。情報漏洩を防ぐためにシステムドライブ以外のドライブのパーティションをVeraCryptで暗号化します。暗号化したパーティションはパスワードを入力して任意のドライブにマウントします。詳細についてはVeraCryptのダウンロードと使い方を参照してください。

システムのカスタマイズ

Windows11でコントロールパネルを開く方法についてはWindows11でコントロールパネルの開き方とショートカットを作る方法を参照してください。

自動再生の無効化

  1. スタートメニューから [コントロール パネル] > [ハードウェアとサウンド] > [自動再生] を選択します。
  2. [すべてのメディアとデバイスで自動再生を使う]のチェックを外して[保存]をクリックします。

視覚効果の無効化

  1. スタートメニューから [コントロール パネル] > [システムとセキュリティ] > [システム] > [システムの詳細設定] を選択します。
  2. [システムのプロパティ]ダイアログの [パフォーマンス] > [設定] をクリックします。
  3. [視覚効果]タブから[パフォーマンスを優先する]をチェックして[OK]をクリックします。

常駐プログラムおよび自動起動の設定

  1. 検索窓に[msconfig]と入力して[msconfig.exe]を選択します。
  2. [システム構成]ダイアログの以下を設定して[OK]をクリックします。

キーバインドのカスタマイズ

ChangeKeyでキーバインドを変更します。押しにくい位置にある使用頻度の高いキー(Ctrlキー・Tabキー・Escキーなど)と押しやすい位置にある使用頻度の低いキー(CapsLockキー・Windowsキー・アプリケーションキーなど)を入れ替えます。

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

窓の杜/k本的に無料ソフト・フリーソフト/FreeSoftNavi/フリーソフト100/お気に入りのソフトなどを参考にして自分に必要なアプリケーションをインストールします。

ポータブルアプリケーション

ポータブルアプリケーションはUSBメモリなどのメディアに入れて持ち運ぶことができるアプリケーションです。主要なアプリケーションのポータブル版はPortableApps.comから入手できます。ポータブルアプリケーションはインストール作業が不要であり、フォルダをコピーするだけで簡単にバックアップできます。1

ウェブブラウザのカスタマイズ

Firefox/Chromeおよび両者の派生ブラウザには自由に機能を追加できます。

uBlockを追加すればウェブページに表示される広告を一掃できます。インストールしたら次の手順にしたがって設定します。

  1. ツールバーのuBlockのアイコンをクリックして[ダッシュボード]のアイコンをクリックします。
  2. 豆腐フィルタ(国内サイト用のフィルタ)の配布サイトから「フィルタを購読する」をクリックして[フィルターリスト]に豆腐フィルタを追加します。
  3. [フィルターリスト]の[マイフィルター]および[豆腐フィルタ]を有効にします。デフォルトでいくつかのフィルタが有効になっていますが、そのままで問題ないでしょう。
  4. 必要に応じて他のフィルタも有効にします。EasylistとAdGuardはどちらか一方を有効にしておけばいいでしょう。
  5. [変更を適用]をクリックします。
  6. ブロックしたくないウェブサイトがあれば[信頼するサイト]に登録します。

ウェブページにブロックしたいものがあれば、右クリックメニューから[要素をブロック]を選択します。自動的にフィルタが作成されて[マイフィルター]に登録されます。

PowerShellのカスタマイズ

Windowsターミナルは、文字を入力してコマンドを実行するためのアプリケーションです。Windowsパッケージマネージャのwingetというコマンドを使用すると、ターミナルからアプリケーションをインストールしたりアップデートしたりできます。

# winget update -r
# winget install Microsoft.PowerShell Microsoft.Edit sharkdp.bat GNU.Wget2

ターミナルのメニューから[設定]を選択するとターミナルの見た目や機能を細かくカスタマイズできます。コンソールアプリケーション(CUIのアプリケーション)をよく使用するのであれば、ターミナルのフォントや配色を見やすいものにしておきましょう。[プロファイル]の [既定値] > [外観] からフォントを指定できます。ターミナル用のフォントとしてCascadiaが用意されています。日本語に対応した見やすいフォントとしてはUDEV-GothicPlemolJPなどがあります。

ターミナルでWindowsを操作するにはPowerShellを使用します。PowerShellは従来のコマンドプロンプトを置き換えるものです。コマンドプロンプトは機能が乏しく、ほとんど使い物になりませんでした。オブジェクト指向のPowerShellでは、やりたいことを簡単に記述できるようになりました。さまざまなデータとそれらのデータを扱う処理をひとまとめにしたものがオブジェクトです。

頻繫に行う定型的な作業はPowerShellのスクリプトとして実行できます。スクリプトとは簡易的なプログラムのようなものです。PowerShellのコマンドの使い方やスクリプトの書き方については他の記事を参照してください。スクリプトは自分の手で書く必要はなく、Copilotなどの生成AIに書いてもらうといいでしょう。

PowerShellの起動時に%UserProfile%\Documents\PowerShell\profile.ps1の内容が実行されます。このファイルを使用してPowerShellをカスタマイズできます。ここでは以下のようにしてprofile.dフォルダにあるスクリプトファイル(*.ps1)をインポートするようにします。こうすればスクリプトを用途に応じて複数のファイルに分割できます。

%UserProfile%\Documents\PowerShell\profile.ps1
# サブプロファイルスクリプトのディレクトリパスを設定
$path = Split-Path -Path $PROFILE.CurrentUserCurrentHost
$profileScriptsPath = Join-Path -Path $path -ChildPath "profile.d"

# profile.dフォルダ内のすべての*.ps1スクリプトをインポート
Get-ChildItem -Path $profileScriptsPath -Filter "*.ps1" | ForEach-Object {
    . $_.FullName
}

settings.ps1にはPowerShellの全般的な設定を記述します。

%UserProfile%\Documents\PowerShell\profile.d\settings.ps1
$ConfirmPreference = "Medium" # 確認メッセージのレベル

# 文字コードをUTF-8に設定(日本語環境での文字化け防止)
$OutputEncoding = [System.Text.Encoding]::UTF8

# PSReadLineの設定(履歴・補完・キーバインド)
Set-PSReadLineOption -EditMode Emacs # 編集モードはWindows/Emacs/Viから選択可能
Set-PSReadLineOption -HistorySaveStyle SaveIncrementally
Set-PSReadLineOption -MaximumHistoryCount 5000
Set-PSReadLineOption -PredictionSource History

# プロンプトのカスタマイズ(例:現在のディレクトリを表示)
function prompt { "PS $($executionContext.SessionState.Path.CurrentLocation)> " }

function .. { Set-Location .. }
function ... { Set-Location ../.. }

# 管理者権限でコマンドを実行する(sudo相当)
function sudo {
    param([Parameter(Mandatory = $true, ValueFromRemainingArguments = $true)]$Command)
    Start-Process pwsh -ArgumentList "-NoProfile -Command &{ $Command }" -Verb RunAs
}

# プロファイルを読み込む
function reload {
    $path = $PROFILE.CurrentUserAllHosts
    . $path;
    Write-Host "プロファイルをリロードしました: $($path)"
}

# PowerShellのバージョンを表示する
function pwver { $PSVersionTable }

# ファイル・フォルダを強制削除する(要注意)
# function rmrf {
#     param([Parameter(Mandatory = $true)]$path)
#     Remove-Item -LiteralPath $path -Recurse -Force
# }

# よく使うエイリアスを一覧表示する
function aliases {
    Get-Alias | Where-Object { $_.Definition -match 'Get-ChildItem|git|Move-Item|Copy-Item|Remove-Item|New-Item|Get-Process|Get-Content' } | Format-Table -AutoSize
}

# 空ファイルを作成する(UNIX風)
function touch {
    param([string]$name)
    New-Item -ItemType File -Name $name -Force
}

# カレントディレクトリをエクスプローラーで開く
function ex { Invoke-Item (Get-Location) }

# ファイルサイズを人間が読みやすい形式で表示する
function ls-size {
    Get-ChildItem | Select-Object Name, @{Name = "Size(MB)"; Expression = { "{0:N2}" -f ($_.Length / 1MB) } }
}

aliases.ps1にはコマンドのエイリアス(別名)を指定します。

%UserProfile%\Documents\PowerShell\profile.d\aliases.ps1
Set-Alias -Confirm:$false -Name c -Value Clear-Host
Set-Alias -Confirm:$false -Name j -Value bat.exe    # sharkdp.bat (色分け表示に対応したページャ)
Set-Alias -Confirm:$false -Name e -Value edit.exe   # Microsoft.Edit (コンソールで使えるテキストエディタ)
Set-Alias -Confirm:$false -Name off -Value Disable-Monitor
Set-Alias -Confirm:$false -Name lock -Value Lock-System
Set-Alias -Confirm:$false -Name reboot -Value Restart-Computer
Set-Alias -Confirm:$false -Name halt -Value Stop-Computer
Set-Alias -Confirm:$false -Name which -Value Get-Command
Set-Alias -Confirm:$false -Name open -Value Invoke-Item

functions.ps1には自分が行う作業をコマンド(関数)として定義します。

%UserProfile%\Documents\PowerShell\profile.d\functions.ps1
# 環境変数を取得する
function Get-Path {
    return [System.Environment]::GetEnvironmentVariable("Path", "Machine") +
    ";" +
    [System.Environment]::GetEnvironmentVariable("Path", "User")
}

# 環境変数をリスト表示する
function Show-Path {
    $(Get-Path).Split(";").Where({ $_ -ne "" }).ForEach({ Write-Output $_ }) | Sort-Object
}

# 環境変数を更新する
function Update-PathVariable {
    $env:Path = Get-Path
}

if (-not ("MonitorControl" -as [type])) {
    Add-Type @"
using System;
using System.Runtime.InteropServices;
public class MonitorControl {
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
    public static void TurnOff() {
        SendMessage((IntPtr)0xFFFF, 0x0112, (IntPtr)0xF170, (IntPtr)2);
    }
}
"@
}

# ディスプレイをOFFにする
function Disable-Monitor {
    [MonitorControl]::TurnOff()
}

# システムをロックしてからディスプレイをOFFにする
function Lock-System {
    param(
        [int]$DelaySeconds = 5
    )
    rundll32.exe user32.dll, LockWorkStation
    Start-Sleep -Seconds $DelaySeconds
    [MonitorControl]::TurnOff()
}

# wget2でウェブサイトをダウンロードする
function Get-Website {
    param (
        [Parameter(Mandatory = $true)]
        [string]$url
    )
    wget2 --mirror --convert-links --adjust-extension --page-requisites --no-parent $url
}

  1. インストール作業が必要なアプリケーションでもポータブル版としてインストールできることがあります。 ↩︎