某PCショップ店員の覚書

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

ゲーミングモニター製造メーカーは俺の話を聞け

はじめに

[!caution]この記事は一般ユーザー向けというより、ゲーミングモニターを設計・製造しているメーカー側の人間に向けて書いています。
[!caution]記事内に記載されているAmazonリンクにはアフィリエイトリンクを含みます。


昨今のゲーミングモニタは本当に進化した。
一昔前ならハイエンド扱いだったような性能の製品が、今ではかなり安価に入手できる。

例えばGigaCrysta EX-GD254U

amzn.to

24.5inch / FHD / 320Hz / GTG0.4ms / 黒挿入機能有り
で約2.7万円。

国内大手メーカー製としてはかなり攻めた価格設定で、FPS用途のモニターとして非常に完成度が高い。
実際、自分もかなり気に入っている。

ただ、惜しい。

スペック競争は確かに進化している。
しかし、実際に長時間ゲームをプレイしているユーザー視点では
「そこをもっと詰めてくれ」
と思う部分もまだ残っている。

今回は特に気になった以下の4点について書いていく。

  1. 下部ベゼル
  2. モニタースタンド
  3. リモコン
  4. 黒挿入機能のアピール不足

1. 下部ベゼル

結論:下部ベゼル、できれば上に移してくれ

昨今のモニターは左右・上部ベゼルがかなり細くなり、マルチモニター環境でも違和感が減ってきた。
ただし、下部ベゼルを除いて。

赤枠内が下部ベゼルと呼称している物。

別に「もっと細くしろ」と言いたいわけではない。
スイッチ類や制御基板の都合上、ある程度のスペースが必要なのは理解している。

問題は位置。

FPSプレイヤーの中にはモニターをかなり低い位置に設置する人がいる。
自分もそのタイプだ。
すると何が起きるか。
マウス操作中の手や、キーボードを打っている手が下部ベゼルと干渉する。
これが地味にストレス。

ぶつかるたびに手は痛いし、モニターは揺れる。
かといって干渉を避けるためにモニター位置を上げると、今度は視線の高さに違和感が出る。

特に24inchクラスのモニターでは
「液晶面をあと少しだけ下げたい」
と思う場面がかなり多い。

また、設定変更用スイッチ類が下部にあると操作時に手のひらを上へ向ける必要がある。
慣れの問題かもしれないが、個人的にはかなり操作しづらい。

そこで提案したいのが、下部ベゼルを上側へ移動させる構造。

液晶面そのものを下げられるため、モニター位置を高くしても表示位置を低く保ちやすくなる。
スイッチ類も上側配置なら手のひらが下を向き、自然な姿勢のまま操作できる。

もちろんデザインや内部構造の都合もあるとは思う。
たが、競技系FPSゲーマー視点では「液晶面の位置」はスペック表以上に重要なポイントだったりする。
[!point]ベゼルが上部に移動したことにより、液晶面が下がる。

2. モニタースタンド

結論:モニタースタンドは無しにするか、別売にしてくれ

PCデスク環境にこだわるユーザーの間では、モニターアームはかなり普及してきた。
特にFPSプレイヤーは

  • モニター位置を細かく調整したい
  • デスクを広く使いたい
  • キーボードは位置を自由にしたい
  • 液晶面をできるだけ低くしたい

といった理由から、モニターアームを使っている人がかなり多い。
その結果どうなるか。

付属スタンドを使わない。
本当に使わない。
箱から出してすらいない。

もちろん、スタンド運用したいユーザーが居ることは理解している。
だから「スタンドそのものを消せ」と言いたいわけではない。
ただ、今のように「全員に強制的にスタンドを同梱する」必要は本当にあるのか?

個人的には

  • モニター本体はスタンド無しで販売
  • 必要な人だけ別売スタンドを購入

この方式で良いと思っている。
必要な人には別売で提供すれば良い。
そして販売データを取った結果、あまりにもスタンド購入率が低いのであれば次販売するモデルからはそもそも専用スタンドを作らないと言う判断だってできる。
その方が合理的。

実際、競技寄りのゲーミングモニターほどアーム使用率が高い。
にもかかわらず

  • 大型スタンド
  • RGB付きスタンド
  • デザイン重視スタンド

など、コストがかかっていそうな付属品が毎回当然のように付いてくる。
正直、そのコストを削ってくれと思ってしまう。
もしくはその分

  • パネル品質を上げる
  • 黒挿入機能を改善する
  • オーバードライブ調整を詰める
  • ファームウェア品質を向上させる

など、本体性能へ回して欲しい。

特に最近のゲーミングモニター市場はスペック競争がかなり激化している。
だからこそ「豪華な付属スタンド」より「本体へどれだけコストを集中できるか」の方が重要だと思われる。

再三になるが、必要な人には別売で提供すれば良い。

少なくとも、競技寄りモデルについては全員にスタンドを抱き合わせる時代はそろそろ終わっても良いのではないか。

3. リモコン

結論:競技向けモデルにリモコンは要らない

最近はリモコン付きのゲーミングモニターも増えてきた。
便利だと思う人がいるのも理解できる。
だが、競技寄りのFPS用途で考えると個人的には優先度がかなり低い。
というのも、競技系ユーザーはそこまで頻繁に設定を変更しない。
一度設定を詰めてしまえば、そのまま固定で使うケースが多い。

更にデスク周りはリモコンだらけ。
エアコン、シーリングライト、テレビなど。
そこへ更にモニター用リモコンが増える。
しかも同一メーカー製モニターを複数台並べるとリモコン操作が誤爆するケースもある。

だから個人的には競技向けモデルに関してはリモコンを削除し、売価を下げるかコスト分を本体性能に回して欲しい。
例えば

  • BFI調整
  • VRRとの両立
  • 応答速度改善
  • ファームウェア品質

など、こういう部分へ還元される方がゲーマーとしては遥かに嬉しい。

4. 黒挿入機能のアピール不足

結論:もっと本気でアピールしてくれ

黒挿入機能(Black Frame Insertion)は、使ったことが無い人には伝わりづらいが、体感差がかなり大きい技術。
簡単に言うと
「映像フレーム(コマ)の間に黒フレームを挿入し、残像感を軽減させる技術」
である。

もちろんデメリットもある。
黒フレームを挿入する関係上、画面は暗くなる。
機種によってはちらつきが気になる人も居る。

ただ、FPSのような高速視点移動を多用するゲームでは残像感の軽減メリットが非常に大きい。
にも関わらず、多くのメーカーは

  • 黒挿入対応
  • MPRT対応

とだけ書いて終わっている。
正直かなりもったいない。

今のゲーミングモニター市場は

  • 画面サイズ
  • 解像度
  • リフレッシュレート
  • 応答速度

あたりは横並びになりつつある。
その中で、黒挿入機能の完成度は確実に差別化ポイントになっている。

だからこそ

  • どの程度残像感が減るのか
  • どのモードが実用的なのか
  • 輝度低下はどれぐらいか
  • VRRとの併用可否

など、もっと積極的に情報を発信してほしい。
ここを真面目に比較・検証しているメーカーは、ゲーマーからかなり評価されると思われる。

おわりに

ここまで不満点を色々書いてきたが、GigaCrysta EX-GD254U自体の完成度はかなり高い。
実際、高リフレッシュレート、応答速度、黒挿入対応、価格を考えるとゲーム用途ではかなり魅力的な選択肢だと思う。
だからこそ「あと少し実利用側に寄せてくれれば、もっと良くなるのに」と感じた。

スペック表だけでは見えない、実際に毎日長時間使うユーザーだからこそ気になる部分。
もし今後の製品設計で少しでも参考になれば嬉しい。

amzn.to

アークナイツを今すぐ始めるべき理由【2026年4月版】

はじめに

重厚なストーリーと歯ごたえのある戦略性で根強い人気を誇るスマートフォンゲーム、アークナイツ。
「気になってはいるけれど、今から始めても楽しめるのか」
「強いキャラがいなくてストーリーが進められないのでは」
と二の足を踏んでいる方も多いのではないでしょうか。
そんな方にこそ伝えたいのですが、2026年4月14日に開催されるイベントは新規プレイヤーや復帰プレイヤーにとって絶好の参入タイミングです。
新実装されるキャラクターや復刻される強力なキャラクターを手に入れることで、これまで初心者の壁になりがちだった難しいステージも攻略しやすくなり、ストーリーをスムーズに楽しめる環境が整っています。

そこで本記事では、なぜ始めどきなのか理由を5つに絞って説明していきます。

筆者情報

2023年5月12日からアークナイツをプレイ。
開催されるイベントは常に全クリ。
常設化された過去のイベントやストーリーも全てクリア済み。
オペレーター所持率は全レアリティ合わせて89.3%
永続スキル・自動発動スキルが大好き。

アークナイツとは

アークナイツは、中国のゲーム会社Hypergryph(通称:鷹)が開発したタワーディフェンス型のスマートフォンゲームです。
2019年に中国でリリースされ、日本では2020年にサービスが開始されました。

ゲームの舞台は「テラ」と呼ばれる架空の世界。
鉱石病という不治の感染症が蔓延するディストピア的な世界観の中で、医療組織「ロドス・アイランド」を率いる主人公が感染者差別や政治的陰謀といった重いテーマと向き合いながら物語を進めていきます。
一見難しそうに見えますが、ストーリーは序盤からしっかり導入されるため、世界観を知らなくても問題なく楽しめます。

ゲームシステムはタワーディフェンスで、「オペレーター」と呼ばれるキャラクターをマップ上に配置し、押し寄せる敵の侵攻を防ぐのが基本です。
配置の順番や位置取りに戦略性があり、パズル的な面白さも持ち合わせています。


今が始め時の理由5選

理由1 : 復刻限定3体がそれぞれ"壊れ"クラス

今回の復刻はただの旧キャラ再登場ではありません。 3体それぞれが今なお現役で通用する、あるいは他の手段では代替できない性能を持つ強力なオペレーターです。
これらを新規プレイヤーが入手できるのが、今回のイベントの最大の魅力と言えます。

ウィシャデル(狙撃・投擲手)

全オペレーター中トップクラスの瞬間火力を誇る狙撃オペレーターです。
スキル3「デイブレイクバースト」発動中は攻撃するたびにターゲット周辺の敵を巻き込みながら超高火力を叩き出します。
大きな特徴が召喚物「レヴァナントの影」で、配置した瞬間から1体が自動で召喚され、ウィシャデルの周囲に存在する間はウィシャデルが迷彩状態を獲得し攻撃の対象になりません。
スキル3発動時にはさらに追加召喚され、スキル終了後も消えずに残り続けるためスキルが切れた後も高い制圧力を維持できます。
メインストーリーからローグライクまであらゆるコンテンツで活躍できる汎用性の高さから、実装当初より"人権キャラ"と称されてきた一体です。

簡単まとめ : 「置くだけで盤面が変わる、破壊力と存在感の象徴」

全てを破壊するスキル3(S3)
モジュールステージ3をつけた状態の素質


ヴィルトゥオーサ(補助・祭儀師)

「元素ダメージ」という独自のシステムを扱う補助オペレーターです。
敵に壊死損傷を蓄積させ爆発を引き起こすことで12,000の固定ダメージを与えられるうえ、爆発中は敵の攻撃力を50%低下させる「虚弱」状態も付与できます。
現状では元素耐性を持つ敵が存在しないため、物理・術どちらの高耐性敵にも確実にダメージを通せる唯一無二の切り札となっています。
全スキルが実用レベルの柔軟性を持ち、場面に応じた使い分けができるため、手持ちのオペレーターが少ない新規プレイヤーにも扱いやすい一枚です。

簡単まとめ : 「高耐性・高防御の敵への特効薬。どんな編成にも刺さる」

配置するだけで自動発動してくれるスキル1(S1)
モジュールステージ3をつけた状態の素質


荒蕪ラップランド(術師・操機術師)

浮遊ユニットを使って戦場全域を攻撃できる術師オペレーターです。
スキル3「ディザストロ・フィナーレ」発動中は浮遊ユニットがMAP上の全ての敵を追尾しながら継続的に術ダメージを与え続け、敵に移動速度低下と恐怖状態を付与します。
素質による特殊能力無効化も持ち合わせており、回避や屈折(術ダメージをカットする)といった厄介な能力を持つ敵も問答無用で処理できる点が唯一無二の強みです。
高耐久のボスや特殊能力持ちの敵に対して特に圧倒的な制圧力を発揮します。

簡単まとめ : 「全マップ射程と特殊能力無効化を兼ね備えた唯一無二の制圧力」

狼がMAP全体を索敵して自動で攻撃してくれるスキル3(S3)
モジュールステージ3をつけた状態の素質


これらの強力なオペレーターを手に入れることで、これまで初心者の壁になりがちだった高難易度ステージも攻略しやすくなり、ストーリーをスムーズに体験できる環境が整います。
なお、復刻限定オペレーターは最短でも約半年後までガチャに登場しないため、このタイミングを逃すと長期間入手できなくなります。


理由2 : 新実装キャラも高性能

復刻キャラだけでなく、今回のイベントでは新たに実装されるオペレーターも注目です。

凛御シルバーアッシュ

新限定オペレーターの「凛御シルバーアッシュ」は、人気キャラクター「シルバーアッシュ」の異格(別バージョン)にあたる先鋒オペレーターです。
配置すると待機エリアに特殊トークン「風雪の眼」が追加され、その左側にいる味方に初期SPの加速と再配置時間の短縮を付与します。
さらにスキル2では待機中の味方のコストを大幅に減少させたうえで、周囲のオペレーターが配置時に追加攻撃を繰り出せるようになるなど、編成全体の展開速度と火力を同時に底上げできる独自のサポート性能を持ちます。
先鋒オペレーターの中でもトップクラスの評価を受けており、TOP10はほぼ確実、TOP5に挙げる声も多い強力な一枚です。

聖聆プラマニクス

同時に恒常実装される「聖聆プラマニクス」は、プラマニクスの異格にあたる法陣術師です。
最大の特徴は永続スキル(S2)による放置性能で、配置しておくだけでフィールドに「積雪」を広げ、その上を通る地上の敵に継続ダメージと減速を与え続けます。
積雪が十分に積もった地点は凍結して実質的なブロック壁として機能するため、ダメージ・遅延・ブロックを一人でこなせる驚異的な盤面掌握力を持ちます。
決戦スキル(S3)では範囲内の敵を自身の周囲に強制的に誘導したうえで高火力を叩き込む、対ボス性能の高い一面も持ち合わせています。
S2の安定した火力だけでなくS3による高火力対ボススキルも有しており、トップクラスの汎用性を兼ね備えた強力なオペレーターと評されています。


なお、新規実装限定オペレーターは最短でも約1年後までガチャに登場しないため、このタイミングを逃すと長期間入手できなくなります。
また、新キャラクターの実装と限定ガチャが重なるこの時期は、ゲーム全体の盛り上がりが最大化されるタイミングでもあります。
攻略記事や解説動画が大量に公開されるため、右も左もわからない新規プレイヤーが情報を集めやすい環境が自然と整うのも、このタイミングに始めることの隠れたメリットと言えるでしょう。


理由3 : ガチャ周りの特典が充実していて始めやすい

今回のイベント開催に合わせて、ガチャ周りの特典も充実しています。
リミテッドスカウト(限定ガチャ)では10連分のスカウト券が配布され、さらにイベント期間中は毎日1回無料でガチャを引くことができます。
加えてゲームがセールスランキング1位を獲得した場合は、追加で10連分のチケットが配布される慣例もあります。
さらに今回のイベント期間中は「特別公開求人」も開催されます。
公開求人とは龍門幣(ゲーム内通貨)と求人票を使って無料でオペレーターを入手できるシステムで、通常は滅多に出現しない「上級エリートタグ」が今回は必ず出現します。
このタグを選んで募集期間を9時間に設定することで、☆6オペレーターを1体確定で入手できます。
新規プレイヤーにとっては、課金せずとも最上位レアリティのオペレーターを手に入れられる貴重な機会です。


理由4 : 課金圧が低く、無課金・微課金でも長く楽しめる

「スマートフォンゲームは結局課金しないと楽しめないのでは」
という不安を抱えている方も多いと思います。
しかしアークナイツはスマートフォンゲームの中でも課金圧(ゲームがプレイヤーに課金を促す強さ)が低いゲームとして広く知られており、無課金・微課金でも十分に楽しめる設計になっています。
毎日のログインやイベントのステージクリアなど、無料でこなせるコンテンツをこなすだけで月に20連分以上のガチャを引けるだけのアイテムが自然と貯まります。
さらに大陸版(中国版)が日本版より約半年先行しているため、今後実装されるキャラクターの情報を事前に把握したうえでガチャ計画を立てられるという独自のメリットもあります。
またアークナイツは低レアリティのオペレーターも育成次第で十分に活躍できるバランス設計になっており、課金者と無課金者の間でゲームの攻略ペースに大きな差が生まれにくい点も特徴です。
対人コンテンツが一部しかない+常設化されていないため、他プレイヤーに課金で差をつけられるという状況も起きません。
課金によって得られるのは主にキャラクターの入手スピードや快適さの向上であり、ゲームの根幹であるストーリーや攻略の楽しさは無課金でも等しく体験できます。


理由5 : エンドフィールドプレイヤーはストーリーの原点を体験できる

『アークナイツ:エンドフィールド』をプレイしている方には、もう一つ別の理由からアークナイツをおすすめできます。

エンドフィールドの舞台となる世界は、アークナイツが描く「テラ」という世界と深いつながりを持っています。
アークナイツをプレイすることで、エンドフィールドの世界観の背景にある歴史や登場人物の関係性をより深く理解でき、作品への没入感が増します。
すでにエンドフィールドでキャラクターや世界観に触れている方にとっては、その原点をたどる体験として楽しめるでしょう。
なお、アークナイツ本編のストーリーはエンドフィールドとは独立した物語ですので、エンドフィールドのネタバレを心配せずに楽しめます。
一方で、アークナイツのストーリーを先に知ることでエンドフィールドの見え方が変わる部分もあるため、その点はご自身の判断でお楽しみください。


新規向け : 始める前に知っておきたいこと

実際にアークナイツを始めるにあたって、最初に知っておくと安心なポイントをまとめます。

ゲームはApp StoreまたはGoogle Playから無料でダウンロードできます。

チュートリアルは丁寧に作られており、タワーディフェンスの基本操作やオペレーターの配置方法を実際に手を動かしながら学べるため、ジャンル未経験の方でも問題なく始められます。

育成コストがやや重めに設計されているのがアークナイツの特徴の一つです。
強いキャラクターを引けても、育成が追いつかなければ活躍させるまでに時間がかかります。
今回のような好条件が揃っているタイミングに始めることで、できるだけ早く育成を進められるのは大きなアドバンテージになります。
「いつか始めよう」と思っているなら、今が動くべき時です。

ガチャシステムについては、50連連続で☆6オペレーターが出なかった場合、51連目から1回引くごとに☆6の排出確率が2%ずつ上昇し、99連目で100%になります。
☆6が排出された時点でカウントはリセットされます。
スタンダードガチャ(恒常ガチャ)内ではこの確率上昇のカウントが共有されており、ピックアップキャラクターが更新されてもカウントが持ち越されます。
なお限定ガチャ(リミテッドスカウト)はこの引き継ぎの対象外で、300連で限定キャラクターの交換が可能な天井が設けられています。
毎日のログインやイベントをこなすことでガチャ用のアイテムを無料で継続的に入手できるため、無課金・微課金でも計画的に進めることが可能です。

また、アークナイツは過去のイベントストーリーが期間限定で復刻されることも多く、長く遊んでいるプレイヤーと比べてもストーリーの大半は追いやすい環境が整っています。
「全部一気に追わなければ」と焦る必要はなく、自分のペースで楽しめるゲームです。


まとめ

2026年4月14日以降のイベントでアークナイツを始めるべき理由を改めて整理します。

  • 限定復刻3体(ウィシャデル・ヴィルトゥオーサ・荒蕪ラップランド)はいずれもトップクラスの性能を持つオペレーターで、これらを入手することで難しいステージも攻略しやすくなります
  • 新実装の凛御シルバーアッシュ・聖聆プラマニクスも非常に高性能で、ゲームが最も盛り上がるこの時期は攻略情報も豊富です
  • 10連スカウト券の配布や毎日無料ガチャ、特別公開求人での☆6確定入手とガチャ面の特典も今回は特に手厚くなっています
  • アークナイツは課金圧が低く、月に20連分以上のガチャアイテムが無料で貯まる設計のため、無課金・微課金でも長く楽しめます
  • エンドフィールドプレイヤーにとっては、あの世界観の原点を体験できる絶好の機会です

強力なオペレーターが揃うこのタイミングは、新規プレイヤーが最もスムーズにゲームへ入っていける環境が整った瞬間とも言えます。
気になっているなら、今がアークナイツを始めるベストタイミングです。

4K/8Kマウスのカクつき解消-CPUアフィニティ設定

はじめに

最近は昔と違って手頃な価格帯でも高ポーリングレート対応マウス(4K/8K)が簡単に入手できるようになりました。
ただ、いざ4Kや8Kに設定してValorantなどのゲームをプレイしてみると

  • 「マウスを激しく振った瞬間にフレームレート(FPS)がガタ落ちする」
  • 「視点移動で画面が微小にカクつく(スタッターが起きる)」

という問題に直面する人が増えています。

実は私も、この謎のカクつきに悩まされていた一人です。
PCのスペック自体は十分なはずなのに、なぜかフリックの瞬間に引っかかりを感じてモヤモヤしていました。

しかし、LatencyMonなどのツールで原因を特定し、「CPUアフィニティ(コア割り当て)」という設定を見直したところ、この問題が劇的に解消しました。

今回は高ポーリングレートマウスでPCが重くなる原因と、その具体的な解決手順を解説します。
同じ症状で困っている方の参考になれば幸いです。

なぜ4K/8Kマウスを使うとゲームが重くなるのか?

結論から言うと「CPU 0(最初のコア)が過労死しているから」です。

一般的な1,000Hzのマウスは1秒間に1,000回の割り込み処理(IRQ)をCPUに要求しますが、8,000Hzなら単純に8倍の負荷がかかります。
Windowsの仕様上、この膨大なUSBの処理は一番最初のコアである「CPU 0」に集中的に割り振られやすい傾向があります。
しかし、CPU 0はOSの基本処理やネットワーク、グラフィックのスケジューリングなどで既に大忙しです。
そこに高頻度のマウス入力が雪崩れ込むと処理が渋滞し、ゲームの処理が遅れて「カクつき」として画面に現れやすいのです。

これを解消するには、マウスの処理を「OSやゲームがあまり使っていない、暇な専用コア」に割り当てて隔離してあげるのが最も効果的です。

必要なツールと事前準備

「CPU アフィニティ」の設定を行うにあたり、以下のツールが必要となるので各自ダウンロードとインストールを行ってください。

[!caution]注意

ここから先はCPUアフィニティを設定する手順となります。
万が一に備え、必ず事前にシステムの復元ポイントを作成してください。
また、設定で失敗しないために、以下の前提知識を必ず頭に入れた(理解した)状態で読み進めてください。

前提知識

※ここでは現在の主流であるIntel CPUの仕組みを前提に解説します。

1. 「物理コア」と「論理コア」は違う

  • 物理コア: CPUの中に実際に存在する、物理的な「脳みそ」の数です。
  • 論理コア: Windows(OS)から見た「見かけ上の脳みそ」の数です。
    タスクマネージャーやLatencyMonで「CPU 0」「CPU 1」と表示されている番号は、すべてこの論理コアの番号を指しています。

2. ハイパースレッディング(HT)の罠: 「ペア」の仕組み
IntelのCPUには、「1つの物理的な脳みそを、2つの論理コアとしてOSに認識させる」技術(ハイパースレッディング)が搭載されています。
これにより、Windows上ではCPU番号が連番で並んでいますが、実は以下のように2つの番号で1つの物理コアを共有する「ペア」になっています。

  • 物理コア 0: [CPU 0] と [CPU 1] が同居
  • 物理コア 1: [CPU 2] と [CPU 3] が同居
  • 物理コア 2: [CPU 4] と [CPU 5] が同居

そして、CPU番号のIndexは必ず「0」から始まります。
プログラミングと同じで、そういう決まりなのです。

3. なぜ見かけの番号で割り当ててはいけないのか?
アフィニティを設定する際、ここが最大の落とし穴になります。
例えば、「重いゲームの処理がCPU 0に集中しているから、マウスの処理を隣のCPU 1に逃がそう!」と設定したとします。
番号が違うので別々に処理されると思いきや、実は同じ1つの物理コア(物理コア0)の中でリソースを激しく奪い合ってしまうため、遅延やカクつきは全く直りません。

マウスの処理を完全に隔離して「VIPレーン」を作るには、激重なペア(CPU 0と1)を完全に避け、別の物理コアのメインスレッドである「偶数番号(CPU 2、CPU 4、CPU 8など)」を選ぶ必要がある、ということを覚えておいてください。

[!important]以下はIntel Core i5 13500(P: 6Core 12Thread + E:8Core(Thread) = 14Core 20Thread)の例です。

P / E index 番号
Pコア 0 0
1
1 2
3
2 4
5
3 6
7
4 8
9
5 10
11
Eコア 6 12
7 13
8 14
9 15
10 16
11 17
12 18
13 19

4. (補足)PコアとEコアについて
第12世代以降のIntel CPU(Core i5-13500など)には、ゲームなどの重い処理を得意とする「Pコア(高性能)」と、バックグラウンド処理を行う「Eコア(高効率)」が混ざっています。
ハイパースレッディング(ペアの仕組み)を持っているのはPコアだけです。
4K/8Kマウスの超高頻度な処理を遅延なく捌くには、Eコアではなく必ず「Pコアの偶数番号」に割り当てるのが鉄則です。

CPU アフィニティの具体的な設定手順

ステップ1: LatencyMonで「暇なコア」を見つける

いきなり設定を変える前に、まずは自分のPCで「どのコアが一番暇しているか」を探す必要があります。
環境によって空いているコアが異なるためです。

ここで役に立つのが、「LatencyMon」です。

  1. LatencyMonをダウンロード&インストールして実行し、左上の再生ボタン(Start)を押してゲームをプレイしながら数分間(10~15分)計測します。
  2. 上部の「CPUs」タブを開きます。
  3. リストの中から「Highest DPC execution」の数字が極端に少ないコア(暇なコア)を探します。

この場合、Highest DPC executionの値が低い3コア目(CPU6, CPU7)が暇している。

[!point]コア選びの重要なポイント
例として、私が使用している「Intel Core i5 13500」の場合で解説します。

  • 絶対に避けるべきコア: CPU 0(システム処理で激重)、グラフィック処理(dxgkrnl.sys)などでDPC countが跳ね上がっているコア
  • Eコアは避ける: 第12世代以降のIntel CPUの場合、Eコア(高効率コア)は構造上レイテンシに不利なので、Pコア(高性能コア)の中から選びます。
  • Hyper-Threadingの裏の顔に注意: 仮想コア(奇数番号のコアなど)は物理コアのリソースを分け合ってしまうため、「偶数番号の空いている物理Pコア」を狙うのが鉄則です。

私の環境では、これらの条件をクリアしつつ圧倒的に暇をしていた「CPU 6」をマウス専用コアとして選定しました。

ステップ2: アフィニティの具体的な設定手順

①「大本のUSBホストコントローラー」を見つける

マウス単体(例えばデバイス一覧にあるRazer Viper V2 Proなど)に設定を行っても意味がありません。
割り込みを担当しているマザーボード上の「親玉」であるUSBホストコントローラにもアフィニティを設定する必要があります。

  1. UsbTreeView.exeをダウンロード&解凍し、起動する
  2. 左側にあるツリーから、マウスが刺さっているポートを特定する
  3. Kernel Nameの値をメモする。(私の場合は\Device\USBPDO-1)
    UsbTreeView.exe
  4. 大本のコントローラーを特定する(私の場合はIntel(R) USB 3.20 eXtensible Host Controller - 1.20)

②GoInterruptPolicyで専用コアを割り当てる

先ほど特定したポートと、その親玉をステップ1で見つけた「暇なコア(例:CPU 6)に割り当てます。
1. GoInterruptPolicyを管理者として実行
2. [Seach]インプットボックスにUSB composite Deviceと入力し、DevObj NameとメモしたKernel Nameが一致する物を探す
3. 該当する物を[右クリック]し、Device Policyを選択
4. Advanced Policies欄にあるDevice Policy:IrqPolicySpecifiedProcessorsに変更
5. 暇しているコアの物理コアと論理コアに割り当てる(私の場合はCore 3Thread 6Thread 7)

Core3のThread 6と7に割り当てた例

6. リストから親玉(例: Intel(R) USB 3.20 eXtensible Host Contoller)を選択
7. 手順[3~5]を再度行う
8. Device Priority「Undefined」のままにしておく([!caution]ここをHighにすると逆にシステムが不安定になることが多いです)
9. 「OK」を押してPCを再起動する。

これでマウスの入力処理が他の重いタスクから完全に独立した「VIPレーン」で処理されるようになります。

おわりに

この設定を行ってPCを再起動したあと、実際に射撃場などでマウスを激しく振ってみて下さい。
以前よりFPSドロップが少なくなったり、あるいは完全に消えたりして視点移動が本来の滑らかさを取り戻しているはずです。
また、マウスだけではなくGPUやNICにも「VIPレーン」を設定するとカク付きが解消されたりします。

最後に1つ、注意点を。
過剰なチューニングは避けてください。
なんでもかんでも「VIPレーン」を用意してアフィニティを設定すれば良いというものでもないです。
例えばコアを跨って並列処理しているものを「VIPレーン」を用意してそこに閉じ込めてしまうと逆に処理が遅くなったりします。

また、このアフィニティ設定を適用して発生したいかなる損害について、私は責任を負いません。
必ず自己責任を厳守の上で行ってください。

ブログテーマを自作した話 ― GitHub風ダークテーマ「DevBlog Dark」

はじめに

当ブログのテーマを一新しました。

以前は既存のテーマをそのまま使っていたのですが、技術ブログとしてコードの可読性やデザインの統一感を追求したくなり、CSSフルスクラッチで書き直すことにしました。

テーマ名は 「DevBlog Dark」
GitHubのダークモードをベースに、技術記事を書く・読むことに特化したデザインを目指しています。

こだわりポイント

1. GitHub風のダークカラースキーム

配色はGitHub Darkのカラーパレットをベースにしています。

用途 カラーコード
背景 #0d1117
カード #161b22
ボーダー #30363d
テキスト #c9d1d9
見出し #ffffff
アクセント #135bec

長時間コードを読んでも目が疲れにくく、かつコントラストが十分に確保された配色にこだわりました。
CSSカスタムプロパティ(CSS変数)で一元管理しているため、将来的にライトテーマへの切り替えも視野に入れた設計です。

:root {
    --color-bg: #0d1117;
    --color-card: #161b22;
    --color-border: #30363d;
    --color-text-primary: #c9d1d9;
    --color-text-heading: #ffffff;
    --color-primary: #135bec;
}

2. Shikiによるシンタックスハイライト

技術ブログの要ともいえるコードブロックには、Shiki を採用しました。
はてなブログのデフォルトのシンタックスハイライトでも十分ですが、Shikiを使うことで以下のメリットがあります

  • VSCodeと同じTextMateグラマーを使用した正確なハイライト
  • github-dark テーマによる統一感のあるカラーリング
  • 行番号の自動表示
  • 言語名ラベルの表示(コードブロック上部)
  • コピーボタンのワンクリックコピー
import { codeToHtml } from "https://esm.sh/shiki@3.0.0"

const pres = document.querySelectorAll("pre.code")
pres.forEach((pre) => {
    const lang = pre.dataset.lang
    // Shikiで変換し、元のpreを置き換え
})

はてなブログpre.code 要素を検出し、Shikiで変換した pre.shiki に差し替えるという仕組みです。
言語が指定されていないコードブロックはそのまま残るため、プレーンテキストのコードブロックも問題なく表示されます。

3. Web Fontへのこだわり

フォント選びは地味ですが、読みやすさに直結する重要な要素です。

用途 フォント
本文・見出し BIZ UDPGothic
コードブロック IBM Plex Mono + IBM Plex Sans JP

BIZ UDPGothicIPAが開発したユニバーサルデザインフォントで、長文の可読性に優れています。プロポーショナル版を採用しているため、自然な文字間隔で読み進められます。

コード用フォントには IBM Plex Mono を採用。等幅フォントとしての視認性はもちろん、0O1lI の区別がつきやすく、コードリーディング時のストレスを軽減します。
日本語コメントには IBM Plex Sans JP がフォールバックとして適用されるため、コード中の日本語コメントも自然に表示されます。

4. テキスト置換によるアイコン表記

記事中に特定のマーカーを書くと、対応する絵文字に自動変換される仕組みも入れました。

記述 表示
[!point] 📌
[!caution] ⚠️
[!tips] 💡
[!memo] 📝
[!important]

Markdownの記法では表現しづらい「注意書き」や「ポイント」を、シンプルな記法で視覚的に目立たせることができます。
コードブロック内では変換がスキップされるため、コード中にこれらの文字列が出現しても問題ありません。

5. レスポンシブ対応

画面幅に応じて3段階のレイアウト切り替えを行います。

  • デスクトップ(1024px以上): メインコンテンツ + サイドバーの2カラム
  • タブレット(768px〜1024px): サイドバーが下に移動する1カラム
  • モバイル(768px以下): サイドバーを非表示にし、コンテンツに集中できるレイアウト

レイアウトにはFlexboxを使用しており、メインコンテンツが常に flex: 1 でスペースを最大限活用し、サイドバーは固定幅(280px)で縮まないようにしています。

配布について

blog.hatena.ne.jp

こちらで配布しています。
テーマを完璧に動作させる為に、上記テーマ説明欄に記載されている変更を適用してください。

おわりに

「読みやすい技術ブログ」を目指してテーマを自作してみました。

特にシンタックスハイライトとフォント選びには力を入れています。コードを書く人が書いたブログ、というのが伝わるデザインになっていれば幸いです。

今後も改善を続けていく予定です。

モダンな技術スタックで作る軽量・高速なオーバーレイツール

はじめに

ゲームの攻略情報を画面に重ねたり、自作のタイマーを表示させたりする「オーバーレイ」。非常に便利ですが、いざ作るとなると  

  • 背後のゲームを邪魔しない
  • クリックを透過させる

など、特有の技術的ハードルがあります。
今回はモダンな技術スタックを使って、実用的なオーバーレイウィンドウを実装する方法を解説します。

  • 対象読者:Rust / Web開発の基礎があり、Windows向けツールを作りたい人
  • 動作環境:Windows 10 / 11(※本記事の実装はWindows前提)

[!caution]本記事で扱うオーバーレイは、画面表示や入力補助を目的としたものであり、 ゲームの内部メモリ改変・パケット解析・自動操作などは一切行いません。 利用にあたっては各ゲームの利用規約を必ず確認してください。

1. 言語選択

オーバーレイ開発において、言語選びの基準は「低レイヤーの操作(OSのウィンドウ制御)」と「UIの作りやすさ」のバランスにあります。

  • Python : 開発は早いが配布サイズが大きく、実行速度やリソース消費がゲームの邪魔になることがある。署名しないとWindows Defenderで弾かれる
  • C#(.NET/WPF) : Windowsとの相性は抜群だが、マルチプラットフォーム展開が難しく、ランタイムの重さが気になる。+α、UIデザインが初期設定だと非常に古臭い
  • C++ : 性能は最高だがメモリ管理やモダンなUI構築のハードルが非常に高い。
  • Rust : 高いパフォーマンスと安全性を両立。近年、GUIフレームワークが充実しており、OSのAPIを叩くのも得意。

2. 私はRustを選んだ

今回、私はRustを選択しました。理由は明確です。
ゲームの裏で動かすツールは、「極限まで低リソースであること」と「クラッシュしない安定性」が求められるからです。
RustならC++並みの速度を保ちつつ、メモリ安全性が保証された状態で開発を進められます。

3. フレームワークの選定

RustでGUIを作る選択肢はいくつかありますが、今回はTauriSvelteの組み合わせを採用しました。

なぜ Tauri と Svelte なのか

  • Tauriの圧倒的な軽量さ : Electronと異なり、OS標準のWebviewを利用するため、実行ファイルが(規模にもよるが)数MB単位と非常に小さく、メモリ消費量も抑えられる。
  • Web技術でUIが作れる : HTML / CSS / JavaScript(TypeScript)が使えるため、モダンで美しいデザインが容易に作れる。特にSvelteコンパイル時にコードを最適化するため、ランタイムが非常に軽く、オーバーレイのような「軽さ」が求められる用途に最適
  • Rustとの親和性 : バックエンド(OS操作)はRust、フロントエンド(表示)はWeb技術という役割分担が明確で、開発効率が非常に高い

4. コーディングするときのディレクトリ構成

Tauriプロジェクト(Svelte構成)の標準的な構成は以下のようになります。

my-overlay-app/
├── src/                # フロントエンド (Svelte / TS / CSS)
│   ├── lib/            # コンポーネント
│   └── App.svelte      # メインUI
├── src-tauri/          # バックエンド (Rust)
│   ├── src/
│   │   └── main.rs     # ウィンドウ制御やAPIの定義
│   ├── tauri.conf.json # ウィンドウ設定(透明化、最前面など)
│   └── Cargo.toml      # Rustの依存関係
├── package.json        # Node.jsの依存関係
└── ...

5. 準備: Cargo.tomlの設定

まずは必要なライブラリを揃えましょう。
キーフックには低レイヤーのイベントを拾えるrdevを使用します。

[dependencies]
tauri = { version = "1.5", features = ["window-set-ignore-cursor-events", "window-set-opacity"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
# グローバルキーフック用
rdev = "0.5.3"

[!caution]バージョン情報はあくまでも例です。crates.ioで確認してください。

6. 実際にオーバーレイウィンドウを表示させてみる

まず、オーバーレイとして成立させるためにはウィンドウの枠を消し、背景を透明にする必要があります。これらはtauri.conf.jsonで設定可能です。

{
  "tauri": {
    "windows": [
      {
        "title": "OverlayWindow",
        "width": 800,
        "height": 600,
        "resizable": false,
        "decorations": false,  // 枠を消す
        "transparent": true,    // 背景を透明にする
        "alwaysOnTop": true     // 最初から最前面に
      }
    ]
  }
}

7. オーバーレイウィンドウをTopmostにする

ゲーム画面の上に常に表示させるには、ウィンドウを「Topmost(最前面固定)」にする必要があります。設定ファイルでも可能ですが、Rust側から動的に制御することもできます。

// src-tauri/src/main.rs
use tauri::Manager;

fn main() {
    tauri::Builder::default()
        .setup(|app| {
            let window = app.get_window("main").unwrap();
            // プログラム的に最前面に固定
            window.set_always_on_top(true).unwrap();
            Ok(())
        })
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

8. ウィンドウ全体の透過率(Opacity)を調整する

背景の透明度(Alpha)だけでなく、ウィンドウに表示されている文字やボタン自体の透過率を調整したい場合があります。

use tauri::Runtime;

#[tauri::command]
fn set_overlay_opacity<R: Runtime>(window: tauri::Window<R>, opacity: f64) {
    // 0.0(完全に透明) ~ 1.0(不透明)
    window.set_opacity(opacity).unwrap();
}

[!point]背景を透明にするならCSSbackground: rgba(0,0,0,0)で十分ですが、UI全体を透かせたい場合はOSレベルのset_opacityが非常に強力です。

9. 左クリックの透過処理

オーバーレイの最大の難所が「表示はされているが、クリックは後ろのゲームに届くようにする」というクリック透過処理です。
Tauriではset_ignore_cursor_events(true)を呼び出す事で、そのウィンドウに対するマウス操作を無視させることができます。

// 特定の条件(例:ボタン以外の場所)でクリックを透過させる
let window = app.get_window("main").unwrap();
window.set_ignore_cursor_events(true).expect("failed to set click-through");

[!point]実用的なツールにする場合は「設定画面を開いている間は操作可能にし、ゲーム中は透過させる」といった切り替えを、Rust側のcommandを通じてフロントエンドから制御するのが一般的です。

10. グローバルキー入力のフック(Hotkeys)

オーバーレイの表示・非表示を切り替えたり、機能を実行したりするためにゲームがアクティブな状態でもキー入力を検知する必要があります。

Tauriのプラグインを利用する場合

標準のglobal-shortcutプラグインを使うのが最も簡単です。

  • メリット : 実装が容易、マルチプラットフォーム対応
  • 用途 : Ctrl + Shift + Hでウィンドウを隠すといったショートカット機能

より高度なフック(rdevなど)を利用する場合

「特定のキー(例: Fキー)」が押された瞬間を検知してUIを更新する」といった、より低レイヤーな制御が必要な場合は、Rustのrdevクレートなどを別スレッドで回します。

use rdev::{listen, Event};

std::thread::spawn(|| {
    if let Err(error) = listen(| event | {
        match event.event_type {
            rdev::EventType::KeyPress(key) => println!("Key pressed: {:?}", key), _ => (),
        }
    }) {
        println!("Error: {:?}", error);
    }
});

[!caution]キーフックは強力な反面、アンチチートシステムに検知される可能性や、セキュリティ上の懸念もあるため、利用目的を明確にして実装しましょう。
[!tips]rdevのコールバックは別スレッドで実行されるため、 UI操作はTauriのイベントループにディスパッチする設計も検討できます。 (規模が大きくなった場合の安定性向上に有効)

11. F1キーを押している間だけ操作可能にするサンプル

ここが本記事のハイライトです。「普段はクリック透過してゲームを邪魔せず、F1を押している間だけUIをクリックできるようにする」という処理を実装します。

Rust側でのキーフックとウィンドウ制御

rdevでキーイベントを監視し、F1の押下状況に合わせてset_ignore_cursor_eventsを切り替えます。

use rdev::{listen, Event, EventType, Key};
use tauri::Manager;

fn main() {
    tauri::Builder::default()
        .setup(|app| {
            let window = app.get_window("main").unwrap();
            let w_handle = window.clone();

            // グローバルキーフックを別スレッドで開始
            std::thread::spawn(move || {
                listen(move |event| {
                    match event.event_type {
                        EventType::KeyPress(Key::F1) => {
                            w_handle.set_ignore_cursor_events(false).unwrap(); // 操作可能
                        }
                        EventType::KeyRelease(Key::F1) => {
                            w_handle.set_ignore_cursor_events(true).unwrap();  // 透過
                        }
                        _ => {}
                    }
                }).expect("Could not listen");
            });

            // 初期状態はクリック透過
            window.set_ignore_cursor_events(true).unwrap();
            Ok(())
        })
        .invoke_handler(tauri::generate_handler![set_overlay_opacity])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

12. Svelte側での考慮事項

Rust側でクリック透過を切り替えた際、フロントエンド(Svelte)側でも「今編集モードですよ」という状態を知る必要があります。
Tauriのemit(イベント送信)を使うとスムーズです。

Rust側(main.rsのループ内)

// F1押下時にイベントをフロントへ飛ばす
w_handle.emit("mode-change", "edit").unwrap();
// F1離上時にイベントをフロントへ飛ばす
w_handle.emit("mode-change", "transparent").unwrap();

[!memo]サンプルコードでは可読性を優先して unwrap() を使用しています。
実運用では if let Err(e) やログ出力を含めたエラーハンドリングを推奨します。

フロントエンド側(App.svelte)

<script lang="ts">
  import { onMount } from 'svelte';
  import { listen } from '@tauri-apps/api/event';

  let isEditMode = false;

  onMount(() => {
    // Rust側からのイベントをリッスン
    listen('mode-change', (event) => {
      isEditMode = event.payload === 'edit';
    });
  });
</script>

<div class="overlay-container" class:active={isEditMode}>
  {#if isEditMode}
    <div class="badge badge-primary">F1 Hold: Edit Mode</div>
  {/if}
  </div>

<style>
  .active { border: 2px solid #570df8; } /* 操作可能な時だけ枠を光らせる */
</style>

13. 動作しない時の落とし穴

実装が完璧でも、いざゲームと一緒に起動すると「キー入力が反応しない」「オーバーレイウィンドウが裏に隠れる」といった現象が起きることがあります。その原因の多くはWindowsの権限(整合性レベル)にあります。

なぜ管理者権限が必要なのか

WindowsにはUIPI(User Interface Privilege Isolation)というセキュリティ機能があり、権限の低いプロセスから権限の高いプロセス(管理者権限で実行されているアプリなど)への干渉を制限しています。

  • ゲームが管理者権限で動いている場合 : 標準ユーザー権限で起動したオーバーレイツールは、ゲームへの入力フックやゲーム画面より前面への描画がOSによってブロックされてしまいます。
  • 解決策 : 開発中のデバッグやツールの実行時に管理者権限にする

[!tips]配布を考えるなら、cargo-packagerなどを使ってマニフェストファイルにrequireAdministratorを設定し、常に管理者権限で昇格して起動するようにビルドするのも一つの手です。

まとめ

Rust + Tauri + Svelteの組み合わせは、軽量・高速・美麗なオーバーレイツールを作るための最強の選択肢です。

  1. rdevでOS全体のキー入力を監視
  2. Tauriでウィンドウの透過・操作可否を制御
  3. Svelte (+daisyUI)でリッチなUIを提供

この3ステップを抑えれば、ゲーム体験を損なわないプロ仕様のツールが完成します。特に「必要な時だけ操作可能にする」というギミックは、ユーザーの利便性を劇的に向上させます。

「何かゲームの上にオーバーレイで表示させたい」と思っている方はぜひRust + Tauri + Svelteで作ってみてください。