概要

2025年10月にサポート終了を迎えたWindows 10。

巷では

  • 入門用のWindows11搭載スペックは……
  • 古いPCでもLinuxであれば……

などの記事を見かけたと思います。

しかしながら

  • 入門用とされるWindows11のスペック( N100 / 8GB程度メモリ )のPCを買う
  • それよりもはるかに劣るスペックのPCをLinuxに換装する

程度ではビジネスユースはおろか日常の

  • オフィスソフト
  • ブラウザ

の同時利用には「とうてい耐えられない」と言い切れる根拠。

言い換えると「絶対に越えられない壁」という奴を「リソースの消費量」という形で証明します。

それも、巷にあるベンチマークソフトを使わずに。『アカギ』で言うところの「俺はもっと ストレートに行くよ……」です。

使うもの

  • Windows 11
  • テキストエディタ
  • PowerShell
  • Officeソフト(この例ではWord)
  • Chrome

のみです。

Word計測ツールの用意

テキストエディタを用いて、以下のパワーシェルスクリプトを作成します。

C:\batあたりにディレクトリを掘っておくといいでしょう。

  • benchmark_word.ps1
# --- ユーザー設定 ---
# ファイルサーバ上のWordファイル(UNCパス)
# サンプルとして、ファイルサーバー名、共有名、ディレクトリ名を一般的なものに変更しています。
# 実際の環境に合わせてパスを変更してください。
$FilePath = '\\YourFileServer\ShareName\SampleProject\TestDocument.docx'

# ログファイル(ローカル保存)
$LogPath = "C:\Temp\Log\word_benchmark_log.txt"
# ------------------

# --- ログ出力関数(リトライ付き) ---
function Write-Log {
    param (
        [string]$Message,
        [string]$Color = "White"
    )
    # コンソール出力
    Write-Host $Message -ForegroundColor $Color

    # ログファイル出力(リトライ付き)
    $maxRetries = 5
    $retryDelay = 500 # ミリ秒

    for ($i = 0; $i -lt $maxRetries; $i++) {
        try {
            # ログファイルのディレクトリが存在しない場合は作成
            $LogDir = Split-Path -Path $LogPath -Parent
            if (-not (Test-Path $LogDir)) {
                New-Item -Path $LogDir -ItemType Directory | Out-Null
            }

            Add-Content -Path $LogPath -Value ("[{0}] {1}" -f (Get-Date -Format "yyyy-MM-dd HH:mm:ss"), $Message)
            break
        } catch {
            Write-Host "WARN: ログ書き込みに失敗しました。リトライ中... ($i/$maxRetries)" -ForegroundColor "DarkYellow"
            Start-Sleep -Milliseconds $retryDelay
        }
    }
}

# --- 初期化 ---
# ログファイルをクリア
Clear-Content -Path $LogPath -ErrorAction SilentlyContinue
Write-Log -Message "--- Word(UNCパス指定)ベンチマークテスト ---" -Color "Yellow"

# --- ファイル存在確認 ---
if (-not (Test-Path $FilePath)) {
    Write-Log -Message "エラー: 指定されたファイルが見つかりません。パスを確認してください: $FilePath" -Color "Red"
    return
}

# --- 既存のWordプロセスを終了 ---
Write-Log -Message "INFO: 既存のWordプロセスをクリーンアップします..." -Color "White"
Get-Process winword -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Sleep -Seconds 2

# --- 変数初期化 ---
$wordApp = $null
$document = $null
$TimeTaken = $null
$ProcInfo = $null
# COMメソッドの省略可能な引数に使用する値
$Missing = [System.Reflection.Missing]::Value

try {
    # 1. Word起動とファイルオープンの時間を計測
    Write-Log -Message "1. Wordの起動とファイルオープンを計測中..." -Color "White"
    $TimeTaken = Measure-Command {
        # Wordアプリケーションのインスタンスを作成
        $wordApp = New-Object -ComObject "Word.Application"

        # ファイルを開く (引数: FilePath, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePassword, Format, Encoding, Visible)
        $document = $wordApp.Documents.Open(
            $FilePath,
            $false,         # ConfirmConversions
            $false,         # ReadOnly
            $false,         # AddToRecentFiles
            $Missing,       # PasswordDocument
            $Missing,       # PasswordTemplate
            $false,         # Revert
            $Missing,       # WritePassword
            $Missing,       # Format
            $Missing,       # Encoding
            $false          # Visible (False: 開いた直後は非表示)
        )
    }

    # Wordを可視化し、プロセスが完全に立ち上がるのを待つ
    $wordApp.Visible = $true
    Start-Sleep -Seconds 2 

    $StartTimeSec = [math]::Round($TimeTaken.TotalSeconds, 2)
    Write-Log -Message "  [結果] 起動&ファイルオープン時間: $StartTimeSec 秒" -Color "Green"

    # 2. リソース使用量の計測
    Write-Log -Message "2. リソース使用量を計測中..." -Color "White"
    Start-Sleep -Seconds 3 # リソースが安定するのを待つ

    $ProcInfo = Get-Process winword -ErrorAction SilentlyContinue
    if ($ProcInfo) {
        # 複数のwinwordプロセスがある場合の合計を計測
        $TotalMemMB = [math]::Round( ($ProcInfo | Measure-Object -Property WS -Sum).Sum / 1MB, 2)
        $TotalCpuSec = ($ProcInfo | Measure-Object -Property CPU -Sum).Sum
        if ($TotalCpuSec -eq $null) { $TotalCpuSec = 0 }
        $TotalCpuSec = [math]::Round($TotalCpuSec, 2)

        Write-Log -Message "  [結果] メモリ使用量 (WS 合計): $TotalMemMB MB" -Color "Green"
        Write-Log -Message "  [結果] CPU使用時間 (Total 合計): $TotalCpuSec 秒" -Color "Green"
    } else {
        Write-Log -Message "  [警告] Wordプロセスが見つかりませんでした。" -Color "Yellow"
    }

} catch {
    Write-Log -Message "致命的なエラーが発生しました: $($_.Exception.Message)" -Color "Red"
    # エラーの詳細ログ
    Write-Log -Message "エラー詳細: $($_.ScriptStackTrace)" -Color "Red"
} finally {
    # 3. クリーンアップ
    Write-Log -Message "3. クリーンアップを実行します。" -Color "White"

    if ($document -ne $null) {
        # 変更を保存せずに閉じる
        try {
            $document.Close($false) 
            [System.Runtime.InteropServices.Marshal]::ReleaseComObject($document) | Out-Null
        } catch {
            Write-Log -Message "WARN: Document COMオブジェクトのクリーンアップ中にエラー: $($_.Exception.Message)" -Color "DarkYellow"
        }
    }

    if ($wordApp -ne $null) {
        try {
            $wordApp.Quit()
            [System.Runtime.InteropServices.Marshal]::ReleaseComObject($wordApp) | Out-Null
        } catch {
            Write-Log -Message "WARN: Application COMオブジェクトのクリーンアップ中にエラー: $($_.Exception.Message)" -Color "DarkYellow"
        }
    }

    # 変数の解放
    Remove-Variable wordApp, document, ProcInfo, TimeTaken -ErrorAction SilentlyContinue

    # 残っているWordプロセスを強制終了
    $remaining = Get-Process winword -ErrorAction SilentlyContinue
    if ($remaining) {
        Write-Log -Message "INFO: 残留Wordプロセスを強制終了しました。" -Color "White"
        $remaining | Stop-Process -Force
    }

    Write-Log -Message "--- テスト完了 ---" -Color "Yellow"
}

開きたいファイルを正確に指定し、文字コードをUTF-8(BOMつき)で保存します。

Powershellの実行

まず、Windows Powershellを開きます。(管理者権限である必要はありません)

次に、スクリプトに一時的な実行権を与えます。(デフォルトでは自作のスクリプトの実行権が与えられていないため)

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

そうした上で、

& "C:\script\benchmark_word.ps1"

を実行。

結果は以下の通りです。

--- Word(UNCパス指定)ベンチマークテスト ---
INFO: 既存のWordプロセスをクリーンアップします...
1. Wordの起動とファイルオープンを計測中...
  [結果] 起動&ファイルオープン時間: 1.36 秒
2. リソース使用量を計測中...
  [結果] メモリ使用量 (WS 合計): 289.7 MB
  [結果] CPU使用時間 (Total 合計): 4.44 秒
3. クリーンアップを実行します。
INFO: 残留Wordプロセスを強制終了しました。

と、300MB近くの使用量がありました。数MB程度の文書を開く際でも、ワードのようなモダンアプリケーションはメモリもCPUもそれなりに使うことが判明。

ブラウザの場合

続いて、ブラウザの場合はどうなるでしょうか? 先ほどのフォルダに

benchmark_chrome.ps1

を作成します。

# --- ユーザー設定 ---
# ログファイル(ローカル保存)
$LogPath = "C:\Temp\Log\chrome_benchmark_log.txt"
# Chromeの実行ファイルパス (通常はこのままでOK)
$ChromePath = "C:\Program Files\Google\Chrome\Application\chrome.exe"
# 検索するURLとクエリ
$InitialUrl = "https://www.google.com/search?q=wikipedia"
# ------------------

# --- ログ出力関数(リトライ付き) ---
# (前回のスクリプトから変更なし)
function Write-Log {
    param (
        [string]$Message,
        [string]$Color = "White"
    )
    Write-Host $Message -ForegroundColor $Color

    $maxRetries = 5
    $retryDelay = 500 # ミリ秒

    for ($i = 0; $i -lt $maxRetries; $i++) {
        try {
            $LogDir = Split-Path -Path $LogPath -Parent
            if (-not (Test-Path $LogDir)) {
                New-Item -Path $LogDir -ItemType Directory | Out-Null
            }

            Add-Content -Path $LogPath -Value ("[{0}] {1}" -f (Get-Date -Format "yyyy-MM-dd HH:mm:ss"), $Message)
            break
        } catch {
            Write-Host "WARN: ログ書き込みに失敗しました。リトライ中... ($i/$maxRetries)" -ForegroundColor "DarkYellow"
            Start-Sleep -Milliseconds $retryDelay
        }
    }
}

# --- 初期化 ---
Clear-Content -Path $LogPath -ErrorAction SilentlyContinue
Write-Log -Message "--- Chrome Webアクセス・ベンチマークテスト ---" -Color "Yellow"

# --- 実行ファイル存在確認 ---
if (-not (Test-Path $ChromePath)) {
    Write-Log -Message "エラー: Chrome実行ファイルが見つかりません。パスを確認してください: $ChromePath" -Color "Red"
    return
}

# --- 既存のChromeプロセスを終了 ---
Write-Log -Message "INFO: 既存のChromeプロセスをクリーンアップします..." -Color "White"
Get-Process chrome -ErrorAction SilentlyContinue | Stop-Process -Force
Start-Sleep -Seconds 2

# --- 変数初期化 ---
$TimeTaken = $null
$ProcInfo = $null

try {
    # 1. Chrome起動、Google検索、Wikipedia移動の時間を計測
    Write-Log -Message "1. Chrome起動からWikipedia表示までの時間を計測中..." -Color "White"

    # ストップウォッチを開始
    $Stopwatch = [System.Diagnostics.Stopwatch]::StartNew()

    # Chromeを起動し、Google検索URLへ移動
    # -Wait: プロセスが終了するまで待機(この場合はタブを閉じるまで待機してしまうため使用しない)
    $Proc = Start-Process -FilePath $ChromePath -ArgumentList $InitialUrl -PassThru

    # プロセスが完全に立ち上がり、ページがロードされるのを待機
    # ページの完全なロード完了を正確に捕捉するのは困難なため、ここでは固定の待機時間を使用します。
    Start-Sleep -Seconds 5

    # ストップウォッチを停止
    $Stopwatch.Stop()

    $TimeTaken = $Stopwatch.Elapsed
    $StartTimeSec = [math]::Round($TimeTaken.TotalSeconds, 2)
    Write-Log -Message "  [結果] 起動&Webアクセス時間: $StartTimeSec 秒" -Color "Green"

    # 2. リソース使用量の計測
    Write-Log -Message "2. リソース使用量を計測中..." -Color "White"
    Start-Sleep -Seconds 3 # リソースが安定するのを待つ

    # Chromeは複数プロセスで実行されるため、全てを対象とする
    $ProcInfo = Get-Process chrome -ErrorAction SilentlyContinue
    if ($ProcInfo) {
        # 複数のchromeプロセスの合計を計測
        $TotalMemMB = [math]::Round( ($ProcInfo | Measure-Object -Property WS -Sum).Sum / 1MB, 2)
        $TotalCpuSec = ($ProcInfo | Measure-Object -Property CPU -Sum).Sum
        if ($TotalCpuSec -eq $null) { $TotalCpuSec = 0 }
        $TotalCpuSec = [math]::Round($TotalCpuSec, 2)

        Write-Log -Message "  [結果] メモリ使用量 (WS 合計): $TotalMemMB MB" -Color "Green"
        Write-Log -Message "  [結果] CPU使用時間 (Total 合計): $TotalCpuSec 秒" -Color "Green"
    } else {
        Write-Log -Message "  [警告] Chromeプロセスが見つかりませんでした。" -Color "Yellow"
    }

} catch {
    Write-Log -Message "致命的なエラーが発生しました: $($_.Exception.Message)" -Color "Red"
    Write-Log -Message "エラー詳細: $($_.ScriptStackTrace)" -Color "Red"
} finally {
    # 3. クリーンアップ
    Write-Log -Message "3. クリーンアップを実行します。" -Color "White"

    # 確実にChromeプロセスを終了
    $remaining = Get-Process chrome -ErrorAction SilentlyContinue
    if ($remaining) {
        Write-Log -Message "INFO: 残留Chromeプロセスを強制終了しました。" -Color "White"
        $remaining | Stop-Process -Force
    }

    Write-Log -Message "--- テスト完了 ---" -Color "Yellow"
}

Powershellの実行

まず、Windows Powershellを開きます。(管理者権限である必要はありません)

次に、スクリプトに一時的な実行権を与えます。(デフォルトでは自作のスクリプトの実行権が与えられていないため)

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

そうした上で、

& "C:\script\benchmark_chrome.ps1"

を実行。以下の驚くべき結果が出ました。

--- Chrome Webアクセス・ベンチマークテスト ---
INFO: 既存のChromeプロセスをクリーンアップします...
1. Chrome起動からWikipedia表示までの時間を計測中...
  [結果] 起動&Webアクセス時間: 5.03 秒
2. リソース使用量を計測中...
  [結果] メモリ使用量 (WS 合計): 1413.37 MB
  [結果] CPU使用時間 (Total 合計): 17.97 秒
3. クリーンアップを実行します。
INFO: 残留Chromeプロセスを強制終了しました。
--- テスト完了 ---

なんと、メモリは1.4GB利用。単にWikipediaを計算しただけです。

補足しておくと、この検証に使用した筆者の環境は

  • Ryzen 5 4500 3.6GHz (6コア12スレッド)
  • GTX 1650 (4GB VRAM)
  • メモリ64GB

と、ビジネスユースにしては「化け物」なスペックであってもです。

PCの利用=ブラウザの利用

という現代の環境において、以下のポイントが、「ネット閲覧程度であれば云々」の神話を打ち破る主要な論拠となります。

マルチプロセスアーキテクチャによるメモリの膨張

Chrome(および他のモダンブラウザ)が採用しているマルチプロセスアーキテクチャが、メモリ消費量の最大の原因です。

  • 従来のアプリ (Word):
    • 1つのウィンドウやドキュメントにつき、通常はメインプロセス1つが主体となります。
  • モダンブラウザ (Chrome):
    • ブラウザ全体を制御するプロセスに加え、タブごと、拡張機能ごと、時にはWebサイト上の異なるフレームごとに独立したレンダリングプロセスを生成します。

結果として、たった1つのタブを開いているだけでも、タスクマネージャー上では10〜30個のchrome.exeプロセスが立ち上がり、ベンチマーク結果のように、それらの合計で1GBを優に超えるメモリを消費します。

Webコンテンツの「リッチ化」

そして、現在のWebサイトは、単純なテキストや画像で構成されていません。

  • JavaScriptの肥大化:
    • 多くのWebサイトが、高度なインタラクティブ機能やリアルタイム通信のために巨大なJavaScriptフレームワーク(React, Vue, Angularなど)を使用しています。これらのスクリプトエンジンと実行環境がメモリを大量に占有します。
  • 高解像度メディアと広告:
    • 高解像度の画像、埋め込み動画、そして追跡スクリプトや動的な広告は、ブラウザに多くの処理とメモリ負荷をかけます。

3. ベンチマーク結果の対比

アプリケーション目的メモリ消費量 (WS 合計例)
Word (COM操作/UNCファイル)文書作成(重量級ローカルアプリ)290 MB
Chrome (Google検索 → Wikipedia)ウェブ閲覧(単一タブ)1,413 MB

この対比から、現代の「ウェブ閲覧」が、伝統的なローカルの重量級アプリケーションよりも、起動直後で約5倍近いメモリリソースを要求することが明確に示されます。

ここに、

  • OSそのもののメモリ消費量
  • ウィルス対策ソフト
  • マルチタスク(ビジネスユースであればこれらを開いたと同時にSlackやTeamsを開くのが当然のはずです)

が加わるとなると、古い、低スペックのハードウェアをLinuxに変えた「程度」では、付け焼き刃にすらなりません。

したがって、「ネット閲覧程度」の利用を想定してPCのスペックを決める場合、最低でも16GBのメモリを搭載しないと、動作が非常に緩慢になるリスクが高いという結論になります。

なぜなら、2025年現在、通常のインターネット環境でのビジネスや学習というのは「ブラウザのタブ多重起動」を前提に作られているのですから。

ジェレミー・クラークソン(旧TopGearやGrandTour司会者)の

Power is EVERYTHING. More is better.
( パワーはすべてを解決する。気筒数は多ければ多いほどいい)

A horsepower, A horsepower!
Horsepower for my kingdom!
「馬力だ! 馬力の代わりに我が王国をやるぞ!」

は、こと、PCのリソース割当については「反論の余地がない真である」という結論で本稿を締めくくります。