【Windows10】システムのストレージ交換HDD→SSD(M.2)

はじめに

  • 現在使用中のメインマシン(自作PC)が非常に遅い。
  • 自作してから約5年だが、半導体価格高騰など諸々の事情で新規組み立てはせず、部品交換でなんとかしようと思いました。
  • そもそもの動作が重い最大の原因は、ストレージであることは明白でした。
  • タスクマネージャーでモニタすると、症状発現中のシステムドライブの使用率はほぼ100%。
  • WindowsUpdateやセキュリティツールのスキャン及び更新、クラウドツールの同期及び更新、ブラウザの同期など各種でシステムドライブの使用率が100%になる。
  • OS起動に30~60分。
    • ログオン画面までは10分程度だが、パス入力がほぼできない。
    • ログオンしても、セキュリティソフトやらいろんなサービス起動やらなんやら諸々で30分くらい操作できない。
    • ブラウザやAdobe製品、FPSゲームなど読み込みが多いアプリケーションは起動に5分以上かかる。
  • 設定であれこれ調整するのは煩雑で下手したら不毛。
  • したがって、今回はストレージ交換で高速化を試みます。


マシン情報

  • OS:Windows 10 pro (21H2)
  • CPU:Intel Core i7-6700
  • RAM:24GB(8GBx2、4GBx2)
  • ストレージ:HDD 7200rpm 1TB SATA(うちシステムドライブ:500GB)
  • GPUNvidia GeForce GTX1050ti
  • MB:ASUS H170-pro

ストレージがHDDなので、SATA3の理論上限値6Gbpsで7200rpmであることが最大のボトルネックと思います。

単にSATA3のSSDに交換するだけでも3倍以上の高速化が見込めそうでしたが、 今回は台湾?のTeam製SSD(M.2 NVMe)1TBがほぼ1万円で購入できたので、これを使用します。


M.2(NVMe)はSATA3の5~10倍の高速になるそうで、同じ容量のSATA SSDとほとんど価格差が同じか数千円だったのでM.2(NVMe)を選びました。

この耳慣れないM.2というのは、マザーボード上のインターフェース規格らしく耳慣れた名称としてはPCIeなど含めモバイル用途の規格だそうです。

またNVMeは接続方式のことらしいです。自分もよくわかりませんので正確かつ詳細は別途確認してみてください。


商品ページを見ても、M.2=NVMeのSSDであるという認識でも間違いはないと思いますが、厳密には両者は全く異なる規格なので注意です。

つまり、M.2(SATA)とM.2(NVMe)という2種の製品が存在するようです。

たぶんSATA→PCIeへの変換ボードなんかはこういう状態になると思います。

したがってM.2にしたからといって、爆速にならない場合はここを見落としていると思います。あと、世代を表すGen 3やGen 4だったり、ピンの数なども確認してみてください。


交換作業

交換後のセットアップを省略できるクローニングも考えましたが、適当なクローニングツールがなかったのと、大雑把でめんどくさがりな筆者が5年も使っていれば設定とかごちゃごちゃになってるのでこの際まっさらにしていきます。

したがって、作業はクリーンインストールの手順となります。

マザーボードがM.2に対応していることを確認してから作業しましょう。


データや設定のバックアップ

  • 必要なデータや設定情報は予め別のHDDやメモ書きなどにバックアップしておきましょう。
  • 今どきは、アプリによっては設定情報も含めてクラウドバックアップできるので便利です。
  • ストレージ交換だから、あとで吸い上げるからいいやーって場合は省略してもいいですが…


クリーンインストールツールの準備

MS公式ページからツールをダウンロードしておきます。

www.microsoft.com


「ツールを今すぐダウンロード」をクリックするとダウンロードが始まります。


インストールメディアの作成

任意の場所にダウンロードしたら、起動します。


USBとISOの2種類から選べます。

今回は適当なUSB(8GB以上)がなくBD-Rが余っていたので、以下の手順ではBD-R作成を行います。



「同意する」を押します。



「別のPCのインストールメディアを作成する」を選択し、「次へ」を押します。



「このPCにおすすめのオプションを使う」にチェックを入れたままで、「次へ」を押します。

※チェックを外すと、言語やエディション等を変更できます。



「ISOファイル」を選択し、「次へ」を押します。

ISOの保存先選択のダイアログが出てくるので、任意の場所に保存します。



「DVD書き込み用ドライブを開く」を押します。

特に何もWindowsの設定をいじっていなければ、Windows10標準「DVDディスクイメージ書き込みツール」が起動します。



空のDVDやBD等を入れて、「書き込み用ドライブ」を確認します。

また、「ディスクイメージファイル」が先程保存したISOファイルであることも確認します。

正しく選択されているのを確認できれば、「書き込み」を押します。



書き込みが完了したら、「閉じる」を押します。



インストールメディアの作成ツールがまだ起動していれば、「完了」を押します。


ストレージ交換

PCの電源を落とし、念のため電源スイッチやアダプタ、バッテリー等をOFFまたは取外します。

静電気対策を施し、HDDと取り外します。

M.2 SSDを取り付けます。このとき、スペーサやネジはM.2用があるので事前に用意しておきましょう。今回はマザーボードに同梱付属していたものを使用しました。


クリーンインストール

インストールメディアから起動

PCの電源を入れます。

予めBIOS設定からブートドライブを変更しておくか、BIOS起動時にブートメニューキーを押すなどして開き、手動で光学ドライブにを選択します。


インストール

セットアップ開始画面が起動します。ここからは新規で組み立てた時と同様のWindows10のインストール作業になります。



「今すぐインストール」を押します。



日本語版、日本語キーボードになっていると思うので、特に問題なければ「次へ」を押します。



今回はクリーンインストールなので何も入力せずに、「プロダクトキーがありません」を押します。



インストールするシステムを選択し、「次へ」を押します。 筆者の場合、Windows10 proを選択しています。



「同意します」にチェックを入れて、「次へ」を押します。


パーティション設定をしたいので、今回は「カスタム」を押します。


ドライブを選択して「次へ」を押します。



「サイズ」を入力して、「適用」を押します。

今回はシステムドライブを500GBとしました。最小容量で運用したい場合は80GBくらいになるようすればいいと思います。

残りの未割り当て領域は、インストールが完了したあとでデータ保存用途のドライブとして割り当てます。

ちなみに、1GB=1024MBです。



「OK」



パーティション割当が完了したので、そのドライブを選択して「次へ」を押します。



処理が終わるまで待ちます。



日本在住の日本人はたいてい「日本」でいいと思います。選択したら「はい」を押します。(あとで変更できます。)



特になければ「Microsoft IME」を選択して「はい」を押します。(あとで変更できます。)



特になければ「スキップ」を押します。(あとで追加できます。)


私用だし、あとで後で設定すればいいので、「個人設定」で大丈夫です。



今回はMSアカウントではなく、ローカルアカウントを作りたいので「オフライン アカウント」を押します。 嫌なら後でアカウントの変更や削除などできます。


ローカルアカウントを設定していくので「制限付きエクスペリエンス」でいいです。



任意のアカウント名を設定します。 嫌なら後でアカウントの管理とかから変更や削除などできます。



パスワードを設定します。未入力でも行けたかもしれません。必須だとしても後で変更できます。



秘密の質問3つを選び、設定します。



こういうおすすめ機能・設定は、基本的にすべてオフ(無効)をおすすめします。必要なら後で設定すればいいです。

「同意」を押します。


「スキップ」を押します。


コルタナはいらない邪魔な人なので、「今は実行しない」を押します。


インストール設定は以上で、待っていればログオン画面またはデスクトップに遷移しています。

あとは、各種アプリケーションのインストールやシステムの設定、Windowsアップデート、データ移行を実施していけばOKです。


おわり

  • ひとまずOSバージョンとか以前のまま引き継がれるので最新状態を保っていれば、インストール作業自体は数時間以内で終わると思います。
  • あらかたインストールやデータ移行が終わった段階で、動作の感触は非常に良好でした。
    • OS起動してデスクトップ操作可能になるまでは10秒ほど、180倍以上の高速化になりました。驚異的です。
    • ゲーム(ApexLegends)やAdobe、VisulStudioなどの起動も以前は数分~5分、下手したら10分以上かかっていたのが、30秒~1分ほどになり快適です。
  • SSD登場当初は、フラッシュメディア特有の書き込み回数制限及び速度低下がどうだの言われていましたが、たぶん10年以上立っているので技術的に改善されているだろうし、当時より価格も下がっているので、なによりM.2(NVMe)の速度が圧倒的なので、もうHDDになんて戻れないですね。

M.2 SSD、感動した。

【VBA/EXCEL】EXCELでSQLエディタの実装(SELECT命令編)

はじめに

  • EXCELVBA)でSQLを使いたい。
  • 開発中はテスト用SQLも気軽に使いたい。
  • SQLエディタのような機能を実装しよう!

SQLエディタの実装(SELECT命令編)

参考 excel-ubara.com qiita.com

  • VB系環境では、SQLはADO(ActiveX Data Objects)を使用します。
  • 「ツール」→「参照設定」からMicrosoft ActiveX Data Objects X.X Libraryを追加する必要があります。 X.Xは2.7などバージョンになるので、環境に合わせて選択します。
  • これにより、使用できるデータベースは


今回は、SELECT命令のみ実装していきます。


実装

※本記事では、SQLインジェクション等のセキュリティ対策は考慮していません。


  • EXCELシートの構成
    • SQL:実行したいSQLを記述及び操作
    • result:実行結果出力
    • tblTest:テスト用テーブル


  • VBAモジュールの構成
    • Com:共通の設定
    • Init:DB接続関連の処理
    • SqlBrowser:主処理部
    • Sql_select:SQL実行部


まず、プロバイダを設定します。

本記事の範囲ではモジュールを分ける必要は特にないですが、今後の拡張を考慮して、

今回はモジュール名:Comを作成し、ここに記述します。

'--DB接続
Public Const Provider As String = "MSDASQL"
Public ConnectionString As String


次に、モジュール名:Initを作成し、DB接続設定を進めます。

今回はEXCELの同Book内のシートをデータベースとして運用していきます。

'--初期処理
Sub initDB()
    Com.File_Name = ThisWorkbook.FullName
    Com.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & "DBQ=" & Com.File_Name & "; ReadOnly=True;"
End Sub


テスト用SQLを実行する処理は以下のとおりです。

SQLの記述にはシート名:SQL、実行結果の出力先にはシート名:resultとしています。

主処理部はモジュール名:SqlBrowserに作成し、以下のサブプロを記述します。

Sub SqlBrowser()

    Dim thisSheet As String
    thisSheet = "SQL"

    Dim outSheet As String
    outSheet = "result"
        
    Dim row As Long
    Dim col As Long
    row = 1
    col = 1

    '--一覧クリア(とりあえず空欄が10000行分見つかるまでクリアしていく)
    Dim i As Long
    i = 0
    Do While i <= 10000
        If Worksheets(outSheet).Cells(row + i, col).Value = "" Then
            i = i + 1
        End If
        Worksheets(outSheet).Rows(row + i).ClearContents '行クリア
    Loop
    
    '--DBオブジェクト作成
    Call init.initDB
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    
    Dim sql As String
    
    '--SQL文を格納
    sql = Worksheets(thisSheet).Cells(1, 2).Value
    
    '--SQL実行
    Call Sql_select.Sql_select(cn, rs, sql)

    '--SQLの結果を出力
    Dim fld As ADODB.Field
    Dim j As Long
    j = 0

    '--列名表示
    For Each fld In rs.Fields

        If IsNull(fld.Name) Then
            Worksheets(outSheet).Cells(row, col + j).Value = "null"
        Else
            Worksheets(outSheet).Cells(row, col + j).Value = fld.Name
        End If
            
        j = j + 1
    Next fld
    
    i = 1
    j = 0

    '--レコード出力
    Do Until rs.EOF
    
        Dim f As Long
        For f = 0 To (rs.Fields.Count - 1)

            If IsNull(rs.Fields(f)) Then
                Worksheets(outSheet).Cells(row + i, col + f).Value = ""
            Else
                Worksheets(outSheet).Cells(row + i, col + f).Value = rs.Fields(f)
            End If

        Next f
        
        i = i + 1
        
        rs.MoveNext
    Loop

    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing

End Sub


主処理部からSQL実行部を呼び出します。

モジュール名:Sql_selectを作成し、以下のサブプロを記述します。

Sub Sql_select(cn As ADODB.Connection, _
                rs As ADODB.Recordset, _
                sql As String)

    cn.Provider = Com.Provider
    cn.ConnectionString = Com.ConnectionString
    cn.Open

    rs.Open sql, cn, adOpenStatic

End Sub


実行結果

テスト用のテーブルは以下のシート名:tblTestを作成し、内容は以下の通り。 f:id:indonegiyaland:20220409221152p:plain


また、SQLエディタはシート名:SQLを作成し、以下の通り。 f:id:indonegiyaland:20220409221500p:plain


今回テスト用に実行するSQLは以下の通り。

select * 
  from [tblTest$]
where id >= 200


実行ボタンを押すと、シート名:resultに列名付きで出力します。

この例では、idが200以上のレコードを抽出し出力されているはずです。 f:id:indonegiyaland:20220409221743p:plain

日付データとかの扱いや表示が課題かなあ...

おわり

  • 今回はSELECT命令のみ実装しました。
  • INSERTやUPDATE、DELETEなども使えるようにしていく予定です。
  • あとSQLインジェクション等のセキュリティ対策は考慮していません。

【VBA/EXCEL】指定フォルダ内のファイル一覧の取得

はじめに

  • VBAで指定フォルダ内のファイル一覧を取得するプログラムを作ります。
  • 開発及び実行環境はWindowsを前提にしています。
  • インストール等不要なBatchやVBScriptや、人気のPythonでやってもよいのですが事務作業で馴染みやすいVBAでやっていこうと思います。

ファイル一覧取得

基本となるソースコードは以下を参考にしています。 excel-ubara.com



FileSystemObjectを使用するため、予め「ツール」→「参照設定」からMicrosoft Scripting Runtimeを有効にしておく必要があります。

プログラムの大まかなかな流れとしては、

  1. フォルダ選択するためのダイアログ操作
  2. 結果出力シートの初期化
  3. サブフォルダ一覧の取得
  4. ファイル一覧の取得

となります。

以下が、全体のソースコードです。

Sub ファイル一覧()
    Dim objFso As FileSystemObject
    Dim objFldr As Folder
    Dim objSubFldr As Folder
    Dim objFile As File
    Dim strDir As String
    Dim i As Long

    'フォルダの選択
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "フォルダを選択"
        .AllowMultiSelect = False
        If .Show = -1 Then
            strDir = .SelectedItems(1) & ""
        Else
            Exit Sub
        End If
    End With

    Set objFso = New FileSystemObject
    If Not objFso.FolderExists(strDir) Then
        MsgBox ("指定のフォルダは存在しません")
        Exit Sub
    End If

    Cells.ClearContents
    Cells(1, 1) = strDir
    Cells(3, 1) = "ファイル名"
    Cells(3, 2) = "サイズ"
    Cells(3, 3) = "更新日時"

    i = 4
    
    'サブフォルダ一覧取得
    Set objFldr = objFso.GetFolder(strDir)
    For Each objSubFldr In objFldr.SubFolders
        Cells(i, 1) = objSubFldr.Name
        i = i + 1
    Next

  
    'ファイル一覧取得
    For Each objFile In objFldr.Files
        With objFile
            Cells(i, 1) = .Name
            Cells(i, 2) = WorksheetFunction.RoundUp(.Size / 1024, 0)
            Cells(i, 2).NumberFormatLocal = "0 ""KB"""
            Cells(i, 3) = .DateLastModified
            i = i + 1
        End With
    Next

    Set objFso = Nothing
    Set objFldr = Nothing
    Set objSubFldr = Nothing

End Sub


実行すると、「フォルダを選択」ウィンドウが起動します。 ファイル一覧を取得したいフォルダを選択します。 今回はtestフォルダを選択します。

f:id:indonegiyaland:20220406140113p:plain
フォルダ指定


また、testフォルダの内容は以下の通りです。

f:id:indonegiyaland:20220406140314p:plain
testフォルダ


ファイル一覧の取得結果は以下の通り出力します。

f:id:indonegiyaland:20220406144652p:plain
一覧

おわり

  • サブフォルダも含めたファイル一覧の取得や、EXCELのシート名一覧取得もやろうと思います。

Prophetのインストール方法(MacOS)

はじめに

  • Facebookの時系列データ分析用ライブラリ:Prophetのインストール手順です。
  • 既にWindows+Anacondaで実施しましたが、そのMac版です。

indonegiyaland.hatenablog.com

  • ProphetはPython3.7以上3.9未満に対応し、事前にPyStan、ephemのインストールが必要です。
  • また、PyStanには2.19.1.1までに対応しています。
  • PyStanインストールにはCythonのインストールが必要です。
  • C++コンパイラのバージョンはgcc9.0以上、またはClangを使用の場合はXcodeを最新版にしておきましょう。

環境

インストール

本環境にはPython2系も存在しており、Python3系はpython3pip3で環境設定されている。

今回は3系にインストールしていく為、pip3コマンドを使用している。

このへんは自分の環境を必ず確認する。

ターミナルはzshで実施している。


PyStanに必要なCythonとNumpyをインストール。

pip3 install Cython numpy --user


PyStan 2.19.1.1のインストール。

pip3 install pystan==2.19.1.1 --user


さらにephemをインストール。

pip3 install ephem --user


Prophetをインストール。

fbprophetであることに注意

pip3 install fbprophet --user

matplotlibやpandas、plotly(jupyter notebook用)など他に必要なパッケージがあればインストールしておくとよい。

インストールは以上で終了。

動作確認

(省略)

おわり

  • Windowsでインストールするより遥かに簡単でした。
  • 癖があるとしたら、Xcode(Clang)なら最新版にしておくとか、gccとClangどっちを使っているのか確認するとかそのあたりだと思います。
  • jupyter notebook用のパッケージを使いたい場合は、Anacondaやjupyter単体で使えるように準備しておく必要があるようです。
  • というかProphetはグラフ描画にplotlyを使う?ようで、つまりjyupyter notebookが必要?
  • なので結論は、Macでも素直にAnacondaでやれ…ということか。

Prophetのインストール方法(Windows)

はじめに

  • FacebookのProphetを使いたいが、インストールにはPyStanが必要。
  • 2022/3/30時点でPyStan 3以上はWindows非対応、LinuxMacOSに対応。
  • ProphetはPyStan 2.19.1.1までに対応。
  • PyStanに必要なCythonにC++コンパイラが必要(VC++ 14以上またはgcc9.0以上)
  • WindowsではAnaconda環境でしか上手くインストールできない。(頑張ればインストールできるかもしれないが私は無理でした)
  • Anaconda環境にインストールしていくが、pipと混ぜると危険らしいので、原則condaでインストールをすすめる。

環境

  • Windows 10 Pro (21H2)
  • Anaconda
    • conda 4.12.0
    • anaconda 2021.11
    • python 3.9.7 ※ProphetはPython3.9以上非対応

インストール

  • 仮想環境へインストールする。
  • Prophetをインストールするには、事前にPyStan 2.19.1.1をインストールしておかなければならない。
  • PyStanインストールは別記事でまとめている。

    indonegiyaland.hatenablog.com

  • PyStanのインストールが済めば、以下の参考記事のように進めていく。

    information-station.work



まず、Anaconda Promptを管理者権限で起動する。

予めPyStanまでインストールを済ませた仮想環境に入る。

今回の例では、myenv1という名前の仮想環境で進める。

conda activate myenv1

ephemとplotlyをインストールする。

conda install ephem plotly

途中でProceed ([y]/n)?ときかれるのでyで進める。 以降の手順でもよく聞かれるので同様に進める。

PlotlyはPandasのコードを実行した時に

Importing plotly failed. Interactive plots will not work.

というエラーが出たので、一応インストールしておく。

次に、Prophetをインストールする。 fbprophetであることに注意。

conda install fbprophet

インストールが完了すれば、仮想環境を終了する。

conda deactivate

動作確認

Anaconda Navigatorを起動し、画面のApplications on項目をmyenv1にする。

f:id:indonegiyaland:20220401165546p:plain


そして、jupyter notebookを起動する。 サンプルプログラムは以下の記事を参照引用した。

qiita.com

サンプル:

import pandas as pd
from fbprophet import Prophet

df = pd.read_csv('test.csv')

m = Prophet(daily_seasonality=True)
m.fit(df)

future = m.make_future_dataframe(periods=365)
future.tail()
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()

実行結果: f:id:indonegiyaland:20220401171355p:plain

図も出力してみる。

fig1 = m.plot(forecast)

実行結果: f:id:indonegiyaland:20220401171515p:plain

インストールできたようだ。

おわり

  • Prophetがなんとか使える環境になったと思うので、これから株価解析等やってみようかなと思います。