<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Windows on AIによる技術記事 備忘録</title><link>https://ai.hack-le.com/tags/windows/</link><description>Recent content in Windows on AIによる技術記事 備忘録</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Sat, 12 Sep 2026 12:09:59 +0900</lastBuildDate><atom:link href="https://ai.hack-le.com/tags/windows/index.xml" rel="self" type="application/rss+xml"/><item><title>Windows 11で右クリックメニューを旧スタイルに戻す方法（レジストリ設定）</title><link>https://ai.hack-le.com/windows-11%E3%81%A7%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E6%97%A7%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/</link><pubDate>Mon, 27 Oct 2025 20:07:47 +0900</pubDate><guid>https://ai.hack-le.com/windows-11%E3%81%A7%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E6%97%A7%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%81%AB%E6%88%BB%E3%81%99%E6%96%B9%E6%B3%95/</guid><description>&lt;p&gt;Windows 11では、エクスプローラ上で右クリックしたときに表示されるコンテキストメニューが、簡略化された新しい形式に変更された。従来のメニューに慣れているユーザーにとっては、毎回「Shift＋右クリック」を押さないと従来のフルメニューが出ない仕様は煩雑である。本稿では、この挙動をレジストリ設定によって変更し、通常の右クリック操作だけで旧来のメニューを表示させる方法を記録する。&lt;/p&gt;&#10;&lt;h2 id="前提環境"&gt;前提環境&#10;&lt;/h2&gt;&lt;p&gt;本手順は &lt;strong&gt;Windows 11 （21H2以降）&lt;/strong&gt; を対象とする。レジストリの編集には管理者権限が必要であり、誤った操作はシステムに影響を与えるおそれがある。編集前に必ずレジストリ全体のバックアップを取得しておくことを推奨する。&lt;/p&gt;&#10;&lt;h2 id="設定手順"&gt;設定手順&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;「Win＋R」キーを押し、&lt;code&gt;regedit&lt;/code&gt; と入力してレジストリエディタを起動する。&lt;/li&gt;&#10;&lt;li&gt;次のキーに移動する。 &lt;code&gt;HKEY_CURRENT_USER\Software\Classes\CLSID&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;CLSID&lt;/code&gt; の上で右クリックし、「新規」→「キー」を選択して、以下の名前で作成する。 &lt;code&gt;{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;さらにその下に「InprocServer32」というキーを新規作成する。 &lt;code&gt;HKEY_CURRENT_USER\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;「InprocServer32」を選択した状態で、右側の「(既定)」をダブルクリックし、値データを空欄のまま「OK」を押す。&lt;/li&gt;&#10;&lt;li&gt;レジストリエディタを閉じ、PCを再起動する。もしくは以下のコマンドでエクスプローラを再起動してもよい。 &lt;code&gt;taskkill /f /im explorer.exe start explorer.exe&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;以上の操作で、通常の右クリックのみで従来のフルコンテキストメニューが表示されるようになる。&lt;/p&gt;&#10;&lt;h2 id="元に戻す方法"&gt;元に戻す方法&#10;&lt;/h2&gt;&lt;p&gt;変更を元に戻したい場合は、作成したキーを削除すればよい。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HKEY_CURRENT_USER\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;削除後に再起動すると、Windows 11の新しい簡略メニューに戻る。&lt;/p&gt;&#10;&lt;h2 id="注意点"&gt;注意点&#10;&lt;/h2&gt;&lt;p&gt;この設定はMicrosoftの公式サポート対象外であり、将来のWindows更新によって無効化される可能性がある。特にエクスプローラ関連の仕様変更が入る大型アップデート後は、再度確認が必要である。&lt;/p&gt;&#10;&lt;h2 id="参考資料"&gt;参考資料&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.elevenforum.com/t/disable-show-more-options-context-menu-in-windows-11.1589/" target="_blank" rel="noopener"&#10; &gt;ElevenForum: Disable “Show More Options” Context Menu in Windows 11&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://www.lifewire.com/bring-back-old-context-menu-in-windows-11-8603528/" target="_blank" rel="noopener"&#10; &gt;LifeWire: How to Bring Back the Old Right-Click Menu in Windows 11&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://superuser.com/questions/1854126/how-can-i-get-back-old-context-menu-for-windows-11-right-click-tried-4-differen" target="_blank" rel="noopener"&#10; &gt;SuperUser: Get Back Old Context Menu for Windows 11&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;この記事は、&lt;strong&gt;再現可能で安全な設定変更の記録&lt;/strong&gt;を目的としているため、コマンドやキー名はそのままの形で掲載した。&lt;/p&gt;&#10;</description></item><item><title>WindowsでOllamaを使うための推奨手順</title><link>https://ai.hack-le.com/windows%E3%81%A7ollama%E3%82%92%E4%BD%BF%E3%81%86%E3%81%9F%E3%82%81%E3%81%AE%E6%8E%A8%E5%A5%A8%E6%89%8B%E9%A0%86/</link><pubDate>Mon, 27 Oct 2025 19:25:22 +0900</pubDate><guid>https://ai.hack-le.com/windows%E3%81%A7ollama%E3%82%92%E4%BD%BF%E3%81%86%E3%81%9F%E3%82%81%E3%81%AE%E6%8E%A8%E5%A5%A8%E6%89%8B%E9%A0%86/</guid><description>&lt;h2 id="最も推奨される方法公式windows版をインストール"&gt;最も推奨される方法：公式Windows版をインストール&#10;&lt;/h2&gt;&lt;h3 id="概要"&gt;概要&#10;&lt;/h3&gt;&lt;p&gt;2024年後半から、OllamaはWindows向けに&lt;strong&gt;ネイティブ実行可能な公式ビルド&lt;/strong&gt;を提供している。&lt;br&gt;&#10;インストーラ形式で導入でき、追加の仮想環境（WSLやDocker）は不要である。&lt;br&gt;&#10;&lt;strong&gt;一般ユーザーから開発者まで、すべての用途でこの方法が推奨される。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h3 id="手順"&gt;手順&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;公式サイトからインストーラをダウンロード&lt;/strong&gt; &lt;a class="link" href="https://ollama.com/download" target="_blank" rel="noopener"&#10; &gt;https://ollama.com/download&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;インストーラを実行&lt;/strong&gt; ダウンロードした &lt;code&gt;OllamaSetup.exe&lt;/code&gt; を起動し、指示に従ってセットアップする。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;動作確認&lt;/strong&gt; インストール後、PowerShellまたはWindows Terminalで以下を実行する。 &lt;code&gt;ollama run llama3&lt;/code&gt; 初回実行時にモデルが自動ダウンロードされ、以降はローカルで推論が行われる。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="特徴"&gt;特徴&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;項目&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;内容&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;対応GPU&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NVIDIA GPU（CUDA対応）推奨。CPUモードも可&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;既定の保存先&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;C:\Users\&amp;lt;ユーザー名&amp;gt;\.ollama&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;自動起動&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;サービスとして常駐（再起動時も利用可）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;環境変数&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;OLLAMA_HOST&lt;/code&gt;, &lt;code&gt;OLLAMA_MODELS&lt;/code&gt;, &lt;code&gt;OLLAMA_API_KEY&lt;/code&gt;などが設定可能&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="代替方法wsl上でlinux版ollamaを動かす"&gt;代替方法：WSL上でLinux版Ollamaを動かす&#10;&lt;/h2&gt;&lt;h3 id="概要-1"&gt;概要&#10;&lt;/h3&gt;&lt;p&gt;Linux向けのOllamaバイナリを、WSL2環境（例：Ubuntu）で動作させる方法。&lt;br&gt;&#10;GPUを利用したい場合は、&lt;strong&gt;Windows上のCUDAサポートが有効化されたWSL2&lt;/strong&gt;が必要。&lt;br&gt;&#10;ただし、公式Windows版の登場により、この方法は&lt;strong&gt;非推奨&lt;/strong&gt;になりつつある。&lt;/p&gt;&#10;&lt;h3 id="手順ubuntu-on-wsl2"&gt;手順（Ubuntu on WSL2）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -fsSL https://ollama.com/install.sh | sh&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ollama run llama3&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;※ GPUを使う場合は、NVIDIAドライバがWindowsホストにインストールされており、WSL統合が有効である必要がある。&lt;/p&gt;&#10;&lt;h3 id="向いているケース"&gt;向いているケース&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;WSL上で他のLinuxツールと連携させたい場合&lt;/li&gt;&#10;&lt;li&gt;サーバ的に扱いたい（例：FlaskやFastAPI経由でOllama APIを呼び出す）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="docker版開発検証用途向け"&gt;Docker版（開発・検証用途向け）&#10;&lt;/h2&gt;&lt;p&gt;OllamaはDockerイメージも提供しており、環境を隔離して動かしたい場合に有効である。&lt;/p&gt;&#10;&lt;h3 id="手順-1"&gt;手順&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker run -d -p 11434:11434 ollama/ollama&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Windows環境でGPUを使いたい場合は、Docker Desktop設定で 「&lt;strong&gt;Use the WSL 2 based engine」および「GPU support&lt;/strong&gt;」 を有効にする必要がある。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="利用例"&gt;利用例&#10;&lt;/h2&gt;&lt;h3 id="モデルの一覧確認"&gt;モデルの一覧確認&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ollama list&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="モデルのダウンロード"&gt;モデルのダウンロード&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ollama pull mistral&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="apiとして利用"&gt;APIとして利用&#10;&lt;/h3&gt;&lt;p&gt;OllamaはローカルHTTPサーバを起動するため、以下のようにcurlでアクセス可能。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl http://localhost:11434/api/generate -d &amp;#34;{ \&amp;#34;model\&amp;#34;: \&amp;#34;llama3\&amp;#34;, \&amp;#34;prompt\&amp;#34;: \&amp;#34;Hello\&amp;#34; }&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="推奨構成まとめ"&gt;推奨構成まとめ&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;利用形態&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;推奨方法&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;備考&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;一般ユーザー・開発者&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;公式Windows版&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;最も安定・簡単&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Linux互換ツールと併用&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;WSL2上のOllama&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;非推奨（用途限定）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;実験・検証・CI環境&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Docker版&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;軽量な検証用&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="補足windows環境でのトラブル回避"&gt;補足：Windows環境でのトラブル回避&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;PATH設定&lt;/strong&gt;：インストール時に自動設定されるが、&lt;code&gt;ollama&lt;/code&gt;が認識されない場合は再ログインを行う。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;GPU未検出&lt;/strong&gt;：NVIDIAドライバを最新に更新し、&lt;code&gt;nvidia-smi&lt;/code&gt;がWindows上で動作することを確認する。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;WSLとの干渉&lt;/strong&gt;：同時にLinux版Ollamaを起動しているとポート衝突（11434）が発生するため注意。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="結論"&gt;結論&#10;&lt;/h2&gt;&lt;p&gt;WindowsでOllamaを使う場合、&lt;strong&gt;公式Windows版インストーラから導入するのが最も推奨&lt;/strong&gt;される。&lt;br&gt;&#10;これにより、GPU利用・サービス常駐・API連携などが容易に実現でき、WSLやDockerを併用する必要がない。&lt;/p&gt;&#10;&lt;p&gt;参考：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;公式サイト：&lt;a class="link" href="https://ollama.com/" target="_blank" rel="noopener"&#10; &gt;https://ollama.com/&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;ドキュメント：&lt;a class="link" href="https://github.com/ollama/ollama" target="_blank" rel="noopener"&#10; &gt;https://github.com/ollama/ollama&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>Windows 11でKeyhacをスタートアップに登録する方法</title><link>https://ai.hack-le.com/windows-11%E3%81%A7keyhac%E3%82%92%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%AB%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Mon, 27 Oct 2025 18:10:02 +0900</pubDate><guid>https://ai.hack-le.com/windows-11%E3%81%A7keyhac%E3%82%92%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%AB%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;p&gt;Windowsでキーリマップを柔軟に行いたい場合、Keyhacは非常に便利なツールである。Pythonスクリプトによるカスタマイズが可能で、Emacsライクな操作なども容易に実現できる。しかし、Windowsの起動時にKeyhacを自動起動させる設定を忘れがちなユーザーも多い。本稿では、Windows 11環境でKeyhacを確実にスタートアップに登録する手順を整理する。&lt;/p&gt;&#10;&lt;h2 id="前提条件"&gt;前提条件&#10;&lt;/h2&gt;&lt;p&gt;本記事はWindows 11環境を前提とする。また、Keyhacがすでにインストール済みであり、手動で起動できる状態にあることを前提とする。Keyhacは公式サイトまたはGitHubリポジトリから入手可能で、インストーラー版またはzip版のどちらでも問題ない。&lt;/p&gt;&#10;&lt;h2 id="keyhacの実行ファイルを確認する"&gt;Keyhacの実行ファイルを確認する&#10;&lt;/h2&gt;&lt;p&gt;まず、Keyhacの実行ファイル（&lt;code&gt;keyhac.exe&lt;/code&gt;）の場所を確認する。通常は以下のいずれかのパスに存在する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;インストーラー版の場合 &lt;code&gt;C:\Users\&amp;lt;ユーザー名&amp;gt;\AppData\Local\Programs\Keyhac\keyhac.exe&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;zip版の場合 解凍先の任意フォルダ内に &lt;code&gt;keyhac.exe&lt;/code&gt; がある。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;この実行ファイルの絶対パスを後の手順で使用するため、エクスプローラで確認しておく。&lt;/p&gt;&#10;&lt;h2 id="スタートアップフォルダを開く"&gt;スタートアップフォルダを開く&#10;&lt;/h2&gt;&lt;p&gt;Windows 11では、スタートアップフォルダにショートカットを配置することで、起動時に自動実行できる。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Win + R&lt;/strong&gt; を押して「ファイル名を指定して実行」ダイアログを開く。&lt;/li&gt;&#10;&lt;li&gt;次のコマンドを入力してEnterを押す。 &lt;code&gt;shell:startup&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;エクスプローラが開き、「スタートアップ」フォルダが表示される。ここに配置されたショートカットはWindowsのログイン時に自動実行される。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="ショートカットを作成して登録する"&gt;ショートカットを作成して登録する&#10;&lt;/h2&gt;&lt;p&gt;次に、Keyhacを起動するショートカットを作成し、スタートアップフォルダに配置する。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;code&gt;keyhac.exe&lt;/code&gt; を右クリックし、「ショートカットの作成」を選択する。&lt;/li&gt;&#10;&lt;li&gt;作成されたショートカットファイルを、先ほど開いた「スタートアップ」フォルダにドラッグ＆ドロップする。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;この操作により、次回以降のWindows起動時にKeyhacが自動起動するようになる。&lt;/p&gt;&#10;&lt;h2 id="管理者権限での実行設定必要に応じて"&gt;管理者権限での実行設定（必要に応じて）&#10;&lt;/h2&gt;&lt;p&gt;Keyhacは他のアプリケーションのキーボードイベントをフックするため、管理者権限で実行しないと動作が制限される場合がある。もしキー入力が効かない、または一部のウィンドウで反応しない場合は以下の設定を行う。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;スタートアップフォルダ内のKeyhacショートカットを右クリックし、「プロパティ」を開く。&lt;/li&gt;&#10;&lt;li&gt;「ショートカット」タブの「詳細設定」をクリックする。&lt;/li&gt;&#10;&lt;li&gt;「管理者として実行」にチェックを入れる。&lt;/li&gt;&#10;&lt;li&gt;OKを押して設定を保存する。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;なお、UAC（ユーザーアカウント制御）の設定によっては、起動時に確認ダイアログが表示される。この挙動を避けたい場合は、次節の「タスクスケジューラによる登録」を用いるとよい。&lt;/p&gt;&#10;&lt;h2 id="タスクスケジューラを使う方法代替手段"&gt;タスクスケジューラを使う方法（代替手段）&#10;&lt;/h2&gt;&lt;p&gt;より確実に管理者権限でKeyhacを起動したい場合は、タスクスケジューラを利用する。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Winキー&lt;/strong&gt;を押して「タスクスケジューラ」と入力し、起動する。&lt;/li&gt;&#10;&lt;li&gt;右側の「タスクの作成」をクリックする。&lt;/li&gt;&#10;&lt;li&gt;「全般」タブで次の設定を行う。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;名前：&lt;code&gt;Keyhac AutoStart&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;「最上位の特権で実行する」にチェック&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="4"&gt;&#10;&lt;li&gt;「トリガー」タブ → 「新規」 → 「ログオン時」を選択&lt;/li&gt;&#10;&lt;li&gt;「操作」タブ → 「新規」 → 「プログラムの開始」 → &lt;code&gt;keyhac.exe&lt;/code&gt; のパスを指定&lt;/li&gt;&#10;&lt;li&gt;「OK」を押して保存する。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;この方法では、管理者権限付きでKeyhacが起動するため、全てのアプリケーションでキーマップが有効になる。&lt;/p&gt;&#10;&lt;h2 id="動作確認"&gt;動作確認&#10;&lt;/h2&gt;&lt;p&gt;設定後、Windowsを再起動する。ログイン後にKeyhacのアイコンがタスクトレイに表示されていれば、スタートアップ登録は成功である。表示されない場合は、ショートカットのパスや権限設定を再確認する。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;Windows 11でKeyhacをスタートアップに登録するには、&lt;code&gt;shell:startup&lt;/code&gt; で開いたスタートアップフォルダにショートカットを置くのが基本である。管理者権限が必要な場合は、ショートカットのプロパティで「管理者として実行」を有効化するか、タスクスケジューラを用いる。これにより、起動時に自動でKeyhacが立ち上がり、常時快適なキーバインド環境を維持できる。&lt;/p&gt;&#10;</description></item><item><title>WSL環境でMac風のpbcopy/pbpasteを実現する方法</title><link>https://ai.hack-le.com/wsl%E7%92%B0%E5%A2%83%E3%81%A7mac%E9%A2%A8%E3%81%AEpbcopy-pbpaste%E3%82%92%E5%AE%9F%E7%8F%BE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</link><pubDate>Sun, 17 Aug 2025 13:47:19 +0900</pubDate><guid>https://ai.hack-le.com/wsl%E7%92%B0%E5%A2%83%E3%81%A7mac%E9%A2%A8%E3%81%AEpbcopy-pbpaste%E3%82%92%E5%AE%9F%E7%8F%BE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/</guid><description>&lt;h2 id="前提環境"&gt;前提環境&#10;&lt;/h2&gt;&lt;p&gt;この記事は以下の環境での動作を前提としている。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Windows 10/11&lt;/li&gt;&#10;&lt;li&gt;WSL2（Windows Subsystem for Linux 2）&lt;/li&gt;&#10;&lt;li&gt;Ubuntu 20.04以降（他のディストリビューションでも同様の手順で可能）&lt;/li&gt;&#10;&lt;li&gt;Bash または Zsh シェル&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="背景と課題"&gt;背景と課題&#10;&lt;/h2&gt;&lt;p&gt;Macユーザーであれば、コマンドラインからクリップボードを操作する際に&lt;code&gt;pbcopy&lt;/code&gt;と&lt;code&gt;pbpaste&lt;/code&gt;コマンドを使用することに慣れているだろう。これらのコマンドは非常に便利で、パイプを使ってテキストをクリップボードにコピーしたり、クリップボードの内容を取得したりできる。&lt;/p&gt;&#10;&lt;p&gt;一方、WSL環境では標準でこのような機能は提供されていない。Linux用のクリップボードツールである&lt;code&gt;xclip&lt;/code&gt;をインストールしても、これはX Window System内でのクリップボード操作に留まり、Windowsのシステムクリップボードとは連携しない。つまり、WSL内で&lt;code&gt;xclip&lt;/code&gt;を使ってコピーした内容を、Windows側のアプリケーションで貼り付けることはできないのである。&lt;/p&gt;&#10;&lt;h2 id="windowsのネイティブなクリップボードapi"&gt;WindowsのネイティブなクリップボードAPI&#10;&lt;/h2&gt;&lt;p&gt;実は、Windowsには&lt;code&gt;clip.exe&lt;/code&gt;というコマンドラインツールが標準で付属している。このツールを使用することで、パイプ経由でテキストをクリップボードに書き込むことが可能である。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;Hello World&amp;#34; | clip.exe&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上記のコマンドを実行すると、「Hello World」がWindowsのクリップボードにコピーされ、任意のWindowsアプリケーションで貼り付けることができる。&lt;/p&gt;&#10;&lt;p&gt;ただし、&lt;code&gt;clip.exe&lt;/code&gt;は書き込み専用であり、クリップボードの内容を読み取る機能は提供されていない。そのため、Macの&lt;code&gt;pbpaste&lt;/code&gt;に相当する機能を実現するには別の方法が必要となる。&lt;/p&gt;&#10;&lt;h2 id="powershellを活用したクリップボード読み取り"&gt;PowerShellを活用したクリップボード読み取り&#10;&lt;/h2&gt;&lt;p&gt;Windowsでクリップボードの内容を取得するには、PowerShellの&lt;code&gt;Get-Clipboard&lt;/code&gt;コマンドレットを使用する。WSL内からPowerShellを呼び出すことで、この機能を利用できる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;powershell.exe -command &amp;#34;Get-Clipboard&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコマンドを実行すると、現在のクリップボードの内容がターミナルに出力される。なお、&lt;code&gt;-command&lt;/code&gt;パラメータは省略可能であり、以下のように短縮して記述することも可能である。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;powershell.exe &amp;#34;Get-Clipboard&amp;#34;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="エイリアスによる利便性の向上"&gt;エイリアスによる利便性の向上&#10;&lt;/h2&gt;&lt;p&gt;毎回長いコマンドを入力するのは非効率的であるため、エイリアスを設定してMacと同様の使い勝手を実現する。使用しているシェルの設定ファイル（Bashの場合は&lt;code&gt;~/.bashrc&lt;/code&gt;、Zshの場合は&lt;code&gt;~/.zshrc&lt;/code&gt;）に以下の行を追加する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alias pbcopy=&amp;#39;clip.exe&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alias pbpaste=&amp;#39;powershell.exe -command &amp;#34;Get-Clipboard&amp;#34;&amp;#39;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;設定を反映するために、シェルを再起動するか、以下のコマンドを実行する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Bashの場合&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;source ~/.bashrc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# Zshの場合 &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;source ~/.zshrc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="実際の使用例"&gt;実際の使用例&#10;&lt;/h2&gt;&lt;p&gt;エイリアスを設定した後は、Macと同様の感覚でクリップボード操作が可能になる。以下に実用的な使用例を示す。&lt;/p&gt;&#10;&lt;h3 id="基本的な使用方法"&gt;基本的な使用方法&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# テキストをクリップボードにコピー&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#34;テスト文字列&amp;#34; | pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# クリップボードの内容を表示&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pbpaste&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ファイルの内容をクリップボードにコピー"&gt;ファイルの内容をクリップボードにコピー&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# SSH公開鍵をクリップボードにコピー（GitHubへの登録などに便利）&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat ~/.ssh/id_rsa.pub | pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 設定ファイルの内容をクリップボードにコピー&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat ~/.vimrc | pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="gitとの連携"&gt;Gitとの連携&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 最新5件のコミット履歴をクリップボードにコピー&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git log --oneline -5 | pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 現在のブランチ名をクリップボードにコピー&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git branch --show-current | pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 現在のリモートURLをクリップボードにコピー&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git remote get-url origin | pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ディレクトリパスの活用"&gt;ディレクトリパスの活用&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 現在のディレクトリパスをクリップボードにコピー&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pwd | pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 特定のファイルの絶対パスをクリップボードにコピー&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;readlink -f example.txt | pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="パフォーマンスと制限事項"&gt;パフォーマンスと制限事項&#10;&lt;/h2&gt;&lt;p&gt;このアプローチにはいくつかの注意点がある。まず、&lt;code&gt;powershell.exe&lt;/code&gt;の起動には若干の時間がかかるため、&lt;code&gt;pbpaste&lt;/code&gt;の実行速度は純粋なLinuxコマンドと比較して遅くなる。ただし、日常的な使用においては実用上問題となることは少ない。&lt;/p&gt;&#10;&lt;p&gt;また、非常に大きなテキストをクリップボードに格納する場合、PowerShellの制限によって一部のデータが切り取られる可能性がある。通常の開発作業で扱うテキストサイズであれば問題ないが、大容量のデータを扱う場合は注意が必要である。&lt;/p&gt;&#10;&lt;p&gt;さらに、この方法はWSLからWindowsの実行ファイルを呼び出すため、WSL2の場合はネットワークを介した通信が発生する。セキュリティ設定によっては、この通信が制限される可能性もある。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;WSL環境においても、Windowsの標準機能とPowerShellを組み合わせることで、Macの&lt;code&gt;pbcopy&lt;/code&gt;/&lt;code&gt;pbpaste&lt;/code&gt;と同等の機能を実現できる。エイリアスを設定することで、Macからの移行時も違和感なく使用できるようになる。&lt;/p&gt;&#10;&lt;p&gt;この方法の最大の利点は、追加のソフトウェアをインストールすることなく、Windowsの標準機能のみで実現できることである。WSLでの開発効率を向上させる簡単で実用的な設定として、ぜひ活用していただきたい。&lt;/p&gt;&#10;</description></item><item><title>WSL2とHyper-V、Androidエミュレータの関係と最新対応状況</title><link>https://ai.hack-le.com/wsl2%E3%81%A8hyper-v%E3%80%81android%E3%82%A8%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF%E3%81%AE%E9%96%A2%E4%BF%82%E3%81%A8%E6%9C%80%E6%96%B0%E5%AF%BE%E5%BF%9C%E7%8A%B6%E6%B3%81/</link><pubDate>Fri, 01 Aug 2025 04:43:17 +0900</pubDate><guid>https://ai.hack-le.com/wsl2%E3%81%A8hyper-v%E3%80%81android%E3%82%A8%E3%83%9F%E3%83%A5%E3%83%AC%E3%83%BC%E3%82%BF%E3%81%AE%E9%96%A2%E4%BF%82%E3%81%A8%E6%9C%80%E6%96%B0%E5%AF%BE%E5%BF%9C%E7%8A%B6%E6%B3%81/</guid><description>&lt;h2 id="wsl2の実装基盤としてのhyper-v"&gt;WSL2の実装基盤としてのHyper-V&#10;&lt;/h2&gt;&lt;p&gt;WSL2（Windows Subsystem for Linux 2）は、一見するとLinux環境のように見えるが、実際にはMicrosoftのHyper-V技術を基盤として動作している。WSL2は軽量な仮想マシン（Lightweight Utility VM）として実装されており、この仮想マシンはHyper-V Platform上で稼働している。&lt;/p&gt;&#10;&lt;p&gt;従来のHyper-Vの完全な仮想マシンとは異なり、WSL2はWindowsカーネルと密に統合されているため、ユーザーからはネイティブなLinux環境のように感じられる。しかし、内部的にはHyper-Vエコシステムの一部として機能している点が重要である。&lt;/p&gt;&#10;&lt;h2 id="androidエミュレータとの競合メカニズム"&gt;Androidエミュレータとの競合メカニズム&#10;&lt;/h2&gt;&lt;h3 id="仮想化技術の排他的利用"&gt;仮想化技術の排他的利用&#10;&lt;/h3&gt;&lt;p&gt;BlueStacks、NoxPlayer、LDPlayerなどの多くのAndroidエミュレータは、独自の仮想化技術やVT-x/AMD-Vハードウェア仮想化機能を直接利用している。一方、WSL2がHyper-V Platformを有効にすると、他の仮想化ソフトウェアがハードウェア仮想化機能に直接アクセスできなくなる。&lt;/p&gt;&#10;&lt;p&gt;この現象が発生する理由は、Windowsでは一度に一つのハイパーバイザーしか動作できないためである。Hyper-V Platform（WSL2用）が有効になると、他の仮想化ソフトウェアはネストした仮想化として動作するか、完全に動作不能になってしまう。&lt;/p&gt;&#10;&lt;h3 id="具体的な問題例"&gt;具体的な問題例&#10;&lt;/h3&gt;&lt;p&gt;例えば、開発環境でWSL2を使用してDockerやLinux開発環境を構築している状況で、同時にBlueStacksでモバイルゲームをテストしようとすると、BlueStacksが「仮想化が無効になっています」というエラーメッセージを表示して起動できないという問題が発生する。&lt;/p&gt;&#10;&lt;h2 id="最新のhyper-v対応状況"&gt;最新のHyper-V対応状況&#10;&lt;/h2&gt;&lt;h3 id="bluestacksの対応"&gt;BlueStacksの対応&#10;&lt;/h3&gt;&lt;p&gt;BlueStacks 5はバージョン5.20以降で大幅な改善が図られている。Android 9 Pieインスタンスを使用することで、Hyper-V有効状態でも動作可能になった。さらに最新版ではAndroid 11もHyper-V環境で利用できる。&lt;/p&gt;&#10;&lt;p&gt;公式サイトからBlueStacksをダウンロードする際、システムでHyper-Vが有効になっていることを検出すると、自動的にHyper-V対応版がインストールされる仕組みが導入されている。&lt;/p&gt;&#10;&lt;h3 id="noxplayerの革新的アプローチ"&gt;NoxPlayerの革新的アプローチ&#10;&lt;/h3&gt;&lt;p&gt;NoxPlayerは2022年3月に「世界初のVirtualBoxとHyper-V両対応エミュレータ」として新バージョンをリリースした。この実装により、従来のように仮想化技術を切り替えるためにシステムを再起動する必要がなくなった。&lt;/p&gt;&#10;&lt;p&gt;特筆すべき点は、WSA（Windows Subsystem for Android）やGoogle Play Gamesといった、Hyper-V基盤の他のAndroid実行環境と同時に動作できることである。これにより、開発者やテスターは複数のAndroid環境を同一システム上で利用できるようになった。&lt;/p&gt;&#10;&lt;h3 id="ldplayerの対応状況"&gt;LDPlayerの対応状況&#10;&lt;/h3&gt;&lt;p&gt;LDPlayer 9はVirtualBoxとHyper-Vの両方に対応しているが、パフォーマンス面ではHyper-Vを無効化することが推奨されている。以前のバージョンで発生していたHyper-V環境でのクラッシュ問題は解決済みである。&lt;/p&gt;&#10;&lt;h2 id="解決方法と選択肢"&gt;解決方法と選択肢&#10;&lt;/h2&gt;&lt;h3 id="従来の解決方法"&gt;従来の解決方法&#10;&lt;/h3&gt;&lt;p&gt;問題が発生した場合の従来の対処法は以下の通りである。&lt;/p&gt;&#10;&lt;p&gt;WSL2を犠牲にする場合は、コマンドプロンプトで &lt;code&gt;bcdedit /set hypervisorlaunchtype off&lt;/code&gt; を実行してHyper-Vを無効化し、システムを再起動する。その後WSL2をWSL1に戻すことでAndroidエミュレータが正常に動作するようになる。&lt;/p&gt;&#10;&lt;p&gt;逆にWSL2を優先する場合は、Androidエミュレータの使用を諦めるか、Hyper-V対応版への移行を検討する必要があった。&lt;/p&gt;&#10;&lt;h3 id="現在推奨される解決方法"&gt;現在推奨される解決方法&#10;&lt;/h3&gt;&lt;p&gt;最新の状況では、以下のアプローチが効果的である。&lt;/p&gt;&#10;&lt;p&gt;BlueStacksを使用する場合は、最新版にアップデートしてAndroid 9 Pie以降のインスタンスを作成する。これによりHyper-V環境での安定動作が期待できる。&lt;/p&gt;&#10;&lt;p&gt;NoxPlayerを選択する場合は、Hyper-V対応版を利用することで、WSL2、WSA、Google Play Gamesとの同時利用が可能になる。&lt;/p&gt;&#10;&lt;p&gt;LDPlayerを使用する場合は、最新のLDPlayer 9を導入し、必要に応じてHyper-Vの有効・無効を切り替える運用を検討する。&lt;/p&gt;&#10;&lt;h2 id="開発環境での実践的な運用"&gt;開発環境での実践的な運用&#10;&lt;/h2&gt;&lt;h3 id="推奨構成例"&gt;推奨構成例&#10;&lt;/h3&gt;&lt;p&gt;現代の開発環境では、以下の構成が実用的である。&lt;/p&gt;&#10;&lt;p&gt;WSL2でLinux開発環境とDockerを構築し、同時にNoxPlayerまたは最新のBlueStacksでモバイルアプリケーションのテストを行う。この構成により、仮想化技術の競合を気にすることなく、フルスタック開発環境を構築できる。&lt;/p&gt;&#10;&lt;h3 id="注意点"&gt;注意点&#10;&lt;/h3&gt;&lt;p&gt;ただし、パフォーマンスを最重視する場合は、依然としてHyper-Vを無効化した従来の方法が有効な場合がある。特にリソースが限られたシステムや、高いフレームレートが要求されるゲーム開発では、この点を考慮する必要がある。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;WSL2とAndroidエミュレータの競合問題は、各エミュレータベンダーの技術革新により大幅に改善されている。特にNoxPlayerとBlueStacksの最新版では、Hyper-V環境での安定動作が実現されており、開発者は仮想化技術の切り替えによる煩雑さから解放されつつある。&lt;/p&gt;&#10;&lt;p&gt;ただし、最適なパフォーマンスを求める場合は、用途に応じてHyper-Vの有効・無効を選択することが重要である。現在の技術状況を理解し、自身の開発環境に最適な構成を選択することで、効率的な開発環境を構築できるだろう。&lt;/p&gt;&#10;</description></item><item><title>[Linux] Pop!_OS + Windows デュアルブート時にブートメニューが表示されない問題の解決法</title><link>https://ai.hack-le.com/pop_os-windows-%E3%83%87%E3%83%A5%E3%82%A2%E3%83%AB%E3%83%96%E3%83%BC%E3%83%88%E6%99%82%E3%81%AB%E3%83%96%E3%83%BC%E3%83%88%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95/</link><pubDate>Sun, 20 Jul 2025 06:27:18 +0900</pubDate><guid>https://ai.hack-le.com/pop_os-windows-%E3%83%87%E3%83%A5%E3%82%A2%E3%83%AB%E3%83%96%E3%83%BC%E3%83%88%E6%99%82%E3%81%AB%E3%83%96%E3%83%BC%E3%83%88%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95/</guid><description>&lt;h2 id="問題の状況"&gt;問題の状況&#10;&lt;/h2&gt;&lt;h3 id="症状"&gt;症状&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;Pop!_OS 22.04をデュアルブートでインストール後、起動時にいきなりLinuxが立ち上がる&lt;/li&gt;&#10;&lt;li&gt;Windowsを起動するためには毎回BIOS画面に入ってF2連打が必要&lt;/li&gt;&#10;&lt;li&gt;ブートメニュー画面が表示されない&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="ハードウェア環境"&gt;ハードウェア環境&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;SSD1（Samsung 512GB）&lt;/strong&gt; : Windows 10/11システム領域（/dev/nvme0n1）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;SSD2（PNY 2TB）&lt;/strong&gt; : Pop!_OS 22.04システム領域 + Windowsデータ領域（/dev/nvme1n1）&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;構成&lt;/strong&gt;: 各OSのシステム（ブート）領域が別々のSSDに分かれている&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ブートローダー&lt;/strong&gt;: systemd-boot（Pop!_OSのデフォルト）重要なポイント&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="原因の分析"&gt;原因の分析&#10;&lt;/h2&gt;&lt;h3 id="なぜブートメニューが表示されないのか"&gt;なぜブートメニューが表示されないのか&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Pop!_OSはsystemd-bootを使用&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;従来のGRUBとは異なる動作&lt;/li&gt;&#10;&lt;li&gt;デフォルトではタイムアウト設定なし&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;&lt;strong&gt;複数SSDによる複数EFIパーティション問題&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;SSD1のWindowsシステム&lt;/strong&gt;: &lt;code&gt;/dev/nvme0n1p1&lt;/code&gt; (EFIパーティション)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;SSD2のPop!_OSシステム&lt;/strong&gt;: &lt;code&gt;/dev/nvme1n1p1&lt;/code&gt; (EFIパーティション)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;問題の核心&lt;/strong&gt;: systemd-bootは同一EFIパーティション内のOSしか認識できない&lt;/li&gt;&#10;&lt;li&gt;物理的に異なるSSDにあるWindowsのEFIパーティションにはアクセス不可&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="確認コマンド"&gt;確認コマンド&#10;&lt;/h3&gt;&lt;p&gt;パーティション構成の確認：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo fdisk -l&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ブートローダーの状態確認：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo bootctl status&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="試したが効果がなかった方法"&gt;試したが効果がなかった方法&#10;&lt;/h2&gt;&lt;h3 id="-systemd-bootのタイムアウト設定"&gt;❌ systemd-bootのタイムアウト設定&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# これらは機能しなかった&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo bootctl set-timeout 5 &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo nano /boot/efi/loader/loader.conf # 別EFIパーティションのWindowsは認識されず&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="-手動でwindowsエントリ作成"&gt;❌ 手動でWindowsエントリ作成&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# windows.confを作成しても別EFIパーティションは参照できない&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo nano /boot/efi/loader/entries/windows.conf&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="-解決方法refindの導入"&gt;✅ 解決方法：rEFIndの導入&#10;&lt;/h2&gt;&lt;h3 id="refindとは"&gt;rEFIndとは&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;複数のEFIパーティションを横断してスキャンできるブートマネージャー&lt;/li&gt;&#10;&lt;li&gt;WindowsとLinuxの両方を自動検出&lt;/li&gt;&#10;&lt;li&gt;美しいGUIブートメニューを提供&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="インストール手順"&gt;インストール手順&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;rEFIndのインストール&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install refind&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;rEFIndのセットアップ&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo refind-install&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="実行結果"&gt;実行結果&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;起動時に自動的にrEFIndメニューが表示される&lt;/li&gt;&#10;&lt;li&gt;WindowsとPop!_OSの両方がアイコン付きで表示される&lt;/li&gt;&#10;&lt;li&gt;矢印キーで選択、Enterで起動&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="なぜrefindで解決したのか"&gt;なぜrEFIndで解決したのか&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;ブートローダー&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;対応範囲&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;複数EFI対応&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;systemd-boot&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;単一EFIパーティション内のみ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;❌&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;rEFInd&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;全EFIパーティションをスキャン&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;&lt;strong&gt;ポイント&lt;/strong&gt;: 各OSのシステム領域が別々のSSDにある場合、各SSDが独自のEFIパーティションを持つため、systemd-bootでは物理的に他のSSDのOSを認識できない&lt;/p&gt;&#10;&lt;h2 id="補足情報"&gt;補足情報&#10;&lt;/h2&gt;&lt;h3 id="一時的な回避方法"&gt;一時的な回避方法&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;起動時にBIOSブートメニューを表示&lt;/li&gt;&#10;&lt;li&gt;「Windows Boot Manager」を手動選択&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="注意点"&gt;注意点&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;rEFIndインストール後は、従来のsystemd-bootメニューは表示されなくなる&lt;/li&gt;&#10;&lt;li&gt;rEFIndが新しいメインブートローダーとなる&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;2枚のSSDに各OSのシステム領域が分かれているデュアルブート環境では、rEFIndを使うのが最適解&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;各SSDの独立したEFIパーティションを横断してスキャン&lt;/li&gt;&#10;&lt;li&gt;設定ファイルの手動編集不要&lt;/li&gt;&#10;&lt;li&gt;自動検出機能により確実に両方のOSを認識&lt;/li&gt;&#10;&lt;li&gt;インストールコマンド2つだけで完了&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;&lt;strong&gt;同一SSD内のパーティション分割デュアルブートとは異なる問題&lt;/strong&gt;であることを理解して、次回同じ状況になったら迷わずrEFIndを導入しましょう。&lt;/p&gt;&#10;</description></item><item><title>Windows バッチスクリプトによる大量の ZIP ファイル作成（7-Zip 利用）</title><link>https://ai.hack-le.com/windows-bat-zip/</link><pubDate>Thu, 13 Mar 2025 14:14:56 +0900</pubDate><guid>https://ai.hack-le.com/windows-bat-zip/</guid><description>&lt;p&gt;本記事では、7-Zip を利用して&lt;strong&gt;複数のフォルダを個別に ZIP 化するバッチスクリプト&lt;/strong&gt;を作成する方法を解説する。本スクリプトは、エクスプローラーで複数のフォルダをドラッグ＆ドロップするだけで、それぞれのフォルダを ZIP ファイルとして圧縮する。大量のフォルダを一括で ZIP 化する作業を効率化できる。&lt;/p&gt;&#10;&lt;h2 id="スクリプトのコード"&gt;スクリプトのコード&#10;&lt;/h2&gt;&lt;p&gt;以下のバッチスクリプトを &lt;code&gt;zip_folders.bat&lt;/code&gt; などの名前で保存し、デスクトップなどに配置することで、エクスプローラーからフォルダをドラッグ＆ドロップするだけで ZIP 化できる。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bat" data-lang="bat"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; off&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chcp 65001 &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; nul&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;setlocal&lt;/span&gt; enabledelayedexpansion&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;sevenZip=C:\Program Files\7-Zip\7z.exe&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;rem ドラッグ＆ドロップされたすべてのフォルダを処理&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="se"&gt;%%&lt;/span&gt;F &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;%*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;rem フォルダが存在するか確認&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;exist&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;~F&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;folderPath=&lt;/span&gt;&lt;span class="se"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;~dpF&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;folderName=&lt;/span&gt;&lt;span class="se"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;~nxF&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;rem 各フォルダを個別に ZIP 化&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;%sevenZip%&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; a -tzip &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;!folderPath!!folderName!&lt;/span&gt;&lt;span class="s2"&gt;.zip&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;~F\*&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; すべての ZIP 化が完了しました。&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;pause&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="スクリプトの詳細解説"&gt;スクリプトの詳細解説&#10;&lt;/h2&gt;&lt;h3 id="1-echo-off"&gt;1. &lt;code&gt;@echo off&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;バッチスクリプトの実行時にコマンドの入力行を非表示にする。これにより、実行中のコマンドがコンソールに表示されず、出力がすっきりする。&lt;/p&gt;&#10;&lt;h3 id="2-chcp-65001--nul"&gt;2. &lt;code&gt;chcp 65001 &amp;gt; nul&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;バッチスクリプトの文字コードを &lt;strong&gt;UTF-8（コードページ 65001）&lt;/strong&gt; に変更する。これにより、日本語のファイル名やメッセージが文字化けしにくくなる。&lt;br&gt;&#10;&lt;code&gt;&amp;gt; nul&lt;/code&gt; を付けることで、コードページ変更のメッセージを非表示にしている。&lt;/p&gt;&#10;&lt;h3 id="3-setlocal-enabledelayedexpansion"&gt;3. &lt;code&gt;setlocal enabledelayedexpansion&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;遅延環境変数展開を有効にする。&lt;br&gt;&#10;バッチスクリプトでは、通常の &lt;code&gt;set&lt;/code&gt; コマンドによる変数の値は即時展開されるため、&lt;code&gt;for&lt;/code&gt; ループの中で &lt;code&gt;set&lt;/code&gt; した変数を &lt;code&gt;!変数名!&lt;/code&gt; の形式で使うと、リアルタイムで値が展開されるようになる。&lt;br&gt;&#10;これにより、&lt;code&gt;for&lt;/code&gt; ループ内で &lt;code&gt;set&lt;/code&gt; した &lt;code&gt;folderPath&lt;/code&gt; や &lt;code&gt;folderName&lt;/code&gt; を適切に扱えるようになる。&lt;/p&gt;&#10;&lt;h3 id="4-set-sevenzipcprogram-files7-zip7zexe"&gt;4. &lt;code&gt;set &amp;quot;sevenZip=C:\Program Files\7-Zip\7z.exe&amp;quot;&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;7-Zip の実行ファイルのパスを変数 &lt;code&gt;sevenZip&lt;/code&gt; に格納する。&lt;br&gt;&#10;7-Zip をデフォルトの場所にインストールしていない場合は、ここを適切なパスに変更する必要がある。&lt;/p&gt;&#10;&lt;h3 id="5-for-f-in--do-"&gt;5. &lt;code&gt;for %%F in (%*) do (...)&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;バッチファイルにドラッグ＆ドロップされたすべてのフォルダを &lt;code&gt;for&lt;/code&gt; ループで処理する。&lt;br&gt;&#10;&lt;code&gt;%*&lt;/code&gt; はバッチスクリプトに渡されたすべての引数を表し、&lt;code&gt;%%F&lt;/code&gt; にフォルダのパスが順番に渡される。&lt;/p&gt;&#10;&lt;h3 id="6-if-exist-f"&gt;6. &lt;code&gt;if exist &amp;quot;%%~F&amp;quot;&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;フォルダが実際に存在するかを確認する。存在しない場合はスキップする。&lt;/p&gt;&#10;&lt;h3 id="7-set-folderpathdpf"&gt;7. &lt;code&gt;set &amp;quot;folderPath=%%~dpF&amp;quot;&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;%%~dpF&lt;/code&gt; を利用して、ドラッグ＆ドロップされたフォルダの&lt;strong&gt;親ディレクトリのパス&lt;/strong&gt;を取得する。&lt;/p&gt;&#10;&lt;h3 id="8-set-foldernamenxf"&gt;8. &lt;code&gt;set &amp;quot;folderName=%%~nxF&amp;quot;&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;%%~nxF&lt;/code&gt; を利用して、フォルダの&lt;strong&gt;名前のみ&lt;/strong&gt;を取得する。&lt;/p&gt;&#10;&lt;h3 id="9-sevenzip-a--tzip-folderpathfoldernamezip-f"&gt;9. &lt;code&gt;&amp;quot;%sevenZip%&amp;quot; a -tzip &amp;quot;!folderPath!!folderName!.zip&amp;quot; &amp;quot;%%~F\*&amp;quot;&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;7-Zip の &lt;code&gt;a&lt;/code&gt;（追加）コマンドを使用して ZIP ファイルを作成する。&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;-tzip&lt;/code&gt; : ZIP 形式で圧縮（&lt;code&gt;-t7z&lt;/code&gt; に変更すれば &lt;code&gt;.7z&lt;/code&gt; 形式で圧縮可能）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;!folderPath!!folderName!.zip&lt;/code&gt; : 出力する ZIP ファイルのフルパス（フォルダと同じディレクトリに作成）&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;&amp;quot;%%~F\*&amp;quot;&lt;/code&gt; : ZIP に含めるファイル（フォルダ内のすべてのファイル）&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="10-echo-すべての-zip-化が完了しました"&gt;10. &lt;code&gt;echo すべての ZIP 化が完了しました。&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;処理完了後にメッセージを表示する。&lt;/p&gt;&#10;&lt;h3 id="11-pause"&gt;11. &lt;code&gt;pause&lt;/code&gt;&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;pause&lt;/code&gt; を実行することで、スクリプト終了時に「続行するには何かキーを押してください&amp;hellip;」と表示され、ユーザーがキーを押すまでコンソールが閉じない。&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="使用方法"&gt;使用方法&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;上記のスクリプトを &lt;code&gt;zip_folders.bat&lt;/code&gt; という名前で保存&lt;/li&gt;&#10;&lt;li&gt;圧縮したいフォルダを複数選択し、バッチファイルにドラッグ＆ドロップ&lt;/li&gt;&#10;&lt;li&gt;各フォルダごとに ZIP ファイルが作成される&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="動作例"&gt;動作例&#10;&lt;/h2&gt;&lt;h3 id="-入力バッチファイルにドラッグドロップするフォルダ"&gt;📂 入力（バッチファイルにドラッグ＆ドロップするフォルダ）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;D:\Projects\FolderA\&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;D:\Projects\FolderB\&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;D:\Projects\FolderC\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="-出力zip-ファイル"&gt;🔽 出力（ZIP ファイル）&#10;&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;D:\Projects\FolderA.zip&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;D:\Projects\FolderB.zip&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;D:\Projects\FolderC.zip&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="カスタマイズ"&gt;カスタマイズ&#10;&lt;/h2&gt;&lt;h3 id="zip-ファイルの保存先を変更"&gt;ZIP ファイルの保存先を変更&#10;&lt;/h3&gt;&lt;p&gt;現在のスクリプトでは ZIP ファイルを&lt;strong&gt;元のフォルダと同じ場所に作成&lt;/strong&gt;するが、特定のフォルダに保存したい場合は、以下のように変更する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bat" data-lang="bat"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;outputPath=D:\Compressed&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;%sevenZip%&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; a -tzip &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;!outputPath!&lt;/span&gt;&lt;span class="s2"&gt;\!folderName!.zip&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;~F\*&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これにより、すべての ZIP ファイルが &lt;code&gt;D:\Compressed&lt;/code&gt; フォルダに保存される。&lt;/p&gt;&#10;&lt;h3 id="7z-形式で圧縮"&gt;7z 形式で圧縮&#10;&lt;/h3&gt;&lt;p&gt;ZIP 形式ではなく &lt;strong&gt;7z 形式&lt;/strong&gt; で圧縮したい場合は、以下のように変更する。&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bat" data-lang="bat"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;%sevenZip%&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; a -t7z &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;!folderPath!!folderName!&lt;/span&gt;&lt;span class="s2"&gt;.7z&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;%%&lt;/span&gt;&lt;span class="s2"&gt;~F\*&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#10;&lt;h2 id="注意点"&gt;注意点&#10;&lt;/h2&gt;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;7-Zip のインストールが必要&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;C:\Program Files\7-Zip\7z.exe&lt;/code&gt; に &lt;code&gt;7z.exe&lt;/code&gt; があることを確認する。&lt;/li&gt;&#10;&lt;li&gt;違う場所にインストールされている場合は、&lt;code&gt;set &amp;quot;sevenZip=...&amp;quot;&lt;/code&gt; を修正する。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;&lt;strong&gt;フォルダ名に &lt;code&gt;!&lt;/code&gt; &lt;code&gt;(&lt;/code&gt; &lt;code&gt;)&lt;/code&gt; などの特殊文字があると問題が発生する可能性&lt;/strong&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;setlocal enabledelayedexpansion&lt;/code&gt; の影響で &lt;code&gt;!&lt;/code&gt; を含むフォルダ名は正しく処理されない可能性がある。&lt;/li&gt;&#10;&lt;li&gt;必要ならフォルダ名の特殊文字を削除する処理を追加する。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;このバッチスクリプトを使用すると、エクスプローラーで&lt;strong&gt;複数のフォルダをドラッグ＆ドロップするだけで、それぞれのフォルダを個別に ZIP 化できる&lt;/strong&gt;。7-Zip のコマンドラインを活用することで、大量のフォルダを効率的に圧縮可能となる。&lt;/p&gt;&#10;</description></item><item><title>WSL2でMacのようにクリップボードを操作する方法</title><link>https://ai.hack-le.com/wsl2-mac-clipboard/</link><pubDate>Sun, 16 Jul 2023 00:52:55 +0900</pubDate><guid>https://ai.hack-le.com/wsl2-mac-clipboard/</guid><description>&lt;p&gt;Macだとpbcopyやpbpasteといったコマンドでクリップボードの内容をターミナル上で扱うことができて、これが非常に便利。Windowsでも同じことができないか、ChatGPT-4に聞いたところ非常にうまくいったので、ブログ記事としてまとめさせた。&lt;/p&gt;&#10;&lt;h2 id="イントロ"&gt;イントロ&#10;&lt;/h2&gt;&lt;p&gt;Windows Subsystem for Linux 2（WSL2）は、Windows上でLinuxを動作させることができる強力なツールです。しかし、Macユーザーが利用できる便利な&lt;code&gt;pbcopy&lt;/code&gt;と&lt;code&gt;pbpaste&lt;/code&gt;コマンドのような、クリップボードに直接アクセスする機能がデフォルトではありません。この記事では、WSL2でこれらのコマンドを模倣する方法を解説します。&lt;/p&gt;&#10;&lt;h2 id="windowsのクリップボードにコピー"&gt;Windowsのクリップボードにコピー&#10;&lt;/h2&gt;&lt;p&gt;WSL2からWindowsのクリップボードにコピーするには、Windows側の&lt;code&gt;clip.exe&lt;/code&gt;コマンドを利用します。例えば次のようにします:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;テキスト&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; clip.exe&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="windowsのクリップボードからペースト"&gt;Windowsのクリップボードからペースト&#10;&lt;/h2&gt;&lt;p&gt;逆に、WindowsのクリップボードからWSL2にペーストするには、&lt;code&gt;powershell.exe&lt;/code&gt;を利用します:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;powershell.exe -command &lt;span class="s1"&gt;&amp;#39;Get-Clipboard&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="コマンドを短くする"&gt;コマンドを短くする&#10;&lt;/h2&gt;&lt;p&gt;これらのコマンドは有用ですが、特にペーストの方は長く、打つのが面倒かもしれません。それを解決するために、&lt;code&gt;pbcopy&lt;/code&gt;と&lt;code&gt;pbpaste&lt;/code&gt;というエイリアスを定義します。&lt;/p&gt;&#10;&lt;h3 id="bashの場合"&gt;bashの場合&#10;&lt;/h3&gt;&lt;p&gt;bash シェルを使っている場合、&lt;code&gt;.bashrc&lt;/code&gt; ファイルに以下のエイリアスを追加します:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;pbcopy&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;clip.exe&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;alias&lt;/span&gt; &lt;span class="nv"&gt;pbpaste&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;powershell.exe -command Get-Clipboard&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;そして、ターミナルを再起動するか、以下のコマンドを実行して新しいエイリアスを利用可能にします:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これで、Macのように &lt;code&gt;pbcopy&lt;/code&gt; と &lt;code&gt;pbpaste&lt;/code&gt; コマンドを使用することができます。&lt;/p&gt;&#10;&lt;h3 id="fishの場合"&gt;fishの場合&#10;&lt;/h3&gt;&lt;p&gt;Fish shellでは、関数として定義して、&lt;code&gt;config.fish&lt;/code&gt;ファイルに保存することで、同様の機能を実現できます。&lt;/p&gt;&#10;&lt;p&gt;まず、Fish shellで新しい関数を作成します:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; -n &lt;span class="nv"&gt;$argv&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; clip.exe&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;end&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; pbpaste&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; powershell.exe -command &lt;span class="s1"&gt;&amp;#39;Get-Clipboard&amp;#39;&lt;/span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;end&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;次に、これらの関数を保存します。以下のコマンドは、作成した関数を &lt;code&gt;~/.config/fish/functions/&lt;/code&gt; ディレクトリに保存します：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;funcsave pbcopy&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;funcsave pbpaste&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;以上の手順で、&lt;code&gt;pbcopy&lt;/code&gt;と&lt;code&gt;pbpaste&lt;/code&gt;の機能をFish shellで使用できるようになります。新たなシェルセッションでもこれらの関数が使用可能になるよう、手動で定義するのではなく、&lt;code&gt;funcsave&lt;/code&gt; コマンドを使って保存することが重要です。&lt;/p&gt;&#10;&lt;h2 id="結論"&gt;結論&#10;&lt;/h2&gt;&lt;p&gt;これにより、WSL2でもMacのようにクリップボードを操作することが可能になります。この機能を利用すれば、シェルスクリプトやコマンドラインツールから直接クリップボードにアクセスすることができ、作業の効率を上げることができます。&lt;/p&gt;&#10;&lt;h2 id="寸評"&gt;寸評&#10;&lt;/h2&gt;&lt;p&gt;これでWSL2でも&lt;code&gt;pbcopy&lt;/code&gt;や&lt;code&gt;pbpaste&lt;/code&gt;といったコマンドを使えるようになった。pbcopyで一行改行ができるのが少し気になるが……。まぁでもこれは便利だね。&lt;/p&gt;&#10;&lt;p&gt;以下、質問した内容。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Macではpbcoyやpbpasteでクリップボードの内容をターミナルで利用できますが、WindowsのWSL2で同じようなことはできませんか&lt;/li&gt;&#10;&lt;li&gt;いいね。しかし、clip.exeはいいがペーストのほうはコマンドが長すぎる。&lt;/li&gt;&#10;&lt;li&gt;最高だ。完璧に&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;まちがって途中で送信してしまった&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="4"&gt;&#10;&lt;li&gt;それでは、この素晴らしい方法を、いつでも思い出して使えるように、あるいは他の人もできるように、ブログ記事としてまとめてくれ。&lt;/li&gt;&#10;&lt;li&gt;fishだとどうなる？&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;今回は記事の方もあまり手直ししていない。&lt;/p&gt;&#10;</description></item></channel></rss>