ソースに絡まるエスカルゴ

貧弱プログラマの外部記憶装置です。

【excel/VBA】シート名をつけるときの注意点

 最近ちょくちょくエクセルを触る時があるのですが、あまりに驚いた仕様を発見してしまったので備忘録として記事にしようと思った次第です。


 では、始めます。


1:同一のシート名は複数存在できない(大文字/小文字関係ない)
 見出しにある通りです。

 エクセルファイルを普通に使っていて同じシート名を複数作ろうとした時にエラーになるのは知っている人は多いかと思いますが、実は「アルファベットの大文字小文字関係なく判定」しています。

 例えば「Sheet1」というシートとは別に「SHEET1」というシートを作ろうとすると以下のようにエラーになります。
f:id:rikoubou:20220208171144p:plain

 もちろんアルファベットのみではなく、全角文字が含まれている場合でも同様にエラーになります。
f:id:rikoubou:20220208171559p:plain


2:シート名は31文字まで
 シート名には文字数制限があり、32文字以上になると31文字になるように自動的に切り捨てられます。
f:id:rikoubou:20220208171912p:plain

 ちなみにVBAで以下のようなマクロで32文字以上を設定しようとすると、エラーになります。

Option Explicit

Sub InsertLongSheetName()
    Dim ws As Worksheet
    
    Set ws = ThisWorkbook.ActiveSheet
    
    ws.Name = "1234567890123456789012345678901234567890" ' 40文字
'    ws.Name = "1"
    
    Set ws = Nothing
End Sub


f:id:rikoubou:20220208173206p:plain

 なので、VBAで自動的にシート名をつける場合は「アルファベットの大文字小文字」と「文字数」に気を付ける必要があります。


 以上がエクセルでシート名をつける時の注意点になります。


 VBAなどで自動的にシートを作成したりリネームしたりする時に、この仕様を知ってないと引っかかってしまう場合がある(実際に自分が引っかかって悩んでいた)ので気をつけましょう……。


・参考資料

【python/tkinter/pyinstaller】pyinstallerでのexe化時にGUIとexeファイルのicon画像を設定する

 以前の記事でpyinstallerを使ってexe化を行いました。

 今回はexe化する際にアイコン画像も含める方法についての備忘録です。


 では、始めます。


0:デフォルト状態の場合
 バージョンなど環境によって変わるかもしれませんが、特にアイコン画像を指定せずにpyinstallerを使ってexe化した場合は以下のようになっています。
f:id:rikoubou:20220121153043p:plain

 機能としては問題ないですが、デフォルトのままだと色々と困る場合が多いと思うので実際にアイコンを作成しつつその画像を設定していきます。


1:アイコン画像の準備
 まずは設定したいアイコン画像を作成します。適当なペイントソフトで正方形の適当な画像を作成します。

 今回は例として以下のような100×100pxのpng画像を作りました。必要であればダウンロードして使ってください。
f:id:rikoubou:20220121154344p:plain

 アイコン画像の拡張子は「.ico」なので変換する必要がありますが、以下の便利な「Faviconジェネレーター」様があるので利用させていただきました。

 使い方は書いてある通りですが、以下のような手順でアイコンを作成してダウンロードします。
f:id:rikoubou:20220121174430p:plain

 これでアイコン画像が準備できました。

 以降このアイコン画像は「icon.ico」というファイル名という前提で進めます。


2:GUIのアイコン画像を設定する
 GUIのアイコン設定はpython側で設定します。

 今回はアイコン画像を以下のようにexe化したいpythonファイルと同じ階層に配置したという前提で進めます。
f:id:rikoubou:20220121160344p:plain

 この場合のGUIのアイコン設定の方法は以下のように「root.iconbitmap」で指定します。

import tkinter as tk

root = tk.Tk()
root.iconbitmap(default='icon.ico')

 この時設定するアイコン画像のファイルパスですが「pythonを実行している階層からのパス」になっているため注意が必要です。
 なので絶対パスを指定するか、相対パスの場合は実行している階層を気にする必要があります。

 またさらに厄介なのがpyinstallerによってexe化した場合、この「pythonを実行している階層」が不確定になります。
 というのも、詳しくは参考ページ様を参照していただきたいのですが、pyinstallerでexe化したファイルを実行した際、一度その中身が「一時フォルダ」に展開されてそこでpythonが実行されるという形になっています。一時フォルダは毎回exeが起動される度に違う名前で作成されるため、固定のパスというわけではありません。

 つまりpythonが実行される階層やexe化されることを考えるとこのままの記述ではまずいので、以下のように「get_icon_path」関数からアイコン画像のパスを取得するようにします。

import sys, os

# アイコンファイルの絶対パスを取得する関数
def get_icon_path(relative_path):
    try:
        # 一時フォルダのパスを取得
        base_path = sys._MEIPASS
    except Exception:
        # 一時フォルダパスを取得できない場合は実行階層パスを取得
        base_path = os.path.abspath(os.path.dirname(sys.argv[0]))
    
    # アイコンファイルの絶対パスを作成
    return os.path.join(base_path, relative_path)

 これでexe化したものを実行した際は一時フォルダに展開された中からアイコン画像のパスを作成し、pythonファイルを直接実行する際は実行階層からアイコン画像のパスを作成するという形になります。
 この方法はexe化した中にアイコン画像を含める必要があるので、それはpyinstallerでの実行時にオプションとして設定します。

 ちなみにこの関数を追加して修正したソースコードは以下のようになります。

tkinter_sample.py

#-*- coding:utf-8 -*-
import sys, os
import tkinter as tk
import tkinter.ttk as ttk
from functools import partial


def main():
    # rootの作成
    root = tk.Tk()
    root.title("tkinter_sample")
    root.geometry("300x100")
    root.iconbitmap(default=get_icon_path('icon.ico'))

    # frameの作成
    frame = ttk.Frame(root, padding=10)
    frame.grid(row=2, column=0)

    # ラベルの作成
    label = ttk.Label(frame, text="ここに入力したテキストの内容が表示されます")
    label.grid(row=0, column=0)

    # Entry(1行のテキスト入力行)を作成してframeに追加
    entry = ttk.Entry(frame, width=40)
    entry.grid(row=1, column=0, pady=4)

    # Buttonを作成してframeに追加
    button = ttk.Button(frame, text="表示", command=partial(update_label, entry, label))
    button.grid(row=2, column=0, pady=4)

    # 中央揃え
    root.grid_columnconfigure(0, weight=1)
    root.grid_rowconfigure(0, weight=1)

    root.mainloop()


# ラベルを入力されたテキストの内容で更新
def update_label(entry, label):
    label['text'] = entry.get()


# アイコンファイルの絶対パスを取得する関数
def get_icon_path(relative_path):
    try:
        # 一時フォルダのパスを取得
        base_path = sys._MEIPASS
    except Exception:
        # 一時フォルダパスを取得できない場合は実行階層パスを取得
        base_path = os.path.abspath(os.path.dirname(sys.argv[0]))

    # アイコンファイルの絶対パスを作成
    return os.path.join(base_path, relative_path)


if __name__ == "__main__":
    main()


3:exeのアイコン画像の設定と画像ファイルをexeに含める
 exeのアイコン画像を設定するには「--icon」オプションを使います。以前の記事で実行したpyinstallerのコマンドに追記すると以下のようになります。

$ pyinstaller tkinter_sample.py --icon=icon.ico --name tkinter_sample.exe --onefile --noconsole

 上記のように「--icon」とファイルパスを指定するだけでexeファイル自体のアイコンが設定できます。

 また2で記述したGUIで設定するアイコン画像を含めるために、以下のようにさらに「--add-data」オプションを加えます。

$ pyinstaller tkinter_sample.py --add-data "icon.ico;./" --icon=icon.ico --name tkinter_sample.exe --onefile --noconsole

 この「--add-data」オプションを記述することでexeファイルに画像などを含めることができます。

 以下オプションの書き方の簡単なまとめです。

書き方 内容
-i [FILE], --icon [FILE] exeのアイコン画像を設定
--add-data [FILE文字列] exeに含めるバイナリ以外のファイルやフォルダを設定


4:実際に実行してみる
 では実際に2で記述した修正したソースコードの実行とexe化コマンドを実行して確認してみます。

 以下のようにpythonファイルと同じ階層にicon.icoを配置して実行してみます。
f:id:rikoubou:20220121171417p:plain

 実行すると以下のようにGUIにちゃんと画像が設定されています。
f:id:rikoubou:20220121171539p:plain

 では次に以下のコマンドでexe化してみます。

$ pyinstaller tkinter_sample.py --add-data "icon.ico;./" --icon=icon.ico --name tkinter_sample.exe --onefile --noconsole

 実行すると以下のようにexeアイコンが設定され、実行時のGUIにもアイコンが設定されています。
f:id:rikoubou:20220121173257p:plain
f:id:rikoubou:20220121173406p:plain

 実際に一時フォルダ内を確認してみると、ちゃんとicon画像が含まれています。
f:id:rikoubou:20220121173800p:plain


 以上がpyinstallerでのexe化時にGUIとexeファイルのicon画像を設定する方法になります。

 色々とややこしかったりしますが、一度記述してコマンドを確定してしまえばあとは特に変更することがないので最初少し大変なだけだと思います。

 また別の方法としてアイコン画像をバイナリ文字列の定数としてソースコード内に埋め込むことも考えられますが、画像を変更する度にバイナリ文字列も変更しないといけないのは面倒です。
 なので今回記事にした方法であればファイルを変更するだけで良いので、これが一番楽なのかなと思います。


・参考資料

【python/tkinter/pyinstaller】tkinterで作ったGUIをexe化する

 以前の記事でtkinterを使ってpythonで簡単なGUIを作ってみました。

 作ったGUIは環境構築ができていない人に配布することも考えられるので、最終的にはexe化することになると思います。

 なので今回はtkinterで作ったものをexe化する方法の備忘録になります。


 では、始めます。


1:pyinstallerのインストール
 pythonソースコードをexe化するにはいくつか手段があるようですが、今回はpyinstallerを使います。

 pyinstallerのインストールは簡単で以下のpipコマンドを実行することでインストールできます。

$ pip install pyinstaller

 pyinstallerがちゃんとインストールできているかは、以下のコマンドを実行してエラーなくバージョン情報が表示されるかで確認ができます。

$ pyinstaller -v


2:pyinstallerでexe化
 実際にpyinstallerを使って冒頭の記事にある「tkinter_sample.py」をexe化してみます。

 まず最初にPowerShellなどを立ち上げ「cd」コマンドで対象ソースコードが存在する階層へ移動します。

 その後以下のコマンドを実行します。

$ pyinstaller tkinter_sample.py --name tkinter_sample.exe --onefile --noconsole

 色々な表示が出る中しばらく待って以下のように「completed successfully」と表示されればexe化は完了です。

 INFO: Building EXE from EXE-00.toc completed successfully.

 コマンド実行後、対象のpythonファイルと同じ階層に色々とフォルダやファイルができていますが、「dist」というフォルダの中にexeファイルが作られています。
f:id:rikoubou:20220120162641p:plain
f:id:rikoubou:20220120162751p:plain

 このdistフォルダ内に作られたexeをダブルクリックで起動させれば、pythonファイルを実行した時と同じものが実行されます。


3:pyinstallerのコマンドオプション
 今回使ったpyinstallerのコマンドのオプションについて少し説明します。今回使ったオプションは以下になります。

書き方 内容
-n [NAME], --name [NAME] exe化する時のファイル名を指定する
-F, --onefile 一つのexeファイルにまとめる
-w, --windowed, --noconsole exe起動時にコンソール画面を出さない

 なので2で実行したコマンドは「tkinter_sample.exeという1ファイルにまとめ、起動時にコンソール画面を出さないようにする」という形でビルドしたことになります。
 ちなみに「--onefile」オプションを入れない場合はdist内に無数のファイルが作成され、exeファイルは作成されないので必ず指定するようにしてください。

 この他にも色々とオプションがありますが、とりあえずexe化するというだけであればこれらのオプションを知っていればなんとかなるかと思います。


 以上がtkinterで作ったGUIをexe化する方法になります。

 exe化した時のアイコン画像を設定したい、などまだ色々ありますが、それは調べてから別の記事にでもしようかと思います。


・参考資料

【python/tkinter】tkinterで簡単なGUIをpythonで作る

 pythonを使っていて時々GUIのアプリを作りたくなる場合があります。
 その際tkinterというpythonに同梱されているライブラリを使えば比較的簡単にGUIを作れることがわかったので、今回はそのtkinterを使ってみた備忘録になります。


 では、始めます。


1:tkinterのインストール方法
 先に書きましたがpythonに同梱されているため、基本的にインストールをする必要がありません。

 tkinterが使えるかどうかの確認は、PowerShellなどを立ち上げてpythonを起動させて以下のコードを実行します。

import tkinter
tkinter._test()

 上記を実行すると以下のようにGUItkinterのバージョンを確認できます。
f:id:rikoubou:20220119155924p:plain

 エラーが発生した場合はtkinterがインストールされていないので、以下のpipコマンドでインストールします。

$ pip3 install pytk


2:tkinterの基本的な考え方
 詳しくは参考資料様のページを見ていただきたいのですが、tkinterは基本的には以下のような構造になっています。
f:id:rikoubou:20220119161905p:plain

 最初にROOTという空のGUI画面にFRAMEという領域を作ります。そしてそのFRAME内の領域にLABELやBUTTONなどの具体的な要素を入れていくという形です。
 FRAMEには配置するためにGRID(htmlのtableのようなイメージ)が設定でき、綺麗に並べることもできます。


3:簡単なGUIを作ってみる
 では実際にtkinterを使って簡単なGUIを作ってみます。

tkinter_sample.py

#-*- coding:utf-8 -*-
import tkinter as tk
import tkinter.ttk as ttk
from functools import partial


def main():
    # rootの作成
    root = tk.Tk()
    root.title("tkinter_sample")
    root.geometry("300x100")

    # frameの作成
    frame = ttk.Frame(root, padding=10)
    frame.grid(row=2, column=0)

    # ラベルの作成
    label = ttk.Label(frame, text="ここに入力したテキストの内容が表示されます")
    label.grid(row=0, column=0)

    # Entry(1行のテキスト入力行)を作成してframeに追加
    entry = ttk.Entry(frame, width=40)
    entry.grid(row=1, column=0, pady=4)

    # Buttonを作成してframeに追加
    button = ttk.Button(frame, text="表示", command=partial(update_label, entry, label))
    button.grid(row=2, column=0, pady=4)

    # 中央揃え
    root.grid_columnconfigure(0, weight=1)
    root.grid_rowconfigure(0, weight=1)

    root.mainloop()


# ラベルを入力されたテキストの内容で更新
def update_label(entry, label):
    label['text'] = entry.get()


if __name__ == "__main__":
    main()

 このサンプルコードを実行すると以下のようなGUIが表示されます。テキスト入力部分に何かしらを入力して表示ボタンを押下すると、Label部分にそのテキストが表示されます。
f:id:rikoubou:20220119172057p:plain

 buttonが押下された時の呼び出し関数はttkでbuttonを作成する際の「command」の引数に指定します。引数も渡したい場合は「partial」を使って関数名に続いて渡したい引数を指定します。


 以上がtkinterで簡単なGUIを作ってみた内容になります。

 標準ライブラリとして割と簡単にGUIが作れるのは便利だと思います。次はこの作ったGUIをexe化する方法を調べてみようかと思います。


・参考資料

【M5StickC Plus/Arduino】PIR Hat(人感センサ)に連動して音を出す

 以前の記事で人感センサのサンプルを動かしました。

 その最後で「人が来たら音を鳴らすおもちゃ」ができそうと書いたので今回はそれを作ってみた次第です。


 では、始めます。


1:M5StickC Plusで音を鳴らす
 M5StickC Plusではブザーが内蔵されているのでライブラリを使用することで簡単に音を鳴らすことができます。
 過去の記事でさらっと音を鳴らすコードを書いていたことはありましたが、自分の中でも整理するためにM5StickC Plusで音を出す方法をまとめます。

 音を鳴らす書き方は基本的には以下の通りです。

#include <M5StickCPlus.h>

void setup() {
  M5.begin();
  M5.Beep.setBeep(4000, 1000); // 初期値:音の高さ(Hz), 鳴動時間(ms)
}

void loop() {
  M5.update();
  M5.Beep.update();

  if (M5.BtnA.wasPressed()) {
    // 初期値の音を鳴らす
    M5.Beep.beep();
  } else if (M5.BtnB.wasPressed()) {
    // 一時的に設定した音を鳴らす
    M5.Beep.tone(2136, 500); // 音の高さ(Hz), 鳴動時間(ms)
  }
}

「M5.Beep.setBeep(4000, 1000);」のところでビープ音として鳴らす音の周波数と長さの初期値を設定し「M5.Beep.beep();」で初期値の音を開始します。loop内の「M5.Beep.update();」で音の鳴動時間を検知して音が止まります。
「M5.Beep.tone」で設定した音は一時的にその音と鳴動時間だけ鳴らします。M5.Beep.toneで音を鳴らした後に「M5.Beep.beep();」で音を鳴らすと初期値の音が開始されます。

 また今回は音を開始した後に「M5.Beep.update();」で鳴動時間を管理していますが、例えば関数内で順番に複数の音を鳴らしたい場合は「M5.Beep.update();」で管理できないので、適切にdelayを入れてやる必要があります。

 これで大体M5StickC Plusで音を鳴らす方法がわかったので、実際に人感センサに合わせて音を鳴らしてみます。


2:人感センサに連動して音を出すサンプル
 PIR HATのサンプルコードを少し改造してみたのが以下のものになります。

・M5StickCPlus_pir_buzzer.ino

#include <M5StickCPlus.h>

#define BEAT    150 // 一つの音を鳴らす時間(ms)
#define PIR_PIN 36  // PIR_HATのピン番号

bool pinFlg = false;

void setup() {
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(0, 0, 4);
  M5.Lcd.println("PIR STATUS");
  pinMode(PIR_PIN, INPUT_PULLUP);
}

void loop() {
  M5.update();
  M5.Beep.update();

  bool result = digitalRead(PIR_PIN);

  M5.Lcd.setCursor(110, 55, 6);
  M5.Lcd.println(result);

  if (!pinFlg && result) {
    // LOW -> HIGH
    callZeldaSound();
  }

  pinFlg = result;
}

// ゼルダの謎解き音
void callZeldaSound() {
  M5.Beep.tone(3136, BEAT); // ソ
  delay(BEAT);
  M5.Beep.tone(2960, BEAT); // ♯ファ
  delay(BEAT);
  M5.Beep.tone(2489, BEAT); // ♯レ
  delay(BEAT);
  M5.Beep.tone(1760, BEAT); // ラ
  delay(BEAT);
  M5.Beep.tone(1661, BEAT); // ♯ソ
  delay(BEAT);
  M5.Beep.tone(2637, BEAT); // ミ
  delay(BEAT);
  M5.Beep.tone(3322, BEAT); // ♯ソ
  delay(BEAT);
  M5.Beep.tone(4186, BEAT); // ド
  delay(BEAT);
}

 PIR HATを取り付けた状態で書き込むと、PIR STATUSの画面の値が0→1に変化した時だけ音が鳴るようになります。


 以上がM5StickC PlusでPIR Hat(人感センサ)に連動して音を出す方法になります。

 今回は簡単に内蔵のブザーを鳴らしましたが、MP3などのファイルを再生できるようにすれば人が来た時に「コンニチワ」みたいな挨拶をするような何かも作れそうですね。


・参考資料

【M5StickC Plus/Arduino】PIR Hat(人感センサ)を使ってみる

 久しぶりにM5Stack系をいじって遊んでみようと思っていたところ、M5Stack系の様々なオプションパーツをほとんど試してないことに気づきました。

 そこで色々見ていたところ、値段もそんなに高くなく気軽に使えそうなPIR Hat(人感センサ)を見つけたので購入してみました。

 M5StickC用と書いてありますが、M5StickC Plusでも問題なく使えたので、今回はその備忘録となります。


 では、始めます。


0:M5StickC Plusの環境構築
 今回はM5StickC Plusを環境構築した時のサンプルも動かしてみるので、まずは過去の自分の記事を参考にM5StickC Plusの環境構築をしてください。


1:PIR Hatのサンプルを動かす
 環境構築ができたら、PIR HatをM5StickC Plusに取り付けます。

 取り付けを間違うことはないかと思いますが、以下のように画面側にセンサの部分が来るように取り付けます(スイッチサイエンスの商品ページより画像引用)。
f:id:rikoubou:20220113144833j:plain

「ファイル」→「スケッチ例」→「M5StickCPlus」→「Hat」→「PIR」を選択します。
f:id:rikoubou:20220113145230p:plain

 スケッチのサンプルファイルが表示されるので、M5StickC Plusに書き込みます。
f:id:rikoubou:20220113145717p:plain

 書き込みが終わると以下のように人感センサに反応がある場合は「1」、反応がない場合は「0」と表示されます。
f:id:rikoubou:20220113150037p:plain

 スケッチ例の中身を見るとピンの値のHIGHかLOWかを読んでいるだけなのがわかります。

pinMode(36,INPUT_PULLUP);
M5.Lcd.println(digitalRead(36));


 以上がM5StickC PlusでPIR Hat(人感センサ)を使ってみた内容になります。

 人感センサがどのような仕組みで感知しているのかは理解できていませんが、この人感センサを使って人が来たらブザーを鳴らすおもちゃなど作れそうなので色々と使っていきたいですね。

【自作PC】自作PCをやってみた その5:CPUを換装する

 1年とちょっと前に自作PCを作った時のことをブログ記事にしました(関連記事参照)。
 それから時は流れ、AMDからはZen3が発売されインテルも12世代が発売されました。

インテルの新しいCPUが発売されたということはZen3のCPUも安くなってるのでは?」と思い価格を確認したところ発売当初から少し値段が下がっていることがわかったので、これを機にCPUをZen3に換装しました。

 今回はその備忘録になります。


 では、始めます。


0:CPU換装前の構成と購入したもの
 自作PC記事のその1に書いたものをそのまま持ってきたのが以下になります(この時はまだグラフィックボードがこんなに高騰するとは予想できなかった時期なので、買っておいてよかったと今でも思っています…)。

パーツ名 商品名 購入時の価格
CPU Ryzen 3 3100 13,178円
マザーボード ASRock B550M Pro4 12,717円
グラフィックボード Radeon RX 5600 XT Challenger D 6G OC 32,973円
メモリ TEAM PC4-25600 16GBx2枚 11,980円
SSD Patriot P300P512GM28 6,899円
ケース 舞黒透maikurosuke(MK-01W) 2,979円
電源 MWE 550 Bronze - V2 / MPE-5501-ACAAB-JP 4,980円
OS Win10 Home 64bit DSP DVD LANボード セット限定 12,880円
ディスプレイ PHILIPS 223V7QJAB/11 9,980円
キーボード/マウス TM-UKEY108BKMSET 892円
合計金額 109,458円

 実際にはこの後に900円ぐらいのケースファンを一つ増やしていますが、誤差みたいなものなので特に追記はしていません。

 今回のCPU換装で購入したものは以下になります。

パーツ名 商品名 購入時の価格
CPU Ryzen 5 5600G 34,800円
CPUクーラー 白虎弐AMD 2,379円
合計金額 37,179円

 Zen3に換装する際にどれにするかは少し悩みましたが、現状のZen3で最も安いRyzen 5 5600Gを選びました。
 選んだ理由としては、Zen3で最安であることと内蔵グラフィックを持っているAPUであることの2点が大きかったです。

 CPUの性能的にはRyzen 5 5600Xの一つ下という位置づけですがそれでも約9割ほどの性能はあるようだったので十分だと考えました。
 また昨今のグラフィックボードの値段を考えると、今持っているものが壊れた時でも画面出力ができるという安心もあります。
 その他にもPCIeが3.0に下がっていたりキャッシュが少なくなっていたりもしますが、何より価格が下がったことで5600Gと5600Xの価格差が7000円ほどと割と差が出てきたので「5600Gが一番コスパいいのでは?」という結論になりました。

 CPUクーラーは今のRyzen 3よりは流石に発熱が増えるだろうことが予想されたので、安いものでいいからとりあえずつけておこうと思い購入した次第です。
 ただケースが舞黒透という小さいものなので、CPUクーラーの高さ制限があってあまり自由に選べませんでした。
 白虎弐のインテル版はよく冷えるがAMD版はイマイチという評価が多いようでしたが、価格とサイズを考えるとこれぐらいしかなかったのでリテールクーラーより少し冷えるぐらいならそれで良いという気持ちで購入を決めました。

 長々と書いてきましたが、現状の構成とどれに換装するかが決まったので次の項目からは実際に行った内容になります。


1:BIOSの更新を行う
 自作PCを作ってすぐぐらいに一度BIOSを更新してから一度も更新をしていませんでした。もちろんその時にZen3はまだ発売されていなかったのでBIOSを更新する必要があります。

 具体的な方法は以下記事の「4:BIOSのアップデート」の項目を参照してください。

 当時の自作PCその1の記事内でも書いていますが、予めZen3への換装を想定してB550チップセットを選びました。マザーボードを購入せずにこのBIOSアップデートだけでZen3が使えるようになったので結果的に安上がりになったと思っています。


2:CPUを換装する
 BIOSのアップデートができたら今組んでいるCPUをマザーボードから取り外します。

 舞黒透はケースが小さく組んだ時にかなりやりにくかったので一度マザーボードを取り外さないとダメなのかと思っていましたが、CPUとリテールクーラー以外を触ることなく取り外すことができました。グリスもリテールクーラーに予め塗られていたものをそのまま使っていたので「スッポンするか?」と少しドキドキでしたが、問題なく取り外すことができました。

 CPUとリテールクーラーの取り外しができたら、次は白虎弐のためにマザーボードに付属していたリテンションを取り付けます。リテンションはリテールクーラーをつける時に取り外した以下のパーツです(B550m pro4のマニュアルより引用)。
f:id:rikoubou:20211113132111p:plain

 このリテンションの取り付け時にバックプレートを保持しながらネジ止めする必要がありますが、舞黒透の配線側の蓋を開けるとちょうどマザーボードの裏側に指を入れられるスペースがあるのでマザーボードを取り外さなくても手でバックプレートを抑えながらリテンションを取り付けることができます。

 リテンションの取り付けが終わったらいよいよ5600Gをソケットに取り付けます。と言ってもこれはピン曲がりに気を付けて取り付けるだけです。

 CPUの取り付けが終わったら、CPUにグリスを塗ります。自分は特にこだわりはなかったので白虎弐に付属していた謎グリスを塗りました。

 最後にCPUクーラーの白虎弐を取り付けます。CPUと密着する面に保護シートが貼られているのでそれをはがし、取り付けたリテンションに白虎弐の爪をひっかける形で取り付けます。
 が、自分がやった時にはなかなか爪が両端に引っかからずに何度か失敗して10分ぐらい格闘してました。両側の爪がちゃんとリテンションに引っかかったらレバーを回してがっちりと固定します。
 あとはCPU_FANのところにケーブルを繋ぐだけでCPU換装は終了です。


3:動作確認
 CPUだけを換装したのは初めてだったので、少し緊張しながらPCの電源を入れました。
 再起動を何度か繰り返しながら1、2分ほど待つと英語羅列の画面が表示されました。

 その時の画面を撮ってなかったのでわかりにくいと思いますが、TPMとかいうセキュリティ関係の設定についてどうするかという画面が表示されます(詳しくは参考資料様動画の7:40あたりを確認してください)。
 自作PCの場合は特に設定していることはないと思うので「Y」キーを押せば大丈夫だと思います。自分はこの時「Y」キーを押しました。

 その後しばらく待つとWindowsの画面が立ち上がります。OSを入れているM.2 SSDは交換していないので設定や入れているソフトウェアなどはそのままです。

 タスクマネージャを立ち上げて確認すると、ちゃんとRyzen 5 5600Gとして認識しています。
f:id:rikoubou:20211113134046p:plain


 以上が自作PCのCPUを換装した内容になります。

 BIOSの更新から新CPUの動作確認までほぼ問題なくスムーズにでき、全部で1時間程度で作業を終えることができました。
 PCを1から組んだ時にはケースの関係もあってかなり時間がかかっていたのでこんなにすんなり交換できてちょっと拍子抜けでした。

 今1から自作PCを組むのであれば12世代インテルCore i5とかで組むのが一番コスパが良さそうではありますが、一応Zen3というAMD側の最新CPUの6コア12スレッドという環境が手に入ったのでしばらくはこの構成で頑張っていきたいと思っています。


・おまけ:ベンチマークスコア比較
 CPUを換装しただけでどれぐらい変わるのか気になったので、ベンチマークを色々とってみました。左が前CPU構成、右が新CPU構成の結果になります。

CINEBENCH R20

f:id:rikoubou:20200909204531p:plainf:id:rikoubou:20211113135051p:plain

FF15ベンチ

f:id:rikoubou:20200909204633p:plainf:id:rikoubou:20211113135209p:plain

FF14ベンチ

f:id:rikoubou:20200909211302p:plainf:id:rikoubou:20211113135239p:plain

ドラゴンクエストX ベンチマーク

f:id:rikoubou:20200909204937p:plainf:id:rikoubou:20211113135320p:plain

・3D Mark(Time Spy

f:id:rikoubou:20200909205046p:plainf:id:rikoubou:20211113135338p:plain

・3D Mark(Fire Strike)

f:id:rikoubou:20200909205139p:plainf:id:rikoubou:20211113135348p:plain


 CINEBENCHについてはCPUの性能なので伸びているのはわかりますが、同じグラフィックボードなのに他のゲーム関係のものもスコアが伸びているのに驚きました。
 BIOSを更新したりグラフィックボードのVBIOSも新しくしているというのもありますが、CPUを変更するだけでも影響があると身を持ってわかりました。

 ただCINEBENCHの結果についてはベンチマークサイトなどの数値よりも低く出ているようです。CPUをエコモードとかいうのに設定していたような気もするのでその影響かもしれません。

 とはいえ、明らかに性能としては上がっているので大事に使っていきたいです。


・参考資料


・関連記事