禁断のPS3エミュレータ RPCS3 – 2024 –

RPCS3は、WindowsやLinuxで動作する、オープンソースのSony PlayStation 3エミュレーターです。
今回はWindows 11で楽しむ方法の紹介です。

動画でも紹介しています。

どんなPCで動作するか

RPCS3が動作するPCのスペックは以下の通りです。

OSとバージョン

  • Windows: Windows 7 SP1、Windows 8.1、Windows 10、Windows 11
  • Linux: Linux カーネル:バージョン5.4、Ubuntu 18.04 以降
  • macOS: macOS Big Sur 11.6 以降
  • FreeBSD: FreeBSD 12.3 以降

CPU

  • AMD
    x64 CPU (推奨: 6 コアと 12 スレッド、8 コア以上。Zen 2 アーキテクチャ以降、Threadripper 1000 および 2000 シリーズは推奨されません)
  • Intel
    x64 CPU (推奨: 6 コアと 12 スレッド、8 コア以上。Intel Skylake アーキテクチャ以降)

注: AVX2 を搭載しない、4 コアおよび 8 スレッド未満の CPU は、動作が低下することが予想されます。CCX クラスターごとにコアが 2 つしかない CPU は、全体的に動作が低下すると予想されます。

GPU

  • AMD
    OpenGL 4.3 互換以降 (推奨: アクティブ ドライバー サポートを備えた Vulkan 互換)
  • AMD Evergreen アーキテクチャ
    HD 5000 シリーズ以降 (推奨: AMD Polaris アーキテクチャ、RX 400 シリーズ以降)
  • NVIDIA
    OpenGL 4.3 互換以降 (推奨: アクティブ ドライバー サポートを備えた Vulkan 互換)
  • NVIDIA Fermi アーキテクチャ
    GTX 400 シリーズ以降 (推奨: NVIDIA Maxwell アーキテクチャ、GTX 900 シリーズ以降)

メモリ

4 GB 以上の RAM (推奨: 8 GB デュアルチャネル RAM 以上)

Visual C++ ランタイムをインストールしよう

Windows版のRPCS3は、あらかじめ「Visual C++ 再頒布可能パッケージ」をインストールしておく必要があります。このリンクからインストーラをダウンロードし、実行します。

PS3 システムソフトウェアをダウンロードしよう

まず、PS3のシステムソフトウェアをダウンロードします。
こちらのリンクから移動します。

下にスクロールした先にある、「PS3システムソフトウェアをアップデートする方法」の[パソコンを使ってアップデートする]をクリックします。

折りたたまれていた内容が展開され、[PS3アップデートをダウンロードする]ボタンが現れます。ボタンを右クリックして[名前を付けて保存]を選択し、ダウンロードを開始します。

「ダウンロード」フォルダ等に”PS3UPDAT.PUP”というファイル名で保存されるでしょう。

RPCS3エミュレータをダウンロードしよう

こちらのリンクにアクセスして、最上部にある「Download」をクリックします。

著作権侵害をしない旨のメッセージが表示されたら、[I Understand]をクリックします。

ページ上部の[Download]をクリックします。

Windows版の「Download」をクリックし、エミュレータをダウンロードします。

ダウンロードしたファイルは「7z」形式の圧縮ファイルです。お持ちのPCがWindows 11で最新のバージョン「23H2」以降であれば、上のようにファイルを右クリックし、[すべて展開]を選択すれば解凍することができます。
上記以外の場合、ダウンロードしたファイルを解凍するには「7z」等の解凍ツールが必要です。7zのダウンロードはこちらのリンクから。

解凍したファイルが入っているフォルダごと、任意の場所に移動します。その際、フォルダ名をわかりやすい名前にしておきます。ここでは”rpcs3″というフォルダ名にしました。

RPCS3を起動してみよう

上記で移動したフォルダの中にある、”rpcs3″あるいは”rpcs3.exe”をダブルクリックして起動します。

上の画面が表示されたら、RPCS3の起動までは成功です。

もしも「システムエラー」の画面が表示された場合、上で述べた「Visual C++ ランタイムをインストールしよう」の作業が正しく行えていない可能性があります。再度行ってみてください。

次の画面で①「I have read the Quickstart guide」にチェックします。すると②「Continue」が押せるようになります。
③と④については、お好みで決定ください。

「Continue」で下の画面が表示されるでしょう。

RPCS3にシステムソフトウェアを読込ませよう

RPCS3のフォルダに「bios」という名称のサブフォルダを作成します。

作成した「bios」フォルダに、あらかじめダウンロードしておいたRPCS3のシステムソフトウェア”PS3UPDAT.PUP”を移動します。

RPCS3に、PS3のシステムソフトウェアを読み込ませます。
メニューの[File]>[Install Firmware]をクリックし、ダイアログボックス「Select PS3UPDAT.PUP To install」を表示させます。

①システムソフトウェアが保存されているbiosフォルダに移動します。
②PS3UPDAT.PUPをクリックします。
③「開く」をクリックします。

ファームウェアのインストール中のプログレスバーが表示され、タイトルバーに「Success!」と表示されたら[OK]。

続いて「Compiling PPU modules」というプログレスバーが表示されます。この間はずっとCPU使用率が100%になるでしょう。

プログレスバーが100%になれば自動的にダイアログが閉じて、システムソフトウェアの読み込みは完了です。

RPCS3で重要な設定とは

RPCS3のツールバーにある[Config]アイコンをクリックします。

「Settings]画面が表示されます。
①[System]タブを選択し、下図の②③④を日本語および日本に変更します。
⑤の設定はゲーム中で、ゲームパッドの[〇]ボタンを「OK」に割り当てるもののようです。まれにゲームを操作する際、[〇]ボタンに割り当てるべき機能が[×]ボタンになってしまうケースがありますが、それを回避していると思われます。
最後に[Save]をクリックします。

ゲームパッドの接続と設定

今回、検証用に用意したゲームパッドは、PS5純正品の「DualSense ワイヤレスコントローラー (CFI-ZCT1J)」と、「Logicool Gamingpad F310」です。

ツールバーの[Pads]アイコンをクリックします。

CFI-ZCT1Jの場合は、「Handlers」のプルダウンメニューから[DualSense]を選択します。おそらく、それだけで問題なく使用できるでしょう。
キー配置を好みに変更したい場合は、画面上の任意のボタンをクリックし、5秒以内にゲームパッドの物理ボタンを押すと変更できます。

次にF310の場合ですが、まず最初にコントローラの背面を確認し、スイッチが「X」の位置にあることを確認します。その後、USBポートに接続し、RPCS3の[Pads]アイコンから「Gamepad Settings」画面を起動します。
続いて「Handlers」を[Xinput]に変更すると使用可能となるでしょう。あとは、好みに応じて各ボタンの設定をすれば準備完了です。

ゲームを実行しよう

吸い出したゲームソフトのイメージからの起動

図 ゲームのイメージ

ここでいう「イメージ」をエクスプローラで見ると上図になります。

メニューバーから、[File]>[Add Games]を選択します。

上のダイアログが表示されるので、ゲームソフトが保存されているフォルダを指定します。「PS3_DISC.SFB」ファイルなどが格納されているフォルダ名を指定するということです(上に掲載した「図 ゲームのイメージ」参照)。

ISOファイルから起動するには

ISOファイルの場合、上記のようにISOファイルのあるフォルダを指定してもゲームは読み込まれません。
ISOファイルの場合は、次の手順で読み込みます。

エクスプローラでISOファイルのあるフォルダを開きます。
マウスでISOファイルを右クリックし、表示されたメニューから「マウント」をクリックします。

仮想的なDVDドライブが参照できるようになります。

あとは物理ドライブ同様、[Open]アイコンから「Select Game Folder」を開き、ゲームのフォルダを指定すれば、ゲームを始められるでしょう。

ゲームを起動するには

ゲーム一覧からゲームタイトルをダブルクリックするか、ゲームタイトルを選択した状態で[Play]アイコンをクリックします。

さいごに

上記手順で、無事ゲームを実行することができました。
ハードウェア環境は、CPUがCore(TM) i7-3770K CPU @ 3.50GHz、グラフィックボードがGeForce GTX 570と少し古いシステム構成でも、十分楽しめるレベルのゲームもありました。
ちなみに、i5-650 + GeForce GT 710でも試してみましたが、予想通り使用に耐えられませんでした。
ある程度スペックの高いPCを確保する必要はありますが、ゲームの再現度は高く、十分楽しめると思います。

皆さんも、お手持ちのゲームでお楽しみください。

禁じられたPCSX2 - 2024 –

本稿では、PS2のゲームエミュレータ「PCSX2」を楽しむ方法を詳しく紹介します。

PCSX2でゲームをするために必要なもの

本稿の手順に従ってゲームをするために、あらかじめ用意しておかなければならないものがあります。これらの取得方法については、本記事では紹介していません。

BIOSPS2のゲーム機から取得したBIOS
ゲームソフトゲームROMから取得したゲーム用イメージファイル。

PCSX2のインストールと設定

PCSX2をインストールしよう

PCSX2の公式ページから、PCSX2をダウンロードします。本稿執筆時点(23年11月25日)では、Stable Releases(安定版)よりもLatest Nightly(最新の開発版)が推奨されているので、ここでは開発版をダウンロードします。

ダウンロードしたファイルは”7z”形式の圧縮ファイルなので、「7z」などで解凍します。ちなみに最新のWindows 11 23H2には7zの解凍機能が標準サポートされています。解凍したファイルはフォルダごとわかりやすい場所に移動するとよいでしょう。ここでは、”C:\Opt\Games”というフォルダを作成し、解凍済みのフォルダを移動します。
その際には、フォルダ名を短めの名称にリネームすることをお勧めします。ここでは、”pcsx2-v1.7″というフォルダ名にしました。

フォルダの中の、PCSX2の実行ファイルをダブルクリックして、起動します。

上の画面が表示されれば、ひとまず正常に起動されています。
ここから、ウイザード形式で設定を以下の順序で行います。

  1. 言語
  2. BIOSファイルの格納
  3. ゲームディレクトリ(フォルダ)の設定
  4. コントローラの設定
[次へ]をクリックします。

ここで、BIOSのイメージファイルを格納します。
まず、「BIOSディレクトリ」で①格納先を確認します。
次に、②[BIOSフォルダを開く]をクリックします。
開いたフォルダにBIOSファイルを配置します。
BIOSファイルを置いたら、③[リストを更新]をクリックします。すると画面にファイル名とBIOSのバージョンが表示されるでしょう。表示された行をクリックします。
最後に④[次へ]をクリックします。

ここでは、ゲームのROMイメージを格納するフォルダを指定します。
[追加]をクリックし、表示された画面でゲームが格納されているフォルダを指定します。
フォルダ指定後、下のように「ディレクトリを再帰的にスキャンしますか?」と聞かれます。フォルダ階層の下のほうにあるゲームも検索するかを確認しています。便利なので、筆者は[はい]を選択しています。

フォルダが追加されたら、[次へ]をクリックします。

ここでは、コントローラの設定を行います。PS5純正品のDualSense ワイヤレスコントローラー (CFI-ZCT1J)を接続しました。
①コントローラの種類が[DualShock 2]であることを確認します。
②[自動マッピング]をクリックし、③表示されるメニューから[SDL-0(DualSence Wireless Controller)]を選択します。
④コントローラのマッピング先が[規定(キーボード)]から[SDL-0]に変更されます。
⑤[次へ]をクリックします。

セットアップ完了です。
[完了]をクリックします。

上図のように、ゲームの一覧が表示されます。

グリッドアイコンをクリックすると、下のような表示形式に変更されます。ゲームごとに、カバー画像を張り付けることができます。

グラフィックスの設定をするには

グラフィックス関連の設定を行うには、[設定]>[グラフィック]をクリックします。

ここは、PCスペックに応じた固有の設定を行うところです。
本稿での検証用PCは、GPU NVIDIA GeForce GTX 570を搭載しています。そこで、以下の設定を施しました。

① [グラフィック]が選択されていることを確認します。
②「レンダラー」:Direct3D 12(Hardware)
③「アダプター」:NVIDIA GeForce GTX 570
④[レンダリング]タブを選択します。
⑤「内部解像度」:3xNative(~1080p)
⑥ [閉じる]をクリックします。

上記⑤はゲームを動かしてみて、もし重かったら別の選択肢を検討しますが、まずは、この設定で試してみます。

上記以外はいったん、デフォルトのままとしました。

ゲームパッドを設定するには

ゲームパッドの設定を行います。
[設定]>[コントローラー]から設定を開きます。

左ペインのタブから認識されているゲームパッド(ここでは「DualShock 2」)を選択し、画面のボタンとゲームパッドのボタンを一つずつ対応付けていきます。具体的には、画面のL1ボタンをクリックし、ゲームパッドのL1ボタンを押す、という具合です。

ゲームを始めてみよう

ゲームを始める方法は、PCSX2のゲーム一覧をダブルクリックするだけです。

ゲームを起動することができました。

チートコードを活用するには

チートコード(改造コード)とは、ゲームを有利に進めるためにゲーム(のデータ)を書き換える裏技のようなものです。HPを無限にするといったことが可能になります。チートコードはWEBで検索し、エミュレータに読み込ませる必要があります。

ゲームの名称+”チート”などの検索ワードで検索すると、チートコードが見つかることがあります。これらのチートコードは「PS2PARコード」と呼ばれているものがほとんどで、それをPCSX2に読ませるためには変換する必要があります。
変換を行うには、こちらのサイトなどを活用するとよいでしょう。

変換後のチートコードを配置する方法とは

チートコードの格納場所を確認します。
PCSX2の[設定]>[フォルダー]をクリックして設定画面を開きます。

上の画面の「チート ディレクトリ」にあるフォルダがチートコードを置く場所です。[開く]ボタンでフォルダを開いておきます。

①PCSX2のゲーム一覧をリスト表示にします。
②一覧のゲームの中から、チートを適用したいゲームを見つけ、「コード」カラムの文字列をメモします。今回の対象を「BioHazard 4」とすると、”SLPM-66213″となります。

ゲームを起動します。
起動後に、[F1]キーを押すと画面のようにステートセーブが行われます。

次にステートセーブのデータが保存されたフォルダを確認します。
[設定]>[フォルダー]の画面の、「セーブステート ディレクトリ」がその場所です。

[開く]ボタンで上記のフォルダを開いて、あらかじめメモしたゲームのコード(例:”SLPM-66213″)と合致するファイルを探します。ここでは、3つのファイルが見つかりました。

上図の、括弧でくくられた文字列をメモします。例えば、
“SLPM-66213 (60FA8C69).01.p2s”
というファイル名だったとすると、括弧の中の”60FA8C69″の部分をメモします。

次に、チートコードを格納するフォルダに移り、メモした文字列を使用して、”60FA8C69.txt”というファイルを作成します。

この時点ではファイルの中身が空なので、チートコードの変換後のコードをコピペして書き込みます。

最後に、テキストファイルのサフィックス(TXT)を”pnach”に変更します。
“60FA8C69.txt”が、”60FA8C69.pnach”というファイル名になりました。

チートを有効にしよう

[設定]>[エミュレーション]から設定を開きます。

[チートを有効化]にチェックを入れます。これでリアルタイムにチートが有効になります。

ゲームを起動中の場合は上図のように、チートが有効になったことを伝えるメッセージが表示されます。

チートが有効になったことにより、リッチで最強の主人公がプレイヤーのパートナーになりました。

おわりに

PCSX2のUIがバージョン1.7では大きく変更されました。DuckStationに統一される方向なのでしょうか?
DuckStationのように、チートコードが自動でダウンロードされるようになると非常に便利なのですが、はたして?

最も熱いPSエミュレータ「DuckStation」- 2024 –

マスコット・キャラ

DuckStationは、PlayStationTM(初代PS:PS1)のエミュレータ(エミュ)です。おそらく、PS1のレトロゲームをPCで楽しめるものの中では、最も評価の高いPSエミュでしょう。
DuckStationでは比較的低スペックのPCで遊べます。高性能PCでは画質をキレイに補正する機能を用いることにより、より快適に遊ぶことができます。
DuckStationを動作させるためには別途、「BIOS」と呼ばれるPS内蔵のプログラムが必要になります。本稿ではBIOSの入手方法については触れません。他のPS1エミュレータで遊んだことがある方は、そのときに使用したBIOSが使用できます。

動作確認に使用したPCの概要

本稿執筆にあたって、DuckStationの検証に用いたPCのスペックは下の表のとおりです。
ESPRIMO D582/FWは、富士通の法人向けデスクトップパソコンです。中古ショップで4000円で購入しました。2012年発表のPCですが、HDDをSSDに換装し、メモリを16GBまで増設。Windows 11の厳しい動作要件をバイパスし、DuckStationの動作検証をしましたが、ほぼ問題なく動作しました。OSはSSDに格納しましたが、ゲームデータはHDDに格納したため、若干、読み込みに時間がかかり、一瞬ゲームのシーンが固まることがありますが、許容範囲と思いました。

メーカー/型式発表時期
富士通 ESPRIMO D582/FW2012年11月発表
OSCPU
Windows 11 pro
(Windows 8 pro)
インテル® Core™ i5-3470
プロセッサー
メモリSSD/HDD
16GB480GB/160GB
グラフィックカードスピーカー
Intel® HD Graphics 2500
CPUに内蔵
外付け
(なし)
カッコ内は発表時の仕様

DuckStationのインストール方法とは

「VC++RT」をインストールしよう

こちらのリンクにアクセスします。
DuckStationのダウンロードページが日本語で表示されるでしょう。

DuckStationを実行するためには、Microsoft Visual C++ ランタイム ライブラリ(VC++RT)が必要です。下図の[Download VC++RT]をクリックして”VC_redist.x64.exe”ダウンロードします。

「ダウンロード」フォルダ等に保存されている”VC_redist.x64.exe”をダブルクリックしてランタイムのインストーラを起動します。
下の画面で、[ライセンス条項および…]にチェックし、[インストール]をクリックします。

下のような画面が表示されたら、ランタイムのセットアップは正常終了です。[閉じる]ボタンの左隣に[再起動]が表示されている場合は、実行途中のウィンドウが無いか確認後に再起動します。

[再起動]ボタンが表示されていない場合は、[閉じる]をクリックします。

もし下の画面が表示されたら

インストーラを起動したときに「セットアップの変更」画面が表示された場合は既にインストールされているので、[閉じる]ボタンをクリックし、インストーラを終了します。

DuckStationをインストールしよう

ダウンロードページから[Download Duck]をクリックして、”duckstation-windows-x64-release.zip”をダウンロードします。

ダウンロードしたファイルはZIP形式の圧縮ファイルです。エクスプローラからファイルをマウスで右クリックして[すべて展開]を選択し、解凍します。

あとは解凍したフォルダ”duckstation-windows-x64-release”を任意の場所に移動するだけです。私はフォルダ名を”duckstation”という短い名前に変えて配置しました。

DuckStationを起動してみよう

配置したフォルダにある”duckstation-qt-x64-ReleaseLTCG.exe”をダブルクリックして起動します。

次のセットアップウィザードが表示されたら、起動成功です。

MSVCP140_1.dll が無いというエラーの対処方法とは

DuckStation起動時に、MSVCP140_1.dll が無いというエラーが出ても、あわてる必要はありません。

上記既述の「「VC++RT」をインストールしよう」の項を参照して、DuckStationが使用するプログラムをダウンロードします。ダウンロードしたファイルを実行し、インストールします。再度、DuckStationを起動すればエラーは解消されているでしょう。

セットアップ ウィザードの設定方法は

セットアップは大まかに、「日本語表示の設定」「BIOSイメージの格納」「ゲームイメージの保存フォルダの設定」「コントローラの設定」の順に行います。
「Language」から[日本語]を選択します。

Theme(テーマ)やアップデートの自動化についてはデフォルトでかまいません。
[Next]をクリックします。

このタイミングですべて日本語表示に切り替わってもらいたいところですが、残念ながら、英語のままでした。セットアップウィザードでは、この先に表示される画面の一部が日本語で表示されるようになっています。

次の画面で、あらかじめ準備したBIOSを所定のフォルダに格納します。任意の場所にBIOS格納フォルダを変更することもできます。筆者はデフォルトのフォルダにBIOSを配置しました。
下の画面には次のようなことが書かれています。
「法的根拠により、あなたが所有するPS1実機本体から BIOS を吸い出す必要があります (借りたPS1はNGです)。専用のツールを使用して、ゲーム機の BIOS ROMから吸い出す必要があります。(以降略)」

ゲームのソフトを格納するフォルダを指定します。
[Add]ボタンをクリックすると、フォルダの場所を選択する画面が表示されます。

ゲームのソフトが入っているフォルダを選んで[フォルダーの選択]をクリックします。

サブディレクトリ(フォルダ階層の下にあるフォルダすべて)を検索対象とするかを聞かれます。便利なこともあるので、私は「はい」を選択しました。

ゲームのソフトが格納されているフォルダが登録されました。
[Next]をクリックします。

ゲームパッドをPCに接続します。ここでは、PS5純正品の「DualSense ワイヤレスコントローラー (CFI-ZCT1J01)」と「Logicool Gamepad F310」を試しますが、ひとまずCFI-ZCT1J01を接続します。
この段階では、デフォルトのキーボードが割り当てられています。

CFI-ZCT1J01の場合、Controller Type が[デジタルコントローラー]を選択します。続いて、[Automatic Mapping]をクリックしてポップアップ表示されるメニューから、[SDL-0(DualSense …]を選択します。
最後に[Next]をクリックします。

これでセットアップは終了です。
[Finish]をクリックします。

これで、下のようにゲーム一覧が表示されたメイン画面が表示されるようになりました。
ゲームの吸い出し方によって、同一のゲームが2行表示されるようです。図の「シリアル番号」列が同じであれば、同じゲームで同一のDVDです。

BIOSの起動確認をしよう

メニューバーから[システム]>[BIOS起動]をクリックします。

次の画面が表示されればBIOSの設定は完了です。

BIOSの起動が失敗する場合は

もし、BIOSの起動が失敗した場合は、メニューバーから、[設定]>[BIOS]をクリックします。

BIOS ディレクトリ(フォルダのことです)のフォルダの場所と、正しいBIOSイメージが格納されているかを確認します。

ゲームの起動を確認しよう

はたして、ゲームが正常に起動できるでしょうか?
メニューバーから[表示]>[ゲームリスト]をクリックしてゲームの一覧を表示します。

一覧に表示されたゲームをダブルクリックすると、ゲームが起動します。
前述の通り、ゲームをROMから吸い出したときの出力ファイルの形式により、DuckStationでの一覧表示形式が異なるようです。CD-ROM1枚当たり1行で表示される場合と、2行表示される場合が確認できました。
図の「シリアル番号」列が同じであれば、同じゲームで同一のCDです。

「ディスク交換の確認」画面が表示されたら、[ディスク交換]をクリックします。まだ一度もゲームを起動していない場合でも、下の画面が表示されることがあります。

ゲームが起動できました。

コントローラも問題なく、操作できます。

DuckStationを素早く起動するには

タスクバーにDuckStationのアイコンが表示されています。アイコンを右クリックし、[タスクバーにピン留めする]を選択して、次回から素早く起動できるようにしておきましょう。

ゲームを終了するには

終了するにはメニューバーの[システム]から[電源オフ]を選択します。

下のダイアログから[はい]を選択すると、ゲームが終了してゲーム一覧の画面に戻ります。ここでステートセーブ(現時点の状態を保存)の有無を指定することもできます。

コントローラを追加するには

Logicool Gamepad F310を設定しよう

Logicool Gamepad F310は、PC用のゲームパッドです。
PCに接続します。

DuckStationのメニューバーから、[設定]>[コントローラ]を選択します。

「コントローラの設定」画面で、「グローバル設定」を選択すると、画面の右側に検出されたF310が表示されます。

画面の左側
画面の右側

画面左端にある[コントローラポート2]タブが選択された状態で、「コントローラータイプ」を[デジタルコントローラー]にします。
次に[自動マッピング]をクリックし、ポップアップ表示されたメニューから[SDL-1]を選択します。

F310は背面にDirectInput(D)とXInput(X)を切り替えるスイッチがあります。今回検証したところ、どちらに切り替えても、上記の設定でゲームパッドの操作に違いはありませんでした。

一部でXInputを有効化しないと対応できないケースがあるようです。その場合は、F310の場合は背面のスイッチを「X」にしたうえで、下図のようにコントローラ設定の[グローバル設定]タブから、Xinputカテゴリの[Xinputを有効化]をチェックします。

[コントローラポート1]>[自動マッピング]>[Xinput-1]と、XInputが選択できるようになりました。
F310では、SDLでもXinputでも動作可能でした。一方で、XInputをサポートしていないコントローラでは、XInputを有効化しても[自動マッピング]のメニュー候補にXinputは表示されないようです。

ボタンの配置が思った通りに設定されていなかったり、配置を変更したい場合は、下の画面で、次の操作を行うことにより、好みのボタン位置にカスタマイズが可能です。
①任意のボタン位置をクリック
②ゲームパッドのボタンを押す

上記のほかにも、ニンテンドー用のゲームパッドなど、いくつか試しましたが、いずれも上記の手順で使用できるようになりました。

ツールバーを表示するには

デフォルトの画面では各機能のアイコンが表示されているツールバーが省略されています。ツールバーを表示するには、メニューバーから[表示]>[ツールバー]を選択します。

これでツールバー上のアイコンが表示されるようになりました。
なお、以降ではデフォルトのツールバーがない画面で説明をします。

解像度を増やしてキレイにしよう

DuckStationには「アップスケーリング」という機能があります。映像を元の大きさよりも多い画素数に変換してくれるので、大きなサイズのウインドウに表示しても違和感なくゲームを楽しめます。
メニューバーの[設定]>[拡張]を選択します。

[レンダリングの機能強化]グループの[内部改造スケール]を変更します。どこまでスケールを拡大できるかは、ハードに依存するでしょう。

続いて、[PGXP]グループの下図の5つの項目にチェックを入れます。PGXPというのは、描画する際の「歪み」を補正する機能です。

ゲームのセーブとロード

DuckStationのステートセーブ機能を用いると、ゲーム中のどの場面でもセーブすることができます。

ゲームの状態をセーブするには

[F2]キーでセーブできます。
メニューからセーブする方法は下の図の通りです。

ゲームをロードするには

ゲーム起動時に下の図のダイアログが表示され、[ステートロード][新規に起動][削除して起動]などが選択できます。[削除して起動]を選択してゲームを起動した場合、そのままセーブせずにゲームを終了すると、上述のダイアログが表示されなくなるようです。何が便利なのか、よくわかりませんでした。
ゲームリストをマウスで右クリックして、メニューから[ステートロード]>[ゲームセーブ1]などを選択してもロードすることができます。

ゲーム実行中の場合は、[F1]キーでロードできます。もちろん、メニューからも可能です。

チートを活用するには

DuckStationではなんと、チートを自動でダウンロードしてくれます。
チートとは、ゲームを有利に進めるためにゲーム(のデータ)を書き換える裏技のようなものです。HPを無限にするといったことが可能になります。一般的なエミュはWEBでチートコードを検索し、エミュレータに読み込ませる必要がありますが、DuckStationは自動でダウンロードしてくれるので、その必要が無いことが多いです。ただし、ダウンロードしてくれないゲームもあります。

メニューバーから[ツール」>[チートマネージャ]をクリックし、[チートマネージャ]を選択します。

途中、チートはゲームに不具合を生じさせる可能性があることを警告するメッセージが出ます。[はい]をクリックして続けます。

「チートマネージャ」により、チートの説明が英語の一覧で表示されます。

下の図のように、チートにチェックを入れると、そのチートが有効化されます。

なお、チートが自動的にダウンロードされないゲームなどでは、WEBで見つけたチートコードなどをDuckStationに読み込ませることも可能です。その場合は「チートマネージャ」の「コードを追加」を選択し、チートを入力します。

便利なショートカットは

DuckStationではゲームプレイ中に様々な機能がショートカットで使えます。DuckStationではショートカットを「ホットキー」と呼んできますが、ここでは「ショートカット」に統一します。
使用できるショートカットの中で、特に頻繁に使用するものを下の表に挙げます。
なお、ショートカット欄が「定義可」のものは、最初ショートカットキーが割り当てられていません。以降で説明するショートカットの設定で任意のキーを割り当てることができます。

機能ショートカット
一般
一時停止してメニューから次の機能を選ぶ
・再開
・早送り
・Load/Save
・チート有効/無効の切り替え
その他
[Esc]
[Tab]を押下中、早送り[Tab]
フルスクリーンON/OFF[F11]
一時停止/再開[Space]
スクリーンショットを保存[F10]
システム
コマ送り定義可
巻き戻し【注】追加設定が必要定義可
チート有効/無効の切り替え定義可
音声
音声を上げる定義可
音声を下げる定義可
ステートセーブ
ステートロード[F1]
ステートセーブ[F2]

特に「巻き戻し」機能が便利です。時間を戻して何度でもやり直しができるからです。また「音量を下げる」等の機能もよく使用します。どのゲームでもサウンドはかなり大きめに設定されているので、家庭環境では音量を頻繁に調整する必要があるからです。

ショートカットを定義するには

ここでは「巻き戻し」のショートカットキーを[←]に割り当ててみます。
[設定]>[ホットキー]を選択します。

下の画面、左ペインで[ホットキー]が選択されていることを確認します。右の「巻き戻し」に対応するボタンをクリックすると、ボタン上で5秒間のカウントダウンが始まります。この5秒間の間にキーボードの[←]を押すと、「Keyboard/Left」と表示されて、巻き戻し機能が[←]に割り当てられます。
なお、巻き戻しの場合は、別の設定画面で巻き戻しを「有効化」する必要があります。

「巻き戻し」を有効化するには

巻き戻しは、DuckStationが一定時間の画面のデータ(フレーム)を覚えておく(バッファリングする)ことで実現しています。DuckStationの初期設定では10秒程度の過去にさかのぼることができます。設定を変更することにより、もっと前まで戻ることも可能ですが、システムの負荷が高くなります。

[設定]>[エミュレーション]を選択して設定画面を開きます。

左ペインの[エミュレーション]が選択されていることを確認し、右の[巻き戻しを有効化]にチェックを入れます。
「巻き戻し保存頻度」「巻き戻しバッファサイズ」の数値を大きくするとシステムのリソースが多く消費されることになるので、実際にゲーム上で確かめながら、これらの値を決定するのが良いでしょう。

さいごに

それでは、PS1のレトロゲームをPCでお楽しみください!

ターミナルで「ごみ箱」シェルをサクッと作ろう

LinuxやmacOSのターミナルで「ごみ箱」を実現するシェルを「サクッと」作成してみます。

消して後悔しないためには

LinuxやmacOSのターミナル(端末)で rm コマンドを使ってファイルを削除すると、本気で消えてしまいます。ファイルシステム上、存在しなくなるので、特殊なツールと幸運に恵まれない限り、復活はできません。GUIの世界にある「ごみ箱」を漁って元に戻すことは不可能です。バックアップを取得していれば話は別ですが、そんな幸運に恵まれることはまれでしょう。

ターミナルの世界でごみ箱を実現するのは簡単です。
サクッとやってみませんか?

2行のシェルスクリプトで実現するには

まず、ごみ箱のディレクトリを作成します。ホームディレクトリに隠しディレクトリを作成します。

$ mkdir ~/.trash

次に以下のシェルスクリプトを作成します。
ファイル名は、”tra.sh”とします。

#!/bin/sh
mv $@ ~/.trash

コマンドの基本設計をしてみよう

上記だけでも使えますが、加えて次のような機能もあると便利です。

  1. ファイルをごみ箱に移す
  2. ごみ箱の中身を一覧表示する
  3. ごみ箱からファイルを復活
  4. ごみ箱を一括で空にする

上記の機能を、1機能ずつ4つのコマンドにするか、1コマンドにまとめて、オプションで機能を切り替えるかを検討します。1コマンドを1機能は非常にシンプルであり、Unix的な考え方といえますが、4つのコマンド名を覚えるのが大変かもしれません。
今回は1コマンドに集約することにします。

ここで、コマンドの基本設計を書いてみます。

  1. コマンド名と起動方法
    tra.sh [-elr] [file …]
  2. ファイルをごみ箱に移す
    tra.sh file …
    複数のファイルやディレクトリが指定できる。
  3. ごみ箱の中身を一覧表示する (list)
    tra.sh -l
  4. ごみ箱からファイルを復活 (restore)
    tra.sh -r file
    指定できるのは1ファイルのみとし、カレントディレクトリに戻す。
  5. ごみ箱を一括で空にする (empty)
    tra.sh -e
    ファイルは完全に消去され、復元できなくなる。

詳細設計を書いてみよう

続いて、詳細設計を作成します。

  1. ごみ箱ディレクトリ
    なかったら作成。
  2. オプションごとの処理
    • オプションもファイルも指定がない場合
      起動方法(usage)を表示して終了。
    • オプションがなく、ファイル名のみの場合
      ファイルをごみ箱に移動。
    • -l
      ごみ箱の中身を一覧表示。
    • -r
      復元するファイルを1つ指定しているかチェック。
      ファイルがごみ箱にあるかチェック。
      ごみ箱からファイルを復元。
    • -e
      ごみ箱の中身を一括削除。
  3. プログラム処理構造
    プログラムの骨格といえる処理の流れを設計します。具体的には、上記2の処理をどのような順序で実行するか、検討します。
    2の処理では、ごみ箱にファイルを移動する処理だけ、オプションの指定がありません。ファイルのみの指定です。
    そこで、どのオプションにも該当しない場合、ごみ箱に移動する処理が実行されるようにします。
    概略の処理フローは以下の通りです。
if "-l"
then
    ごみ箱の中を一覧表示
elif "-r"
then
    ごみ箱からファイルを復旧
elif "-e"
then
    ごみ箱を空にする
else
    ごみ箱にファイルを移動
fi

シェルスクリプトを書いてみよう

ごみ箱のファイル名を定義する

TRASH='.trash'

ごみ箱のディレクトリ名はいたるところに出てきそうなので、最初にシェル変数として定義しておき、変更する際には1か所の修正で済むようにします。

ごみ箱の作成

ごみ箱がまだなかったら、作成します。

if [ ! -d ~/$TRASH ]
then
    mkdir ~/$TRASH
fi

引数に応じた処理

引数:オプションもファイルも指定されていない場合

if [ $# -eq 0 ]
then
    echo "usage: $0 [-elr] file ..."
    exit 1
fi

usage(起動方法)を表示して終了します。

引数:-l の場合

if [ "$1" = "-l" ]
then
    ls -la ~/$TRASH/

ls コマンドでごみ箱の中身を一覧表示します。
サイズなど多くの情報が表示される -l(long listing) オプションと、”.”から始まる隠しファイルも表示できる -a(all) オプションを指定します。これで隠しファイルを削除しても表示できます。

引数:-r の場合

elif [ "$1" = "-r" ]
then
    # check if file exists
    if [ $# -ne 2 ]
    then
        echo "Bad argument count."
        exit 2
    elif [ ! -e ~/$TRASH/"$2" ]
    then
        echo "File not found."
        exit 3
    fi
    mv ~/$TRASH/"$2" .
    if [ $? -eq 0 ]
    then
        echo "File restored from trash."
    fi

-r の次にファイルが指定され、そのファイルが実在するかをチェックします。左記以外の場合は終了します。

mv コマンドで単一ファイルをごみ箱からカレントディレクトリに復元します。mv で生じたエラーはそのまま、表示されます。mv の終了ステータスコード($?)を確認し、正常終了(=0)してる場合のみ、成功のメッセージを表示します。
ごみ箱への移動と逆の動作です。ただし1ファイルのみです。

引数:-e の場合

elif [ "$1" = "-e" ]
then
    rm -rf ~/$TRASH/* ~/$TRASH/.[^.]*
    echo "Trash emptied."

rm コマンドでごみ箱の中身をすべて削除します。二度と復元できません。
-r(recursive) はディレクトリ階層ごと削除します。
-f(force) は問答無用で削除します。
“.”から始まる隠しファイルも削除します。”.”(カレントディレクトリ)と”..”(親ディレクトリ)は削除するとまずいので、左記以外のファイルを削除します。

引数:オプションがなく、ファイルのみの場合

else
    # move file to trash.
    mv "$@" ~/$TRASH/
fi

上記コードの else – fi 間が実行されるのは、予約語であるオプションに該当しなかった場合のみ、すなわちファイルのみが指定されているケースです。ここで、ごみ箱へのファイルの移動を行います。
mv コマンドで複数ファイルまたはディレクトリ(以降、ファイルと記述)をごみ箱に移動します。”$@”は指定されたファイルすべてに置き換えられます。
mv で生じたエラーはそのまま、表示されます。mv でエラーにならないファイルはすべて、ごみ箱に移動します。ここでは、mv の終了ステータスをチェックしません。なぜなら、終了ステータスがエラーを返した場合であっても、終了ステータスからどのファイルがエラーになり、どのファイルが移動されたか判別できないからです。

完成したシェルスクリプト

#!/bin/sh

# Define the directory name that is the substance of the trash.
TRASH='.trash'

# check if trash directory exists, if not create it
if [ ! -d ~/$TRASH ]
then
    mkdir ~/$TRASH
fi

# check if command line argument is provided
if [ $# -eq 0 ]
then
    echo "usage: $0 [-elr] file ..."
    exit 1
fi

# check if option is provided
if [ "$1" = "-l" ]
then
    ls -la ~/$TRASH/
elif [ "$1" = "-r" ]
then
    # check if file exists
    if [ $# -ne 2 ]
    then
        echo "Bad argument count."
        exit 2
    elif [ ! -e ~/$TRASH/"$2" ]
    then
        echo "File not found."
        exit 3
    fi
    mv ~/$TRASH/"$2" .
    if [ $? -eq 0 ]
    then
        echo "File restored from trash."
    fi
elif [ "$1" = "-e" ]
then
    rm -rf ~/$TRASH/* ~/$TRASH/.[^.]*
    echo "Trash emptied."
else
    # move file to trash.
    mv "$@" ~/$TRASH/
fi

コマンドの実行環境を整えるには

どこでも起動できるようにするには

シェルスクリプトに実行権を与えます。

chmod +x tra.sh

ディレクトリを作成し、シェルスクリプトを格納します。

mkdir ~/bin
mv tra.sh ~/bin

PATH環境変数にシェルの格納パスを追加します。

Linux(bash)の場合

ホームディレクトリにある、”.bashrc”に以下の行を追加します。

export PATH=$PATH:~/bin/

上記を bash に読み込ませて反映します。

. ~/.bashrc

macOS(zsh)の場合

ホームディレクトリの”.zshrc”に以下の行を追加します。”.zshrc”がない場合は作成します。

export PATH=$PATH:~/bin/

上記を zsh に読み込ませて反映します。

. ~/.zshrc

これで、どこのディレクトリからでもコマンド名だけで起動できるようになりました。

以下はmacOSからの実行例です。

apple@iMac12 ~ % pwd
/Users/apple
apple@iMac12 ~ % tra.sh
usage: /Users/apple/bin//tra.sh [-elr] file ...

さいごに

上記のスクリプトは、ごみ箱の中のファイル名とバッティングした場合が考慮されていないなど、使用するうえで改良したくなる要素が残っています。ぜひ、チャレンジしてみてください。

ArduinoでフルカラーLEDの色の変化を楽しむには

どんなスケッチになる?

今回のスケッチでは、フルカラーLED(RGB LEDとも言います)を使用して、七色の世界を楽しみます。フルカラーLEDは、1つのLEDに見えますが、中身は 3色の LED でできていて、多彩な色を表現できる素子です。
フルカラーLEDをArduinoに接続し、7色に変化させるスケッチを書きます。スケッチでは、赤色が点灯している状態から始め、徐々に緑色に遷移させ、次に青色に変化させさて、最後は赤色に戻します。 この色の遷移によって、7色すべてを光らせます。

必要なもの

#構成部品数量
1Arduino UNO1
2ブレッドボード1
3フルカラーLED(カソードコモン)
L-154A4SURKQBDZGC
1
4抵抗器 220Ω3
5ジャンパーワイヤー(オス×オス)4

フルカラーLEDの仕組みとは

ちょっと見では、フルカラーLED は単色の LED と同じように見えます。 しかし、LEDが光る頭の部分の内部には、実は赤色、緑色、青色(RGB)の 3 つの LED があります。 個々の LED の明るさを制御することで、黒以外のどんな色でも出すことができます。理論的には2563(16,777,216)色を表現できます。
3 つの LED のそれぞれの光の量(輝度)を調整することで、絵の具を混ぜるのと同じ方法で色を作り上げます【注】
Arduinoの analogWrite 機能 を使うと、ソフトウェアから明るさをいい感じに調節することができます。非常に近接した点からの発光色は混ざって見えるという目の錯覚を利用しているのです。 実は何を隠そう、液晶テレビでも全く同じ仕組みです。液晶テレビに装備されたLEDの素子が発光する色は決まっていて、色を混ぜて彩色豊かな絵を表現しているのです。
例えば、赤と緑の輝度を同じにして青を消せば黄色になり、3 つすべての LED の輝度を同じに設定すると、白色になります。
【注】正確には光の三原色と色の三原色は異なりますが、混ぜて色を作れる点は同じです

ブレッドボードでの配線方法とは

フルカラーLEDの種類には2つあり、「アノードコモン」と「カソードコモン」と呼ばれます。
ここでは、カソードコモンを使います。カソードコモンのタイプはRGBのカソードが1本に共通化されていて、グランド(-)に接続します。カソード以外の3本のピンはそれぞれ色が決まっていて、単色の LED のアノードと同様に、抵抗を経由してプラス(+)に接続します。


写真のように、フルカラー LED には 4 本のピン(足)があります。LED の頭の中にある3種類のLED(RGB)に接続されている3本の線(①③④)はアノードと呼ばれ、プラス(+)に接続されます。この時、アノードに多くの電流が流れすぎないように、220Ωの抵抗を接続します。
RGBのカソードは1本にまとめられ、4本の中で一番足が長いもの(②)です。カソードはグランド(-)に接続されます。
上記の(+)と(-)を間違えて接続すると、LED は点灯しません。

回路の接続順序

LEDの足からArduinoのピンまでの接続順序は下の図と表のとおりです。

LEDの足抵抗ジャンパーArduino
ピン
220Ω~6
カソードGND
220Ω~5
220Ω~3

回路図は以下の通りです。

フルカラーLEDを使ったスケッチ

スケッチ全体は下の通りです。

// RGBアナログ出力の値(0~255)の最大値
#define MAXV 255
// アナログ(PWM)出力のピン番号をRGBに割り当てる
#define B 3
#define G 5
#define R 6

void setup()
{
  // RGB出力ピンに初期設定する
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);
}

// フルカラーLEDの色を循環的に変える
void loop()
{
  // 色の変化が速すぎると、人間の目では追いつけないので、少しゆっくりにするための待ち時間
  #define T_DELAY 20

  for (int i = 0; i <= MAXV; i++) // 2色を0~255の範囲で変化させ、色を混ぜる
  {
    // 赤の出力を下げつつ、緑の出力を上げていく
    analogWrite(R, MAXV-i);
    analogWrite(G, i);
    delay(T_DELAY); // 色の変化に目が追いつくまで少し待つ
  }

  for (int i = 0; i <= MAXV; i++) // 2色を0~255の範囲で変化させ、色を混ぜる
  {
    // 緑の出力を下げつつ、青の出力を上げていく
    analogWrite(G, MAXV-i);
    analogWrite(B, i);
    delay(T_DELAY); // 色の変化に目が追いつくまで少し待つ
  }

  for (int i = 0; i <= MAXV; i++) // 2色を0~255の範囲で変化させ、色を混ぜる
  {
    // 青の出力を下げつつ、赤の出力を上げていく
    analogWrite(B, MAXV-i);
    analogWrite(R, i);
    delay(T_DELAY); // 色の変化に目が追いつくまで少し待つ
  }

// ループの先頭に戻る
}

定数を定義する #define

// RGBアナログ出力の値(0~255)の最大値
#define MAXV 255
// アナログ(PWM)出力のピン番号をRGBに割り当てる
#define B 3
#define G 5
#define R 6

#define文は、文字列の置き換えを行います。
色を表現するためにアナログ出力を行いますが、その出力の最大値は255です。スケッチで単に255という値を使うよりも、MAXVといったシンボルを使ったほうがわかりやすいと言えます。またスケッチの中で、255が頻繁に使用されます。アナログ出力値は色を表現する場合、人間の目に顕著に違いが判るのが200くらいまでだとします。すると255を200に変更する際は、MAXVを255に定義している#define文は1か所だけなので、その1行を200に変更するだけで済みます。
同様に、Arduinoのアナログピンの番号はRGB別にスケッチのいたるところで使用されるので、例えば青のBはピンの#3というように#define文で定義しておきます。

ピンごとに色の割り振りと用途を決める

void setup()
{
  // RGB出力ピンに初期設定する
  pinMode(R, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(B, OUTPUT);
}

setup()は1度だけ実行されます。ここで、pinMode()は指定するピン番号が入力か、出力かを決定します。RGBの3つのピンから信号を出力して輝度を変更することにより、色を作り出すので「OUTPUT」を指定します。

色を循環的に変えるメインの処理

// フルカラーLEDの色を循環的に変える
void loop()
{

}

loop()もsetup()同様、自動的に呼ばれる、永久ループの処理です。ここでフルカラーLEDの色を循環的に変える処理を行います。

// 色の変化が速すぎると、人間の目では追いつけないので、少しゆっくりにするための待ち時間
  #define T_DELAY 20

  for (int i = 0; i <= MAXV; i++) // 2色を0~255の範囲で変化させ、色を混ぜる
  {
    // 赤の出力を下げつつ、緑の出力を上げていく
    analogWrite(R, MAXV-i);
    analogWrite(G, i);
    delay(T_DELAY); // 色の変化に目が追いつくまで少し待つ
  }

for文は、同じ処理を繰り返し実行するために使用されます。for文は、以下のように書くルールです。

for (初期化; 条件式; 反復処理) {
  実行する処理
}

  • 初期化:ループの最初に実行される式です。通常、カウンタ変数を初期化するために使用されます。
  • 条件式:ループが続行されるかどうかを判断するために使用されます。条件式が真である場合、ループは続行されます。条件式が偽である場合、ループは終了します。
  • 反復処理:ループの各反復後に実行される式です。通常、カウンタ変数を更新するために使用されます。

analogWrite()は指定したピンへの出力(OUTPUT)を行います。出力の値は0~255の範囲です。上記スケッチでは赤(R)の値を255から始め、254、253という具合に1ずつ減らしています。同時に緑の値を0から始め、1、2と1ずつ増やしています。
つまり、Rの輝度を最大にし、Gは消灯している状態を初期状態にし、Rの輝度を徐々に下げ、同時にGを少しずつ明るくしています。これにより、下の図でRとGの円が重なっている「Y」の領域の色を作っています。

delay()は指定された時間だけ、何もしないで待ちます。delay()を間に入れないと、Arduinoはものすごい速さで色を変化させてしまうので、人間の目にはついていけません。そこで、T_DELAY(ms)待つことによって、人間の目に色の変化を認識しやすくさせています。

ほかの二つのfor文も、色の組み合わせを変えながら同様の処理をループの中で行っています。

最後に

色を変化させるスケッチには様々なアルゴリズムがあります。ぜひ試してみてください。

12年前のPCのWindows 11を23H2にアップデートするには

  • 23年10月31日(現地時間)にWindows 11の大型アップデートである23H2が配信されるようになりました
  • Windows 11のシステム要件に適合していないPCでWindows 11 22H2等が動作している場合、23H2への自動更新は行われません
  • システム要件を回避して22H2にアップデートする簡単な方法を紹介します

はじめに

Windows 11をサポートされていないPCに、すでにWindows 11 22H2などがインストールされている状態で、23H2にアップデートする方法を紹介します。
年次大型アップデートである23H2は、サポート対象外の旧型PCからは通常の手順でアップデートすることができません。そのようなPCに対して、本記事の手順通りに行えば最新のWindows 11へのアップデートが簡単にできます。

ご注意ください

本稿で紹介する方法は公式な手順ではありません。一部のPCでWindows11を実行できない可能性があります。

検証環境

検証を行った日付は23年11月4日です。
検証に使用したPCの仕様は以下の通りです。

発売2011年10月
メーカーSONY
製品名VAIO VPCCB39FJ(ノートPC)
CPUインテル Core i5-2430M(第2世代)
BIOSの種類レガシーBIOS(非UEFI)
メモリーPC3-10600 8GB(4GB ×2)
GPUインテル HD グラフィックス 3000
ディスプレイ15.5型ワイド(16:9)、解像度:WXGA 1366×768
ストレージSSD 約500GB(HDDから換装)

Windowsのバージョン(アップデート前)

まず最初に、Windows 11の現在のバージョンを確認します。
[Windowsキー(田)]+[R]を押して「ファイル名を指定して実行」画面を開き、「winver」と入力し、[Enter]を押します。

Windows 11のバージョンは22H2であることがわかります。これを23H2にアップデートします。

設定画面の[システム]>[バージョン情報]でも同様の確認ができます。

Windows 11を最新にアップデートしよう

ブータブルUSBを作成しよう

Rufusを入手するには

Rufusとは、起動可能(ブータブル)なUSBメモリを作成するためのフリーソフトです。Windows以外にも、各種LinuxディストリビューションやBSD系OS、DOSなど、幅広いOSをサポートしています。Rufusは、OSのISOイメージファイルをUSBメモリへ書き込んでインストールメディアを作成することができます。Rufusは、メディアを作成するスピードが、他のソフトと比較して速いと言われているようです。

Rufusを使用するには、公式サイトからダウンロードし、実行ファイルを起動します。インストールは不要です。

USBメモリを用意しよう

Rufusを用いて、起動可能なWindows 11インストーラを作成します。インストーラはUSBに格納します。Windows 11のISOのサイズは5GBを超えます。したがって、USBメモリの容量は8GB以上のものを準備します。

Windows 11をダウンロードするには

Rufusを起動します。
①「ドライブ プロパティ」領域の「ブートの種類」右の[▼]ボタンをクリックし、[選択]から[ダウンロード]に変更します。次に[ダウンロード]をクリックすると「ISOイメージのダウンロード」画面がポップアップ表示されます。
②「バージョン」のプルダウンメニューから[Windows 11]を選択します。
③[続ける]をクリックします。

「リリース」が追加されるので、23H2を選択して[続ける]をクリックします。

「エディション」が追加されるので、確認して[続ける]をクリックします。

「言語」が追加されるので、[日本語]等を選択して[続ける]をクリックします。

「アーキテクチャ」が追加されるので、確認して[ダウンロード]をクリックします。

「ダウンロード」等のフォルダに
Win11_23H2_Japanese_x64.iso といったファイル名で格納されるでしょう。

Windows 11のインストールUSBを作成するには

①USBメモリをPCのUSBスロットに挿入します。
②[▼]ボタンで[ダウンロード]から[選択]に変更し、[選択]をクリックします。続いて、ダウンロード済みWindows 11のISOファイルを選択します。
③「ブートの種類」に正しくWindows 11のISOファイル名が表示されていることを確認します。
④パーティション構成が[GPT]か、[MBR]かを選択します。GPTはUEFIシステムでのみブート可能で、MBRはBIOSシステムでのみブート可能です。今回の記事で使用したPCはBIOSですが、アップデートの場合はGPT/MBRどちらを選択してもOKです。USBから起動してOSを新規インストールする場合は、本記事のVAIOの場合、MBRにする必要があります。
⑤[スタート]ボタンをクリックします。

次の画面が表示されます。
①ハードウェア要件を回避するためにチェックを入れます。
②Microsoftアカウントによるログインを回避します。
③ローカルのアカウントを作成します。初回ログインの際にパスワードの設定画面が表示されます。
④「日本の東京」などのロケーションをRufusを起動したPCと同じに設定します。
⑤スペックの低めの旧型PCなので、少しでも軽くするためにデータ収集を無効にします。

必ずチェックが必要な項目は①です。旧型PCでは①をチェックしないと、Windows 11の要件に抵触してアップデートできません。
②~⑤は効率的にインストールができるように、セットアップ画面をスキップするための項目です。すべてチェックすると最速でセットアップが完了します。ご自身の判断でチェックの有無を判断していただいて構いません。

USBメモリの中身は完全に消去されます。続けるには[OK]をクリックします。

USBインストーラの作成が完了するのを待ちます。

インストーラを実行しよう

USBを挿入して以下の画面を開き、setup.exeをダブルクリックしてセットアップを起動します。

しばらく、以下の画面が表示されます。

以下のセットアップ画面で[次へ]をクリック。

ライセンス条項に[同意する]をクリック。

しばらく待ちます。

「個人用ファイルとアプリを引き継ぐ」にチェックされていることを確認して[インストール]をクリック。

以下の画面が表示されるので、しばらく待ちます。

何度か再起動が行われたのち、インストールが終了します。

アップデート後にWindowsのバージョンを確認するには

Windowsキー(田)を押してスタートメニューを開き、「winver」と入力し、[Enter]を押します。

以下のように、Windows 11は23H2にアップデートされました。

同様に設定画面からも確認できます。
スタートメニューから「設定」を起動します。
続いて[システム]>[バージョン情報]を選択します。

バージョンが23H2であることが確認できました。

さいごに

自己責任になりますが、古めのPCで最新のWindowsを試してみたいと思う方は、ぜひトライしてみてください。

Windows 11の新バージョン23H2を10年前のPCで動かすには

  • 最新OSを格安で、しかも比較的快適に使用できるようにする裏ワザを紹介します。
  • 10年前に販売されたデスクトップPCに、23年10月リリースされたWin11リリース23H2をインストールします。
  • 主にMicrosoft OfficeとWebブラウザ、仮想環境を使用する用途を想定しています。

ノートPCとデスクトップPCのどちらがおすすめ?

ノートPCはWiFiをはじめ、ディスプレイやスピーカなど、必要なものがほぼすべて装備されています。外に持ち歩きたいというニーズがあるなら、ノートPC一択でしょう。
ディスプレイやスピーカをすでに保有していて、腰を落ち着けて作業ができるなら、デスクトップPCがおすすめです。同じ年に販売されたPCを比較すると、ノートPCよりもデスクトップPCのほうが安くてスペックが高い場合が多いからです。ノートPCはコンパクトな分、性能が控えめといえます。

10年前の中古PCの仕様は

本稿では、富士通 ESPRIMO D582/FW(以降、D582/FW)を使用します。中古ショップで購入しました。23年10月現在の中古市場では6千円台くらいからあるようです。
選択したポイントとしては、D582/FWは業務用PCとして設計され、WindowsのProが採用されている点です。ProがインストールされていたPCは、後述の方法によりWindows 11 Proをインストールすることができるからです。

D582/FWの発売日は2013年9月のようです。
主な仕様は以下の通りです。

新品購入時中古購入時
OSWindows 8 Pro(64bit版)なし
CPUインテル® Core™ i5-3470
プロセッサー
同左
メインメモリ標準2G
最大16G
8G
グラフィックアクセラレーターIntel® HD Graphics 2500(CPUに内蔵)同左
ハードディスクドライブ250GB(7200rpm、Serial ATA/600)同左
スピーカーなしなし
キーボード/マウス付属なし
使用履歴中古で購入後、Win 11 22H2にアップグレードを実施

どんなPCに仕上げるの?

上記のD582/FWを、MS Officeによる文書作成、Webの閲覧、YouTube視聴などに使用できるものにします。
また、ブログの記事を作成する際に、VirtualBoxなどを用いて仮想環境を構築することがあります。仮想環境を構築できるだけのリソースを確保します。その場合は、ゲームをするわけではないので、少々遅くても問題ありません。
上記のような用途に使用できるPCに改造します。
ただし、中古PCを活用することと、後述するWindows 11のシステム要件を回避してインストールすることには、一定のリスクがあると考えられます。その点は自己責任でお願いします。

中古PCにWindows 11をインストールする際に考慮すべきこととは

無料でWindows 11を使う抜け穴とは

D582/FWは、Windows 8.1 Proが動作していたPCです。そのため、これまではWindowsのデジタルライセンス認証により、Windows 11 Proにアップグレードできました。
ところがMicrosoft(MS)は23年9月20日に「Windows、Windows 7/8の無料アップグレードのインストールパスを終了」との発表を行っています。要はWin 7/8の正規ライセンスを持っていても、無条件でのアップグレードができなくなったということです。ここで過去、Windows 10へのアップグレードを無償期間で行っていたPCであれば、従来通りWindows 10または11の再インストール時に認証されます。
では、過去にWindows 10などにアップグレードしたことのないPCの場合は、アップグレードが絶望的なのかというと、どうもそうでもなさそうです。デジタルライセンスによる自動的な認証は停止しているものの、テクニカルサポート経由の電話によるやり取りで、アップグレードを可能にしているという情報があります。
本記事では上記の情報についての検証を行っていません。今回検証に使用する中古PCはすでに一度、Windows 11 22H2をインストールしたことがあるため、デジタルライセンスで自動認証されるケースとなります。

Windows 11のシステム要件を回避するには

中古のPCを購入し、Windows 11で使用したい場合、Windows 11のシステム要件を満たしているかどうかを事前に確認する必要があります。Windows 11のシステム要件には、例えば以下のものがあります。

  • システム ファームウェア:UEFI、セキュア ブート対応。
  • TPM:トラステッドプラットフォームモジュール(TPM)バージョン2.0。

本稿で扱うような10年以上前のPCでは、まず上記の要件を満たしていません。その場合、Windows 11をインストールすることはできません。ただし、一部の制約を回避する方法があります。本稿ではその方法を用いて、要件の会費を行います。
ここであらかじめ注意いただきたいことがあります。この要件回避方法は互換性などの問題が発生する可能性があるため、Microsoftはこの操作を推奨していません(メーカー保証外)。また、セキュリティ更新などの更新プログラムの受信が保証されていません(現時点では受信できることを確認済みです)。

Windows 11のシステム要件を回避することによるデメリットは

システム要件を回避して中古PCにWindows 11をインストールすることで考えられるデメリットは次の通りです。

  1. Windows 11の大型アップデートで更新することができない
    セキュリティなどの更新は現時点では実施されます。しかし、Windows 11の年次アップデート、具体的には23H2の次のアップデートは自動で行えないと思われます。再び、システム要件の制約を回避する何らかの方法でアップデートを行う必要があると考えられます。
  2. Microsoftの方針変更で、非対応PCに対する新たな制約が生じる可能性がある

どんなハードウェアを足すと効果的?

ハードウェアを「ちょい足し」して、サクサク使用できるPCに仕上げたいと思います。

起動を早くしたい

最も効果的な方法は、HDDからSSDへの交換です。480GBのSSDに交換します。23年10月時点で新品で3千円くらいから販売されています。
ここで、D582/FWのHDDは3.5インチなので、2.5インチのSSDを取り付けるためには、「2.5インチ → 3.5インチ 変換ブラケット」を使用します。SSDに下駄を履かせてHDDのサイズにしてマウントするわけです。変換ブラケットは315円くらいから販売されています。

仮想環境を構築したい

メモリを増設します。Officeを使用するくらいなら、8GBあれば問題なく動きますが、仮想環境はサーバだと2~4GB、デスクトップ環境だと8GB程度のメモリが必要になります。すると、トータルで16GBくらい必要になります。幸い、仕様上は最大16GBメモリを搭載できるので、16GBとします。使用できるメモリは「PC3-12800 DDR3 SDRAM DIMM CL11 ECCなし」とマニュアルに記載されています。
新品だと16GBで、2,600円くらいから販売されているようです。筆者は余ったメモリで相性のよさそうなものをかき集めて活用しました。

取り付け手順は、ESPRIMO D582/FW 本体マニュアル 「製品ガイド」を参照ください。

無料でWindows 11をインストールしよう

ブータブルUSBを作成しよう

Rufusを入手するには

Rufusとは、起動可能(ブータブル)なUSBメモリを作成するためのフリーソフトです。Windows以外にも、各種LinuxディストリビューションやBSD系OS、DOSなど、幅広いOSをサポートしています。Rufusは、OSのISOイメージファイルをUSBメモリへ書き込んでインストールメディアを作成することができます。Rufusは、メディアを作成するスピードが、他のソフトと比較して速いと言われているようです。

Rufusを使用するには、公式サイトからダウンロードし、実行ファイルを起動します。インストールは不要です。

USBメモリを用意しよう

Rufusを用いて、起動可能なWindows 11インストーラを作成します。インストーラはUSBに格納します。Windows 11のISOのサイズは5GBを超えます。したがって、USBメモリの容量は8GB以上のものを準備します。

Windows 11をダウンロードするには

Rufusを起動します。
①「ドライブ プロパティ」領域の「ブートの種類」右の[▼]ボタンをクリックし、[選択]から[ダウンロード]に変更します。次に[ダウンロード]をクリックすると「ISOイメージのダウンロード」画面がポップアップ表示されます。
②「バージョン」のプルダウンメニューから[Windows 11]を選択します。
③[続ける]をクリックします。

「リリース」が追加されるので、23H2を選択して[続ける]をクリックします。

「エディション」が追加されるので、確認して[続ける]をクリックします。

「言語」が追加されるので、[日本語]等を選択して[続ける]をクリックします。

「アーキテクチャ」が追加されるので、確認して[ダウンロード]をクリックします。

「ダウンロード」等のフォルダに
Win11_23H2_Japanese_x64.iso といったファイル名で格納されるでしょう。

Windows 11のインストールUSBを作成するには

①USBメモリをPCのUSBスロットに挿入します。
②[▼]ボタンで[ダウンロード]から[選択]に変更し、[選択]をクリックします。続いて、ダウンロード済みWindows 11のISOファイルを選択します。
③「ブートの種類」に正しくWindows 11のISOファイル名が表示されていることを確認します。
④パーティション構成が[GPT]か、[MBR]かを選択します。GPTはUEFIシステムでのみブート可能で、MBRはBIOSシステムでのみブート可能です。今回の記事で使用したPCはUEFIなのでGPTにしました。
⑤[スタート]ボタンをクリックします。

次の画面が表示されます。
①ハードウェア要件を回避するためにチェックを入れます。
②Microsoftアカウントによるログインを回避します。
③ローカルのアカウントを作成します。初回ログインの際にパスワードの設定画面が表示されます。
④「日本の東京」などのロケーションをRufusを起動したPCと同じに設定します。
⑤スペックの低めの旧型PCなので、少しでも軽くするためにデータ収集を無効にします。

必ずチェックが必要な項目は①です。旧型PCでは①をチェックしないと、Windows 11の要件に抵触してインストールできません。
②~⑤は効率的にインストールができるように、セットアップ画面をスキップするための項目です。すべてチェックすると最速でセットアップが完了します。ご自身の判断でチェックの有無を判断していただいて構いません。

USBメモリの中身は完全に消去されます。続けるには[OK]をクリックします。

USBインストーラの作成が完了するのを待ちます。

USBメモリからPCを立ち上げよう

これから、rufusで作成したインストール用USBから起動します。通常のPCでは、USBドライブから起動しない設定になっていることが多いため、設定を変更する必要あります。
以下の手順は、特定のパソコンの機種に依存しない一般的な手順です。

  1. USBメモリをPCに挿入します。
  2. PCを起動し、BIOS設定画面に入ります。BIOS設定画面に入る方法は、PCの機種によって異なりますが、一般的にはPCの電源を入れた直後に、F2、F10、F12、ESC、DELなどのキーを押すことで入ることができます。
  3. BIOS設定画面で、ブートの優先順位を変更します。ブートの優先順位を変更する方法は、PCの機種によって異なりますが、一般的には「Boot」タブを選択し、USBメモリを最優先に設定します。
  4. BIOS設定画面で設定を保存し、PCを再起動します。
  5. PCが再起動すると、USBメモリからOSをインストールすることができます。

Windows 11をインストールしよう

[プロダクトキーがありません]を選択します。

Proエディションが動作していたPCは、デジタルライセンス認証でもProが選択できます。Windows 11 Proを選択します。

OSがインストールされているSSDなど、ほかの用途で使用していたSSDの場合は、パーティションを[削除]するなどして領域を確保します。

インストールが開始されました。

再起動後、次の画面に遷移します。

再度、再起動が行われます。
しばらく待つと、次の画面が表示され、インストールは完了します。
次回のログイン時に、パスワードの入力が求められます。

完成したPCのレスポンスは

Windows 11の起動時間は

ストップウォッチで約13秒でした。PCの電源スイッチを入れてログイン画面が表示されるまでの時間です。まずまずといえます。

EXCELの起動時間は

ローカルのファイルを指定して起動する所要時間は、2秒ほどでした。

仮想環境の使用感は

VirtualBoxにWindows 11をインストールしてみました。一通りの操作をするうえで、特に問題はありませんでした。
起動時間は約37秒、ブラウザ(Edge)起動で約13秒でした。
ホストPCのスペックを考えると妥当な範囲で、十分検証用等に使える感触を得ました。

YouTubeの視聴は

全く問題ありません。動画が一瞬止まったり、フレームが飛んだりという「乱れ」は一切ありませんでした。

さいごに

中古PCにSSDとメモリを「ちょい足し」し、Windows 11リリース23H2を実質無料でインストールする方法について紹介しました。
古いPCも工夫次第で、まだまだ快適に使用できます。
皆さんも、片隅に放置されているPCに復活のチャンスを与えてあげてはいかがでしょうか?

シェルでディレクトリを自由自在に飛び回るには

UnixやLinuxのディレクトリを一瞬で移動する pushd、popd、dirs コマンドをマスターする。

便利なのに意外と知られていないcdコマンドの-(ハイフン)オプションとは

LinuxやmacOS(UNIX)のターミナルで最も多く使うコマンドがcdコマンドです。その中で、cd – というコマンドは、UNIX シェルで直前にいたディレクトリに移動するためのコマンドです。例えば、/usr/local/binと/var/logを交互に行ったり来たりする場合の実行例は以下の通りです。$はプロンプトです。

$ cd /usr/local/bin
$ pwd
/usr/local/bin 
$ cd /var/log
$ pwd
/var/log 
$ cd -
/usr/local/bin 
$

上記の例では、最初に /usr/local/bin ディレクトリに移動し、その後 /var/log ディレクトリに移動しています。その後、cd – コマンドを使用して直前にいた /usr/local/bin ディレクトリに移動しています。さらにもう一度、/var/logに移動したい場合も cd – です。このように、cd – コマンドを使用することで、直前にいたディレクトリに簡単に戻ることができます。
これだけ知っていてもかなり便利なのですが、さらに多くのディレクトリを記憶して、自由に移動できるコマンドが、次に紹介するpushdなどです。

pushd/popdの使い方とは

pushd, popd, dirs は、UNIX やLinuxのシェルで使用されるディレクトリをあちこち飛び回るために活用されるコマンドです。具体的には「ディレクトリスタック」を操作します。 ディレクトリスタックとは、現在のディレクトリパスを一時的に保存し、後でそこに戻ることができるようにするためのものです。以下に、それぞれのコマンドの使い方を説明します。

pushd

カレントディレクトリパスをスタックに登録し、指定されたディレクトリに移動します。例えば、カレントディレクトリがホームディレクトリ(~)だったとして、pushd /usr/local と入力すると、/usr/local に移動し、スタックに ~ を登録します。

$ pushd /usr/local
/usr/local ~

スタック内のディレクトリは、番号で参照することができます。

$ dirs -v
0 /usr/local
1 ~

以下のように、cdコマンドで移動すると、スタック番号0のパスが新しいカレントディレクトリに書き換わります。

$ cd bin
$ pwd
/usr/local/bin
$ dirs -v
0 /usr/local/bin
1 ~
$

popd

スタック内に登録されている一番最後に登録したディレクトリを取り出し、それをカレントディレクトリとします。例えば、上記例の続きで popd と入力すると、スタック内の一番最後に登録したディレクトリ(~)に移動します。

$ dirs -v
0 /usr/local/bin
1 ~
$ popd
~
$

dirs

スタック内に登録されているディレクトリを表示します。すでに例で登場していますが、dirs -v と入力すると、スタック内に登録されているディレクトリを番号付きで表示します。

実際の動きで見るpushdたちの使い方

以下を実行し、実験用のワークディレクトリを作成します。

$ cd
$ mkdir works
$ cd works

以下ではディレクトリを10個作成し、すべてのディレクトリをpushコマンドでスタックします。

$ for i in $(seq 0 9)
do
mkdir dir$i
cd dir$i
pushd ..
done
~/works ~/works/dir0
~/works ~/works/dir1 ~/works/dir0
~/works ~/works/dir2 ~/works/dir1 ~/works/dir0
~/works ~/works/dir3 ~/works/dir2 ~/works/dir1 ~/works/dir0
~/works ~/works/dir4 ~/works/dir3 ~/works/dir2 ~/works/dir1 ~/works/dir0
~/works ~/works/dir5 ~/works/dir4 ~/works/dir3 ~/works/dir2 ~/works/dir1 ~/works/dir0
~/works ~/works/dir6 ~/works/dir5 ~/works/dir4 ~/works/dir3 ~/works/dir2 ~/works/dir1 ~/works/dir0
~/works ~/works/dir7 ~/works/dir6 ~/works/dir5 ~/works/dir4 ~/works/dir3 ~/works/dir2 ~/works/dir1 ~/works/dir0
~/works ~/works/dir8 ~/works/dir7 ~/works/dir6 ~/works/dir5 ~/works/dir4 ~/works/dir3 ~/works/dir2 ~/works/dir1 ~/works/dir0
~/works ~/works/dir9 ~/works/dir8 ~/works/dir7 ~/works/dir6 ~/works/dir5 ~/works/dir4 ~/works/dir3 ~/works/dir2 ~/works/dir1 ~/works/dir0

スタックに登録したディレクトリを番号付きで表示します。

$ dirs -v
0 ~/works
1 ~/works/dir9
2 ~/works/dir8
3 ~/works/dir7
4 ~/works/dir6
5 ~/works/dir5
6 ~/works/dir4
7 ~/works/dir3
8 ~/works/dir2
9 ~/works/dir1
10 ~/works/dir0

ここでpushdを実行すると、先頭の二つの順番が入れ替わります。

$ pushd
~/works/dir9 ~/works ~/works/dir8 ~/works/dir7 ~/works/dir6 ~/works/dir5 ~/works/dir4 ~/works/dir3 ~/works/dir2 ~/works/dir1 ~/works/dir0
$ dirs -v
0 ~/works/dir9
1 ~/works
2 ~/works/dir8
3 ~/works/dir7
4 ~/works/dir6
5 ~/works/dir5
6 ~/works/dir4
7 ~/works/dir3
8 ~/works/dir2
9 ~/works/dir1
10 ~/works/dir0

スタック番号10番のdir0にすばやく移動します。このように、スタック番号を指定して任意のディレクトリに移動することができます。

 pushd␣+<番号>

$ pushd +10
~/works/dir0 ~/works/dir9 ~/works ~/works/dir8 ~/works/dir7 ~/works/dir6 ~/works/dir5 ~/works/dir4 ~/works/dir3 ~/works/dir2 ~/works/dir1
$ dirs -v
0 ~/works/dir0
1 ~/works/dir9
2 ~/works
3 ~/works/dir8
4 ~/works/dir7
5 ~/works/dir6
6 ~/works/dir5
7 ~/works/dir4
8 ~/works/dir3
9 ~/works/dir2
10 ~/works/dir1

popdを実行すると、スタック番号0が消えて番号1のdir9に移動します。

$ popd
~/works/dir9 ~/works ~/works/dir8 ~/works/dir7 ~/works/dir6 ~/works/dir5 ~/works/dir4 ~/works/dir3 ~/works/dir2 ~/works/dir1
$ dirs -v
0 ~/works/dir9
1 ~/works
2 ~/works/dir8
3 ~/works/dir7
4 ~/works/dir6
5 ~/works/dir5
6 ~/works/dir4
7 ~/works/dir3
8 ~/works/dir2
9 ~/works/dir1

スタック番号を指定して、スタック上不要なディレクトリを削除することができます。上で番号1の ~/works をスタックから削除してみます。結果は下の通りです。

$ popd +1
~/works/dir9 ~/works/dir8 ~/works/dir7 ~/works/dir6 ~/works/dir5 ~/works/dir4 ~/works/dir3 ~/works/dir2 ~/works/dir1

すべてのスタックを削除したい場合は、dirs -c を実行します。

$ dirs -c
$ dirs -v
0 ~/works/dir9
$

さいごに

pushd をはじめとする、ディレクトリスタックでの移動は、あまり注目されませんが、使い慣れると非常に便利です。皆さんもご活用ください。

sshでリモートログインする際のエラーの対処方法とは

sshでリモートログインする際に、以下のエラーになってしまう場合の対処方法を紹介します。

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:<省略>.
Please contact your system administrator.
Add correct host key in C:\\Users\\win/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in C:\\Users\\win/.ssh/known_hosts:11
Host key for 192.168.1.17 has changed and you have requested strict checking.
Host key verification failed.

エラーになる原因とは

サーバーが複数台あり、DHCPでIPアドレスが割り当てられる場合等で、上記のエラーが発生することがあります。

SSHでは、ホストキーの検証を行うことで、接続先のサーバーが本物であることを確認しています。ホストキーは、サーバーが自己紹介するために使用される公開鍵です。クライアントは、初めての接続先のサーバーから受信したホストキーを自分のキャッシュ(クライアント内に定められたファイルの中)に保存し、次回接続時にそのホストキーが変更されていないかどうかを確認します。これにより、中間者攻撃などの攻撃を防ぐことができます。
中間者とは、接続先のサーバーに成り代わってクライアントと接続し、情報を盗み出そうとする悪意のある攻撃者です。

初めて接続するサーバーの場合、クライアントから接続先を信頼して、ホストキーを自動的に受け入れるかどうか尋ねられます。
実行例が下です。1行目でSSHで接続しています。その後、5行目で入力が促されています。

PS C:\Users\win\.ssh> ssh apple@<略>
The authenticity of host '<略>(<略>)' can't be established.
ED25519 key fingerprint is SHA256:<略>.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

ざっくりの訳:「あなたが接続しようとしている相手は信頼できません。相手はこれまでに接続したことのないサーバーです。接続してもいいですか?」

ここで”yes”を入力すると、クライアントはユーザーによる承認を得たものと判断して、キャッシュにホストキーを追加し、ログインに移行します。
次回から同じサーバーにログインする際は、サーバーから送られた情報と、キャッシュを比較して、相手サーバーの真正性を確かめるわけです。

ところが、SSHでリモートログインする際に、DHCPでIPアドレスが動的に割り当てられるサーバーの場合、接続時にこのエラーが発生することがあります。その理由はDHCPの場合、以前別のサーバーに割り当てられていたIPアドレスが、接続先のサーバに割り当てられることがあるからです。この場合、ホストキーの検証でエラーが発生します。

エラーを解決する方法とは

このエラーを解決するためには、以下の方法があります。
なお、ここではWindows 11がクライアントの場合で説明しますが、UnixやLinuxでも考え方は全く同じです。

まず最初に紹介するのは、ssh-keygen -R コマンドを使用して、以前のサーバー接続時にキャッシュに書き込んだホストキーを削除する方法です。
以下はWindowsクライアントの「ターミナル」で実行されているPowerShellからのコマンド実行例です。
PS C:\Users\win.ssh> までがプロンプトです。
ssh-keygen -R <IPアドレス>で、キャッシュから削除するサーバのIPアドレスを指定します。
結果、キャッシュ(known_hostsファイル)から3行削除して保存されたことがわかります。

PS C:\Users\win\.ssh> ssh-keygen -R 192.168.1.17
# Host 192.168.1.17 found: line 11
# Host 192.168.1.17 found: line 12
# Host 192.168.1.17 found: line 13
C:\Users\win/.ssh/known_hosts updated.
Original contents retained as C:\Users\win/.ssh/known_hosts.old
PS C:\Users\win\.ssh>

上記の処置だけだと、またIPアドレスが変わるとエラーが再発します。
これを避けるためには、~/.ssh/configファイルに、ホストキーの検証を無効にする設定(下)を記述します。もし、configファイルがない場合は、新規で作成します。
ただし、企業などではこの設定はNGです。セキュリティリスクを考慮の上、実験や検証環境等でリスクよりも利便性確保が優先される場合のみ、この方法を検討ください。

Host *
    StrictHostKeyChecking no

上記設定を行った後のSSH実行例です。
これでサーバに対して、信頼性のチェックを行わなくなり、エラーが抑止されます。

PS C:\Users\win\.ssh> ssh apple@192.168.1.17
Warning: Permanently added '192.168.1.17' (ED25519) to the list of known hosts.
(apple@192.168.1.17) Password:
Last login: Tue Oct 31 14:04:48 2023 from 192.168.1.15
apple@appurunoiMac ~ %

ヒストリー機能で512倍楽をする方法

シェルの楽々操作法

入力は1度だけ!ヒストリー機能

macOSではzsh、Linuxではbashがデフォルトのシェルです。シェルとは、ユーザーとコンピューターの間のインターフェースで、ユーザーが入力したコマンドをコンピューターに伝えて実行させるプログラムです。シェルは過去に実行したコマンドを履歴として記録しています。次のコマンドで履歴を確認できます。

history

historyコマンドを多用する場合は、シェルのプロファイルなどで下のように alias を定義することが多いでしょう。

alias h='history'

zshやbashでは、矢印キーを使ってコマンド編集することができます。これは、入力したコマンドを修正したり、履歴から再利用したりするときに便利です。具体的な操作方法は以下の通りです。

  • 左右の矢印キー:カーソルを一文字ずつ左右に移動させます。例えば、echo helloと入力した後に左矢印キーを押すと、カーソルがoの上に移動します。
  • 上下の矢印キー:コマンド履歴を遡ったり進んだりします。例えば、echo helloと入力した後に上矢印キーを押すと、直前に実行したコマンドが表示されます。下矢印キーを押すと、次に実行したコマンドが表示されます。
  • Ctrl + 左右の矢印キー:カーソルを一単語ずつ左右に移動させます。例えば、echo hello worldと入力した後にCtrl + 左矢印キーを押すと、カーソルがworldの先頭に移動します。
    なお、Macのキーボードの場合は、Ctrlキーの代わりにCtrlキーを使用します。
  • Ctrl + A:カーソルを行頭に移動させます。例えば、echo hello worldと入力した後にCtrl + Aを押すと、カーソルがeの上に移動します。
  • Ctrl + E:カーソルを行末に移動させます。例えば、echo hello worldと入力されている行の先頭にカーソルがある場合、Ctrl + Eを押すと、カーソルがdの後ろに移動します。
  • Ctrl + U:bashではカーソルより前の部分を削除します。zshではカーソルの位置に関係なく、1行を削除します。例えば、echo hello worldと入力した後にCtrl + Uを押すと、echo hello worldが消えて空白になります。
  • Ctrl + K:カーソルより後ろの部分を削除します。例えば、echo hello worldと入力した後に左矢印キーを5回押してからCtrl + Kを押すと、worldが消えてecho hello になります。
  • Ctrl + Y:削除した部分を貼り付けます。例えば、上記の操作で削除したworldを再び表示させたい場合は、カーソルの位置に関係なくCtrl + Yを押すと、worldが貼り付けられます。

上記を活用した具体例を見てみましょう。

nanoコマンドでファイルを編集したとします。bashの例です。

nano ~/works/docs/extremely-long-filename.txt

次に、上記で編集したファイルの行数を調べたいときには、次のように入力します。

[↑][Ctrl+A][Ctrl+右矢印][Ctrl+U][wc -l][return]

実行結果は下の通りです。$はプロンプトです。

$ nano ~/works/docs/extremely-long-filename.txt
$ wc -l ~/works/docs/extremely-long-filename.txt
27 /home/linux/works/docs/extremely-long-filename.txt

1ステップごと説明します。

[↑]:直前に実行したコマンドを表示

$ nano ~/works/docs/extremely-long-filename.txt
[Ctrl+A]:カーソルが行の先頭に移動(nの位置)
[Ctrl+右矢印]:nanoの次の空白に移動
[Ctrl+U]:nanoを削除

$  ~/works/docs/extremely-long-filename.txt
[wc -l]:行数を数えるコマンドを先頭から入力

$ wc -l ~/works/docs/extremely-long-filename.txt
[Enter]:カーソル位置は、l(エル)の次の空白ですが、そのままEnter(return)で構いません。カーソルの位置に関係なく、1行全体が実行されます。

もっと便利なインクリメンタルサーチ

インクリメンタルサーチは、シェルが記録している履歴から特定のコマンドを検索するための機能です。
例えば、あなたが過去に次のコマンドを実行したことがあるとします。下はmacOSのzshの例です。

% cut -d: -f1 /etc/passwd | grep -v -e '^_' -e '^#'
nobody
root
daemon
%

その後、新しいコマンドをたくさん実行した後で、再び同じコマンドラインを実行したいと思った場合、インクリメンタルサーチを使うことで、過去に実行したコマンドラインを素早く再利用することができます。
シェルのインクリメンタルサーチは、Ctrl + r キーを押すことで起動します。すると、プロンプトが表示されます。

%
bck-i-search: _

このプロンプトに検索したい文字列を入力すると、過去に実行したコマンド履歴から入力された文字列に一致するものが即座に表示されます。下は c とだけ入力した場合に、cd コマンドがヒットした例です。

% cd /tmp
bck-i-search: c_

続いて u と入力すると、下のように表示されました。

% cut -d: -f1 /etc/passwd | grep -v -e '^_' -e '^#'
bck-i-search: cu_

一致するコマンドが複数ある場合は、Ctrl + r キーを押すたびに一つずつ表示されます。
この状態で Enter キーを押すと、そのコマンドが実行されます。

コマンド入力の自動補完

コマンド入力の自動補完とは、コマンドやファイル名などの一部を入力した後にTabキーを押すと、シェルが可能性のある候補を表示したり、最も適切なものに補完したりする機能です。これは、コマンド入力を効率的にし、タイプミスを防ぐのに役立ちます。

自動補完は、bashとzshでは動作が異なりますが、ここではbashの例で説明します。
例えば、以下のような操作ができます。

whereisというコマンドを入力したい場合は、wheとだけ入力してからTabキーを押すと、whereisに補完されます。もし、wheで始まる他のコマンドがある場合は、Tabキーを二回押すと、候補の一覧が表示されます。その中から選択したいものの先頭文字を追加入力してから再びTabキーを押すと、補完されます。

$ w  ← wとだけ入力してTabキーを2回押した
w          wall       wfsctl     whereis    who        wish       wsgen
wait       wc         what       which      whoami     wish8.5    wsimport
wait4path  wdutil     whatis     while      whois      write      
$ wh  ← hを追加してTab2回。候補が減った
what     whatis   whereis  which    while    who      whoami   whois
$ whereis  ← eを追加してTabで完全に補完された

Documentsというディレクトリに移動したい場合は、cd Dと入力してからTabキーを押すと、Dで始まるディレクトリ名が補完されます。もし、複数の候補がある場合は、Tabキーを二回押すと、候補の一覧が表示されます。その中から選択したいものの先頭文字を追加入力してから再びTabキーを押すと、補完されます。このように、引数に指定されたディレクトリ名やファイル名も補完されます。
hello.txtというファイル名を入力したい場合は、hとだけ入力してからTabキーを押すと、hで始まるファイル名が補完されます。

$ touch hello.txt
$ nano h ← Tabを押す
$ nano hello.txt  ← 補完された

最後に

ここまで、macOSのUnixやLinuxのzshやbashで矢印キーを使ってコマンド編集する操作と、UnixのシェルでTabを使ってコマンド入力の自動補完を行う方法を紹介しました。これらの操作は慣れるまで少し難しく感じるかもしれませんが、覚えておくとコマンド入力が効率的になります。ぜひ、実際に試してみてください。