<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>WSL on AIによる技術記事 備忘録</title><link>https://ai.hack-le.com/tags/wsl/</link><description>Recent content in WSL on AIによる技術記事 備忘録</description><generator>Hugo -- gohugo.io</generator><language>ja</language><lastBuildDate>Sat, 22 Aug 2026 10:24:37 +0900</lastBuildDate><atom:link href="https://ai.hack-le.com/tags/wsl/index.xml" rel="self" type="application/rss+xml"/><item><title>WSL2でGo開発環境を構築する – パッケージ管理の選択肢と実践</title><link>https://ai.hack-le.com/wsl2%E3%81%A7go%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B-%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E7%AE%A1%E7%90%86%E3%81%AE%E9%81%B8%E6%8A%9E%E8%82%A2/</link><pubDate>Fri, 01 Aug 2025 04:33:23 +0900</pubDate><guid>https://ai.hack-le.com/wsl2%E3%81%A7go%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E3%82%92%E6%A7%8B%E7%AF%89%E3%81%99%E3%82%8B-%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E7%AE%A1%E7%90%86%E3%81%AE%E9%81%B8%E6%8A%9E%E8%82%A2/</guid><description>&lt;h2 id="前提環境"&gt;前提環境&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Windows 11/10 + WSL2&lt;/li&gt;&#10;&lt;li&gt;Ubuntu 22.04 LTS（WSL2上）&lt;/li&gt;&#10;&lt;li&gt;インターネット接続環境&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="goインストール方法の比較検討"&gt;Goインストール方法の比較検討&#10;&lt;/h2&gt;&lt;p&gt;WSL2上でGoの開発環境を構築する際、主に3つの選択肢がある。それぞれの特徴を理解した上で、適切な方法を選択することが重要である。&lt;/p&gt;&#10;&lt;h3 id="公式バイナリによるインストール"&gt;公式バイナリによるインストール&#10;&lt;/h3&gt;&lt;p&gt;Go公式サイトから直接バイナリをダウンロードして &lt;code&gt;/usr/local&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;# 最新版のダウンロード（例：go1.21.5）&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd /tmp&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz&#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;sudo rm -rf /usr/local/go&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz&#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;echo &amp;#39;export PATH=$PATH:/usr/local/go/bin&amp;#39; &amp;gt;&amp;gt; ~/.bashrc&#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;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この方法は確実性が高いものの、新しいバージョンがリリースされるたびに同じ作業を繰り返す必要がある。&lt;/p&gt;&#10;&lt;h3 id="ubuntu標準パッケージでのインストール"&gt;Ubuntu標準パッケージでのインストール&#10;&lt;/h3&gt;&lt;p&gt;&lt;code&gt;apt&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;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install golang-go&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ただし、Ubuntu 22.04の標準リポジトリに含まれるGoは1.18系と古く、最新の言語機能やライブラリが利用できない場合がある。&lt;/p&gt;&#10;&lt;h3 id="ppaを利用したインストール推奨"&gt;PPAを利用したインストール（推奨）&#10;&lt;/h3&gt;&lt;p&gt;Personal Package Archive（PPA）を使用することで、最新のGoを &lt;code&gt;apt&lt;/code&gt; で管理できる。具体的には &lt;code&gt;ppa:longsleep/golang-backports&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;sudo add-apt-repository ppa:longsleep/golang-backports&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install golang-go&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このPPAはSimon Eisenmann氏によって個人的に維持されており、Go公式Wikiでも推奨されている。通常のパッケージ更新の流れでGoも最新版に更新される利便性がある。&lt;/p&gt;&#10;&lt;h2 id="パッケージ管理ツールの選択理由"&gt;パッケージ管理ツールの選択理由&#10;&lt;/h2&gt;&lt;p&gt;現在のLinux環境では、従来の &lt;code&gt;apt&lt;/code&gt; に加えて &lt;code&gt;snap&lt;/code&gt; というパッケージ管理システムも選択肢として存在する。しかし、snapには以下の課題がある。&lt;/p&gt;&#10;&lt;p&gt;snapはCanonical社が開発した新しいパッケージ形式で、依存関係を含む自己完結型のパッケージを提供する。一見便利に思えるが、実際には起動速度の低下、メモリ使用量の増加、そしてSnapストアがCanonicalの独占管理下にあるという構造的な問題を抱えている。&lt;/p&gt;&#10;&lt;p&gt;Linux コミュニティでは「便利だが本質的ではない」という評価が一般的であり、特に開発環境のような基盤的なツールには従来のパッケージ管理を選択する開発者が多い。&lt;/p&gt;&#10;&lt;h2 id="実際のインストール手順"&gt;実際のインストール手順&#10;&lt;/h2&gt;&lt;p&gt;上記の検討を踏まえ、PPAを使用したインストールを実行する。&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;# PPAリポジトリの追加&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo add-apt-repository ppa:longsleep/golang-backports&#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;sudo apt update&#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;# Goのインストール&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install golang-go&#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;go version&#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;go version go1.21.5 linux/amd64&#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;Goの開発に必要なディレクトリ構造を作成し、環境変数を設定する。&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;# Go作業ディレクトリの作成&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p ~/go/{bin,src,pkg}&#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;echo &amp;#39;export GOPATH=$HOME/go&amp;#39; &amp;gt;&amp;gt; ~/.bashrc&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;echo &amp;#39;export PATH=$PATH:$GOPATH/bin&amp;#39; &amp;gt;&amp;gt; ~/.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;# 設定の反映&#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;# 環境確認&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go env GOPATH&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;go env GOROOT&#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;実際にGoプログラムをビルドして実行し、環境が正しく構築されていることを確認する。&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;# テスト用ディレクトリの作成&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir ~/go/src/hello&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cd ~/go/src/hello&#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 &amp;lt;&amp;lt; &amp;#39;EOF&amp;#39; &amp;gt; main.go&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;package main&#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;import &amp;#34;fmt&amp;#34;&#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;func main() {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; fmt.Println(&amp;#34;Hello, Go on WSL2!&amp;#34;)&#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;EOF&#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;go build&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./hello&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;正常に動作すれば &lt;code&gt;Hello, Go on WSL2!&lt;/code&gt; と出力される。&lt;/p&gt;&#10;&lt;h2 id="今後の運用"&gt;今後の運用&#10;&lt;/h2&gt;&lt;p&gt;PPAを使用している場合、Goのアップデートは通常のシステム更新で自動的に行われる。&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;# 定期的なシステム更新でGoも更新される&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この方法により、手動でのバージョン管理作業から解放され、常に最新の安定版を利用できる開発環境が維持される。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;WSL2上でのGo開発環境構築において、複数の選択肢がある中でPPAを利用する方法が実用性と保守性のバランスが取れている。個人管理のリポジトリに依存するリスクはあるものの、長期間の運用実績とGo公式の推奨により、実用的な選択肢として評価できる。&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><item><title>WSL2のUbuntuでPNGをWebPに変換する</title><link>https://ai.hack-le.com/wsl-png-web/</link><pubDate>Fri, 14 Jul 2023 00:11:50 +0900</pubDate><guid>https://ai.hack-le.com/wsl-png-web/</guid><description>&lt;p&gt;WSL2でImageMagickを使ってpngをwebpにしようとしたところ、エラーが出た。ChatGPT-4に聞いたところ、即座に適切な答えが返ってきて感動した。&lt;/p&gt;&#10;&lt;p&gt;なのでそれを記事にしてもらったところ、pngをwebpに変換するという、エラー対応よりも汎用的な記事になった。エラーメッセージも本文中にあるし、こちらのほうが記事としてもよさそう。やるなChatGPT。&lt;/p&gt;&#10;&lt;h2 id="イントロ"&gt;イントロ&#10;&lt;/h2&gt;&lt;p&gt;本記事では、Windows Subsystem for Linux (WSL2) 上の Ubuntu 環境で PNG 画像を WebP 形式に変換する方法を説明します。このプロセスは、ImageMagick の &lt;code&gt;convert&lt;/code&gt; コマンドと Google の &lt;code&gt;cwebp&lt;/code&gt; ツールを使用します。&lt;/p&gt;&#10;&lt;h2 id="必要なツールのインストール"&gt;必要なツールのインストール&#10;&lt;/h2&gt;&lt;p&gt;まずは必要なツールをインストールしましょう。今回は、画像変換ツールの ImageMagick と WebP エンコーダの &lt;code&gt;cwebp&lt;/code&gt; を使用します。&lt;/p&gt;&#10;&lt;p&gt;ImageMagick は以下のコマンドでインストールできます。&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;sudo apt-get update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install imagemagick&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;次に、WebP エンコーダの &lt;code&gt;cwebp&lt;/code&gt; をインストールします。&lt;code&gt;cwebp&lt;/code&gt; は libwebp パッケージの一部として提供されています。&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;sudo apt-get update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt-get install webp&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これで必要なツールのインストールは完了です。&lt;/p&gt;&#10;&lt;h2 id="画像の変換"&gt;画像の変換&#10;&lt;/h2&gt;&lt;p&gt;画像の変換は非常に簡単です。以下のように &lt;code&gt;convert&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;convert input.png output.webp&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ここで &lt;code&gt;input.png&lt;/code&gt; は変換したい PNG 画像のパス、&lt;code&gt;output.webp&lt;/code&gt; は出力する WebP 画像のパスを指定します。&lt;/p&gt;&#10;&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;convert-im6.q16: delegate failed `&amp;#39;cwebp&amp;#39; -quiet %Q &amp;#39;%i&amp;#39; -o &amp;#39;%o&amp;#39;&amp;#39; @ error/delegate.c/InvokeDelegate/1919.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このエラーは、&lt;code&gt;convert&lt;/code&gt; コマンドが &lt;code&gt;cwebp&lt;/code&gt; ツールを使おうとしたが見つからなかったために発生します。これは通常、&lt;code&gt;cwebp&lt;/code&gt; がシステムにインストールされていないか、パスが正しく設定されていないことを意味します。この問題は前述の手順で &lt;code&gt;cwebp&lt;/code&gt; をインストールすることで解決します。&lt;/p&gt;&#10;&lt;h2 id="まとめ"&gt;まとめ&#10;&lt;/h2&gt;&lt;p&gt;今回は、WSL2 の Ubuntu 環境で PNG 画像を WebP 形式に変換する方法を見てきました。必要なツールのインストールから、実際の画像変換、そして一般的なエラーの解決方法までを網羅しました。これにより、あなたのシステムでも WebP 画像の生成が可能になり、WebP の圧縮効率と品質の良さを最大限に活用することができます。&lt;/p&gt;&#10;&lt;h2 id="寸評"&gt;寸評&#10;&lt;/h2&gt;&lt;p&gt;速攻で解決して感動した。以下質問。&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;convertコマンドでpngをwebpに変換しようとしたら、エラーが出た。 convert-im6.q16: delegate failed `&amp;lsquo;cwebp&amp;rsquo; -quiet %Q &amp;lsquo;%i&amp;rsquo; -o &amp;lsquo;%o&amp;rsquo;&amp;rsquo; @ error/delegate.c/InvokeDelegate/1919.&lt;/li&gt;&#10;&lt;li&gt;WSL2のUbuntuで実行したところ、うまくいったよ。ありがとう。 備忘録のために、ここまでのことを、ブログの記事としてまとめてください。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;質問まったくしていない。&lt;/p&gt;&#10;&lt;p&gt;単一質問のシンプルなもので、ChatGPTが即座に答えてくれるうえに、コマンドなので誰でも評価できる以上、ブログ記事にする意味はあるのか？という疑義はあるが、自分の備忘録も兼ねているので。常にChatGPTが使える状況でもないし、ChatGPTもどうなるかわからないし。&lt;/p&gt;&#10;</description></item></channel></rss>