某PCショップ店員の覚書

勤務中に作成したプログラムやスクリプトのまとめ

ゲーミングモニタの選び方

はじめに

コロナ禍により巣ごもり需要が高まり、今まではそれほど人口が多くなかったゲーマーの人口が爆発的に増えたのは皆さんご存知だと思います。
そんなゲーマーのニーズを満たす為に、ゲームに特化したゲーミングデバイスと呼ばれるものが各種メーカーから大量に販売されています。
しかし、その中にはゲーミングと謳っておきながら全くゲーム向きではない製品も数多く存在します。
特に顕著だなぁと思うのがディスプレイ(モニタ)。
そんなクソったれな販社に対して真向から喧嘩を売っていき、ゲーマーが予備知識だけで本当に良いモニタと悪いモニタを取捨選択できるようにするのがこの記事です。
難しい事は一切書きません。

目次

モニタの種類について

まず初めに、モニタのパネルには大別して4種類が存在しています。

この中から、今回はTN VA IPSに絞ってメリットデメリットを説明します。

各種違い

種類 メリット デメリット 最適なジャンル
TNパネル コストが安い
応答速度が速い
高リフレッシュレート対応
視野角が狭い
色再現性が悪い
白や黄色っぽい画面になる
コントラスト比が悪い
FPS
VAパネル コントラスト比が高い
TNより視野角が広い
黒色の表現が優秀
応答速度が一番遅い
色再現性が悪い
映像鑑賞
IPSパネル コストが安い
視野角が広い
高リフレッシュレート対応
色再現性が高い
TN未満VA以上の応答速度
TNより応答速度が悪い
コントラスト比が低い
MMORPG
ARPG
編集作業
映像鑑賞

各種用語について

  • 応答速度とは?
    誤解を恐れずに書いてしまうと今の色から別の色を表示するまでのラグのことです。
    ここの値が低ければ低いほど色が切り替わるまでのラグが少ないので、残像感が無い映像になりやすいです。
    しかし、この応答速度の測定方法には大別して2種類あります。
    • GtG
      Gray to Grayの事で、とある中間色から中間色を表示するまでにかかる時間を測定する手法の事です。
    • MPRT
      Moving Picture Response Timeの事で、黒色 -> 白色 -> 黒色 に変化するまでにかかる時間を測定する手法の事です。
  • 視野角とは?
    こちらも誤解を恐れずに書くと見る角度を変えた際に色が変化する角度のことです。
    この角度が狭ければ狭いほどモニタを斜めなどから見た際に色が変化します。
    逆に広ければ多少モニタを見る角度がズレていたとしても色の変化はそこまで大きくありません。
  • リフレッシュレート(Hz)とは?
    モニタが1秒間に色を切り替えられる数値の事です。
    60Hzなら1秒間に60回、色を切り替えますし、120Hzなら1秒間に120回...と切り替えられるので高リフレッシュレートの物の方が俗物的な表現ですが「ヌルヌル」とした映像を楽しめます。
  • コントラスト比とは?
    黒を1とした時、白がその何倍の輝度になるかというのを表した数値の事です。
    1000:1であれば白は黒の1000倍の輝度になります。
    この比率が高ければ色の違いがハッキリと表現された鮮やかな映像になりやすいです。

さて、ここまで各パネルの違いと用語を必要だったので羅列してきましたがいよいよ選び方です。

ゲーミングモニタの選び方

ジャンル パネルの種類 応答速度 リフレッシュレート コントラスト比
FPS TN
IPS
GtG 240Hz~ 気にしなくてOK
格闘ゲー 60Hz~
MMORPG
ARPG
IPS
VA
数値が高く無ければ何でも良い 高ければ何でも良い
映像鑑賞
編集作業
汎用性

基本はこの表を参考に選んでいただければ問題ないと思います。
例えば、FPSゲーム用にモニタが欲しいのであれば、TNパネルかIPSパネルでGtGでリフレッシュレートが240Hzの物を選べば良いということです。ことFPSにおいてはTN > IPS です。
逆にFPSゲーム用なのにVAパネルを選ぶのは論外です。

まとめ

  • FPSなら
    • パネル : TN or IPS
    • 応答速度の測定方法 : GtG
    • リフレッシュレート : 240Hz~
  • 格闘ゲーム, MMORPG, ARPGなら
    • パネル : IPS or VA
    • リフレッシュレート : 60Hz~予算に応じて
    • コントラスト比 : 高い物
  • 映像鑑賞や編集作業なら
    • パネル : IPS or VA
    • リフレッシュレート : 60Hz~予算に応じて
    • コントラスト比 : 高い物
    • 色再現性 : sRGB率とDCI-P3率の高い物

おわりに

以上がゲーミングモニタの選び方です。
あくまでこの記事は選び方に焦点を当てたものになるので、商品のページを貼って「これオススメですよ!」というようなことはしません。
結局、人に言われて買うよりも自分で「どれが良いかな」と考えながら選ぶのが一番楽しいですし、自分で選んで買ったモニタの方が愛着がわきます。
.....ただ1つ追加するのであれば、GIGABYTEのモニタは発色が良いのでMMORPGやARPG、映像鑑賞用として選ぶメーカーとしては非常にオススメです。

以上です。この記事が誰かの役に立てば幸いです。

【PowerShell】スクリプトでPCスペックを一括取得

目次

はじめに

PCの操作に覚えがある方であれば、自分のPCスペックを他人に共有するのは難しい事ではありません。しかし、初心者にはかなりの重労働です。
初心者が他人にスペックを共有する為にはPCを購入した際に付属してきたスペック表を手元に持って来たり、Webでスペックの取得方法を調べる事から始まりますし、共有する頻度も少ないので前回伝えたスペックや手順を忘れてしまっていることもしばしば。
そんな方の為に、最初こそハードルが高いものの設定してしまえば半永久的に使えるPowershellのスクリプトを共有したいと思います。

Powershell を使うメリット

  • Windowsであれば標準でインストールされている
  • スクリプトをコピペするだけであれば簡単にできる
  • 自動化作業に組み込むことが出来る

スクリプト

function ShowSpec {
    function Add-ToStrArray {
        param (
            [Parameter(Mandatory = $true)]
            [string]$text
        )
        if (-not $global:strArray){
            $global:strArray = New-Object System.Collections.ArrayList
        }
        $global:strArray.Add($text) | Out-Null
    }

    function gb($bytes) {
        "$([Math]::Ceiling($bytes / 1GB))GB"
    }

    function mb($bytes) {
        "$([Math]::Ceiling($bytes / 1MB))MB"
    }

    function sysTypeEXstr([int]$sysTypeExNum) {
        @{
            0 = "Unspecified";
            1 = "Desktop";
            2 = "Mobile";
            3 = "Workstation";
            4 = "Enterprise Server";
            5 = "SOHO Server";
            6 = "Appliance PC";
            7 = "Performance Server";
            8 = "SLATE";
            9 = "Maximum";
        }[$sysTypeExNum]
    }

    function cpuArchStr([int]$cpuArchNum) {
        @{
            0 = "x86";
            1 = "MIPS";
            2 = "Alpha";
            3 = "PowerPC";
            5 = "ARM";
            6 = "ia64";
            9 = "x64";
            12 = "ARM64";
        }[$cpuArchNum]
    }

    $strArray = New-Object System.Collections.ArrayList
    Add-ToStrArray "``````"
    $comp = Get-CimInstance CIM_ComputerSystem
    $bios = Get-CimInstance CIM_BIOSElement
    Add-ToStrArray "* Model"
    Add-ToStrArray "    * $($comp.Model.trim())"
    Add-ToStrArray "        * Type : $(sysTypeEXstr $comp.PCSystemTypeEX)"
    Add-ToStrArray "        * BIOS : $($bios.Name.trim())"

    $os = Get-CimInstance CIM_OperatingSystem
    Add-ToStrArray "* OS"
    Add-ToStrArray "    * $($os.Caption.trim())"
    Add-ToStrArray "    * Version : $($os.Version.trim())"

    $cpu = Get-CimInstance CIM_Processor
    Add-ToStrArray "* CPU"
    Add-ToStrArray "    * $($cpu.Name.trim())"
    Add-ToStrArray "        * BaseClock : $($cpu.MaxClockSpeed / 1000) GHz"
    Add-ToStrArray "        * Cores : $($cpu.NumberOfCores) ($($cpu.ThreadCount) Threads)"

    Add-ToStrArray "* Graphics"
    Get-CimInstance CIM_VideoController | ForEach-Object {
        Add-ToStrArray "    * $($_.Name.trim())"
        Add-ToStrArray "        * RAM : $(gb $_.AdapterRAM)"
    }

    $mems = Get-CimInstance CIM_PhysicalMemory
    Add-ToStrArray "* Memories"

    Add-ToStrArray "    * Total : $(gb $comp.TotalPhysicalMemory) (count: $($mems.count))"
    $mems | ForEach-Object {
        Add-ToStrArray "    * $($_.PartNumber.trim())"
        Add-ToStrArray "        * Manufacturer : $($_.Manufacturer.trim())"
        Add-ToStrArray "        * Size : $(gb $_.Capacity)"
        Add-ToStrArray "        * Speed : $($_.Speed) MHz (data width: $($_.DataWidth) bits)"
    }

    Add-ToStrArray "* Storages"
    Get-CimInstance CIM_DiskDrive | ForEach-Object {
        Add-ToStrArray "    * $($_.Model.trim())"
        Add-ToStrArray "        * Size : $(gb $_.Size)"
    }
    Add-ToStrArray "``````" 
    Write-Output $global:strArray
    $global:strArray | Set-Clipboard
    Write-Output "クリップボードにコピーしました`r`n「Ctrl」+「V」キーで貼り付けてください。"
}

スクリプトの設定方法

Powershell 開き方
Powershellで作成されたプログラムを動かそうとすると怒られる
Powershell プロファイル 設定方法
等のページを参考に、Powershellのユーザープロファイルへ上記スクリプトを貼り付けてください。

実行方法

ユーザープロファイルに設定できたら、一度下記のコマンドでプロファイルを再読み込みしてください。

.$profile

その後

ShowSpec

と入力し、Enterキーを押下すれば以下の画像のようにスペックが列挙されます。

後は共有したい相手へCtrl + V で貼り付けて送信すれば共有環境です。

工夫点

おわりに

上記スクリプトは「初心者がPCについて相談する際、どうすればスペック共有の煩雑さを解消できるか」を考え作ったスクリプトです。
スペックの共有で困った経験のある方にはぜひ試していただきたいです。
また、他のシステム情報を追加したり、出力形式をカスタマイズすることで、より自分に合ったスクリプトにすることも可能です。

たまったLogファイルの一括削除

はじめに

PCに詳しいユーザーであれば釈迦に説法だと思いますが、案外「Log」ファイルはストレージ容量を圧迫します。
そんな「Log」ファイルを、ドライブをまたいで一括削除する方法を紹介します。

Script

Set-ExecutionPolicy RemoteSigned -Scope Process -Force
Start-Transcript -Path "TranScript.txt"
$CurrentDirectory = Convert-Path .

# 全てのドライブを取得
$drives = Get-PSDrive -PSProvider FileSystem

# 一時的な出力ファイルを作成
$tempLogFile = "TempResult.txt"
$finalLogFile = "Result.txt"

# 既存のログファイルがあれば削除
Remove-Item -Path $tempLogFile -ErrorAction SilentlyContinue
Remove-Item -Path $finalLogFile -ErrorAction SilentlyContinue

# 全てのドライブに対して処理を行う
foreach ($drive in $drives) {
    $driveRoot = $drive.Root

    # ドライブレターが3文字の場合のみ処理する(ex C:\ D:\)
    if ($driveRoot.Length -eq 3) {
        # Remove-Item だと検索しながらの削除が体感遅いので cmdのdelを使う
        $cmdCommand = "del $driveRoot*.log /a /s /q /f > $tempLogFile"

        # コマンド実行
        cmd.exe /c $cmdCommand

        # 出力ファイルのフィルタリング
        $lines = Get-Content -Path $tempLogFile | Where-Object { $_ -match "Deleted file - " }

        # 結果を最終ログファイルに書き込む
        Add-Content -Path $finalLogFile -Value $lines
    }
}

# 一時ファイルの削除
Remove-Item -Path $tempLogFile -Force

Add-Content -Path $finalLogFile -Value "上記ファイルを削除しました。`r`nTranScriptファイルの場所:$CurrentDirectory\TranScript.txt`r`nLogファイルの場所:$CurrentDirectory\$finalLogFile"
Start-Process -FilePath "notepad.exe" -ArgumentList ".\Result.txt"
Write-Host "Done." -ForegroundColor red
Stop-Transcript
pause

こだわりポイント

  • Cドライブだけではなく、ドライブレターを基に搭載されているストレージ全てに処理を行う
  • PowershellのRemove-Itemはdelコマンドと比べると体感、検索しながらの削除が遅いので、Powershellからdelコマンドを叩く
  • 実行した結果をテキストファイルに出力する
  • PCに何らかの不調が発生して他人にPCを見せる際、なんのコマンドが使用されたのか理解できるようStart-Transcriptでスクリプト自体のログを出力する

おわり

後はこのスクリプトを保存し、タスクスケジューラーから定期的に実行するようにすればいつの間にかLogファイルでストレージ容量を圧迫していたなんて事が無くなります。
Powershell便利。

.ps1として保存する際の注意事項

.ps1として保存する場合やPowershell5.x系で実行する場合、以下のように変更する必要があります。

Add-Content -Path $finalLogFile -Value "上記ファイルを削除しました。`r`nTranScriptファイルの場所:$CurrentDirectory\TranScript.txt`r`nLogファイルの場所:$CurrentDirectory\$finalLogFile"

これを

Add-Content -Path $finalLogFile -Value "上記ファイルを削除しました。"
Add-Content -Path $finalLogFile -Value "TranScriptファイルの場所:$CurrentDirectory\TranScript.txt"
Add-Content -Path $finalLogFile -Value "Logファイルの場所:$CurrentDirectory\$finalLogFile"

`r`nを削除し、Add-Contentで一行ずつ保存するようにすればOKです。
また、TranScriptが実行結果のみを保存するようになるので、Start-Transcript -Path "TranScript.txt"とStop-Transcriptの行は消してもOKです。

FontFamilyListの取得

VS Code のフォント設定が面倒臭い

VS Code のフォント指定はよくあるDialogからFontを指定するのではなく、Font Family Name を手打ちする必要があります。
Font Nerd でもないユーザーはFont Family Name なんて覚えていないですし、インストールされているFontのFamily Name を取得するのもちょっとややこしいです。

でも、Powershellなら簡単に取得出来ちゃいます。

スクリプト

    [void][reflection.assembly]::LoadWithPartialName("System.Drawing")
    $fm1 = [System.Drawing.FontFamily]::Families
    Write-Output $fm1

たった3行。簡単。
更に上記スクリプトをUser Profileに関数として記載すれば外部から呼び出すだけで出力できます。

function FontFamilyList(){
    [void][reflection.assembly]::LoadWithPartialName("System.Drawing")
    $fm1 = [System.Drawing.FontFamily]::Families
    Write-Output $fm1
}

FontFamilyList

実行結果↓

この中から設定したいFont Family Name を手打ちするだけです。
......Microsoftさん、それでも面倒くさいのでDialogから指定する方式にしてくれませんか。

タイピング速度を上げるには

はじめに

本日、以下のようなQiitaの記事が目に入りました。
qiita.com
私もタイピングには自信のある方なので、タイピング速度が遅くて困っている方向けにアドバイスできると思い記事を書いてみることにしました。
個人の見解であることをご了承ください。


筆者のレベル

  • Max Stroke per Seconds : 8.3key/s
  • e-typing : LaserBeam~Professor



練習法

  1. 文章を書く。
    アウトプットしなければ上達はありえません。新聞の記事を書き写す、歌を聴いて歌詞を打ち込む等なんでも良いのでアウトプットしましょう
  2. 正しい指の配置と押すキーを覚える。
    ホームポジションが必ずしも良い訳ではありませんが、キー入力が遅い方はまずホームポジションを覚える事からスタートしてください。
  3. タッチタイピング(ブラインドタッチ)をマスターする
    キー配置を覚え、毎日アウトプットしていれば自然とタッチタイピングができるようになります。
  4. 体へのキーボードの角度と距離を調整する
    体の真正面に机と水平になるようキーボードを配置していたり、距離が近すぎると打ちづらいと感じる人がいます。
    そういう方はキーボードと体の位置を離してみたり、キーボードを45度ほどずらしてみたりすると速度が向上したりします。


デバイスのレベルを上げる

筆法筆を選ばず なんていう諺がありますが、悪い物を使っていると速度が上がらなかったり、静電容量無接点方式ã‚„メカニカルだと早い人がメンブレンやパンタグラフになると途端に遅くなるなんて言うのはあるあるです。
最低でもメカニカルの茶軸~赤軸、金銭的余裕があるのなら東プレのREALFORCEã‚„PFUのHappy Hacking Keyboardに使われている静電容量無接点方式のキーボードを買いましょう。


練習サイト

がオススメです。


総括

  • キー配置と指の位置を覚え、キーボードの位置と角度を調整し、毎日アウトプット。
  • 早くなってきたらデバイスを一個上のレベルの物に
  • 毎日練習サイトを使い、自分の実力を把握しよう
/* -----codeの行番号----- */
' } }) e.innerHTML = codeBlock; });