<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Orange&apos;s Blog</title><description>フロントエンドMemo Blog</description><link>https://orangevaper.dev/</link><language>ja</language><item><title>Netlifyで独自ドメインに移行したらSERVFAIL — 委任は正しく、DNSゾーンが無かった</title><link>https://orangevaper.dev/posts/netlify-custom-domain-servfail-refused/</link><guid isPermaLink="true">https://orangevaper.dev/posts/netlify-custom-domain-servfail-refused/</guid><description>ネームサーバーを変更したのに dig が SERVFAIL を返す。権威サーバーに直接聞くと status: REFUSED。レジストリの委任は正しいのに引けないのは、向き先にゾーンが無いから。あわせて、レジストラで保存したNSが標準に戻る件と、primary domainを設定しても netlify.app が301されない件も。</description><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import MyComment from &quot;@components/misc/MyComment.astro&quot;;&lt;/p&gt;
&lt;h2&gt;この記事が扱う症状&lt;/h2&gt;
&lt;p&gt;以下に心当たりがある人向けです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;レジストラでネームサーバーを変更したのに、ドメインが&lt;strong&gt;引けない&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dig&lt;/code&gt; が &lt;code&gt;status: SERVFAIL&lt;/code&gt; を返す&lt;/li&gt;
&lt;li&gt;権威サーバーに直接聞くと &lt;code&gt;status: REFUSED&lt;/code&gt; が返る&lt;/li&gt;
&lt;li&gt;なのに&lt;strong&gt;レジストリの委任は正しい4本が入っている&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;レジストラで保存したはずのカスタムネームサーバーが、&lt;strong&gt;いつの間にか標準に戻っている&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Netlify で primary domain を設定したのに、&lt;code&gt;*.netlify.app&lt;/code&gt; が &lt;strong&gt;200 を返し続ける&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Search Console でサイトマップを送信すると「&lt;strong&gt;サイトマップ アドレスが無効です&lt;/strong&gt;」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;結論から言うと、SERVFAIL の原因は &lt;strong&gt;Netlify 側に DNS ゾーンが作られていなかった&lt;/strong&gt;ことでした。ネームサーバーは正しく向いていて、向いた先が空っぽだった。&lt;/p&gt;
&lt;h2&gt;やろうとしたこと&lt;/h2&gt;
&lt;p&gt;Netlify の &lt;code&gt;*.netlify.app&lt;/code&gt; サブドメインで運用していたこのブログを、独自ドメインに移すだけの作業です。&lt;/p&gt;
&lt;p&gt;&amp;lt;MyComment&amp;gt;
このブログではまだnetlifyのサブドメインですが、ちゃんとドメイン買ったほうがいいかな。
&amp;lt;/MyComment&amp;gt;&lt;/p&gt;
&lt;p&gt;ドメインは Squarespace（旧 Google Domains）で &lt;code&gt;.dev&lt;/code&gt; を取得。DNS は Netlify DNS に任せる構成にしました。手順としては「レジストラでネームサーバーを Netlify のものに変える」だけのはずでした。&lt;/p&gt;
&lt;p&gt;実際には4回ハマりました。順番に書きます。&lt;/p&gt;
&lt;h2&gt;症状1: 委任は通っているのに SERVFAIL&lt;/h2&gt;
&lt;p&gt;ネームサーバーを &lt;code&gt;dns1〜4.p02.nsone.net&lt;/code&gt; に設定して保存。しばらく待ってから引いてみると、何も返ってきません。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ dig A orangevaper.dev @1.1.1.1
;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: SERVFAIL, id: 38097
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;「まだ伝播していないのだろう」と思いがちな場面ですが、&lt;strong&gt;SERVFAIL は伝播待ちの顔ではありません&lt;/strong&gt;。委任先が見つからないなら NXDOMAIN、委任が未反映ならそもそも古い応答が返ります。SERVFAIL は「委任先に聞きに行ったが、まともな答えが得られなかった」という意味です。&lt;/p&gt;
&lt;p&gt;そこで、公開リゾルバを信用せずに&lt;strong&gt;レジストリへ直接聞きます&lt;/strong&gt;。&lt;code&gt;.dev&lt;/code&gt; の TLD サーバーに &lt;code&gt;+norecurse&lt;/code&gt; で問い合わせると、レジストリに登録されている委任そのものが見えます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ dig NS orangevaper.dev @ns-tld1.charlestonroadregistry.com +norecurse

;; AUTHORITY SECTION:
orangevaper.dev.	10800	IN	NS	dns1.p02.nsone.net.
orangevaper.dev.	10800	IN	NS	dns2.p02.nsone.net.
orangevaper.dev.	10800	IN	NS	dns3.p02.nsone.net.
orangevaper.dev.	10800	IN	NS	dns4.p02.nsone.net.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;委任は&lt;strong&gt;正しく通っています&lt;/strong&gt;。レジストラ側の設定は問題なし。&lt;/p&gt;
&lt;p&gt;では向き先はどうか。権威サーバーに直接聞きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ for ns in dns1.p02.nsone.net dns2.p02.nsone.net dns3.p02.nsone.net dns4.p02.nsone.net
      dig SOA orangevaper.dev @$ns +norecurse
  end

dns1.p02.nsone.net     status: REFUSED
dns2.p02.nsone.net     status: REFUSED
dns3.p02.nsone.net     status: REFUSED
dns4.p02.nsone.net     status: REFUSED
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;4本とも &lt;strong&gt;REFUSED&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;REFUSED が意味すること&lt;/h3&gt;
&lt;p&gt;ここが分かれ目でした。3つのステータスは別物です。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ステータス&lt;/th&gt;
&lt;th&gt;意味&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;NXDOMAIN&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;そのゾーンは持っているが、その名前は存在しない&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SERVFAIL&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;問い合わせの過程で失敗した（DNSSEC 不整合、上流が無応答、など）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;REFUSED&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;そのゾーン自体をホストしていない&lt;/strong&gt;。答える立場にない&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;つまり NS1 は「orangevaper.dev なんて知らない」と言っています。ネームサーバーは向いているのに、&lt;strong&gt;向いた先にゾーンが存在しない&lt;/strong&gt;。だから公開リゾルバは委任をたどった先で門前払いされ、SERVFAIL を返していたわけです。&lt;/p&gt;
&lt;p&gt;原因は単純でした。&lt;strong&gt;Netlify で DNS ゾーンを作っていなかった。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Netlify は「サイトにカスタムドメインを追加する」のと「Netlify DNS のゾーンを作る」が&lt;strong&gt;別の操作&lt;/strong&gt;です。前者だけやってネームサーバーを向けても、NS1 側には何も無い。&lt;/p&gt;
&lt;p&gt;&amp;lt;MyComment&amp;gt;
ここのことですかね
&amp;lt;/MyComment&amp;gt;&lt;/p&gt;
&lt;p&gt;Domain management の &lt;code&gt;Add a domain&lt;/code&gt; → &lt;code&gt;Add a domain you already own&lt;/code&gt; でドメインを追加したあと、&lt;strong&gt;別途 &lt;code&gt;Set up Netlify DNS&lt;/code&gt; を実行する必要があります&lt;/strong&gt;。この2段構えが分かりにくい。&lt;/p&gt;
&lt;p&gt;ちなみにこの時点で Netlify の画面は「update your DNS records at your registrar」（レジストラで DNS レコードを更新してください）と案内してきます。これは &lt;strong&gt;Netlify DNS を使わず、レジストラの DNS に A レコードと CNAME を手で足す&lt;/strong&gt;前提の案内です。ネームサーバーをすでに NS1 に向けてしまっている場合、この案内どおりに動くと迷子になります。&lt;/p&gt;
&lt;h2&gt;症状2: 払い出されるネームサーバーはゾーンごとに違う&lt;/h2&gt;
&lt;p&gt;ゾーンを作ると、Netlify が4本のネームサーバーを表示します。ここで表示されたのは:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dns1.p04.nsone.net
dns2.p04.nsone.net
dns3.p04.nsone.net
dns4.p04.nsone.net
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;p02&lt;/code&gt; ではなく &lt;code&gt;p04&lt;/code&gt; でした。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;NS1 のネームサーバーは &lt;code&gt;pXX&lt;/code&gt; の部分がゾーンごとに割り当てられます。ドキュメントや他人のブログ記事に載っている値をそのままコピペすると、&lt;strong&gt;存在しないゾーンを指すことになる&lt;/strong&gt;。症状1で見た REFUSED は、まさにこれが重なっていた可能性もあります。&lt;/p&gt;
&lt;p&gt;ゾーンを作ったあと &lt;code&gt;p04&lt;/code&gt; に直接聞くと、ちゃんと答えが返ってきました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ dig A orangevaper.dev @dns1.p04.nsone.net +norecurse +short
52.74.6.109
13.215.239.219
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ゾーンは存在し、Netlify の A レコードも入っている。あとはレジストラ側を &lt;code&gt;p02&lt;/code&gt; から &lt;code&gt;p04&lt;/code&gt; に直すだけです。&lt;/p&gt;
&lt;h2&gt;症状3: 保存したはずのネームサーバーが標準に戻る&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;p04&lt;/code&gt; に入れ替えてもらって、確認します。&lt;/p&gt;
&lt;p&gt;&amp;lt;MyComment&amp;gt;
p04に入れ替えました、確認お願いします
&amp;lt;/MyComment&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ dig NS orangevaper.dev @ns-tld1.charlestonroadregistry.com +norecurse

orangevaper.dev.	10800	IN	NS	nsd1.squarespacedns.com.
orangevaper.dev.	10800	IN	NS	nsd2.squarespacedns.com.
orangevaper.dev.	10800	IN	NS	nsd3.squarespacedns.com.
orangevaper.dev.	10800	IN	NS	nsd4.squarespacedns.com.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;p04&lt;/code&gt; どころか &lt;code&gt;p02&lt;/code&gt; ですらなく、&lt;strong&gt;Squarespace の標準ネームサーバーに戻っていました&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;さらに厄介なことに、この状態では名前解決が&lt;strong&gt;成功します&lt;/strong&gt;。ただし返ってくるのは Squarespace のパーキング用 IP で、&lt;code&gt;www&lt;/code&gt; は &lt;code&gt;ext-sq.squarespace.com&lt;/code&gt; を向いている。「ドメインは生きているが、まったく別のところを指している」という、SERVFAIL より気づきにくい状態です。&lt;/p&gt;
&lt;p&gt;原因はレジストラの UI でした。ネームサーバーの設定画面には「Squarespace のネームサーバーを使う」と「カスタムネームサーバー」の切り替えがあり、&lt;strong&gt;カスタム側を明示的に選んだ状態で保存しないと標準に差し戻される&lt;/strong&gt;。保存直後の画面では入力した値が見えているので、成功したように錯覚します。&lt;/p&gt;
&lt;p&gt;入れ直してもらって、今度は通りました。&lt;/p&gt;
&lt;p&gt;&amp;lt;MyComment&amp;gt;
ちょっと手間取ったからｗどうでしょうか
&amp;lt;/MyComment&amp;gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ dig NS orangevaper.dev @ns-tld1.charlestonroadregistry.com +norecurse
orangevaper.dev.	10800	IN	NS	dns1.p04.nsone.net.
（以下 dns2〜4）

$ dig +short A orangevaper.dev @8.8.8.8
52.74.6.109
13.215.239.219
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;証明書も自動で発行され、&lt;code&gt;https://&lt;/code&gt; で開けるようになりました。&lt;code&gt;.dev&lt;/code&gt; は HSTS preload 済みで HTTPS 必須なので、証明書が出るまでは「繋がらない」ように見える点も覚えておくと焦らずに済みます。&lt;/p&gt;
&lt;h2&gt;症状4: primary domain を設定しても netlify.app は 301 されない&lt;/h2&gt;
&lt;p&gt;ここは&lt;strong&gt;私が説明を間違えた&lt;/strong&gt;ところです。&lt;/p&gt;
&lt;p&gt;Netlify で「primary domain を独自ドメインに設定すれば、旧 &lt;code&gt;*.netlify.app&lt;/code&gt; からは自動で 301 が張られる」と思っていました。実際に設定してもらって確認すると:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ curl -sSI &quot;https://oranges-blog.netlify.app/?cb=12345&quot;
HTTP/2 200
age: 0
cache-control: public,max-age=0,must-revalidate
server: Netlify
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;200 が返り続けます。&lt;/strong&gt; しかも &lt;code&gt;age: 0&lt;/code&gt;。CDN のキャッシュではなく origin から直接返ってきている、つまり仕様としてそうなっている。&lt;/p&gt;
&lt;p&gt;紛らわしいのは、&lt;code&gt;www&lt;/code&gt; → apex の 301 は&lt;strong&gt;ちゃんと効く&lt;/strong&gt;ことです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://www.orangevaper.dev/       -&amp;gt; 301  https://orangevaper.dev/
https://oranges-blog.netlify.app/  -&amp;gt; 200
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;答えは Netlify の管理画面自身が書いていました。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Your project is always accessible at a netlify.app subdomain&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;always&lt;/code&gt;。primary domain を何に設定しようと、netlify.app サブドメインは常に生き続けて内容を返します。これを放置すると、&lt;strong&gt;新旧2つの URL で同じ内容が配信される&lt;/strong&gt;＝重複コンテンツです。&lt;/p&gt;
&lt;p&gt;対策は &lt;code&gt;netlify.toml&lt;/code&gt; に自分で書きます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[[redirects]]
  from = &quot;https://oranges-blog.netlify.app/*&quot;
  to = &quot;https://orangevaper.dev/:splat&quot;
  status = 301
  force = true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;force = true&lt;/code&gt; が要ります。これが無いと、&lt;strong&gt;同じパスに静的ファイルが存在する場合はそちらが優先&lt;/strong&gt;されてリダイレクトが効きません。今回はまさに全パスにファイルが存在するので、付けないと何も起きません。&lt;/p&gt;
&lt;p&gt;なお &lt;code&gt;from&lt;/code&gt; にドメインを含むフルURLを書けるのは Netlify の仕様です。&lt;code&gt;deploy-preview-N--oranges-blog.netlify.app&lt;/code&gt; はホストが違うので、デプロイプレビューには影響しません。&lt;/p&gt;
&lt;p&gt;反映後:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;oranges-blog.netlify.app/                    -&amp;gt; 301  orangevaper.dev/
oranges-blog.netlify.app/posts/&amp;lt;slug&amp;gt;/       -&amp;gt; 301  orangevaper.dev/posts/&amp;lt;slug&amp;gt;/
oranges-blog.netlify.app/rss.xml             -&amp;gt; 301  orangevaper.dev/rss.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;パスもクエリも保持されます。RSS も転送されるので、旧 URL で購読していた人もそのまま追従します。&lt;/p&gt;
&lt;h3&gt;テーマが canonical を出していないと逃げ場がない&lt;/h3&gt;
&lt;p&gt;このブログが使っている Fuwari テーマは &lt;code&gt;&amp;lt;link rel=&quot;canonical&quot;&amp;gt;&lt;/code&gt; を出力していませんでした。canonical があれば「正規 URL はこっち」と伝えて重複を緩和できますが、それが無い以上、&lt;strong&gt;301 が唯一の防御&lt;/strong&gt;になります。&lt;/p&gt;
&lt;p&gt;移行前に自分のテーマが canonical を出しているか確認しておくと、判断が早くなります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ grep -o &apos;rel=canonical[^&amp;gt;]*&apos; dist/index.html
（何も出なければ未出力）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ビルド後の HTML が minify されていると属性のクォートが落ちるので、&lt;code&gt;rel=&quot;canonical&quot;&lt;/code&gt; で grep すると空振りします。これで一度「出ていない」と誤判定しかけました。&lt;/p&gt;
&lt;h2&gt;症状5: ドメインプロパティのサイトマップは完全URLが要る&lt;/h2&gt;
&lt;p&gt;最後は Search Console です。独自ドメインは Search Console 的には&lt;strong&gt;まったく別のサイト&lt;/strong&gt;なので、新規にプロパティを追加します。&lt;/p&gt;
&lt;p&gt;サブドメインもプロトコルもまとめて扱える&lt;strong&gt;ドメインプロパティ&lt;/strong&gt;を選びました。所有権の確認は apex の TXT レコードです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ dig +short TXT orangevaper.dev @8.8.8.8
&quot;google-site-verification=...&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Netlify DNS 側で TXT を足すとき、&lt;code&gt;Name&lt;/code&gt; は &lt;code&gt;@&lt;/code&gt; を入れます（空欄だと必須エラー、ドメイン名を入れると &lt;code&gt;orangevaper.dev.orangevaper.dev&lt;/code&gt; になって通りません）。&lt;/p&gt;
&lt;p&gt;&amp;lt;MyComment&amp;gt;
サイトマップですが、送信してないかも！
&amp;lt;/MyComment&amp;gt;&lt;/p&gt;
&lt;p&gt;所有権が通ったあと、サイトマップを送信しようとすると弾かれました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;サイトマップ アドレスが無効です
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;入力したのは &lt;code&gt;sitemap-index.xml&lt;/code&gt;。URL プレフィックスプロパティなら、入力欄の左にドメインが固定表示されていて相対パスで通ります。しかし&lt;strong&gt;ドメインプロパティには固定のプレフィックスが無い&lt;/strong&gt;（サブドメインもプロトコルも全部含むため）ので、完全な URL が必要です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;https://orangevaper.dev/sitemap-index.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで通りました。送信直後は「取得できませんでした」「検出されたページ数 0」と表示されますが、Google がまだ取りに来ていないだけです。&lt;/p&gt;
&lt;h2&gt;診断の型: dig を上から降りる&lt;/h2&gt;
&lt;p&gt;今回のハマりは全部、&lt;strong&gt;どの段で崩れているかを切り分ける&lt;/strong&gt;だけで原因が一意に決まりました。上から順に3段です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 1. レジストリに直接（委任そのものを見る。リゾルバのキャッシュを一切挟まない）
dig NS example.dev @ns-tld1.charlestonroadregistry.com +norecurse

# 2. 権威サーバーに直接（ゾーンが存在するか）
dig SOA example.dev @dns1.p04.nsone.net +norecurse

# 3. 公開リゾルバ（実際の利用者から見える姿）
dig A example.dev @1.1.1.1
&lt;/code&gt;&lt;/pre&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;どこで崩れたか&lt;/th&gt;
&lt;th&gt;原因&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1 が期待と違う&lt;/td&gt;
&lt;td&gt;レジストラの設定が反映されていない（保存できていない・標準に戻された）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 は正しいが 2 が REFUSED&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;委任先にゾーンが無い&lt;/strong&gt;。DNS ホスティング側でゾーン未作成、または NS の割り当てセット違い&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1・2 は正しいが 3 が古い&lt;/td&gt;
&lt;td&gt;本当に伝播待ち。待てば直る&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;+norecurse&lt;/code&gt; を付けるのが要点です。これが無いと問い合わせ先が勝手に再帰して、自分のキャッシュ越しの答えを返してくることがあります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.dev&lt;/code&gt; 以外の TLD なら、その TLD の権威サーバーを使います（&lt;code&gt;dig NS dev.&lt;/code&gt; のように引けば分かります）。&lt;/p&gt;
&lt;h2&gt;教訓&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. 「保存した」は「反映された」ではない。&lt;/strong&gt;
レジストラの管理画面は、保存に失敗しても入力値を表示し続けることがあります。信用すべきはレジストリの応答だけです。設定したら &lt;code&gt;dig&lt;/code&gt; でレジストリに直接聞く。これを最初からやっていれば、症状3は5分で気づけました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. REFUSED・SERVFAIL・NXDOMAIN は別物として読む。&lt;/strong&gt;
まとめて「引けない」で片付けると伝播待ちに見えてしまい、何時間でも待てます。REFUSED は「ゾーンが無い」という、待っても絶対に直らない種類のエラーです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. 管理画面の文言は仕様の宣言として読む。&lt;/strong&gt;
「Your project is always accessible at a netlify.app subdomain」は、親切な補足ではなく&lt;strong&gt;動作の定義&lt;/strong&gt;でした。期待した挙動が起きないときは、画面に書いてある英語を読み直すのが近道です。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;ドメイン移行の手順記事はたくさんありますが、今回踏んだ4つはどれも&lt;strong&gt;手順どおりに進めた結果として出てくる&lt;/strong&gt;ものでした。手順が正しいことと、期待どおりに動くことは別です。&lt;/p&gt;
</content:encoded></item><item><title>Ghosttyのcustom-shaderで文字が読めない — minimum-contrastが効かない理由と、背景だけに効かせるグリフマスク</title><link>https://orangevaper.dev/posts/ghostty-custom-shader-readability/</link><guid isPermaLink="true">https://orangevaper.dev/posts/ghostty-custom-shader-readability/</guid><description>Ghostty に custom-shader を入れたら背景は綺麗になったが文字が沈んで読めない。minimum-contrast を上げても変わらないのは、custom-shader が iChannel0 を受け取るポストプロセスだから。真犯人はシェーダーの合成方法で、直し方は輝度でグリフを判定して背景ピクセルにだけエフェクトを乗せること。</description><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import MyComment from &quot;@components/misc/MyComment.astro&quot;;&lt;/p&gt;
&lt;h2&gt;この記事が扱う症状&lt;/h2&gt;
&lt;p&gt;以下に心当たりがある人向けです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ghostty に &lt;code&gt;custom-shader&lt;/code&gt; を設定したら、背景は綺麗になったが&lt;strong&gt;文字が読めない&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;文字が微妙に波打つ、にじんで見える（&lt;code&gt;water.glsl&lt;/code&gt; 系のシェーダー）&lt;/li&gt;
&lt;li&gt;黒背景が灰色や緑に持ち上がって、コントラストが落ちる（&lt;code&gt;noise.glsl&lt;/code&gt; / &lt;code&gt;mnoise.glsl&lt;/code&gt; 系）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;minimum-contrast&lt;/code&gt; を上げても&lt;strong&gt;何も変わらない&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;dev.to の記事どおりに &lt;code&gt;noise.glsl&lt;/code&gt; を取ろうとすると 404 が返る&lt;/li&gt;
&lt;li&gt;config に &lt;code&gt;Transparency 14&lt;/code&gt; や &lt;code&gt;Blur ON&lt;/code&gt; と書いてあって、起動時にエラーになる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;結論を先に書きます。&lt;strong&gt;&lt;code&gt;custom-shader&lt;/code&gt; はポストプロセスです。&lt;/strong&gt; 描画済みのターミナル画面が &lt;code&gt;iChannel0&lt;/code&gt; として渡ってくるので、&lt;code&gt;minimum-contrast&lt;/code&gt; のようなターミナル側の設定はシェーダーより前に評価され、届きません。可読性を戻すならシェーダー側で、&lt;strong&gt;エフェクトを背景ピクセルにだけ乗せる&lt;/strong&gt;のが正解です。&lt;/p&gt;
&lt;h2&gt;前座: iTerm2のUI表記が混ざったconfig&lt;/h2&gt;
&lt;p&gt;そもそもの発端は、起動のたびに config のエラーが出ることでした。原因は2行です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Transparency 14
Blur ON
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;iTerm2 の設定画面の表記を、メモのつもりで書き写して行頭の &lt;code&gt;#&lt;/code&gt; を忘れたものでした。Ghostty の config は &lt;code&gt;key = value&lt;/code&gt; 形式しか受け付けず、&lt;code&gt;Transparency&lt;/code&gt; も &lt;code&gt;Blur&lt;/code&gt; も存在しないキーなので、そのまま読み込みエラーになります。透明度とブラーの実体は直後の &lt;code&gt;background-opacity&lt;/code&gt; / &lt;code&gt;background-blur&lt;/code&gt; が担っていたので、この2行はコメント化するだけで済みました。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;+validate-config&lt;/code&gt; が exit 0 で通るか、で確認できます。ここまでは前座です。&lt;/p&gt;
&lt;h2&gt;シェーダー背景を入れたら、文字が読めなくなった&lt;/h2&gt;
&lt;p&gt;config が直ったので、ついでにフラグメントシェーダーを背景にすることにしました。出典は &lt;code&gt;hackr-sh/ghostty-shaders&lt;/code&gt; です。&lt;/p&gt;
&lt;p&gt;ここで最初のつまずき。&lt;strong&gt;紹介記事にある &lt;code&gt;noise.glsl&lt;/code&gt; は、今このリポジトリに存在しません。&lt;/strong&gt; &lt;code&gt;mnoise.glsl&lt;/code&gt; にリネームされています（中身は simplex noise で、記事のスクショにあるオーロラ状の層はこれです）。raw の URL を叩いても 404 なので、記事のとおりに進めると最初のダウンロードで止まります。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mnoise.glsl&lt;/code&gt; と &lt;code&gt;water.glsl&lt;/code&gt; を取ってきて、config に追記しました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;custom-shader = shaders/mnoise.glsl
custom-shader = shaders/water.glsl
custom-shader-animation = true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;⌘⇧, （&lt;code&gt;reload_config&lt;/code&gt;）でリロード。オーロラと水面のリップルが両方出て、背景は狙いどおりになりました。そして&lt;strong&gt;文字が読めなくなりました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./shader-unreadable.jpg&quot; alt=&quot;mnoise.glsl と water.glsl を重ねた状態。背景は綺麗だが、文字が背景に沈んで読みにくい&quot; /&gt;&lt;/p&gt;
&lt;p&gt;雰囲気は最高です。ただ、左のファイルツリーもコメント行も、緑がかった帯に溶けかけています。これで一日コードを読む気にはなれません。&lt;/p&gt;
&lt;h2&gt;最初の処方は、外れだった&lt;/h2&gt;
&lt;p&gt;真っ先に出した処方は &lt;code&gt;minimum-contrast = 1.1&lt;/code&gt; でした。背景色に対して文字色を自動で持ち上げてくれる設定で、名前からして今回の症状にぴったりに見えます。&lt;/p&gt;
&lt;p&gt;入れて、リロードして、&lt;strong&gt;何も変わりませんでした。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;理由はシェーダーの立ち位置にあります。&lt;code&gt;custom-shader&lt;/code&gt; はポストプロセス、つまり&lt;strong&gt;ターミナルの描画がすべて終わったあとの画面を1枚の画像として受け取り&lt;/strong&gt;、加工して出力します。シェーダーの中の &lt;code&gt;iChannel0&lt;/code&gt; がその画面です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vec4 src = texture(iChannel0, uv);   // ← 描画済みのターミナル画面
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;一方 &lt;code&gt;minimum-contrast&lt;/code&gt; は、Ghostty が文字を描く段階で文字色と背景色を比較して働きます。&lt;strong&gt;シェーダーが後から背景を明るくした分は、その比較に入っていません。&lt;/strong&gt; 設定としては正しく効いているのに、効かせたい場所に届いていない。&lt;/p&gt;
&lt;p&gt;設定値が正しいのに現象が直らないときは、たいていこのパターンです。&lt;/p&gt;
&lt;h2&gt;真犯人は、シェーダーの合成方法だった&lt;/h2&gt;
&lt;p&gt;登場人物を見直すと、犯人はシェーダーの&lt;strong&gt;最後の1行&lt;/strong&gt;にいました。2本のシェーダーが、別々のやり方で可読性を削っていたのです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;mnoise.glsl&lt;/code&gt; — 加算合成&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fragColor = vec4(ghosttyCol.rgb + mix(col4, fcol, ...), ghosttyCol.a);
//                              ^ 加算
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ターミナルの色に足し算しています。黒背景が灰緑に持ち上がり、暗い文字色との差が潰れる。背景が明るくなるのではなく、&lt;strong&gt;画面全体が持ち上がる&lt;/strong&gt;のがポイントです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;water.glsl&lt;/code&gt; — UVずらし&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vec2 tc = vec2(cos(c)-0.75,sin(c)-0.75)*0.04;
uv = clamp(uv + tc,0.0,1.0);
fragColor = texture(iChannel0, uv);   // ← ずらした座標で画面をサンプリング
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;こちらは色ではなく&lt;strong&gt;サンプリング座標そのもの&lt;/strong&gt;をずらしています。水面感の正体はこれですが、&lt;code&gt;iChannel0&lt;/code&gt; には文字も入っているので、&lt;strong&gt;グリフごと歪みます。&lt;/strong&gt; 文字がゆらいで見えたのはこのせいでした。&lt;/p&gt;
&lt;p&gt;当座の処置として、&lt;code&gt;mnoise.glsl&lt;/code&gt; の加算量に &lt;code&gt;STRENGTH = 0.35&lt;/code&gt; を掛け、&lt;code&gt;water.glsl&lt;/code&gt; の &lt;code&gt;*0.04&lt;/code&gt; を &lt;code&gt;*0.01&lt;/code&gt; に下げました。これで読めるようにはなります。ただ、どちらも「効きすぎているエフェクトを薄める」だけの対症療法で、文字に手が及んでいる構造は変わっていません。&lt;/p&gt;
&lt;h2&gt;本命: グリフマスク&lt;/h2&gt;
&lt;p&gt;そこで、2本を捨てて1本書き直しました。方針はひとつだけです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;輝度でグリフを判定し、エフェクトを背景ピクセルにだけ乗せる。&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vec4 src = texture(iChannel0, uv);

// 輝度でグリフを判定する。bg = 1.0 が背景、0.0 が文字。
float lum = dot(src.rgb, vec3(0.299, 0.587, 0.114));
float bg  = 1.0 - smoothstep(GLYPH_LO, GLYPH_HI, lum);

...

// bg を掛けているので、文字の上にはプール色が乗らない
fragColor = vec4(src.rgb + pool * bg, src.a);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;dot(src.rgb, vec3(0.299, 0.587, 0.114))&lt;/code&gt; は輝度（明るさ）を出す定番の式です。暗ければ背景、明るければ文字。&lt;code&gt;smoothstep&lt;/code&gt; で境界をなだらかにしているので、アンチエイリアスの効いた文字の縁でも段差になりません。あとは &lt;code&gt;bg&lt;/code&gt; を掛けるだけで、エフェクトは文字を避けて背景にだけ乗ります。&lt;/p&gt;
&lt;p&gt;加えて &lt;strong&gt;UV ずらしを完全に廃止&lt;/strong&gt;しました。これで歪みの経路も消えます。「背景が持ち上がる」「グリフが波打つ」という2つの劣化要因が、両方なくなりました。&lt;/p&gt;
&lt;p&gt;背景側は水中の雰囲気を作る4要素で構成しています。コースティクス（水面から差し込む光の網）、水の色、深さによる減光、周辺減光。定数を頭にまとめて出してあるので、見た目はそこだけで振れます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const float SPEED            = 0.45;  // 水面の揺れる速さ
const float CAUSTIC_STRENGTH = 0.40;  // 光の網の濃さ
const float CAUSTIC_SHARP    = 10.0;  // 網の細さ
const float TINT_STRENGTH    = 0.35;  // 水の色の濃さ
const float DEPTH_STRENGTH   = 0.45;  // 下にいくほど暗くなる量
const float VIGNETTE         = 0.55;  // 周辺減光の強さ
const float GLYPH_LO         = 0.10;  // これ以下の輝度を背景とみなす
const float GLYPH_HI         = 0.30;  // これ以上の輝度を文字とみなす
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;./glyph-mask-pool.jpg&quot; alt=&quot;pool.glsl に差し替えた状態。背景は水中のまま、文字はくっきり読める&quot; /&gt;&lt;/p&gt;
&lt;p&gt;同じ「水の中」なのに、文字が背景から浮き上がっています。リロードして画面を見た本人の第一声が、この方式の説明として一番正確でした。&lt;/p&gt;
&lt;p&gt;&amp;lt;MyComment&amp;gt;
これは逆に、文字を浮き出して背景でプールを演出したんですね。&amp;lt;br /&amp;gt;
プール底面でテキストが揺れているのもいいけど、可読性優先でいいですね。
&amp;lt;/MyComment&amp;gt;&lt;/p&gt;
&lt;p&gt;そのとおりです。文字は Ghostty が描いたものがそのまま残り、背景だけが水になる。&lt;strong&gt;シェーダーで可読性を確保するのではなく、シェーダーを可読性の外に置く&lt;/strong&gt;、という考え方です。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;GLYPH_LO&lt;/code&gt; / &lt;code&gt;GLYPH_HI&lt;/code&gt; はカラースキームを変えたときだけ触る値です。明るい背景のテーマを使っているなら、判定を反転させる必要があります。&lt;/p&gt;
&lt;h2&gt;ついでに分かったこと: 透過している限り、鮮やかな色は出せない&lt;/h2&gt;
&lt;p&gt;仕上げに色を詰めているとき、こんな注文が出ました。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;車の中のアンビエントに使われるような彩度の青がいいかな&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;やってみて、出ませんでした。&lt;code&gt;WATER_TINT&lt;/code&gt; を青主軸に振り、輝度を保ったまま彩度を上げる &lt;code&gt;SATURATION&lt;/code&gt; ノブまで足しても、べったりした青になるだけで「ほぼ黒地に鮮やかな青が浮く」感じにならない。&lt;/p&gt;
&lt;p&gt;理由は透過です。&lt;code&gt;background-opacity = 0.85&lt;/code&gt; にしているので、シェーダーの出力はアルファ 0.85 のまま OS に渡され、&lt;strong&gt;デスクトップとの合成はシェーダーより後&lt;/strong&gt;で行われます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;最終画素 = 0.85 × シェーダー出力 + 0.15 × 壁紙
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;壁紙の明るい部分が 15% 混ざる。これは明度を上げるだけでなく、&lt;strong&gt;彩度も薄めます。&lt;/strong&gt; シェーダー側でいくら彩度を上げても、この 15% が白っぽさを混ぜ返してくる。背景に別の絵が透けている限り、原理的に「ほぼ黒地に鮮やかな色」は出せません。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;./saturation-fail.jpg&quot; alt=&quot;彩度を上げた版。青一色になり、コースティクスの陰影が潰れている&quot; /&gt;&lt;/p&gt;
&lt;p&gt;狙った色にならないどころか、&lt;code&gt;SATURATION&lt;/code&gt; が光の網まで青く染めてしまい、水面感の正体だった明暗差まで消えました。彩度版は結局そのまま破棄しました。元の青緑（&lt;code&gt;vec3(0.06, 0.30, 0.42)&lt;/code&gt;）は緑が乗っているぶん「水を通した光」に見えていて、そちらのほうが素直に綺麗だった、というオチです。&lt;/p&gt;
&lt;p&gt;なお、この手の試行錯誤は&lt;strong&gt;コミットせずに作業ツリーだけで試す&lt;/strong&gt;と、&lt;code&gt;git checkout -- shaders/pool.glsl&lt;/code&gt; 一発で気に入っていた状態に戻れます。見た目の調整はコミット粒度を細かくするより、この使い方のほうが合っていました。&lt;/p&gt;
&lt;h2&gt;教訓&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;設定が効かないときは、その設定が評価される「順番」を見る。&lt;/strong&gt; &lt;code&gt;minimum-contrast&lt;/code&gt; は正しく動いていました。ただ、シェーダーが背景を明るくするより前に仕事を終えていた。値を上げ下げして粘るのではなく、パイプラインのどこに挟まっているかを確認するのが早道です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ポストプロセスのシェーダーは、文字と背景を区別しない。&lt;/strong&gt; &lt;code&gt;iChannel0&lt;/code&gt; に入ってくるのは合成済みの1枚の画像で、そこに「ここは文字」という情報はありません。素直に書けば文字ごと加工されます。区別したいなら輝度なりで自分で判定するしかなく、逆に言えば&lt;strong&gt;判定さえすれば区別できます。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;個人ブログのシェーダー紹介記事は、リンク先のリネームまで面倒を見てくれない。&lt;/strong&gt; &lt;code&gt;noise.glsl&lt;/code&gt; → &lt;code&gt;mnoise.glsl&lt;/code&gt; のように、上流が動いている前提で読んだほうがいい。記事を疑う前に、まず今のリポジトリのファイル一覧を見るのが確実です。&lt;/p&gt;
</content:encoded></item><item><title>LazyVimの&lt;leader&gt;sgでgrepできない — 設定は正しく、足りないのはrg / fd / fzfの3本だった</title><link>https://orangevaper.dev/posts/lazyvim-leader-sg-grep-fzf/</link><guid isPermaLink="true">https://orangevaper.dev/posts/lazyvim-leader-sg-grep-fzf/</guid><description>LazyVim で &lt;leader&gt;sg を押しても grep できない。キーマップは Grep (Root Dir) に正しく割り当たっているのに動かないのは、検索の実体である外部バイナリが入っていないから。executable(&quot;fzf&quot;) = 0 や fzf not found が出るときの切り分けと、which rg が当てにならない理由。</description><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;この記事が扱う症状&lt;/h2&gt;
&lt;p&gt;以下に心当たりがある人向けです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LazyVim で &lt;code&gt;&amp;lt;leader&amp;gt;sg&lt;/code&gt;（Grep (Root Dir)）を押しても&lt;strong&gt;何も起きない&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;leader&amp;gt;ff&lt;/code&gt; のファイル検索も期待どおりに動かない&lt;/li&gt;
&lt;li&gt;fzf-lua が「fzf が無い」という趣旨のエラーを出す&lt;/li&gt;
&lt;li&gt;シェルで &lt;code&gt;which rg&lt;/code&gt; を叩くと&lt;strong&gt;反応が返ってくる&lt;/strong&gt;のに、nvim からは検索できない&lt;/li&gt;
&lt;li&gt;確認すると &lt;code&gt;fzf not found&lt;/code&gt; や &lt;code&gt;executable(&quot;fzf&quot;) = 0&lt;/code&gt; になっている&lt;/li&gt;
&lt;li&gt;キーマップを調べると&lt;strong&gt;正しく割り当たっている&lt;/strong&gt;ので余計に分からない&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;結論を先に書きます。&lt;strong&gt;原因は設定ではなく、外部バイナリの不在です。&lt;/strong&gt; LazyVim の検索まわりは Lua プラグインを入れただけでは動かず、&lt;code&gt;rg&lt;/code&gt;（ripgrep）・&lt;code&gt;fd&lt;/code&gt;・&lt;code&gt;fzf&lt;/code&gt; の 3 本が実体として必要です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install ripgrep fd fzf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;インストール後は &lt;strong&gt;nvim を再起動&lt;/strong&gt;してください。理由は後述します。&lt;/p&gt;
&lt;h2&gt;キーマップは生きていた&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;leader&amp;gt;sg&lt;/code&gt; で grep したいのにできない、というところから始まりました。まず疑ったのは自分の設定です。&lt;code&gt;~/.config/nvim&lt;/code&gt; を見ても、キーマップを潰すような記述はありません。&lt;/p&gt;
&lt;p&gt;nvim 自身に聞くのが早いので、割り当てを直接出しました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvim --headless -c &apos;lua local m = vim.fn.maparg(&quot;&amp;lt;leader&amp;gt;sg&quot;, &quot;n&quot;, false, true); print(m.lhs, m.desc)&apos; -c &apos;qa&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;Space&amp;gt;sg	Grep (Root Dir)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;設定は正しく入っていました。&lt;/strong&gt; &lt;code&gt;&amp;lt;Space&amp;gt;sg&lt;/code&gt; が &quot;Grep (Root Dir)&quot; に割り当たっている。つまりキーを押せば LazyVim の grep が呼ばれているはずで、なのに画面には何も出ない。&lt;/p&gt;
&lt;p&gt;ここが分かりにくいところです。LazyVim のキーマップは&lt;strong&gt;プラグインが読み込まれている限り常に存在します&lt;/strong&gt;。押しても無反応なとき、キーマップが死んでいるのか、呼ばれた先で失敗しているのかは、キーマップ側を見ても区別がつきません。&lt;/p&gt;
&lt;h2&gt;登場人物を数える&lt;/h2&gt;
&lt;p&gt;呼ばれた先で失敗しているなら、失敗しうるのは検索の実体です。nvim から見た外部コマンドの状態を出します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvim --headless -c &apos;lua print(&quot;rg&quot;, vim.fn.executable(&quot;rg&quot;), &quot;fd&quot;, vim.fn.executable(&quot;fd&quot;))&apos; -c &apos;qa&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;rg 0	fd 0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;executable()&lt;/code&gt; は「そのコマンドが実行可能か」を 1 / 0 で返します。&lt;strong&gt;両方 0&lt;/strong&gt;。ripgrep も fd も入っていませんでした。&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;which rg&lt;/code&gt; は当てにならなかった&lt;/h3&gt;
&lt;p&gt;ここで一度混乱しました。シェルで &lt;code&gt;which rg&lt;/code&gt; や &lt;code&gt;command -v rg&lt;/code&gt; を叩くと、&lt;strong&gt;反応が返ってくる&lt;/strong&gt;のです。入っているように見える。&lt;/p&gt;
&lt;p&gt;正体はこれでした。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rg () {
	local _cc_bin=&quot;${CLAUDE_CODE_EXECPATH:-}&quot;
	...
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Claude Code がシェルに定義している&lt;strong&gt;関数&lt;/strong&gt;で、実体のバイナリではありません。関数はそのシェルの中にしか存在しないので、nvim から見れば無いのと同じです。だから &lt;code&gt;executable(&quot;rg&quot;)&lt;/code&gt; は 0 のまま。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;シェルで見えるのに nvim で動かない&lt;/strong&gt;ときは、シェルに聞かず nvim に聞くのが確実です。ターミナルのプロンプトで確認した結果は、nvim の中の話の証拠になりません。&lt;/p&gt;
&lt;h2&gt;1回目の修理は、必要だったが足りなかった&lt;/h2&gt;
&lt;p&gt;ripgrep と fd を入れました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;brew install ripgrep fd
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;🍺  /opt/homebrew/Cellar/ripgrep/15.2.0
🍺  /opt/homebrew/Cellar/fd/10.5.0
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;nvim から見ても &lt;code&gt;rg: 1&lt;/code&gt; / &lt;code&gt;fd: 1&lt;/code&gt; に変わりました。設定ファイルは一切触っていないので、再起動すれば効くはずです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;それでも grep はできませんでした。&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;真犯人は3本目のバイナリ&lt;/h2&gt;
&lt;p&gt;決め手は調査ではなく、本人の一言でした。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;leader sgでgrepできません。fzfがないだとかエラーが表示されます。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;エラーが&lt;strong&gt;出ている&lt;/strong&gt;こと、そこに &lt;strong&gt;fzf&lt;/strong&gt; と書いてあること。この 2 つが分かった時点で残りは早かったです。&lt;/p&gt;
&lt;p&gt;LazyVim はどの picker を使うかを切り替えられます。設定と、実際に選ばれた結果を並べて出します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvim --headless -c &apos;lua print(vim.g.lazyvim_picker, LazyVim.pick.picker.name)&apos; -c &apos;qa&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;auto	fzf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;左が設定値、右が解決結果です。&lt;strong&gt;&lt;code&gt;auto&lt;/code&gt; のままだと、インストール済みのプラグインから fzf-lua が選ばれていました。&lt;/strong&gt; そして fzf-lua は、名前のとおり fzf のラッパーです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;which fzf
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;fzf not found
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;fzf&lt;/code&gt; バイナリだけ入っていませんでした。&lt;/strong&gt; ripgrep と fd は 1 回目で入れたのに、3 本目が残っていた。fzf-lua は Lua プラグインだけでは動かず、&lt;code&gt;fzf&lt;/code&gt; コマンド本体を呼びます。プラグインは lazy-lock.json に載っていて、更新もされていて、それでも動かない。&lt;/p&gt;
&lt;p&gt;3 本それぞれの役割はこうなっています。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;バイナリ&lt;/th&gt;
&lt;th&gt;効くところ&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rg&lt;/code&gt;（ripgrep）&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;sg&lt;/code&gt; の grep。中身の検索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;leader&amp;gt;ff&lt;/code&gt; のファイル検索&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fzf&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;picker が fzf-lua のときの絞り込み UI そのもの&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;直し方&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;brew install fzf
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;🍺  /opt/homebrew/Cellar/fzf/0.74.4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;nvim から見えるか確認します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvim --headless -c &apos;lua print(&quot;rg&quot;, vim.fn.executable(&quot;rg&quot;), &quot;fd&quot;, vim.fn.executable(&quot;fd&quot;), &quot;fzf&quot;, vim.fn.executable(&quot;fzf&quot;))&apos; -c &apos;qa&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;rg 1	fd 1	fzf 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;3 本とも 1 になりました。ここまで来たら &lt;code&gt;&amp;lt;leader&amp;gt;sg&lt;/code&gt; が動きます。&lt;/p&gt;
&lt;h3&gt;再起動が要る&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;インストール前から開いていた nvim では効きません。&lt;/strong&gt; fzf-lua はバイナリを起動時に探しますし、&lt;code&gt;executable()&lt;/code&gt; の結果もセッション内でキャッシュされます。&lt;code&gt;:Lazy reload&lt;/code&gt; では足りないので、&lt;code&gt;:qa&lt;/code&gt; で閉じて開き直すのが確実です。&lt;/p&gt;
&lt;h3&gt;brew の caveat は無視してよい&lt;/h3&gt;
&lt;p&gt;fzf を入れると Homebrew がこう言ってきます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;To use fzf in Vim, add the following line to your .vimrc:
  set rtp+=/opt/homebrew/opt/fzf
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これは &lt;strong&gt;Vim 本体から fzf を使う場合の話&lt;/strong&gt;で、fzf-lua には要りません。fzf-lua は &lt;code&gt;$PATH&lt;/code&gt; にあるバイナリを直接呼ぶだけなので、&lt;code&gt;~/.vimrc&lt;/code&gt; に何か足す必要はないです。&lt;/p&gt;
&lt;h3&gt;どうしても fzf を入れたくないなら&lt;/h3&gt;
&lt;p&gt;picker を変える手もあります。telescope.nvim も snacks.nvim も LazyVim には最初から入っているので、&lt;code&gt;lua/config/options.lua&lt;/code&gt; に 1 行足すだけで切り替わります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;vim.g.lazyvim_picker = &quot;telescope&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ただし telescope の grep も結局 ripgrep を呼ぶので、&lt;code&gt;rg&lt;/code&gt; は必要です。避けられるのは fzf だけです。&lt;/p&gt;
&lt;h2&gt;教訓&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;「設定が効かない」ときは、設定より先に依存バイナリを疑う。&lt;/strong&gt; LazyVim のキーマップはプラグインが読まれていれば常に存在します。押して無反応でも、それはキーマップが壊れている証拠にはなりません。設定ファイルを読み返すより、&lt;code&gt;executable()&lt;/code&gt; を叩くほうが早いです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;which&lt;/code&gt; は環境によって嘘をつく。&lt;/strong&gt; シェル関数、エイリアス、シェル固有の仕組みは、そのシェルの中にしかありません。判定は、それを使う当人に聞く。nvim の中の話なら nvim に聞く。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1 つ直して直らなくても、その修理が無駄だったとは限らない。&lt;/strong&gt; ripgrep と fd は実際に必要で、入れたのは正解でした。足りないものが 1 つとは限らないだけです。「直したのに直らない」と思ったら、さっきの修理を疑う前に、&lt;strong&gt;同じ種類の不足がまだ残っていないか&lt;/strong&gt;を数えたほうが早いことがあります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;そして、エラーメッセージを読めるのは画面の前にいる人だけです。&lt;/strong&gt; 今回いちばん効いた情報は「fzf がないというエラーが出ている」という一言でした。ログを掘るより早かったです。&lt;/p&gt;
</content:encoded></item><item><title>Claude Codeのログを数えたら、新しいMacの環境構築で自分は1,014文字しか打っていなかった</title><link>https://orangevaper.dev/posts/claude-code-session-log-1014-chars/</link><guid isPermaLink="true">https://orangevaper.dev/posts/claude-code-session-log-1014-chars/</guid><description>Claude Codeのセッションログは ~/.claude/projects/ に JSONL で完全に残っている。新しいMacをセットアップした日のログを全部数えたら、自分の入力は32回・1,014文字だった。ログの在り処、抽出のしかた、そして何が残り何が消えるか。</description><pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;ブログのネタを探して、自分のログを掘った&lt;/h2&gt;
&lt;p&gt;新しい MacBook Pro が届いた日、開発環境のセットアップをほとんど AI に任せました。ghostty を入れて、fish に切り替えて、Neovim が壊れて、直して。&lt;/p&gt;
&lt;p&gt;雑に進めたので記録を残していません。後になって「あのやり取り自体が記事になったのに」と悔やんでいたのですが、&lt;strong&gt;ログは残っていました。&lt;/strong&gt; それも完全な形で。&lt;/p&gt;
&lt;p&gt;そして掘り出したログを数えてみたら、自分が思っていたのとだいぶ違う数字が出てきました。&lt;/p&gt;
&lt;h2&gt;ログはどこにあるか&lt;/h2&gt;
&lt;p&gt;Claude Code は会話を JSONL で保存しています。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;~/.claude/projects/&amp;lt;作業ディレクトリのパスをハイフンにしたもの&amp;gt;/&amp;lt;uuid&amp;gt;.jsonl
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ホームディレクトリで作業していたなら &lt;code&gt;~/.claude/projects/-Users-&amp;lt;username&amp;gt;/&lt;/code&gt; です。1セッションが1ファイル。日付で探すならこう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;find ~/.claude/projects -name &quot;*.jsonl&quot; -newermt &quot;2026-09-14&quot; ! -newermt &quot;2026-09-15&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;中身は1行1イベントの JSON です。&lt;strong&gt;自分の発言、AI の応答、実行したコマンド、その実行結果まで全部&lt;/strong&gt;入っています。1セッションで 1.4MB ありました。&lt;/p&gt;
&lt;p&gt;そのままでは読めないので、発言とコマンドだけ抜き出すスクリプトを書いて整形しました。&lt;/p&gt;
&lt;h2&gt;数えた結果&lt;/h2&gt;
&lt;p&gt;9/14 の2セッション、合計3時間弱。結果がこれです。&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;自分の発言&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;32回 / 1,014文字&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI のツール実行&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;69回&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;原稿用紙2枚半です。この2枚半で、新品の Mac に Homebrew が入り、ghostty と fish と Neovim と lazygit が入り、デフォルトシェルが変わり、壊れたビルド環境が直っています。&lt;/p&gt;
&lt;h2&gt;全部載せます&lt;/h2&gt;
&lt;p&gt;片方のセッション（13発言・392文字）は、全文を貼れてしまう短さでした。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 1. [スクショ] このような感じでnvimがlazyvimを使えてないかもしれないです。
    まず、nvim .じゃなくて、vim .とエイリアスを設定してください。
 2. [スクショ] この問題を解決できますか？
 3. え、どういうことですか？
 4. さっき、ダウンロードしたかもしれない
 5. はい、実行してください
 6. 削除した、確認して
 7. OKだと思います。エラーが出なくなりました。
 8. confyUIをインストールしたいです。shell版がいいです。
    起動したらそのurlを貼り付けるとブラウザでみれるというやつ。
    インストール場所がどこがいいかがわかってないです。
 9. fishようの z をインストールして下さい。
10. macのキーボードを押しっぱなしで再入力のスピードアップを設定したいです。
11. いいえ、単にスピードが遅いので、カーソルの上下度か。
12. 最速の一つ手前に設定してもらえますか？
13. 今のままだとスピードが変わらなくないですか
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;「confyUI」と打ち間違えていますし、11番は文章になっていません。それでも通じています。&lt;/p&gt;
&lt;h2&gt;事件は72文字で決着していた&lt;/h2&gt;
&lt;p&gt;この13発言のうち、3番から7番までの5つ。&lt;strong&gt;合計72文字&lt;/strong&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;3. え、どういうことですか？          (12文字)
4. さっき、ダウンロードしたかもしれない  (18文字)
5. はい、実行してください            (11文字)
6. 削除した、確認して                (9文字)
7. OKだと思います。エラーが出なくなりました。 (22文字)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この72文字の裏で何が起きていたかというと、Neovim の tree-sitter がビルドできない問題の原因究明です。真犯人は Command Line Tools に紛れ込んでいた次期OS向けのベータSDKで、そのせいで Mac 上の C コンパイルが全滅していました（詳細は&lt;a href=&quot;/posts/treesitter-build-failure-beta-sdk/&quot;&gt;別記事&lt;/a&gt;に書きました）。&lt;/p&gt;
&lt;p&gt;自力なら半日は溶けていた種類の問題です。それが72文字。&lt;/p&gt;
&lt;h2&gt;ただし、4番だけは自分にしか出せなかった&lt;/h2&gt;
&lt;p&gt;面白いのはここです。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;さっき、ダウンロードしたかもしれない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;18文字。この一言が無ければ解決していません。&lt;/p&gt;
&lt;p&gt;原因の在り処まではAIが調べ切りましたが、「なぜ次期OSのSDKがこのマシンに居るのか」はインストール履歴を追っても出てきませんでした。&lt;strong&gt;新品の Mac が来て浮かれて、あちこちから何か入れた&lt;/strong&gt;という記憶は、本人の頭の中にしかない。&lt;/p&gt;
&lt;p&gt;1,014文字のうち、本当に自分にしか打てなかったのは、たぶんこの18文字だけです。残りは「はい、実行してください」でした。&lt;/p&gt;
&lt;h2&gt;何が残って、何が消えるか&lt;/h2&gt;
&lt;p&gt;ログを掘っていて気づいたことがもう一つあります。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;テキストは完全に残ります。&lt;/strong&gt; 発言もコマンドもその実行結果も。一方で、&lt;strong&gt;貼り付けたスクリーンショットは消えます。&lt;/strong&gt; 画像は &lt;code&gt;~/.claude/image-cache/&amp;lt;セッションID&amp;gt;/&lt;/code&gt; に置かれますが、古いセッションのものは残っていませんでした。&lt;/p&gt;
&lt;p&gt;9/14 に貼った4枚のターミナル画面は、もうありません。「no changes made」という一見失敗に見える出力をAIが「成功しています」と読み解いた場面など、画で見せたかったものが失われています。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;スクショを記事に使う可能性があるなら、貼る前に自分で保存しておく必要があります。&lt;/strong&gt; これは今回の一番実用的な教訓でした。&lt;/p&gt;
&lt;h2&gt;で、自分は何をしていたのか&lt;/h2&gt;
&lt;p&gt;数字を見た直後は、正直ちょっと笑ってしまいました。1,014文字。「はい、実行してください」の人。&lt;/p&gt;
&lt;p&gt;ただ、書き出してみると見え方が変わります。32回の発言のうち、判断を求められて答えているものが大半でした。消していいか、進めていいか、直ったかどうか。&lt;strong&gt;AIが自分で決められないこと&lt;/strong&gt;が、きれいに自分のところへ回ってきている。&lt;/p&gt;
&lt;p&gt;そして一番効いた18文字は、調べれば分かることではなく、&lt;strong&gt;自分しか知らないこと&lt;/strong&gt;でした。&lt;/p&gt;
&lt;p&gt;役割分担としては、たぶん正しい。打鍵数が少ないことを恥じる必要はないのだと思います。ただ、&lt;strong&gt;それを記録に残しておかないと後から何も語れなくなる&lt;/strong&gt;というのが、今回いちばん身に沁みたところでした。ログを漁って気づけたのは運が良かっただけです。&lt;/p&gt;
&lt;p&gt;あなたの &lt;code&gt;~/.claude/projects/&lt;/code&gt; にも、たぶん同じものが眠っています。一度数えてみると面白いですよ。&lt;/p&gt;
</content:encoded></item><item><title>tree-sitterのビルドが失敗する — 犯人はLazyVimではなくmacOSのベータSDKだった</title><link>https://orangevaper.dev/posts/treesitter-build-failure-beta-sdk/</link><guid isPermaLink="true">https://orangevaper.dev/posts/treesitter-build-failure-beta-sdk/</guid><description>nvim-treesitterのパーサーがビルドできず ld: tapi error: malformed file が出る。原因はLazyVimでもNeovimでもなく、Command Line Toolsに紛れ込んだ次期OS向けのベータSDK（MacOSX27.0.sdk）だった。切り分けの手順と直し方。</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;この記事が扱う症状&lt;/h2&gt;
&lt;p&gt;以下のいずれかに心当たりがある人向けです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Neovim / LazyVim で tree-sitter のパーサーがビルドできない&lt;/li&gt;
&lt;li&gt;nvim の画面に &lt;code&gt;Error during &quot;tree-sitter build&quot;&lt;/code&gt; と出る&lt;/li&gt;
&lt;li&gt;ビルドを手で再現すると &lt;code&gt;ld: tapi error: malformed file&lt;/code&gt; が出る&lt;/li&gt;
&lt;li&gt;&lt;code&gt;libSystem.B.tbd:4:20: error: unknown architecture&lt;/code&gt; が出る&lt;/li&gt;
&lt;li&gt;&lt;code&gt;xcrun --show-sdk-path&lt;/code&gt; が、使っている macOS より&lt;strong&gt;新しいバージョンの SDK&lt;/strong&gt; を返す&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;結論だけ先に書くと、&lt;strong&gt;Command Line Tools に次期OS向けのベータSDKが紛れ込んでいる&lt;/strong&gt;のが原因です。消せば直ります。&lt;/p&gt;
&lt;h2&gt;新しいMacで、いきなり詰まった&lt;/h2&gt;
&lt;p&gt;新しい MacBook Pro が届いた日のことです。会社で使っている dotfiles を持ち込んで、Homebrew で nvim を入れ、&lt;code&gt;~/.config/nvim&lt;/code&gt; に設定を置いて起動しました。&lt;/p&gt;
&lt;p&gt;LazyVim がプラグインを取りに行き、tree-sitter のパーサーをビルドし始めた、そこで止まりました。yaml のパーサーがビルドできない。&lt;/p&gt;
&lt;p&gt;新しいマシンで設定を移したばかりです。真っ先に疑うのは自分の設定でしょう。dotfiles の移し方を間違えたか、nvim のバージョンが違うか、LazyVim が新しい nvim に追いついていないか。実際、私も最初はそう思いました。&lt;/p&gt;
&lt;p&gt;結論から書くと、&lt;strong&gt;全部ハズレ&lt;/strong&gt;でした。&lt;/p&gt;
&lt;h2&gt;エラーの中身&lt;/h2&gt;
&lt;p&gt;パーサーのビルドを手で再現してみると、こう出ました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ld: tapi error: malformed file
/Library/Developer/CommandLineTools/SDKs/MacOSX27.0.sdk/usr/lib/libSystem.B.tbd:4:20: error: unknown architecture
clang: error: linker command failed with exit code 1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ここに nvim も LazyVim も tree-sitter も出てきません。出てくるのは &lt;code&gt;ld&lt;/code&gt;、つまり&lt;strong&gt;リンカ&lt;/strong&gt;です。C のコードを繋いで実行可能な形にする、コンパイラの最終工程。そこが転んでいる。&lt;/p&gt;
&lt;p&gt;ということは、これは nvim の問題ではなく、&lt;strong&gt;このMacでCのコンパイルが通らない&lt;/strong&gt;という問題です。tree-sitter はたまたま C をコンパイルするから巻き込まれただけで、被害者にすぎません。&lt;/p&gt;
&lt;h2&gt;真犯人&lt;/h2&gt;
&lt;p&gt;SDK の置き場を覗いて、犯人が見つかりました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ls /Library/Developer/CommandLineTools/SDKs/
MacOSX15.4.sdk
MacOSX26.5.sdk
MacOSX27.0.sdk     ← ???
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;SDK というのは、macOS 向けにコンパイルするための部品一式です。ヘッダファイルとライブラリの定義が入っていて、OS のバージョンごとに置かれます。&lt;/p&gt;
&lt;p&gt;このマシンの macOS は &lt;strong&gt;26.6.2&lt;/strong&gt;。なのに &lt;strong&gt;27.0&lt;/strong&gt; の SDK が居ます。まだ世に出ていないバージョンです。日付を見ると 8/31 でした。&lt;/p&gt;
&lt;p&gt;問題はここからです。&lt;code&gt;xcrun&lt;/code&gt; は&lt;strong&gt;一番バージョンの高い SDK を自動的に選びます&lt;/strong&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ xcrun --show-sdk-path
/Library/Developer/CommandLineTools/SDKs/MacOSX27.0.sdk
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;27.0 が一つ居るだけで、このマシンの C コンパイルは全部そっちを向く。ところが Command Line Tools 本体のバージョンは 26.6.0 で、その中のリンカは 27.0 の &lt;code&gt;.tbd&lt;/code&gt; ファイル（ライブラリの定義を書いたテキスト形式のファイル）を解釈できません。それが &lt;code&gt;tapi error: malformed file&lt;/code&gt; と &lt;code&gt;unknown architecture&lt;/code&gt; の正体でした。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;未来の部品に、現在の工具を当てていた。&lt;/strong&gt; 噛み合うはずがありません。&lt;/p&gt;
&lt;h2&gt;決め手は、ログに残っていない情報だった&lt;/h2&gt;
&lt;p&gt;面白かったのはこの後です。&lt;/p&gt;
&lt;p&gt;原因は分かった。しかし「なぜ次期OSのSDKがここに居るのか」は、マシンを調べても分かりませんでした。インストール履歴を追っても決定的なことは出てこない。&lt;/p&gt;
&lt;p&gt;決め手になったのは、私の記憶でした。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;さっき、ダウンロードしたかもしれない&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;新しい Mac が来て浮かれて、あちこちから色々入れていたのです。そのどれかがベータの Command Line Tools を連れてきていた。&lt;/p&gt;
&lt;p&gt;これ、&lt;strong&gt;どれだけログを漁っても出てこない情報&lt;/strong&gt;です。「そういえばさっき何か入れた気がする」は、本人の頭の中にしかない。エラーメッセージの読解は外注できても、これだけは外注できません。&lt;/p&gt;
&lt;h2&gt;直し方&lt;/h2&gt;
&lt;p&gt;ベータSDKを消して、シンボリックリンクも一緒に片付けます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo rm -rf /Library/Developer/CommandLineTools/SDKs/MacOSX27.0.sdk \
            /Library/Developer/CommandLineTools/SDKs/MacOSX27.sdk
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;消した後、&lt;code&gt;xcrun&lt;/code&gt; が正気に戻りました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ xcrun --show-sdk-path
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
$ xcrun --show-sdk-version
26.5
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この状態で tree-sitter のビルドを流すと、あっさり通りました。LazyVim 側は何も触っていません。&lt;/p&gt;
&lt;h2&gt;教訓&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;エラーメッセージに出てくる登場人物を見る。&lt;/strong&gt; 今回 &lt;code&gt;ld&lt;/code&gt; と &lt;code&gt;SDK&lt;/code&gt; は出てきましたが、&lt;code&gt;nvim&lt;/code&gt; も &lt;code&gt;lazy.nvim&lt;/code&gt; も一度も出てきませんでした。それなのに「LazyVim が壊れた」と思い込んでいた。出てこないものを疑って時間を溶かすのは、よくある失敗です。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;新しいMacほど、環境が汚れていないとは限らない。&lt;/strong&gt; むしろ届いた初日にあれこれ入れるので、身に覚えのないものが紛れ込むのはこのタイミングです。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;xcrun --show-sdk-path&lt;/code&gt; は、Macでビルドが謎に転んだ時の最初の一手として覚えておく価値があります。&lt;/strong&gt; 一行で「今どの部品を使おうとしているか」が分かります。&lt;/p&gt;
&lt;p&gt;ちなみにこの切り分け、全部で10分ほどでした。自力でやっていたら、まず LazyVim の設定を疑い、nvim を入れ直し、Homebrew を疑い、半日は溶かしていたと思います。&lt;/p&gt;
</content:encoded></item><item><title>Astro と Next.js 比較：パフォーマンスの違いとそのメカニズム</title><link>https://orangevaper.dev/posts/astro-vs-nextjs-performance-comparison/</link><guid isPermaLink="true">https://orangevaper.dev/posts/astro-vs-nextjs-performance-comparison/</guid><description>モダンウェブ開発フレームワークであるAstroとNext.jsのパフォーマンスの違いを解説します。アイランドアーキテクチャとハイドレーションのメカニズムから、なぜAstroがより高速なパフォーマンスを実現できるのかを詳しく解説します。</description><pubDate>Tue, 22 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Astro と Next.js 比較：パフォーマンスの違いとそのメカニズム&lt;/h1&gt;
&lt;h2&gt;はじめに&lt;/h2&gt;
&lt;p&gt;モダンウェブ開発において、パフォーマンスは非常に重要な要素です。特に E コマースサイトでは、わずか 100 ミリ秒の読み込み時間の違いがコンバージョン率に影響するとされています。この記事では、最新のフレームワークである Astro と一般的に使用されている Next.js のパフォーマンスの違いを解説します。&lt;/p&gt;
&lt;h2&gt;ハイドレーションの仕組みとその影響&lt;/h2&gt;
&lt;h3&gt;Next.js のハイドレーションモデル&lt;/h3&gt;
&lt;p&gt;Next.js では、サーバーサイドレンダリング（SSR）によって HTML が生成されクライアントに送信されますが、その後クライアント側で「&lt;strong&gt;ハイドレーション&lt;/strong&gt;」と呼ばれるプロセスが発生します。&lt;/p&gt;
&lt;p&gt;このハイドレーションプロセスは以下のように機能します：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;サーバーから初期 HTML が送信される&lt;/li&gt;
&lt;li&gt;クライアント側で JavaScript がロードされる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ReactDOM.hydrate()&lt;/code&gt; が実行され、&lt;code&gt;document.getElementById(&apos;__next&apos;)&lt;/code&gt; などで DOM 要素を特定&lt;/li&gt;
&lt;li&gt;React のコンポーネントツリーが再構築され、イベントリスナーが取り付けられる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;重要なポイント&lt;/strong&gt;: Next.js では、ページ全体が一括でハイドレーションされます。つまり、静的なコンテンツ部分も含めて全てのコンポーネントが JavaScript によって管理される状態になります。これが初期表示速度に影響を与える主な原因です。&lt;/p&gt;
&lt;h3&gt;Astro のアイランドアーキテクチャ&lt;/h3&gt;
&lt;p&gt;一方、Astro は「&lt;strong&gt;アイランドアーキテクチャ&lt;/strong&gt;」と呼ばれる新しいアプローチを採用しています。これは以下のような特徴を持ちます：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ページの大部分は純粋な静的 HTML として配信（JavaScript なし）&lt;/li&gt;
&lt;li&gt;インタラクティブな要素（「アイランド」）のみが選択的にハイドレーションされる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;client:load&lt;/code&gt;、&lt;code&gt;client:visible&lt;/code&gt; などのディレクティブを使用して、いつ/どのようにコンポーネントをハイドレーションするか細かく制御できる&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;例えば、以下のようなコードでは：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;header&amp;gt;静的なヘッダー部分&amp;lt;/header&amp;gt;

&amp;lt;ProductSlider client:load /&amp;gt;

&amp;lt;footer&amp;gt;静的なフッター部分&amp;lt;/footer&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;ProductSlider&lt;/code&gt; コンポーネントだけが JavaScript によってハイドレーションされ、ヘッダーとフッターは純粋な HTML のままです。&lt;/p&gt;
&lt;h2&gt;パフォーマンスの違い&lt;/h2&gt;
&lt;h3&gt;JavaScript ペイロードの削減&lt;/h3&gt;
&lt;p&gt;Astro のアプローチでは、必要最小限の JavaScript だけがクライアントに送信されます。これにより：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ダウンロードする JavaScript の量が大幅に削減される&lt;/li&gt;
&lt;li&gt;パースと実行にかかる時間が短縮される&lt;/li&gt;
&lt;li&gt;特にモバイルデバイスでの読み込み時間が改善される&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;インタラクティブになるまでの時間&lt;/h3&gt;
&lt;p&gt;Next.js では、ページ全体のハイドレーションが完了するまで完全にインタラクティブにはなりません。一方、Astro では：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;静的コンテンツはすぐに表示され操作可能&lt;/li&gt;
&lt;li&gt;インタラクティブな要素のみが必要に応じてハイドレーションされる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;client:visible&lt;/code&gt; などのディレクティブを使用すれば、画面に表示されたときだけハイドレーションを行うことも可能&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;実装の違い&lt;/h2&gt;
&lt;h3&gt;Next.js のアプローチ&lt;/h3&gt;
&lt;p&gt;Next.js では、全てのページコンポーネントは基本的に React コンポーネントとして実装されます。サーバーサイドレンダリングにより初期 HTML が生成されますが、クライアント側での完全なハイドレーションが前提となります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// Next.jsの例
export default function ProductPage({ product }) {
  return (
    &amp;lt;div&amp;gt;
      &amp;lt;Header /&amp;gt;
      &amp;lt;ProductDetails product={product} /&amp;gt;
      &amp;lt;RelatedProducts products={product.related} /&amp;gt;
      &amp;lt;Footer /&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この場合、静的な要素（ヘッダーやフッターなど）も含めて全体が JavaScript でハイドレーションされます。&lt;/p&gt;
&lt;h3&gt;Astro のアプローチ&lt;/h3&gt;
&lt;p&gt;Astro では、基本的に&lt;code&gt;.astro&lt;/code&gt;ファイルは静的 HTML として出力され、必要な部分のみをインタラクティブにすることができます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
// .astroファイルのフロントマター部分
import Header from &apos;../components/Header.astro&apos;;
import Footer from &apos;../components/Footer.astro&apos;;
import ProductDetails from &apos;../components/ProductDetails.jsx&apos;;
import RelatedProducts from &apos;../components/RelatedProducts.jsx&apos;;

const { product } = Astro.props;
---

&amp;lt;Header /&amp;gt;
&amp;lt;ProductDetails client:load product={product} /&amp;gt;
&amp;lt;RelatedProducts client:visible products={product.related} /&amp;gt;
&amp;lt;Footer /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この例では：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ヘッダーとフッターは純粋な静的 HTML として出力される&lt;/li&gt;
&lt;li&gt;商品詳細はページ読み込み時にハイドレーションされる&lt;/li&gt;
&lt;li&gt;関連商品は画面に表示されたときにのみハイドレーションされる&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Astro のアイランドアーキテクチャは、特に初期表示速度が重要な E コマースサイトなどで大きなメリットをもたらす可能性があります。必要な部分だけをインタラクティブにすることで、JavaScript のオーバーヘッドを最小限に抑え、ユーザー体験を向上させることができます。&lt;/p&gt;
&lt;p&gt;Next.js は SPA（シングルページアプリケーション）としての柔軟性が高く、全体を JavaScript で制御したい場合に適していますが、そのトレードオフとして初期表示のパフォーマンスが犠牲になる可能性があります。&lt;/p&gt;
&lt;p&gt;両者のアプローチを理解し、プロジェクトの要件に合わせて適切な技術を選択することが重要です。特にパフォーマンスが重視されるプロジェクトでは、Astro のアイランドアーキテクチャは検討する価値のある選択肢と言えるでしょう。&lt;/p&gt;
</content:encoded></item><item><title>LazyVimプラグイン更新レポート - 2025年4月版</title><link>https://orangevaper.dev/posts/lazyvim-plugin-updates/2025-04/</link><guid isPermaLink="true">https://orangevaper.dev/posts/lazyvim-plugin-updates/2025-04/</guid><description>LazyVimとNeovimプラグインの最新アップデート情報と重要な変更点をまとめました。</description><pubDate>Wed, 09 Apr 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;LazyVim プラグイン更新レポート - 2025 年 4 月版&lt;/h1&gt;
&lt;p&gt;今回は LazyVim で&lt;code&gt;&amp;lt;leader&amp;gt; l&lt;/code&gt;（Log コマンド）を実行して表示される最新の更新内容を基に、重要な変更点や新機能について AI でまとめました。その内容のメモになります。
こういったメモは後から自分でも見返すと勉強になるので、今後もシリーズ化していくと思います。&lt;/p&gt;
&lt;h2&gt;更新されたプラグインの役割&lt;/h2&gt;
&lt;p&gt;まず、今回更新されたプラグインがどのような役割を持っているのか簡単に説明します：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;blink.cmp&lt;/strong&gt;: コード補完エンジン - 入力中にコード候補を表示し選択できる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nvim-lspconfig&lt;/strong&gt;: 言語サーバープロトコル(LSP)設定 - コード解析、補完、定義ジャンプなどの機能を提供&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nvim-treesitter&lt;/strong&gt;: 構文解析ツール - 高度なシンタックスハイライトやコード構造の理解を可能に&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;fzf &amp;amp; fzf-lua&lt;/strong&gt;: ファジーファインダー - ファイル/テキスト検索を高速に行える&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;neo-tree.nvim&lt;/strong&gt;: ファイルエクスプローラ - ファイルシステムの閲覧と操作&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mini.pairs&lt;/strong&gt;: 自動ペアリング - 括弧やクォートを自動で閉じる&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mini.ai&lt;/strong&gt;: テキストオブジェクト拡張 - コード構造に基づいたテキスト選択の強化&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mini.icons&lt;/strong&gt;: アイコン表示 - ファイルタイプなどに応じたアイコンの提供&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;gitsigns.nvim&lt;/strong&gt;: Git 変更表示 - 行の変更状態をエディタ内に表示&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;更新の概要&lt;/h2&gt;
&lt;p&gt;今回の更新では、合計 48 個のプラグインのうち、15 個が更新され、9 個がクリーンアップされました。特に注目すべき変更がいくつかあります。&lt;/p&gt;
&lt;h3&gt;Breaking Changes&lt;/h3&gt;
&lt;p&gt;Breaking Changes のカウントが 3 から 4 に増加しました。主な変更点は以下の通りです：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;mini.icons&lt;/strong&gt;, &lt;strong&gt;mini.ai&lt;/strong&gt;, &lt;strong&gt;mini.pairs&lt;/strong&gt;などの mini シリーズプラグインが Neovim 0.9 未満のサポートを非推奨に&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nvim-lspconfig&lt;/strong&gt;が Neovim 0.10 以上を必須に&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;blink.cmp&lt;/strong&gt;のいくつかの API が変更&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;主要プラグインの更新内容&lt;/h2&gt;
&lt;h3&gt;blink.cmp (v1.1.1)&lt;/h3&gt;
&lt;p&gt;補完エンジンの「blink.cmp」には多くの改善が加えられました：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;バージョン 1.1.1 へのアップデート&lt;/li&gt;
&lt;li&gt;メニュー描画時のハイライト優先度のサポート&lt;/li&gt;
&lt;li&gt;ゴーストテキスト表示時のタブでのメニュー表示機能&lt;/li&gt;
&lt;li&gt;マルチバイト文字のメニュー位置の修正&lt;/li&gt;
&lt;li&gt;トリガー文字に関する複数の修正&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;nvim-lspconfig&lt;/h3&gt;
&lt;p&gt;言語サーバープロトコル設定プラグインの更新：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Neovim 0.10 以上が必要になりました&lt;/li&gt;
&lt;li&gt;複数の非推奨関数の廃止予告&lt;/li&gt;
&lt;li&gt;新しい LSP サーバーのサポート追加：bqls, rpmspec, just など&lt;/li&gt;
&lt;li&gt;Svelte 5 へ移行するためのコマンドを追加&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;nvim-treesitter&lt;/h3&gt;
&lt;p&gt;構文解析プラグインの更新：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;新しいパーサー（caddy, javadoc）の追加&lt;/li&gt;
&lt;li&gt;Python, Svelte, DHall など複数の言語のハイライト機能の改善&lt;/li&gt;
&lt;li&gt;YAML ファイルでの Taskfile の Bash 挿入サポート&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;fzf &amp;amp; fzf-lua&lt;/h3&gt;
&lt;p&gt;ファジーファインダーの更新：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fzf が 0.61.1 にアップデート&lt;/li&gt;
&lt;li&gt;新しいフラグと機能の追加&lt;/li&gt;
&lt;li&gt;fzf-lua が複数のプロファイルをサポート&lt;/li&gt;
&lt;li&gt;バッファ範囲検索機能の追加&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;neo-tree.nvim&lt;/h3&gt;
&lt;p&gt;ファイルエクスプローラの更新：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;大きなディレクトリからのすべてのファイル読み込みの修正&lt;/li&gt;
&lt;li&gt;ファジーファインダーの閉じるコマンドの追加&lt;/li&gt;
&lt;li&gt;ウィンドウ幅の復元機能の修正&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;mini.pairs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;マルチバイト文字のペアサポートが追加&lt;/li&gt;
&lt;li&gt;コード最適化と修正&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;全体的な改善&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;パフォーマンス&lt;/strong&gt;：いくつかのプラグインで処理速度の向上が見られます&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;バグ修正&lt;/strong&gt;：多くの小さなバグが修正されています&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;互換性&lt;/strong&gt;：Neovim 0.10 および 0.11 との互換性が向上&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;更新後の注意点&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Neovim のバージョン確認&lt;/strong&gt;：一部のプラグインは Neovim 0.10 以上を要求するようになりました&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;設定の見直し&lt;/strong&gt;：Breaking Changes がある場合、関連する設定の見直しが必要かもしれません&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;新機能の活用&lt;/strong&gt;：追加された機能を積極的に活用することで、編集効率が向上します&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;今回の更新では、多くのバグ修正と機能追加がありました。特に blink.cmp の改善と nvim-treesitter の新しいパーサー追加は、日常的な編集作業を快適にしてくれるでしょう。LazyVim とそのプラグインは着実に進化を続けており、定期的な更新を行うことで、最新の機能を活用することができます。&lt;/p&gt;
&lt;p&gt;現在私が使っている Neovim のバージョンは &lt;code&gt;NVIM v0.10.5-dev-19+gc5eeb1b9ee&lt;/code&gt; で、更新されたすべてのプラグインと互換性があります。バージョン 0.10 以上を要求するようになった nvim-lspconfig も問題なく動作しています。&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;定期的に &lt;code&gt;&amp;lt;leader&amp;gt; l&lt;/code&gt; でログを確認し、更新を行うことをおすすめします。これにより、最新の機能改善とバグ修正を常に利用できるようになります。&lt;/p&gt;
</content:encoded></item><item><title>Astroのデプロイ方法比較ガイド</title><link>https://orangevaper.dev/posts/how-to-deploy-astro/</link><guid isPermaLink="true">https://orangevaper.dev/posts/how-to-deploy-astro/</guid><description>AstroサイトをVercel、Netlify、GitHub Pagesなど様々なプラットフォームにデプロイする方法を解説</description><pubDate>Tue, 25 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Astro のデプロイ方法比較ガイド&lt;/h1&gt;
&lt;p&gt;Astro は高速で軽量な Web フレームワークとして人気を集めていますが、作成したサイトを公開するためのデプロイ方法はいくつかあります。この記事では、主要なデプロイプラットフォームについて、それぞれの特徴と設定方法を解説します。&lt;/p&gt;
&lt;h2&gt;目次&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#vercel%E3%81%B8%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4&quot;&gt;Vercel へのデプロイ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#netlify%E3%81%B8%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4&quot;&gt;Netlify へのデプロイ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#github-pages%E3%81%B8%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4&quot;&gt;GitHub Pages へのデプロイ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#cloudflare-pages%E3%81%B8%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4&quot;&gt;Cloudflare Pages へのデプロイ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#deno-deploy%E3%81%B8%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4&quot;&gt;Deno Deploy へのデプロイ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E5%BE%93%E6%9D%A5%E3%81%AE%E3%83%9B%E3%82%B9%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%B8%E3%81%AE%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4&quot;&gt;従来のホスティングサービスへのデプロイ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E6%96%B9%E6%B3%95%E3%81%AE%E6%AF%94%E8%BC%83%E8%A1%A8&quot;&gt;デプロイ方法の比較表&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Vercel へのデプロイ&lt;/h2&gt;
&lt;p&gt;:::tip
Vercel は特に SSR をサポートする Astro サイトに最適なプラットフォームの一つです。
:::&lt;/p&gt;
&lt;h3&gt;特徴&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;設定不要ですぐにデプロイが可能&lt;/li&gt;
&lt;li&gt;SSR、SSG、ISR など多様なレンダリング戦略をサポート&lt;/li&gt;
&lt;li&gt;プレビュー環境とプロダクション環境の分離&lt;/li&gt;
&lt;li&gt;アナリティクスと環境変数の管理&lt;/li&gt;
&lt;li&gt;グローバル CDN による高速化&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;設定方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Vercel アカウントを作成し、ログインします&lt;/li&gt;
&lt;li&gt;GitHub リポジトリと連携します&lt;/li&gt;
&lt;li&gt;「Import Project」からリポジトリを選択します&lt;/li&gt;
&lt;li&gt;フレームワークプリセットとして「Astro」を選択します&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;# または、Vercel CLIを使用する場合
npm i -g vercel
vercel login
vercel
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;astro.config.mjs の設定&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import { defineConfig } from &quot;astro/config&quot;;
import vercel from &quot;@astrojs/vercel/serverless&quot;;

export default defineConfig({
  output: &quot;server&quot;,
  adapter: vercel(),
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;カスタムドメインの設定&lt;/h3&gt;
&lt;p&gt;Vercel ダッシュボードから「Domains」セクションに移動し、カスタムドメインを追加します。DNS の設定を行えば、数分で SSL 証明書が自動発行され、サイトにアクセスできるようになります。&lt;/p&gt;
&lt;h2&gt;Netlify へのデプロイ&lt;/h2&gt;
&lt;p&gt;:::note
Netlify は特に静的サイトの場合、非常に簡単にデプロイできるプラットフォームです。
:::&lt;/p&gt;
&lt;h3&gt;特徴&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ドラッグ＆ドロップでデプロイが可能&lt;/li&gt;
&lt;li&gt;継続的デプロイメント&lt;/li&gt;
&lt;li&gt;フォーム処理機能&lt;/li&gt;
&lt;li&gt;サーバーレス関数のサポート&lt;/li&gt;
&lt;li&gt;エッジ関数によるパフォーマンス最適化&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;設定方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Netlify アカウントを作成し、ログインします&lt;/li&gt;
&lt;li&gt;「New site from Git」をクリックします&lt;/li&gt;
&lt;li&gt;GitHub リポジトリと連携します&lt;/li&gt;
&lt;li&gt;ビルド設定:
&lt;ul&gt;
&lt;li&gt;Build command: &lt;code&gt;npm run build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Publish directory: &lt;code&gt;dist&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;# または、Netlify CLIを使用する場合
npm install -g netlify-cli
netlify login
netlify init
netlify deploy --prod
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;astro.config.mjs の設定&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import { defineConfig } from &quot;astro/config&quot;;
import netlify from &quot;@astrojs/netlify/functions&quot;;

export default defineConfig({
  output: &quot;server&quot;, // SSRの場合
  adapter: netlify(),
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;netlify.toml ファイルの作成&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;[build]
  command = &quot;npm run build&quot;
  publish = &quot;dist&quot;

[dev]
  command = &quot;npm run dev&quot;
  port = 3000

[[redirects]]
  from = &quot;/*&quot;
  to = &quot;/index.html&quot;
  status = 200
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;GitHub Pages へのデプロイ&lt;/h2&gt;
&lt;p&gt;:::important
GitHub Pages は特に個人ブログやドキュメントサイトに適しています。
:::&lt;/p&gt;
&lt;h3&gt;特徴&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;無料で利用可能&lt;/li&gt;
&lt;li&gt;GitHub リポジトリと直接連携&lt;/li&gt;
&lt;li&gt;カスタムドメインと SSL のサポート&lt;/li&gt;
&lt;li&gt;GitHub Actions による自動デプロイ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;設定方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;GitHub リポジトリを作成します&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.github/workflows/deploy.yml&lt;/code&gt;ファイルを作成します&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;name: Deploy to GitHub Pages

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: 18
      - name: Install dependencies
        run: npm ci
      - name: Build website
        run: npm run build
      - name: Deploy to GitHub Pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./dist
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;astro.config.mjs の設定&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import { defineConfig } from &quot;astro/config&quot;;

export default defineConfig({
  site: &quot;https://yourusername.github.io&quot;,
  base: &quot;/your-repo-name&quot;,
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;カスタムドメインの設定&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;リポジトリの「Settings」タブに移動します&lt;/li&gt;
&lt;li&gt;「Pages」セクションでカスタムドメインを入力します&lt;/li&gt;
&lt;li&gt;DNS プロバイダーで CNAME レコードを設定します&lt;/li&gt;
&lt;li&gt;リポジトリに&lt;code&gt;CNAME&lt;/code&gt;ファイルを作成し、ドメイン名を記載します&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Cloudflare Pages へのデプロイ&lt;/h2&gt;
&lt;p&gt;:::tip
Cloudflare Pages はグローバルなエッジネットワークを活用したい場合に最適です。
:::&lt;/p&gt;
&lt;h3&gt;特徴&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;グローバル CDN による高速配信&lt;/li&gt;
&lt;li&gt;無制限の帯域幅&lt;/li&gt;
&lt;li&gt;自動ビルドとデプロイ&lt;/li&gt;
&lt;li&gt;環境変数とシークレットの管理&lt;/li&gt;
&lt;li&gt;Web アナリティクスの統合&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;設定方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Cloudflare アカウントを作成し、ログインします&lt;/li&gt;
&lt;li&gt;「Pages」タブに移動し、「Create a project」をクリックします&lt;/li&gt;
&lt;li&gt;GitHub リポジトリと連携します&lt;/li&gt;
&lt;li&gt;ビルド設定:
&lt;ul&gt;
&lt;li&gt;Framework preset: Astro&lt;/li&gt;
&lt;li&gt;Build command: &lt;code&gt;npm run build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Build output directory: &lt;code&gt;dist&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;astro.config.mjs の設定&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import { defineConfig } from &quot;astro/config&quot;;
import cloudflare from &quot;@astrojs/cloudflare&quot;;

export default defineConfig({
  output: &quot;server&quot;, // SSRの場合
  adapter: cloudflare(),
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Deno Deploy へのデプロイ&lt;/h2&gt;
&lt;p&gt;:::note
Deno Deploy は特に TypeScript ベースのプロジェクトに適したプラットフォームです。
:::&lt;/p&gt;
&lt;h3&gt;特徴&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;TypeScript ネイティブサポート&lt;/li&gt;
&lt;li&gt;グローバルエッジネットワーク&lt;/li&gt;
&lt;li&gt;迅速なデプロイと更新&lt;/li&gt;
&lt;li&gt;GitHub 連携&lt;/li&gt;
&lt;li&gt;無料枠が比較的大きい&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;設定方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Deno Deploy アカウントを作成し、ログインします&lt;/li&gt;
&lt;li&gt;新しいプロジェクトを作成します&lt;/li&gt;
&lt;li&gt;GitHub リポジトリと連携します&lt;/li&gt;
&lt;li&gt;デプロイ設定を行います&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;astro.config.mjs の設定&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import { defineConfig } from &quot;astro/config&quot;;
import deno from &quot;@astrojs/deno&quot;;

export default defineConfig({
  output: &quot;server&quot;,
  adapter: deno(),
});
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;従来のホスティングサービスへのデプロイ&lt;/h2&gt;
&lt;p&gt;:::caution
従来のホスティングサービスでは、SSR の機能が制限される場合があります。
:::&lt;/p&gt;
&lt;h3&gt;設定方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Astro プロジェクトをビルドします&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;生成された&lt;code&gt;dist&lt;/code&gt;ディレクトリの内容を FTP などでアップロードします&lt;/li&gt;
&lt;li&gt;サーバー側で必要な設定を行います（.htaccess など）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;.htaccess の設定例&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.html [L,QSA]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;デプロイ方法の比較表&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;プラットフォーム&lt;/th&gt;
&lt;th&gt;無料プラン&lt;/th&gt;
&lt;th&gt;SSR サポート&lt;/th&gt;
&lt;th&gt;自動デプロイ&lt;/th&gt;
&lt;th&gt;カスタムドメイン&lt;/th&gt;
&lt;th&gt;CDN&lt;/th&gt;
&lt;th&gt;特徴&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;開発者体験に優れた総合的なプラットフォーム&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Netlify&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;フォーム処理やサーバーレス関数が簡単に利用可能&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub Pages&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;無料で利用できる静的サイトホスティング&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare Pages&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;グローバル CDN とセキュリティ機能が強力&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deno Deploy&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;TypeScript ネイティブで高速なエッジ実行環境&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;従来のホスティング&lt;/td&gt;
&lt;td&gt;有料&lt;/td&gt;
&lt;td&gt;△&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;△&lt;/td&gt;
&lt;td&gt;既存のインフラを活用できる柔軟性&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Astro プロジェクトのデプロイ方法は、プロジェクトの規模や必要な機能によって最適なものが異なります。静的サイトであれば GitHub Pages や Netlify が手軽で、SSR や ISR などの動的機能を活用したい場合は Vercel や Cloudflare Pages が適しています。また、特殊な要件がある場合は従来のホスティングサービスも選択肢になります。&lt;/p&gt;
&lt;p&gt;:::tip[最終アドバイス]
初めての Astro プロジェクトなら、まずは Vercel や Netlify を試してみることをおすすめします。どちらもゼロコンフィグでデプロイでき、開発体験が優れています。
:::&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;withastro/astro&quot;}&lt;/p&gt;
&lt;p&gt;以上のガイドが、あなたの Astro プロジェクトを最適な方法でデプロイする助けになれば幸いです。質問やフィードバックがあれば、コメントセクションでお待ちしています。&lt;/p&gt;
</content:encoded></item><item><title>Neovimのインストール方法とLazyVim導入ガイド</title><link>https://orangevaper.dev/posts/how-to-install-neovim/</link><guid isPermaLink="true">https://orangevaper.dev/posts/how-to-install-neovim/</guid><description>各OSでのNeovimインストール方法とLazyVimの導入、カスタマイズまでを解説</description><pubDate>Tue, 25 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Neovim のインストール方法と LazyVim 導入ガイド&lt;/h1&gt;
&lt;p&gt;Neovim は、従来の Vim を現代的に再設計したテキストエディタで、拡張性が高く、プラグインでカスタマイズしやすいことが特徴です。この記事では、各 OS 別のインストール方法から基本的な設定、プラグインの導入方法までを解説します。&lt;/p&gt;
&lt;h2&gt;目次&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;#neovim%E3%81%A8%E3%81%AF&quot;&gt;Neovim とは&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#os%E5%88%A5%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95&quot;&gt;OS 別インストール方法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#linux&quot;&gt;Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#macos&quot;&gt;macOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#windows&quot;&gt;Windows&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#lazyvim%E3%81%AE%E5%B0%8E%E5%85%A5&quot;&gt;LazyVim の導入&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#lazyvim%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA&quot;&gt;LazyVim のカスタマイズ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#lazyvim%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E4%B8%BB%E8%A6%81%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3&quot;&gt;LazyVim に含まれる主要プラグイン&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0&quot;&gt;トラブルシューティング&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Neovim とは&lt;/h2&gt;
&lt;p&gt;:::note
Neovim は、Vim の機能を継承しつつ、非同期処理、組み込みターミナル、Lua による API 拡張などの新機能を追加した次世代エディタです。
:::&lt;/p&gt;
&lt;p&gt;Vim との主な違いは以下のとおりです：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lua スクリプトによる API 拡張&lt;/li&gt;
&lt;li&gt;非同期 I/O 処理によるパフォーマンス向上&lt;/li&gt;
&lt;li&gt;組み込みターミナル&lt;/li&gt;
&lt;li&gt;LSP（Language Server Protocol）のネイティブサポート&lt;/li&gt;
&lt;li&gt;より良いデフォルト設定&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;OS 別インストール方法&lt;/h2&gt;
&lt;h3&gt;Linux&lt;/h3&gt;
&lt;h4&gt;Ubuntu の場合&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# APTからインストール
sudo apt update
sudo apt install neovim

# 最新版を使いたい場合はPPAを追加
sudo add-apt-repository ppa:neovim-ppa/unstable
sudo apt update
sudo apt install neovim
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Arch Linux の場合&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo pacman -S neovim
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Fedora の場合&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;sudo dnf install neovim
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;macOS&lt;/h3&gt;
&lt;p&gt;macOS では Homebrew を使ったインストールが最も簡単です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Homebrewがない場合はインストール
/bin/bash -c &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;

# Neovimのインストール
brew install neovim
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Windows&lt;/h3&gt;
&lt;p&gt;Windows では複数のインストール方法があります。&lt;/p&gt;
&lt;h4&gt;Chocolatey を使う方法&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# PowerShellを管理者権限で実行
choco install neovim
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Scoop を使う方法&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;# Scoopがない場合はインストール
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex

# Neovimのインストール
scoop install neovim
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;WSL2 を使っている場合&lt;/h4&gt;
&lt;p&gt;WSL2 を使用している場合は、Linux 環境内で Neovim をインストールするのがおすすめです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Ubuntuの場合
sudo apt update
sudo apt install neovim
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;公式サイトからのダウンロード&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/neovim/neovim/releases&quot;&gt;Neovim 公式ダウンロードページ&lt;/a&gt;から Windows 用の zip ファイルをダウンロードし、展開して使うこともできます。&lt;/p&gt;
&lt;h2&gt;LazyVim の導入&lt;/h2&gt;
&lt;p&gt;Neovim の設定は複雑になりがちですが、LazyVim を使うことで簡単に VSCode のような高機能な IDE 環境を構築できます。LazyVim は多数のプラグインが事前設定された「ディストリビューション」で、すぐに使える開発環境を提供します。&lt;/p&gt;
&lt;p&gt;そして HHKB の無刻印キーボードの特殊でありますが効率的な配列と Neovim+lazyVim のキーボードだけで行う操作感が、画面から目を反らすことのない最高で究極の開発体験を得ることができるのです！&lt;/p&gt;
&lt;h3&gt;LazyVim のインストール&lt;/h3&gt;
&lt;p&gt;LazyVim をインストールする前に、まず Neovim の設定ディレクトリのバックアップを取っておくことをおすすめします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Linux/macOS
# 既存の設定がある場合はバックアップ
[ -d ~/.config/nvim ] &amp;amp;&amp;amp; mv ~/.config/nvim ~/.config/nvim.bak
[ -d ~/.local/share/nvim ] &amp;amp;&amp;amp; mv ~/.local/share/nvim ~/.local/share/nvim.bak
[ -d ~/.local/state/nvim ] &amp;amp;&amp;amp; mv ~/.local/state/nvim ~/.local/state/nvim.bak
[ -d ~/.cache/nvim ] &amp;amp;&amp;amp; mv ~/.cache/nvim ~/.cache/nvim.bak

# Windows (PowerShell)
# 既存の設定がある場合はバックアップ
if (Test-Path $env:LOCALAPPDATA\nvim) { Rename-Item -Path $env:LOCALAPPDATA\nvim -NewName nvim.bak }
if (Test-Path $env:LOCALAPPDATA\nvim-data) { Rename-Item -Path $env:LOCALAPPDATA\nvim-data -NewName nvim-data.bak }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;次に、LazyVim の設定を直接クローンします：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Linux/macOS
git clone https://github.com/LazyVim/starter ~/.config/nvim

# Windows (PowerShell)
git clone https://github.com/LazyVim/starter $env:LOCALAPPDATA\nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;クローンした後、一度 Git ディレクトリを削除して、独自の設定リポジトリとして使えるようにします：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Linux/macOS
rm -rf ~/.config/nvim/.git

# Windows (PowerShell)
Remove-Item -Recurse -Force $env:LOCALAPPDATA\nvim\.git
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;LazyVim の初回起動&lt;/h3&gt;
&lt;p&gt;Neovim を起動すると、LazyVim のセットアップが自動的に開始されます：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;初回起動時は多数のプラグインがインストールされるため、少し時間がかかります。完了したら、&lt;code&gt;:checkhealth&lt;/code&gt;コマンドを実行して、環境に問題がないか確認してください。&lt;/p&gt;
&lt;h2&gt;LazyVim のカスタマイズ&lt;/h2&gt;
&lt;p&gt;LazyVim は非常に簡単にカスタマイズできます。主な設定ファイルは以下の場所にあります：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.config/nvim/lua/config/options.lua&lt;/code&gt;: Neovim の基本設定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.config/nvim/lua/config/keymaps.lua&lt;/code&gt;: キーマッピング&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.config/nvim/lua/config/lazy.lua&lt;/code&gt;: Lazy プラグインマネージャーの設定&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;プラグインの追加&lt;/h3&gt;
&lt;p&gt;プラグインを追加するには、&lt;code&gt;~/.config/nvim/lua/plugins&lt;/code&gt;ディレクトリに新しいファイルを作成します。例えば、追加のカラースキームを導入する場合：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-- ~/.config/nvim/lua/plugins/colorscheme.lua
return {
  -- 追加のカラースキーム
  { &quot;catppuccin/nvim&quot;, name = &quot;catppuccin&quot; },
  { &quot;folke/tokyonight.nvim&quot; },

  -- カラースキーム設定を上書き
  {
    &quot;LazyVim/LazyVim&quot;,
    opts = {
      colorscheme = &quot;catppuccin&quot;,
    },
  },
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;キーマッピングのカスタマイズ&lt;/h3&gt;
&lt;p&gt;キーマッピングは&lt;code&gt;keymaps.lua&lt;/code&gt;で変更できます：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-- ~/.config/nvim/lua/config/keymaps.lua
local keymap = vim.keymap.set

-- Escキーの代わりにjjを使用
keymap(&quot;i&quot;, &quot;jj&quot;, &quot;&amp;lt;ESC&amp;gt;&quot;, { desc = &quot;Escape insert mode&quot; })

-- ウィンドウ間の移動
keymap(&quot;n&quot;, &quot;&amp;lt;C-h&amp;gt;&quot;, &quot;&amp;lt;C-w&amp;gt;h&quot;, { desc = &quot;Go to left window&quot; })
keymap(&quot;n&quot;, &quot;&amp;lt;C-j&amp;gt;&quot;, &quot;&amp;lt;C-w&amp;gt;j&quot;, { desc = &quot;Go to lower window&quot; })
keymap(&quot;n&quot;, &quot;&amp;lt;C-k&amp;gt;&quot;, &quot;&amp;lt;C-w&amp;gt;k&quot;, { desc = &quot;Go to upper window&quot; })
keymap(&quot;n&quot;, &quot;&amp;lt;C-l&amp;gt;&quot;, &quot;&amp;lt;C-w&amp;gt;l&quot;, { desc = &quot;Go to right window&quot; })
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;基本設定のカスタマイズ&lt;/h3&gt;
&lt;p&gt;基本的な Neovim の設定は&lt;code&gt;options.lua&lt;/code&gt;で変更できます：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-- ~/.config/nvim/lua/config/options.lua
vim.opt.shiftwidth = 2      -- インデントのスペース数
vim.opt.tabstop = 2         -- タブのスペース数
vim.opt.relativenumber = true -- 相対行番号を表示
vim.opt.wrap = true         -- 行の折り返しを有効に
vim.opt.scrolloff = 10      -- スクロール時に表示する前後の行数
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;LazyVim に含まれる主要プラグイン&lt;/h2&gt;
&lt;p&gt;:::tip
LazyVim には多数の優れたプラグインが事前設定されており、すぐに使える状態になっています。
:::&lt;/p&gt;
&lt;h3&gt;コーディング支援&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;nvim-lspconfig&lt;/strong&gt;: 言語サーバープロトコル設定&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nvim-treesitter&lt;/strong&gt;: 構文解析と高度なハイライト&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nvim-cmp&lt;/strong&gt;: 高機能コード補完&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LuaSnip&lt;/strong&gt;: スニペットエンジン&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;mason.nvim&lt;/strong&gt;: LSP サーバー簡単インストール&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;UI 関連&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;neo-tree.nvim&lt;/strong&gt;: ファイルエクスプローラー&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;telescope.nvim&lt;/strong&gt;: ファイル検索・フィルタリング&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;which-key.nvim&lt;/strong&gt;: キーバインドヘルプ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;bufferline.nvim&lt;/strong&gt;: バッファタブ表示&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;noice.nvim&lt;/strong&gt;: コマンドライン UI 改善&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Git 統合&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;gitsigns.nvim&lt;/strong&gt;: Git 変更表示&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;vim-fugitive&lt;/strong&gt;: Git 操作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;カスタマイズすることも簡単です。&lt;/p&gt;
&lt;p&gt;:::tip[最終アドバイス]
LazyVim は強力な機能がデフォルトで多数含まれていますが、すべてを一度に覚える必要はありません。まずは基本的な操作から始めて、徐々に機能を探索していくのがおすすめです。&lt;code&gt;:Lazy&lt;/code&gt;コマンドで現在インストールされているプラグインを確認し、&lt;code&gt;:LazyExtras&lt;/code&gt;で追加の拡張機能を導入できます。
:::&lt;/p&gt;
&lt;p&gt;::github{repo=&quot;neovim/neovim&quot;}
::github{repo=&quot;LazyVim/LazyVim&quot;}&lt;/p&gt;
&lt;p&gt;Neovim の世界を楽しんでください！LazyVim を使えば、プロのような開発環境がすぐに手に入ります。もし質問やトラブルがあれば、コメントセクションでお知らせください。&lt;/p&gt;
</content:encoded></item><item><title>Windows 11 WSL2環境でのNode.jsとnpmのセットアップ方法</title><link>https://orangevaper.dev/posts/how-to-setup-node-and-nvm/</link><guid isPermaLink="true">https://orangevaper.dev/posts/how-to-setup-node-and-nvm/</guid><description>Windows 11のWSL2環境にNode.jsとnpmを正しくインストールし、開発環境を整える方法を解説します。</description><pubDate>Mon, 24 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows 11 WSL2 環境での Node.js と npm のセットアップ方法&lt;/h1&gt;
&lt;p&gt;WSL2 (Windows Subsystem for Linux 2) と Ubuntu を利用した Windows 11 環境で Node.js と npm をセットアップする方法を解説します。Node.js は多くのフロントエンド開発ツールの基盤となる JavaScript ランタイムで、Astro を含む多くのフレームワークを使用するために必要です。&lt;/p&gt;
&lt;h2&gt;前提条件&lt;/h2&gt;
&lt;p&gt;この記事は以下の環境を前提としています：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows 11&lt;/li&gt;
&lt;li&gt;WSL2 が有効化されている&lt;/li&gt;
&lt;li&gt;Ubuntu がインストールされている&lt;/li&gt;
&lt;li&gt;Windows Terminal&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;WSL2 や Ubuntu のインストールがまだの場合は、&lt;a href=&quot;/posts/wsl2-ubuntu-install&quot;&gt;WSL2 と Ubuntu のインストール方法&lt;/a&gt;を参照してください。&lt;/p&gt;
&lt;h2&gt;Node.js のインストール方法&lt;/h2&gt;
&lt;p&gt;Node.js をインストールする方法はいくつかありますが、ここでは以下の 2 つの方法を紹介します：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;NodeSource のリポジトリを使用する方法（推奨）&lt;/li&gt;
&lt;li&gt;nvm（Node Version Manager）を使用する方法&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;それぞれの方法を詳しく解説します。&lt;/p&gt;
&lt;h3&gt;1. NodeSource リポジトリを使用したインストール&lt;/h3&gt;
&lt;p&gt;NodeSource が提供する公式リポジトリを使うと、最新バージョンの Node.js を簡単にインストールできます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;まず WSL2 の Ubuntu ターミナルを起動します。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;必要なパッケージをインストールします：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update
sudo apt install -y curl
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;NodeSource のセットアップスクリプトを実行します。ここでは最新の LTS（長期サポート）バージョンをインストールします：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注: 記事執筆時点（2025 年 3 月）では、Node.js 20.x が最新の LTS バージョンです。必要に応じて数字を変更してください。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Node.js をインストールします：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install -y nodejs
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;インストールされたバージョンを確認します：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;node -v
npm -v
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. nvm を使用したインストール&lt;/h3&gt;
&lt;p&gt;nvm を使うと、複数の Node.js バージョンを簡単に切り替えられるようになります。プロジェクトによって異なるバージョンが必要な場合に特に便利です。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;まず nvm のインストールスクリプトをダウンロードして実行します：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;シェルを再起動するか、以下のコマンドで設定を読み込みます（Fish shell の場合は別の設定が必要です）：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;export NVM_DIR=&quot;$HOME/.nvm&quot;
[ -s &quot;$NVM_DIR/nvm.sh&quot; ] &amp;amp;&amp;amp; \. &quot;$NVM_DIR/nvm.sh&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;nvm が正しくインストールされたか確認します：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;nvm --version
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;最新の LTS バージョンの Node.js をインストールします：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;nvm install --lts
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;インストールした Node.js を使用するように設定します：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;nvm use --lts
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;バージョンを確認します：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;node -v
npm -v
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Fish shell で nvm を使用する場合&lt;/h2&gt;
&lt;p&gt;私は Fish shell を使用していますが、nvm はデフォルトでは Fish と互換性がありません。以下の方法で設定できます：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fisher（Fish shell のプラグインマネージャー）をインストールします：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source &amp;amp;&amp;amp; fisher install jorgebucaran/fisher
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Fish 用の nvm ラッパーをインストールします：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;fisher install jorgebucaran/nvm.fish
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Node.js をインストールします：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;nvm install lts
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Node.js を使用します：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;nvm use lts
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;インストールされている Node.js のバージョンを確認します：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;nvm list
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この方法で、Fish shell 上でも nvm を問題なく使用できます。&lt;/p&gt;
&lt;h2&gt;npm の初期設定&lt;/h2&gt;
&lt;p&gt;Node.js をインストールすると、パッケージマネージャーの npm も一緒にインストールされます。以下の設定を行っておくと便利です：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;グローバルパッケージのインストール先を変更する（オプション）：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ~/.npm-global
npm config set prefix &apos;~/.npm-global&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;PATH を設定する（~/.bashrc または~/.zshrc に追加）：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;export PATH=~/.npm-global/bin:$PATH
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fish shell の場合は、~/.config/fish/config.fish に以下を追加します：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;set -gx PATH $HOME/.npm-global/bin $PATH
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;npm をアップデートする：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;npm install -g npm@latest
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;パッケージ管理ツールの選択&lt;/h2&gt;
&lt;p&gt;Node.js のパッケージ管理には、npm 以外にも以下のような選択肢があります：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;yarn&lt;/strong&gt; - Facebook が開発した代替パッケージマネージャー：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;npm install -g yarn
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;pnpm&lt;/strong&gt; - ディスク効率の良い代替パッケージマネージャー（私のお勧め）：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;npm install -g pnpm
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Astro プロジェクトでの動作確認&lt;/h2&gt;
&lt;p&gt;Node.js と npm が正しくインストールされたかを確認するために、簡単な Astro プロジェクトを作成してみましょう：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# npmを使用する場合
npm create astro@latest my-astro-project

# yarnを使用する場合
yarn create astro my-astro-project

# pnpmを使用する場合
pnpm create astro@latest my-astro-project
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;プロジェクトディレクトリに移動して開発サーバーを起動します：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd my-astro-project
npm run dev
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ブラウザで&lt;code&gt;http://localhost:4321&lt;/code&gt;にアクセスして、Astro のスターターサイトが表示されることを確認しましょう。&lt;/p&gt;
&lt;h2&gt;トラブルシューティング&lt;/h2&gt;
&lt;h3&gt;パーミッションエラーが発生する場合&lt;/h3&gt;
&lt;p&gt;npm を使ってグローバルパッケージをインストールする際に、パーミッションエラーが発生することがあります。その場合は以下の方法を試してください：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ~/.npm-global
npm config set prefix &apos;~/.npm-global&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;そして、シェルの設定ファイルに PATH を追加します。&lt;/p&gt;
&lt;h3&gt;nvm がコマンドとして認識されない場合&lt;/h3&gt;
&lt;p&gt;nvm をインストールした後に&lt;code&gt;command not found&lt;/code&gt;エラーが出る場合は、シェルの設定ファイルに以下の行が追加されているか確認してください：&lt;/p&gt;
&lt;p&gt;Bash の場合（~/.bashrc）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;export NVM_DIR=&quot;$HOME/.nvm&quot;
[ -s &quot;$NVM_DIR/nvm.sh&quot; ] &amp;amp;&amp;amp; \. &quot;$NVM_DIR/nvm.sh&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Fish の場合は、前述の nvm.fish プラグインが正しくインストールされているか確認し、&lt;code&gt;fisher list&lt;/code&gt;コマンドで一覧に表示されていることを確認してください。もし表示されていなければ、再度&lt;code&gt;fisher install jorgebucaran/nvm.fish&lt;/code&gt;を実行してみてください。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;これで Windows 11 の WSL2 環境に Node.js と npm が正しくインストールされ、Astro を含む様々な JavaScript プロジェクトの開発準備が整いました。Node.js のバージョン管理には nvm を使うことをお勧めします。特に複数のプロジェクトを扱う場合に便利です。&lt;/p&gt;
&lt;p&gt;Node.js と npm の基本的な使い方については、&lt;a href=&quot;https://nodejs.org/docs/latest-v20.x/api/&quot;&gt;Node.js の公式ドキュメント&lt;/a&gt;や&lt;a href=&quot;https://docs.npmjs.com/&quot;&gt;npm の公式ドキュメント&lt;/a&gt;を参照してください。&lt;/p&gt;
</content:encoded></item><item><title>Windows 11 WSL2 ターミナルに Moralerspace Neon HWNF をインストールする方法</title><link>https://orangevaper.dev/posts/how-to-setup-nerd-font/</link><guid isPermaLink="true">https://orangevaper.dev/posts/how-to-setup-nerd-font/</guid><description>Windows 11のWSL2環境にMoralerspace Neon HWNFフォントをインストールして、fish shellで使用する方法を解説します。</description><pubDate>Fri, 21 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows 11 WSL2 ターミナルに Moralerspace Neon HWNF をインストールする方法&lt;/h1&gt;
&lt;p&gt;こんにちは！今回は Windows 11 の WSL2 環境で Moralerspace Neon HWNF フォントをインストールし、fish shell で使用する方法について解説します。Moralerspace Neon HWNF は、プログラミングに最適化された美しいフォントで、Windows Terminal での開発体験を大幅に向上させます。
とはいえ、vscode のフォントとは少し見た目が違います。英数:日本語が 1:2 なので、少し英数文字が狭いかもしれません。私も最初狭いと感じたのですが直ぐになれましたｗ&lt;/p&gt;
&lt;h2&gt;Moralerspace Neon HWNF とは？&lt;/h2&gt;
&lt;p&gt;Moralerspace Neon HWNF は、プログラミング用に特化したフォントで、Nerd Font パッチが適用されています。主な特徴は以下の通りです：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;セリフ（飾り）がないクリーンなデザイン&lt;/li&gt;
&lt;li&gt;プログラミング用の記号やリガチャが最適化されている&lt;/li&gt;
&lt;li&gt;Nerd Font アイコンが統合されている（開発アイコン、ファイルタイプアイコンなど）&lt;/li&gt;
&lt;li&gt;長時間のコーディングでも目が疲れにくい設計&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Windows へのインストール手順&lt;/h2&gt;
&lt;h3&gt;1. Moralerspace Neon HWNF のダウンロード&lt;/h3&gt;
&lt;p&gt;まず、Moralerspace Neon HWNF フォントを Nerd Fonts の公式サイトからダウンロードします：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ウェブブラウザで &lt;a href=&quot;https://github.com/yuru7/moralerspace?tab=readme-ov-file&quot;&gt;moralerspace リリースページ&lt;/a&gt; にアクセス&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/yuru7/moralerspace/releases/latest&quot;&gt;🆕 ダウンロードはこちら&lt;/a&gt; にアクセス&lt;/li&gt;
&lt;li&gt;最新リリース（例：v1.1.0）から「MoralerspaceHWNF_v1.1.0.zip」を Windows へダウンロード&lt;/li&gt;
&lt;li&gt;ダウンロードした ZIP ファイルを展開&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;2. Windows へのフォントインストール&lt;/h3&gt;
&lt;p&gt;ダウンロードしたフォントを Windows にインストールします：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ZIP ファイルを展開したフォルダを開く&lt;/li&gt;
&lt;li&gt;「MoralerspaceNeonHWNF-Regular.ttf」などの .ttf ファイルを探す&lt;/li&gt;
&lt;li&gt;インストールしたいフォントファイルを右クリックして「インストール」または「すべてのユーザーにインストール」を選択&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;3. Windows Terminal での設定&lt;/h3&gt;
&lt;p&gt;Windows Terminal でフォントを設定します：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Windows Terminal を起動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + ,&lt;/code&gt; キーを押して設定画面を開く&lt;/li&gt;
&lt;li&gt;左側のサイドバーから「外観」を選択&lt;/li&gt;
&lt;li&gt;「フォント フェイス」ドロップダウンから「Moralerspace Neon HWNF」を選択&lt;/li&gt;
&lt;li&gt;フォントサイズを適切な値（例：12）に設定&lt;/li&gt;
&lt;li&gt;「保存」をクリックして設定を適用&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;4. 設定ファイル（JSON）による詳細設定&lt;/h3&gt;
&lt;p&gt;より詳細な設定を行いたい場合は、JSON ファイルを直接編集します：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Windows Terminal の設定画面を開き、下部の「JSON ファイルを開く」をクリック&lt;/li&gt;
&lt;li&gt;以下のようにプロファイルを編集：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;profiles&quot;: {
    &quot;defaults&quot;: {
      &quot;font&quot;: {
        &quot;face&quot;: &quot;Moralerspace Neon HWNF&quot;
      },
      &quot;opacity&quot;: 80,
      &quot;useAcrylic&quot;: true
    },
    &quot;list&quot;: [
      {
        &quot;guid&quot;: &quot;{your-wsl-profile-guid}&quot;,
        &quot;name&quot;: &quot;Ubuntu&quot;,
        &quot;source&quot;: &quot;Windows.Terminal.Wsl&quot;,
        &quot;font&quot;: {
          &quot;face&quot;: &quot;Moralerspace Neon HWNF&quot;,
          &quot;size&quot;: 12
        }
      }
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;fish shell での Nerd Font アイコンの表示確認&lt;/h2&gt;
&lt;p&gt;fish shell で Nerd Font アイコンが正しく表示されるか確認するために、以下のコマンドを試してみましょう：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# fish shellでの正しいNerd Fontアイコン表示方法
printf &apos;%b&apos; &apos;\uE0B0 \uE0B1 \uF135 \uE235\n&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;正しく設定されていれば、PowerLine の三角形アイコン、ロケットアイコン、歯車アイコンなどが表示されるはずです。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事では、Windows 11 の WSL2 環境で Moralerspace Neon HWNF フォントをインストールして、fish shell で使用する方法を解説しました。このフォントを使用することで、Windows Terminal でのコーディング体験が視覚的に向上し、長時間の作業でも目の疲れを軽減できます。&lt;/p&gt;
&lt;p&gt;fish shell の独自の構文に注意しながら、Nerd Font の特殊アイコンを活用することで、より情報量の多い、視覚的に美しいターミナル環境を構築できます。&lt;/p&gt;
&lt;h2&gt;参考リンク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nerdfonts.com/&quot;&gt;Nerd Fonts 公式サイト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ryanoasis/nerd-fonts&quot;&gt;GitHub - Nerd Fonts リポジトリ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fishshell.com/&quot;&gt;fish shell 公式サイト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/ja-jp/windows/wsl/&quot;&gt;WSL2 公式ドキュメント&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Windows 11 WSL2環境でのGitインストールガイド</title><link>https://orangevaper.dev/posts/how-to-install-git/</link><guid isPermaLink="true">https://orangevaper.dev/posts/how-to-install-git/</guid><description>Windows 11のWSL2環境でGitをインストールし、基本設定を行う方法を解説します。</description><pubDate>Tue, 18 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows 11 WSL2 環境での Git インストールガイド&lt;/h1&gt;
&lt;p&gt;こんにちは！今回は、Windows 11 の WSL2 環境で Git をインストールする方法について解説します。Neovim/LazyVim ユーザーの方で、Fish shell を使用している環境を前提としていますが、他のシェル環境でも応用可能です。
個人的には、もし github を使用しなくてもローカルでコミットすると履歴管理になるのでおすすめです。&lt;/p&gt;
&lt;h2&gt;Git とは？&lt;/h2&gt;
&lt;p&gt;Git は、コードのバージョン管理を行うためのツールです。複数人での開発や、自分一人でも変更履歴を追跡できるため、現代のソフトウェア開発では欠かせないツールとなっています。&lt;/p&gt;
&lt;p&gt;主な特徴:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;変更履歴の管理&lt;/li&gt;
&lt;li&gt;ブランチによる並行開発&lt;/li&gt;
&lt;li&gt;リモートリポジトリとの連携&lt;/li&gt;
&lt;li&gt;コードのバックアップ&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;WSL2 環境での Git インストール&lt;/h2&gt;
&lt;p&gt;WSL2（Windows Subsystem for Linux 2）環境では、Linux のパッケージマネージャーを使用して Git をインストールします。Ubuntu 環境を例に説明します。&lt;/p&gt;
&lt;h3&gt;パッケージリストの更新&lt;/h3&gt;
&lt;p&gt;まず、パッケージリストを最新の状態に更新します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Git のインストール&lt;/h3&gt;
&lt;p&gt;次に、Git をインストールします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;インストールが完了したら、バージョンを確認してみましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以下のように出力されればインストール成功です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git version 2.34.1 (または、それ以降のバージョン)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Git の初期設定&lt;/h2&gt;
&lt;p&gt;Git をインストールしたら、基本的な設定を行います。&lt;/p&gt;
&lt;h3&gt;ユーザー情報の設定&lt;/h3&gt;
&lt;p&gt;Git を使用する前に、ユーザー名とメールアドレスを設定する必要があります。これは、コミット履歴に記録される情報です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global user.name &quot;あなたの名前&quot;
git config --global user.email &quot;あなたのメールアドレス&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;エディタの設定&lt;/h3&gt;
&lt;p&gt;コミットメッセージなどを編集する際に使用するエディタを設定します。Neovim を使用している場合は以下のようにします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global core.editor &quot;nvim&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;設定の確認&lt;/h3&gt;
&lt;p&gt;現在の設定を確認するには、以下のコマンドを使用します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --list
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Fish shell での Git 設定&lt;/h2&gt;
&lt;p&gt;Fish shell を使用している場合、bash や zsh とは少し設定方法が異なります。以下では、Fish 用の Git 設定を行います。&lt;/p&gt;
&lt;h3&gt;Fish 用の Git エイリアス設定&lt;/h3&gt;
&lt;p&gt;Fish の設定ファイル（通常は&lt;code&gt;~/.config/fish/config.fish&lt;/code&gt;）に、Git のエイリアスを追加すると便利です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ~/.config/fish/config.fish に追加
alias g=&quot;git&quot;
alias ga=&quot;git add&quot;
alias gc=&quot;git commit&quot;
alias gco=&quot;git checkout&quot;
alias gs=&quot;git status&quot;
alias gd=&quot;git diff&quot;
alias gl=&quot;git log&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Fish 用の Git プロンプト&lt;/h3&gt;
&lt;p&gt;Fish shell で Git の状態をプロンプトに表示するには、以下のようにします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ~/.config/fish/config.fish に追加
if type -q fisher
    fisher install jorgebucaran/fish-git-util
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これには&lt;a href=&quot;https://github.com/jorgebucaran/fisher&quot;&gt;Fisher&lt;/a&gt;というプラグインマネージャーが必要です。まだインストールしていない場合は、以下のコマンドでインストールできます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -sL https://git.io/fisher | source &amp;amp;&amp;amp; fisher install jorgebucaran/fisher
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Git の基本的な使い方&lt;/h2&gt;
&lt;p&gt;Git の基本的なコマンドを紹介します。&lt;/p&gt;
&lt;h3&gt;リポジトリの初期化&lt;/h3&gt;
&lt;p&gt;新しい Git リポジトリを作成するには、以下のコマンドを使用します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;ファイルの追跡&lt;/h3&gt;
&lt;p&gt;変更したファイルをステージングエリアに追加します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add ファイル名
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;すべての変更ファイルを追加する場合:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git add .
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;コミット&lt;/h3&gt;
&lt;p&gt;ステージングエリアの変更をコミットします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git commit -m &quot;コミットメッセージ&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;リモートリポジトリの追加&lt;/h3&gt;
&lt;p&gt;GitHub などのリモートリポジトリを追加するには:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git remote add origin https://github.com/ユーザー名/リポジトリ名.git
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;プッシュ&lt;/h3&gt;
&lt;p&gt;ローカルの変更をリモートリポジトリにプッシュします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push -u origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;誤ったコミットを修正する方法&lt;/h2&gt;
&lt;p&gt;開発中に「あ、このコミットはまずかった！」と思うことは誰にでもあります。Git にはそんなときのための機能がいくつか用意されています。&lt;/p&gt;
&lt;h3&gt;git revert：コミットを打ち消す&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;git revert&lt;/code&gt;は、過去のコミットを打ち消す新しいコミットを作成します。歴史を書き換えるのではなく、「打ち消しコミット」を作るため、チーム開発でも安全に使えます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 直前のコミットを打ち消す
git revert HEAD

# 特定のコミットを打ち消す
git revert コミットID
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;例えば、誤ってパスワードをコミットしてしまった場合などに活用できます。&lt;/p&gt;
&lt;h3&gt;git reset：コミット履歴を書き換える&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;: &lt;code&gt;git reset&lt;/code&gt;はコミット履歴を書き換えるため、プッシュ済みのコミットには使用しないでください。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 直前のコミットを取り消し、変更はステージング状態に戻す
git reset --soft HEAD^

# 直前のコミットを取り消し、変更は作業ディレクトリに戻す
git reset --mixed HEAD^

# 直前のコミットを完全に取り消し、変更も削除する
git reset --hard HEAD^
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;コミットメッセージの修正&lt;/h3&gt;
&lt;p&gt;直前のコミットメッセージを修正するのは簡単です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git commit --amend -m &quot;新しいコミットメッセージ&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これは実際には新しいコミットを作成し、直前のコミットを置き換えます。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事では、Windows 11 の WSL2 環境で Git をインストールし、基本設定を行う方法を解説しました。Git は開発ワークフローの重要な部分であり、効率的な開発に欠かせないツールです。&lt;/p&gt;
&lt;p&gt;次回は、LazyGit の導入と使い方について解説する予定です。LazyGit は、Neovim との統合が優れており、コマンドラインから Git を操作するよりも直感的にバージョン管理ができるようになります。&lt;/p&gt;
&lt;p&gt;ご質問やご意見があれば、コメント欄にお寄せください！&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;参考リンク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://git-scm.com/&quot;&gt;Git 公式サイト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://fishshell.com/&quot;&gt;Fish Shell 公式サイト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/ja-jp/windows/wsl/&quot;&gt;WSL2 公式ドキュメント&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Windows 11 WSL2環境でのFish shellセットアップガイド</title><link>https://orangevaper.dev/posts/how-to-setup-fish-shell/</link><guid isPermaLink="true">https://orangevaper.dev/posts/how-to-setup-fish-shell/</guid><description>Windows 11のWSL2環境にFish shellをインストールし、効率的な開発環境を構築する方法を解説します。</description><pubDate>Tue, 18 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows 11 WSL2 環境での Fish shell セットアップガイド&lt;/h1&gt;
&lt;p&gt;こんにちは！今回は、Windows 11 の WSL2 環境に Fish shell をインストールし、効率的な開発環境を構築する方法について解説します。Neovim/LazyVim ユーザーの方にも最適な設定方法をご紹介します。&lt;/p&gt;
&lt;h2&gt;Fish shell とは？&lt;/h2&gt;
&lt;p&gt;Fish (Friendly Interactive SHell) は、使いやすさと美しさを重視して設計されたコマンドラインシェルです。Bash や Zsh と比較して、以下のような特徴があります：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;シンタックスハイライト（コマンドやパスが色分けされる）&lt;/li&gt;
&lt;li&gt;自動補完機能が高度（過去のコマンド履歴やマニュアルから学習する）&lt;/li&gt;
&lt;li&gt;直感的な構文（複雑なシェルスクリプトを書きやすい）&lt;/li&gt;
&lt;li&gt;Web ベースの設定インターフェース&lt;/li&gt;
&lt;li&gt;プラグインシステムが整備されている&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;WSL2 環境への Fish shell インストール&lt;/h2&gt;
&lt;h3&gt;前提条件&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Windows 11 がインストールされていること&lt;/li&gt;
&lt;li&gt;WSL2 が有効化されていること&lt;/li&gt;
&lt;li&gt;Ubuntu（または他の Linux ディストリビューション）が WSL2 にインストールされていること&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Fish shell のインストール&lt;/h3&gt;
&lt;p&gt;Ubuntu 環境で Fish をインストールする方法を紹介します。&lt;/p&gt;
&lt;h4&gt;1. パッケージリストの更新&lt;/h4&gt;
&lt;p&gt;まず、パッケージリストを最新の状態に更新します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2. Fish shell のインストール&lt;/h4&gt;
&lt;p&gt;次に、Fish shell をインストールします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install fish
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3. インストールの確認&lt;/h4&gt;
&lt;p&gt;Fish がインストールされたことを確認します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fish --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以下のように出力されればインストール成功です。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fish, version 3.1.2 (または、それ以降のバージョン)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;4. Fish shell を起動する&lt;/h4&gt;
&lt;p&gt;インストールが完了したら、以下のコマンドで Fish を起動できます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fish
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Fish shell をデフォルトシェルに設定&lt;/h2&gt;
&lt;p&gt;Fish shell を毎回ログイン時に自動的に起動するように設定しましょう。&lt;/p&gt;
&lt;h3&gt;1. インストールされているシェルのリストを確認&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;cat /etc/shells
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;出力に &lt;code&gt;/usr/bin/fish&lt;/code&gt; が含まれていることを確認します。&lt;/p&gt;
&lt;h3&gt;2. デフォルトシェルを変更&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;chsh -s /usr/bin/fish
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;パスワードを求められるので入力します。次回ログイン時から Fish がデフォルトシェルとして使用されます。&lt;/p&gt;
&lt;h2&gt;Fish shell の基本設定&lt;/h2&gt;
&lt;p&gt;Fish shell の設定ファイルは &lt;code&gt;~/.config/fish/config.fish&lt;/code&gt; にあります。このファイルがない場合は作成します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ~/.config/fish
touch ~/.config/fish/config.fish
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;基本的な設定例&lt;/h3&gt;
&lt;p&gt;以下は、開発環境に便利な基本設定の例です。これを &lt;code&gt;config.fish&lt;/code&gt; に追加してください。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Fish起動時のウェルカムメッセージを非表示にする
set fish_greeting

# エディタの設定（Neovimを使用）
set -gx EDITOR nvim

# PATH設定
set -gx PATH $HOME/.local/bin $PATH

# エイリアス設定
alias ll=&quot;ls -la&quot;
alias g=&quot;git&quot;
alias vim=&quot;nvim&quot;

# ディレクトリ移動したら自動でlsする関数
function cd
    builtin cd $argv
    ls
end

# プロンプトの設定（シンプルなテーマ）
function fish_prompt
    set_color cyan
    echo -n (whoami)
    set_color normal
    echo -n &apos;@&apos;
    set_color green
    echo -n (hostname)
    set_color normal
    echo -n &apos;:&apos;
    set_color blue
    echo -n (prompt_pwd)
    set_color yellow
    echo -n (fish_git_prompt)
    set_color normal
    echo -n &apos;&amp;gt; &apos;
end
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Fisher（プラグインマネージャー）のインストール&lt;/h2&gt;
&lt;p&gt;Fish には「Fisher」というプラグインマネージャーがあります。これを使用することで、様々な便利な機能を追加できます。&lt;/p&gt;
&lt;h3&gt;1. Fisher のインストール&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;curl -sL https://git.io/fisher | source &amp;amp;&amp;amp; fisher install jorgebucaran/fisher
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. おすすめのプラグイン&lt;/h3&gt;
&lt;p&gt;Fisher を使用して、以下のおすすめプラグインをインストールしましょう。&lt;/p&gt;
&lt;h4&gt;z - 高速ディレクトリ移動&lt;/h4&gt;
&lt;p&gt;過去に訪れたディレクトリに素早く移動できるようになります。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fisher install jethrokuan/z
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使い方：&lt;code&gt;z ディレクトリ名の一部&lt;/code&gt; で、そのディレクトリに移動できます。例：&lt;code&gt;z dev&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;nvm.fish - Node.js バージョン管理&lt;/h4&gt;
&lt;p&gt;Node.js のバージョン管理を行うためのプラグインです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fisher install jorgebucaran/nvm.fish
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使い方：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Node.jsの最新バージョンをインストール
nvm install latest

# 特定のバージョンをインストール
nvm install 16.14.0

# インストールされているバージョンを一覧表示
nvm list
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;fish-git-util - Git の状態をプロンプトに表示&lt;/h4&gt;
&lt;p&gt;Git リポジトリの状態をプロンプトに表示するプラグインです。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fisher install jorgebucaran/fish-git-util
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;この設定により、Git リポジトリ内にいる場合、ブランチ名や変更状態などが表示されます。&lt;/p&gt;
&lt;h2&gt;Neovim/LazyVim との連携&lt;/h2&gt;
&lt;p&gt;Fish shell と Neovim/LazyVim を連携させるための設定を紹介します。&lt;/p&gt;
&lt;h3&gt;1. Fish の設定ファイルに Neovim 関連の設定を追加&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;~/.config/fish/config.fish&lt;/code&gt; に以下を追加します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Neovim関連の設定
set -gx XDG_CONFIG_HOME $HOME/.config
set -gx XDG_DATA_HOME $HOME/.local/share
set -gx XDG_CACHE_HOME $HOME/.cache

# LazyVim用の環境変数
set -gx LAZYVIM_CONFIG_DIR $XDG_CONFIG_HOME/nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. Neovim を起動するエイリアスの設定&lt;/h3&gt;
&lt;p&gt;便利なエイリアスを追加します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Neovimエイリアス
alias vi=&quot;nvim&quot;
alias nv=&quot;nvim&quot;
alias lvim=&quot;nvim&quot; # LazyVimを使用する場合

# 設定ファイルを素早く編集するためのエイリアス
alias fishconfig=&quot;nvim ~/.config/fish/config.fish&quot;
alias nvimconfig=&quot;nvim ~/.config/nvim/init.lua&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;ターミナルの見た目をカスタマイズ&lt;/h2&gt;
&lt;p&gt;Fish shell の見た目をカスタマイズして、より使いやすくしましょう。&lt;/p&gt;
&lt;h3&gt;1. カラーテーマの設定&lt;/h3&gt;
&lt;p&gt;Fish shell には、Web UI で設定を変更できる機能があります。以下のコマンドで起動します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fish_config
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ブラウザが開き、カラーテーマや機能のカスタマイズができます。&lt;/p&gt;
&lt;h3&gt;2. シンタックスハイライトのカスタマイズ&lt;/h3&gt;
&lt;p&gt;シンタックスハイライトの色をカスタマイズするには、&lt;code&gt;config.fish&lt;/code&gt; に以下を追加します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# シンタックスハイライトの設定
set fish_color_command green --bold
set fish_color_param normal
set fish_color_quote yellow
set fish_color_error red --bold
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. Fish プロンプトのカスタマイズ（Starship 使用）&lt;/h3&gt;
&lt;p&gt;より高度なプロンプトをカスタマイズしたい場合は、Starship というツールがおすすめです。&lt;/p&gt;
&lt;p&gt;まず、Starship をインストールします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -sS https://starship.rs/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;次に、&lt;code&gt;config.fish&lt;/code&gt; に以下を追加します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Starshipの初期化
starship init fish | source
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;さらに、&lt;code&gt;~/.config/starship.toml&lt;/code&gt; ファイルを作成してカスタマイズできます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ~/.config/starship.toml
[character]
success_symbol = &quot;[➜](bold green)&quot;
error_symbol = &quot;[✗](bold red)&quot;

[git_branch]
symbol = &quot;🌱 &quot;
style = &quot;bold purple&quot;

[nodejs]
symbol = &quot;⬢ &quot;
style = &quot;bold green&quot;

[directory]
style = &quot;bold blue&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;トラブルシューティング&lt;/h2&gt;
&lt;h3&gt;1. Fish shell が起動しない場合&lt;/h3&gt;
&lt;p&gt;Bash に戻して設定を確認します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;exec bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;そして、Fish がインストールされていることを確認します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;which fish
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 設定ファイルに問題がある場合&lt;/h3&gt;
&lt;p&gt;設定ファイルに構文エラーがある場合、Fish shell は起動時にエラーを表示します。一度設定ファイルを移動してから Fish を起動し、問題を特定しましょう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mv ~/.config/fish/config.fish ~/.config/fish/config.fish.bak
fish
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. プラグインの問題&lt;/h3&gt;
&lt;p&gt;プラグインに問題がある場合は、一時的にプラグインを無効化して確認します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mv ~/.config/fish/fish_plugins ~/.config/fish/fish_plugins.bak
fisher update
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事では、Windows 11 の WSL2 環境に Fish shell をインストールし、効率的な開発環境を構築する方法について解説しました。Fish shell は直感的な操作と美しい表示で、開発作業をより快適にしてくれます。&lt;/p&gt;
&lt;p&gt;特に Neovim/LazyVim ユーザーの方は、今回紹介した設定を活用することで、より効率的なコーディング環境を構築できるでしょう。&lt;/p&gt;
&lt;p&gt;ぜひ自分好みにカスタマイズして、最高の開発環境を作り上げてください！&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;参考リンク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://fishshell.com/&quot;&gt;Fish Shell 公式サイト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jorgebucaran/fisher&quot;&gt;Fisher - Fish Plugin Manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://starship.rs/&quot;&gt;Starship - クロスシェルプロンプト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://neovim.io/&quot;&gt;Neovim 公式サイト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/ja-jp/windows/wsl/&quot;&gt;WSL2 公式ドキュメント&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Windows Terminalのカスタマイズ方法</title><link>https://orangevaper.dev/posts/windows-terminal-setup/</link><guid isPermaLink="true">https://orangevaper.dev/posts/windows-terminal-setup/</guid><description>Windows Terminalの見た目と機能をカスタマイズして、快適な開発環境を構築する方法を解説します。</description><pubDate>Tue, 18 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows Terminal のカスタマイズ方法&lt;/h1&gt;
&lt;p&gt;こんにちは！今回は Windows Terminal の外観と機能をカスタマイズして、より快適な開発環境を構築する方法を解説します。特にプログラミングに適したフォント設定やカラーテーマの適用方法について詳しく見ていきましょう。&lt;/p&gt;
&lt;h2&gt;Windows Terminal とは&lt;/h2&gt;
&lt;p&gt;Windows Terminal は、Microsoft が開発した最新のターミナルアプリケーションで、コマンドプロンプト、PowerShell、WSL（Windows Subsystem for Linux）など、様々なシェル環境を一つのアプリケーションで管理できます。タブ機能、分割ウィンドウ、Unicode 対応、GPU アクセラレーションなど、多くの機能を備えています。&lt;/p&gt;
&lt;h2&gt;インストール方法&lt;/h2&gt;
&lt;p&gt;Windows Terminal は、Microsoft Store から簡単にインストールできます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Microsoft Store を開く&lt;/li&gt;
&lt;li&gt;「Windows Terminal」を検索&lt;/li&gt;
&lt;li&gt;インストールボタンをクリック&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;もしくは、以下のリンクから直接アクセスできます：
&lt;a href=&quot;https://www.microsoft.com/store/productId/9N0DX20HK701&quot;&gt;Windows Terminal - Microsoft Store&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;基本的な設定方法&lt;/h2&gt;
&lt;p&gt;Windows Terminal の設定は、GUI ベースの設定画面または JSON ファイルを編集することで行えます。&lt;/p&gt;
&lt;h3&gt;設定画面を開く方法&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Windows Terminal を起動&lt;/li&gt;
&lt;li&gt;タイトルバーの下矢印をクリック →「設定」を選択&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;または、&lt;code&gt;Ctrl + ,&lt;/code&gt; のショートカットを使用して設定画面を開くこともできます。&lt;/p&gt;
&lt;h2&gt;プログラミングに最適なフォント設定&lt;/h2&gt;
&lt;p&gt;プログラミングを快適に行うためには、適切なフォントを選ぶことが重要です。プログラミング用フォントは、以下の特徴を持つものが理想的です：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;等幅（モノスペース）&lt;/li&gt;
&lt;li&gt;数字の「0」と大文字の「O」の区別がつきやすい&lt;/li&gt;
&lt;li&gt;記号が見やすい&lt;/li&gt;
&lt;li&gt;リガチャ（合字）対応（オプション）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;おすすめのプログラミングフォント&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Moralerspace Neon HWNF&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;はっきりとした文字で読みやすい&lt;/li&gt;
&lt;li&gt;ネオンのような輝きを持つスタイル&lt;/li&gt;
&lt;li&gt;プログラミングのシンボルに最適化された字形&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;JetBrains Mono&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IDE で人気の JetBrains 社が開発&lt;/li&gt;
&lt;li&gt;コーディング向けに最適化&lt;/li&gt;
&lt;li&gt;リガチャ対応&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fira Code&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プログラミング向けに開発されたモダンなフォント&lt;/li&gt;
&lt;li&gt;豊富なリガチャ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cascadia Code&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft 開発のフォント&lt;/li&gt;
&lt;li&gt;Windows Terminal のデフォルトフォント&lt;/li&gt;
&lt;li&gt;PowerLine 記号対応版「Cascadia Code PL」もあり&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;フォントのインストール方法&lt;/h3&gt;
&lt;p&gt;プログラミングフォントは、多くの場合、公式サイトまたは GitHub からダウンロードできます。&lt;/p&gt;
&lt;h4&gt;Moralerspace Neon HWNF の設定&lt;/h4&gt;
&lt;p&gt;詳しくは&lt;a href=&quot;/posts/how-to-setup-nerd-font/&quot;&gt;Windows 11 WSL2 ターミナルに Moralerspace Neon HWNF をインストールする方法&lt;/a&gt;にて説明しています。&lt;/p&gt;
&lt;h2&gt;カラーテーマの設定&lt;/h2&gt;
&lt;p&gt;プログラミングを長時間行う場合、目に優しいカラーテーマを選ぶことも重要です。Windows Terminal には、いくつかの組み込みテーマがあります。&lt;/p&gt;
&lt;h3&gt;Tango Dark テーマの設定&lt;/h3&gt;
&lt;p&gt;画像に表示されている Tango Dark は、目に優しく、コードの視認性が高いテーマです。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Windows Terminal の設定画面を開く&lt;/li&gt;
&lt;li&gt;左側のサイドバーから「外観」を選択&lt;/li&gt;
&lt;li&gt;「配色」の項目で「Tango Dark」を選択&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;その他のおすすめテーマ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;One Half Dark&lt;/strong&gt; - バランスの取れた暗いテーマ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Solarized Dark&lt;/strong&gt; - 目の疲れを軽減する暗いテーマ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tokyo Night&lt;/strong&gt; - 青と紫をベースにした美しいテーマ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;カスタムテーマの作成&lt;/h3&gt;
&lt;p&gt;独自のカラーテーマを作成することもできます。設定 JSON ファイルの&lt;code&gt;schemes&lt;/code&gt;セクションに新しいテーマを追加します：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&quot;schemes&quot;: [
    {
        &quot;name&quot;: &quot;MyCustomTheme&quot;,
        &quot;background&quot;: &quot;#0C0C0C&quot;,
        &quot;foreground&quot;: &quot;#CCCCCC&quot;,
        &quot;cursorColor&quot;: &quot;#FFFFFF&quot;,
        &quot;black&quot;: &quot;#0C0C0C&quot;,
        &quot;blue&quot;: &quot;#0037DA&quot;,
        &quot;cyan&quot;: &quot;#3A96DD&quot;,
        &quot;green&quot;: &quot;#13A10E&quot;,
        &quot;purple&quot;: &quot;#881798&quot;,
        &quot;red&quot;: &quot;#C50F1F&quot;,
        &quot;white&quot;: &quot;#CCCCCC&quot;,
        &quot;yellow&quot;: &quot;#C19C00&quot;,
        &quot;brightBlack&quot;: &quot;#767676&quot;,
        &quot;brightBlue&quot;: &quot;#3B78FF&quot;,
        &quot;brightCyan&quot;: &quot;#61D6D6&quot;,
        &quot;brightGreen&quot;: &quot;#16C60C&quot;,
        &quot;brightPurple&quot;: &quot;#B4009E&quot;,
        &quot;brightRed&quot;: &quot;#E74856&quot;,
        &quot;brightWhite&quot;: &quot;#F2F2F2&quot;,
        &quot;brightYellow&quot;: &quot;#F9F1A5&quot;
    }
]
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;ターミナルの背景透過設定&lt;/h2&gt;
&lt;p&gt;背景を半透明にすることで、ターミナル使用中に背後のウィンドウを確認できるようになります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Windows Terminal の設定画面を開く&lt;/li&gt;
&lt;li&gt;左側のサイドバーから「外観」を選択&lt;/li&gt;
&lt;li&gt;「背景の透過」を有効にする&lt;/li&gt;
&lt;li&gt;スライダーで透過度を調整（20-30%が読みやすさと透過のバランスが良い）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;タブとペインの設定&lt;/h2&gt;
&lt;p&gt;Windows Terminal は、複数のタブやペイン（分割ウィンドウ）を使用できます。&lt;/p&gt;
&lt;h3&gt;新しいタブを開くショートカット&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Shift + T&lt;/code&gt; - 新しいタブを開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Shift + 数字&lt;/code&gt; - 指定した番号のプロファイルで新しいタブを開く&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;ペインの分割&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Alt + Shift + D&lt;/code&gt; - 現在のペインを複製して分割&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Alt + Shift + -&lt;/code&gt; - 水平方向に分割&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Alt + Shift + +&lt;/code&gt; - 垂直方向に分割&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;コマンドパレットの活用&lt;/h2&gt;
&lt;p&gt;Windows Terminal には、様々なコマンドに素早くアクセスできるコマンドパレットが搭載されています。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ctrl + Shift + P&lt;/code&gt; - コマンドパレットを開く&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コマンドパレットからは、タブの操作や設定の変更など、ほぼすべての機能にアクセスできます。&lt;/p&gt;
&lt;h2&gt;起動時の設定&lt;/h2&gt;
&lt;p&gt;Windows Terminal の起動時の動作をカスタマイズできます。&lt;/p&gt;
&lt;h3&gt;デフォルトプロファイルの設定&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Windows Terminal の設定画面を開く&lt;/li&gt;
&lt;li&gt;左側のサイドバーから「起動」を選択&lt;/li&gt;
&lt;li&gt;「既定のプロファイル」で Ubuntu など希望するプロファイルを選択&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;起動時にディレクトリを指定&lt;/h3&gt;
&lt;p&gt;特定のディレクトリで起動するように設定するには：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;プロファイル設定を開く&lt;/li&gt;
&lt;li&gt;「コマンドライン」の項目に以下のように入力：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;wsl.exe ~ -d Ubuntu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これにより、Ubuntu のホームディレクトリで起動します。&lt;/p&gt;
&lt;h2&gt;アクセンスカラーの設定&lt;/h2&gt;
&lt;p&gt;タブの色やアクセントカラーをカスタマイズすることで、異なる環境を視覚的に区別しやすくなります。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;プロファイル設定を開く&lt;/li&gt;
&lt;li&gt;「外観」を選択&lt;/li&gt;
&lt;li&gt;「タブの色」でカラーを選択&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;例えば、Ubuntu のタブはオレンジや PowerShell のタブは青にするなど、環境ごとに異なる色を設定すると便利です。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Windows Terminal は、豊富なカスタマイズオプションを提供する優れたターミナルアプリケーションです。フォント設定、カラーテーマ、タブ管理など、様々な設定を調整することで、自分好みの快適な開発環境を構築できます。&lt;/p&gt;
&lt;p&gt;特に、プログラミングには適切なフォントを選ぶことが重要です。Moralerspace Neon HWNF のようなプログラミング向けフォントを使用することで、長時間のコーディングも快適に行えるようになります。&lt;/p&gt;
&lt;p&gt;ぜひ、この記事を参考に、自分だけの理想的なターミナル環境を構築してみてください！&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;参考リンク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/ja-jp/windows/terminal/&quot;&gt;Windows Terminal 公式ドキュメント&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nerdfonts.com/&quot;&gt;Nerd Fonts 公式サイト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/terminal&quot;&gt;Windows Terminal の GitHub リポジトリ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Windows 11でWSL2とUbuntuをインストールする方法</title><link>https://orangevaper.dev/posts/wsl2-ubuntu-install/</link><guid isPermaLink="true">https://orangevaper.dev/posts/wsl2-ubuntu-install/</guid><description>Windows 11でWSL2を有効化し、Ubuntuをインストールして開発環境を整える方法を解説します。</description><pubDate>Tue, 18 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Windows 11 で WSL2 と Ubuntu をインストールする方法&lt;/h1&gt;
&lt;p&gt;こんにちは！今回は Windows 11 に WSL2（Windows Subsystem for Linux 2）を有効化し、Ubuntu をインストールする方法を詳しく解説します。これにより、Windows マシン上で Linux 環境を利用した開発が可能になります。&lt;/p&gt;
&lt;h2&gt;WSL2 とは？&lt;/h2&gt;
&lt;p&gt;WSL2 は、Windows 上で Linux バイナリを実行するための Microsoft の技術です。第一世代の WSL と比較して、WSL2 は以下の特徴があります：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;完全な Linux カーネルを使用&lt;/li&gt;
&lt;li&gt;システムコールの互換性が大幅に向上&lt;/li&gt;
&lt;li&gt;ファイルシステムのパフォーマンスが向上&lt;/li&gt;
&lt;li&gt;Docker などのコンテナ技術との親和性が高い&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;つまり、WSL2 は Windows 上でより本格的な Linux 環境を提供してくれるのです。&lt;/p&gt;
&lt;h2&gt;インストール方法&lt;/h2&gt;
&lt;p&gt;WSL2 と Ubuntu のインストールには、主に 2 つの方法があります：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;コマンドプロンプトまたは PowerShell を使用する方法（簡単な方法）&lt;/li&gt;
&lt;li&gt;手動で各機能を有効化する方法（詳細な設定が必要な場合）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ここでは、まず簡単な方法から紹介します。&lt;/p&gt;
&lt;h3&gt;方法 1：単一コマンドでのインストール（推奨）&lt;/h3&gt;
&lt;p&gt;Windows 11 では、単一のコマンドで WSL2 と Ubuntu をインストールできます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;管理者権限で PowerShell を開きます（スタートメニューで「PowerShell」を右クリックし、「管理者として実行」を選択）&lt;/li&gt;
&lt;li&gt;以下のコマンドを実行します：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;wsl --install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このコマンドは以下の処理を自動的に行います：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仮想マシンプラットフォーム機能を有効化&lt;/li&gt;
&lt;li&gt;WSL コンポーネントをインストール&lt;/li&gt;
&lt;li&gt;WSL2 をデフォルトバージョンとして設定&lt;/li&gt;
&lt;li&gt;Ubuntu の最新版をダウンロードしてインストール&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;コマンド実行後、&lt;strong&gt;システムの再起動が必要です&lt;/strong&gt;。再起動後、Ubuntu が自動的に起動し、初期設定が始まります。&lt;/p&gt;
&lt;h3&gt;方法 2：手動でのインストール（詳細設定が必要な場合）&lt;/h3&gt;
&lt;p&gt;特定の Linux ディストリビューションを選択したい場合や、より詳細な設定を行いたい場合は、手動でインストールすることもできます。&lt;/p&gt;
&lt;h4&gt;1. WSL 機能を有効化する&lt;/h4&gt;
&lt;p&gt;管理者権限の PowerShell で以下のコマンドを実行します：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2. 仮想マシンプラットフォームを有効化する&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;3. システムを再起動する&lt;/h4&gt;
&lt;p&gt;上記のコマンドを実行した後、一度システムを再起動します。&lt;/p&gt;
&lt;h4&gt;4. WSL2 Linux カーネル更新パッケージをダウンロードしてインストールする&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://www.microsoft.com/store/apps/9n6svws3rx71&quot;&gt;Microsoft Store&lt;/a&gt;から「WSL 2 Linux カーネル更新パッケージ」をダウンロードしてインストールします。&lt;/p&gt;
&lt;p&gt;あるいは、以下のリンクから直接ダウンロードすることもできます：
&lt;a href=&quot;https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi&quot;&gt;WSL2 Linux カーネル更新パッケージ - x64 マシン用&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;5. WSL2 をデフォルトバージョンとして設定する&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;wsl --set-default-version 2
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;6. Ubuntu をインストールする&lt;/h4&gt;
&lt;p&gt;Microsoft Store を開き、「Ubuntu」を検索してインストールします。
あるいは、PowerShell から以下のコマンドでインストールすることもできます：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --install -d Ubuntu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;特定のバージョンを指定する場合は以下のようにします：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Ubuntu 22.04をインストールする場合
wsl --install -d Ubuntu-22.04
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;7. 利用可能な Linux ディストリビューションを確認する&lt;/h4&gt;
&lt;p&gt;他の Linux ディストリビューションをインストールしたい場合は、以下のコマンドで利用可能なディストリビューションを確認できます：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --list --online
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Ubuntu の初期設定&lt;/h2&gt;
&lt;p&gt;Ubuntu を初めて起動すると、ユーザーアカウントの設定が求められます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ubuntu を起動します（スタートメニューから「Ubuntu」を選択）&lt;/li&gt;
&lt;li&gt;ユーザー名を入力します（任意の名前で OK）&lt;/li&gt;
&lt;li&gt;パスワードを設定します（入力時にはパスワードは表示されませんが、正常に入力されています）&lt;/li&gt;
&lt;li&gt;パスワードを再入力して確認します&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これで基本的なセットアップは完了です。&lt;/p&gt;
&lt;h2&gt;パッケージを最新の状態に更新する&lt;/h2&gt;
&lt;p&gt;Ubuntu をインストールしたら、まずパッケージを最新の状態に更新することをお勧めします：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このコマンドは、パッケージリストを更新（&lt;code&gt;apt update&lt;/code&gt;）し、インストール済みのパッケージを最新バージョンにアップグレード（&lt;code&gt;apt upgrade&lt;/code&gt;）します。&lt;code&gt;-y&lt;/code&gt;オプションは、確認プロンプトに自動的に「はい」と答えます。&lt;/p&gt;
&lt;h2&gt;WSL2 の便利な機能と設定&lt;/h2&gt;
&lt;h3&gt;1. Windows と Linux 間のファイルアクセス&lt;/h3&gt;
&lt;p&gt;WSL2 では、Windows と Linux 間でファイルを簡単に共有できます。&lt;/p&gt;
&lt;h4&gt;Windows から Ubuntu のファイルにアクセスする&lt;/h4&gt;
&lt;p&gt;エクスプローラーのアドレスバーに以下を入力します：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;\\wsl$\Ubuntu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;または、Ubuntu のホームディレクトリにアクセスするには：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;\\wsl$\Ubuntu\home\あなたのユーザー名
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;Ubuntu から Windows のファイルにアクセスする&lt;/h4&gt;
&lt;p&gt;Windows のドライブは &lt;code&gt;/mnt/&lt;/code&gt; ディレクトリにマウントされています。例えば：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Cドライブにアクセス
cd /mnt/c

# ユーザーフォルダにアクセス
cd /mnt/c/Users/あなたのWindowsユーザー名
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. メモリ使用量の設定&lt;/h3&gt;
&lt;p&gt;WSL2 は仮想マシンを使用しているため、メモリ使用量を制限することができます。ホームディレクトリに &lt;code&gt;.wslconfig&lt;/code&gt; ファイルを作成します：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;notepad &quot;$env:USERPROFILE\.wslconfig&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以下の内容を記述します（例：メモリを 6GB、プロセッサを 4 コアに制限）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[wsl2]
memory=6GB
processors=4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;設定を反映させるには、WSL を再起動します：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --shutdown
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. Ubuntu の起動と終了&lt;/h3&gt;
&lt;h4&gt;起動方法&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;スタートメニューから「Ubuntu」を選択&lt;/li&gt;
&lt;li&gt;PowerShell やコマンドプロンプトから &lt;code&gt;wsl&lt;/code&gt; と入力&lt;/li&gt;
&lt;li&gt;特定のディストリビューションを起動するには &lt;code&gt;wsl -d Ubuntu&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;終了方法&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu シェルで &lt;code&gt;exit&lt;/code&gt; と入力&lt;/li&gt;
&lt;li&gt;すべての WSL インスタンスをシャットダウンするには、PowerShell から &lt;code&gt;wsl --shutdown&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;トラブルシューティング&lt;/h2&gt;
&lt;h3&gt;WSL のバージョン確認&lt;/h3&gt;
&lt;p&gt;現在インストールされている WSL のバージョンを確認するには：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl -l -v
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;出力の「VERSION」列が「2」であることを確認してください。&lt;/p&gt;
&lt;h3&gt;Ubuntu が WSL1 で動作している場合&lt;/h3&gt;
&lt;p&gt;Ubuntu が WSL1 で動作している場合は、以下のコマンドで WSL2 に変換できます：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wsl --set-version Ubuntu 2
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;WSL コマンドが見つからないエラー&lt;/h3&gt;
&lt;p&gt;「WSL コマンドが見つかりません」というエラーが表示される場合は、Windows 機能の「Windows Subsystem for Linux」が有効になっていない可能性があります。以下の手順で有効化してください：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;コントロールパネル → プログラム → Windows の機能の有効化または無効化&lt;/li&gt;
&lt;li&gt;「Windows Subsystem for Linux」にチェックを入れる&lt;/li&gt;
&lt;li&gt;システムを再起動する&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;インストール中のエラー&lt;/h3&gt;
&lt;p&gt;インストール中に「WSL2 ではカーネルコンポーネントの更新が必要です」のようなエラーが表示される場合は、WSL2 Linux カーネル更新パッケージをインストールしていない可能性があります。前述のリンクからダウンロードしてインストールしてください。&lt;/p&gt;
&lt;h2&gt;WSL2 と Ubuntu を使った開発環境の構築&lt;/h2&gt;
&lt;p&gt;WSL2 と Ubuntu をインストールしたら、以下のような開発環境を構築することができます：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;開発ツールのインストール&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install build-essential git curl wget
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;プログラミング言語のインストール&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# Node.jsのインストール例
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs

# Pythonのインストール例
sudo apt install python3 python3-pip
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;他の開発ツールのインストール&lt;/strong&gt;：
必要に応じて、開発に必要なツールをインストールしましょう。
例えば、Neovim を使用する場合：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt install neovim
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;この記事では、Windows 11 で WSL2 を有効化し、Ubuntu をインストールする方法を紹介しました。WSL2 を使うことで、Windows マシン上で本格的な Linux 環境を利用した開発が可能になります。&lt;/p&gt;
&lt;p&gt;WSL2 と Ubuntu のインストールが完了したら、&lt;a href=&quot;/posts/windows-11-wsl2-fish-shell-setup&quot;&gt;Fish shell のセットアップ&lt;/a&gt;や&lt;a href=&quot;/posts/windows-11-wsl2-git-install&quot;&gt;Git のインストール&lt;/a&gt;などの記事も参考にして、より効率的な開発環境を構築してみてください。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;参考リンク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/ja-jp/windows/wsl/install&quot;&gt;Microsoft 公式ドキュメント - WSL のインストール&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/ja-jp/windows/wsl/install-manual&quot;&gt;Microsoft 公式ドキュメント - WSL2 の手動インストール手順&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ubuntu.com/&quot;&gt;Ubuntu 公式サイト&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.microsoft.com/ja-jp/windows/wsl/wsl-config&quot;&gt;WSL2 のベストプラクティス&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>Termuxの基本的な使い方の備忘録</title><link>https://orangevaper.dev/posts/how-to-use-termux/</link><guid isPermaLink="true">https://orangevaper.dev/posts/how-to-use-termux/</guid><description>AndroidスマホでのTermuxの使い方とタブ管理に関する備忘録</description><pubDate>Thu, 13 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Termux の基本的な使い方の備忘録&lt;/h1&gt;
&lt;p&gt;スマホでプログラミングやサイト制作をしたいと思ったことはありませんか？実は Android スマホと Termux を使えば、外出先でも PC とほぼ同等の開発環境を構築できます。この記事では、Termux の基本的な使い方、特にタブ管理について解説します。&lt;/p&gt;
&lt;h2&gt;Termux とは&lt;/h2&gt;
&lt;p&gt;Termux は、Android デバイス上で動作するターミナルエミュレーターアプリです。Linux コマンドを実行でき、さまざまな開発ツールをインストールして利用できます。&lt;/p&gt;
&lt;h2&gt;インストール方法&lt;/h2&gt;
&lt;p&gt;F-Droid から Termux をインストールするのがおすすめです。Google Play ストアのバージョンは更新が止まっている場合があります。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://f-droid.org/packages/com.termux/&quot;&gt;F-Droid からのインストールリンク&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;基本的なタブ操作&lt;/h2&gt;
&lt;p&gt;Termux では複数のタブを開いて、並行して作業することができます。これがスマホでの開発において非常に重要です。&lt;/p&gt;
&lt;h3&gt;新規タブの作成&lt;/h3&gt;
&lt;p&gt;新しいタブを作成するには、以下の方法があります：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;ショートカットを使う&lt;/strong&gt;: &lt;code&gt;Ctrl + Alt + t&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;長押しメニューから&lt;/strong&gt;: 画面下部を長押しし、表示されるメニューから「New Session」を選択&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ドロワーメニューから&lt;/strong&gt;: 画面左端から右にスワイプしてメニューを表示し、「New Session」をタップ&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;タブ間の移動&lt;/h3&gt;
&lt;p&gt;開いているタブ間を移動するには：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;キーボードショートカット&lt;/strong&gt;: &lt;code&gt;Ctrl + Alt + [1-9]&lt;/code&gt; (数字はタブの番号)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;スワイプ&lt;/strong&gt;: タブバーがある場合は左右にスワイプ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;セッションリストから&lt;/strong&gt;: 長押しメニューから「Sessions」を選択し、切り替えたいタブをタップ&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;タブの名前変更&lt;/h3&gt;
&lt;p&gt;タブに分かりやすい名前をつけると、複数タブでの作業が効率的になります：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;長押しメニューを表示&lt;/li&gt;
&lt;li&gt;「Rename Session」を選択&lt;/li&gt;
&lt;li&gt;新しい名前を入力して「OK」をタップ&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;タブの閉じ方&lt;/h3&gt;
&lt;p&gt;作業が終わったタブを閉じるには：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;そのタブで &lt;code&gt;exit&lt;/code&gt; コマンドを実行&lt;/li&gt;
&lt;li&gt;または長押しメニューから「Close Session」を選択&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;実践的なタブ活用例&lt;/h2&gt;
&lt;p&gt;スマホでウェブ開発をする場合の典型的なタブ構成例：&lt;/p&gt;
&lt;h3&gt;タブ 1: コードエディタ&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# Neovim/LazyVimを起動するタブ
nvim src/pages/blog-post.md
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;タブ 2: 開発サーバー&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 別タブでAstroの開発サーバーを起動
cd my-astro-project
pnpm dev
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;タブ 3: Git 操作&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 変更をコミット・プッシュするためのタブ
git status
git add .
git commit -m &quot;記事を追加&quot;
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;複数プロセスの管理&lt;/h2&gt;
&lt;h3&gt;バックグラウンド実行&lt;/h3&gt;
&lt;p&gt;コマンドの末尾に &lt;code&gt;&amp;amp;&lt;/code&gt; をつけると、バックグラウンドで実行できます：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm dev &amp;amp;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;その後、&lt;code&gt;fg&lt;/code&gt; コマンドで前面に戻せます。&lt;/p&gt;
&lt;h3&gt;プロセスの一時停止と再開&lt;/h3&gt;
&lt;p&gt;実行中のプロセスを一時停止するには：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Ctrl + z&lt;/code&gt; でプロセスを一時停止&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bg&lt;/code&gt; コマンドでバックグラウンドでの実行を再開&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fg&lt;/code&gt; コマンドで前面での実行を再開&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;プロセス一覧の確認&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;ps
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;tmux との組み合わせ&lt;/h2&gt;
&lt;p&gt;Termux のタブ機能だけでは物足りない場合は、tmux を導入するとより高度な画面分割ができます：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# tmuxのインストール
pkg install tmux

# tmuxの起動
tmux

# 水平分割
Ctrl + b, &quot;

# 垂直分割
Ctrl + b, %

# ペイン間の移動
Ctrl + b, 矢印キー
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;便利なキーボードショートカット&lt;/h2&gt;
&lt;p&gt;Termux でよく使うキーボードショートカット：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ショートカット&lt;/th&gt;
&lt;th&gt;機能&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + t&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;新規タブ作成&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + [1-9]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;タブ n 番へ移動&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + c&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;クリップボードへコピー&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + v&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;クリップボードから貼り付け&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + +&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;フォントサイズ拡大&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Alt + -&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;フォントサイズ縮小&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Ctrl + d&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;現在のタブを終了&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;トラブルシューティング&lt;/h2&gt;
&lt;h3&gt;タブが応答しなくなった場合&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;他のタブに切り替える&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ps -e | grep -i termux&lt;/code&gt; を実行して応答のないプロセス ID を特定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;kill [プロセスID]&lt;/code&gt; で強制終了&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;キーボードが表示されない&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;画面をタップしてキーボードを呼び出す&lt;/li&gt;
&lt;li&gt;それでも表示されない場合は、Termux アプリを再起動&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;その他の便利な設定&lt;/h2&gt;
&lt;h3&gt;エイリアスの設定&lt;/h3&gt;
&lt;p&gt;頻繁に使うコマンドにはエイリアスを設定すると便利です：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ~/.bashrcや~/.config/fish/config.fishに追加
alias dev=&apos;cd ~/my-project &amp;amp;&amp;amp; pnpm dev&apos;
alias gp=&apos;git pull&apos;
alias gs=&apos;git status&apos;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Nerd Font の導入&lt;/h3&gt;
&lt;p&gt;LazyVim など多くの現代的なツールでは Nerd Font が推奨されます：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 準備中...
# Termuxでのフォント設定はやや複雑なため、別途詳細な手順を紹介します
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;Termux は、スマホという限られた環境でも PC 並みの開発体験を提供してくれる素晴らしいツールです。タブ機能をうまく活用することで、複数の作業を並行して行えるようになります。カフェや移動中など、PC がない場所でも開発を続けられるのは大きなメリットです。&lt;/p&gt;
&lt;p&gt;ぜひ Termux を使って、スマホでも快適な開発環境を構築してみてください！&lt;/p&gt;
</content:encoded></item><item><title>LazyVim のインストール方法と使いかた</title><link>https://orangevaper.dev/posts/how-to-install-and-use-lazyvim/</link><guid isPermaLink="true">https://orangevaper.dev/posts/how-to-install-and-use-lazyvim/</guid><description>LazyVim のインストール方法と使いかた</description><pubDate>Sat, 13 Apr 2024 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;LazyVim のインストール方法と使いかた&lt;/h1&gt;
&lt;h2&gt;LazyVim とは&lt;/h2&gt;
&lt;p&gt;LazyVim とは、モダンな Linux で使える Neovim エディターを拡張したもので、デフォルトで多くの便利な機能やキーバインドが設定されている開発者向けのエディターです。通常の Neovim では、使いやすくするために多くの設定コードを自分で書く必要がありますが、LazyVim はそれらの設定を最初から提供してくれます。
言えば VSCode のような IDE 環境を LazyVim のインストールにより簡単に設定できるという代物です。
個人的には Neovim を使うことによってカーソル移動がキーボードのみで行うのがスムーズなので大好きです。マウスを使用することが違うソフトを使うときのみになり、かなり効率的だと感じています。&lt;/p&gt;
&lt;p&gt;LazyVim の特徴：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VSCode のような使い心地（ファイルツリー、検索機能など）&lt;/li&gt;
&lt;li&gt;プラグイン管理が簡単&lt;/li&gt;
&lt;li&gt;LSP（Language Server Protocol）によるコード補完やエラー検出&lt;/li&gt;
&lt;li&gt;美しいテーマとアイコン&lt;/li&gt;
&lt;li&gt;カスタマイズが容易&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;LazyVim のインストール方法&lt;/h2&gt;
&lt;h3&gt;前提条件&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Neovim 0.9.0 以上がインストールされていること&lt;/li&gt;
&lt;li&gt;Git がインストールされていること&lt;/li&gt;
&lt;li&gt;ターミナルで使用するフォントとして Nerd Font がインストールされていること（アイコン表示に必要）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;インストール手順&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;まず、既存の Neovim 設定をバックアップします（既存ユーザーの場合）:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;# Linux/macOS
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
mv ~/.local/state/nvim ~/.local/state/nvim.bak
mv ~/.cache/nvim ~/.cache/nvim.bak
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;LazyVim の設定をクローンします:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;git clone https://github.com/LazyVim/starter ~/.config/nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;一時ファイルを削除します（任意）:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;rm -rf ~/.config/nvim/.git
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;Neovim を起動すると、必要なプラグインが自動的にインストールされます:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;nvim
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;LazyVim の基本的な使い方&lt;/h2&gt;
&lt;h3&gt;主要なキーバインド&lt;/h3&gt;
&lt;h4&gt;基本操作&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;&lt;/code&gt; - リーダーキー（多くのコマンドの起点）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;q&lt;/code&gt; - Neovim を終了&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;w&lt;/code&gt; - ファイルを保存&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Ctrl-s&amp;gt;&lt;/code&gt; - ファイルを保存（別の方法）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;ファイル操作&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;e&lt;/code&gt; - ファイルエクスプローラーを開く/閉じる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ff&lt;/code&gt; - ファイル名で検索&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;fr&lt;/code&gt; - 最近開いたファイルを検索&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;sg&lt;/code&gt; - ファイル内容を Grep 検索（全文検索）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;コード操作&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;K&lt;/code&gt; - カーソル位置の要素に関するドキュメントを表示（TypeScript の型情報など）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gd&lt;/code&gt; - 定義にジャンプ&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gr&lt;/code&gt; - 参照を検索&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ca&lt;/code&gt; - コードアクション（リファクタリングなど）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;cf&lt;/code&gt; - コードをフォーマット&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;ウィンドウ操作&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Ctrl--&amp;gt;&lt;/code&gt; - 画面縮小&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Ctrl&amp;gt;=&lt;/code&gt; - 画面拡大&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Ctrl&amp;gt;0&lt;/code&gt; - 画面サイズを 100%に戻す&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;|&lt;/code&gt; - 画面を垂直分割&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;-&lt;/code&gt; - 画面を水平分割&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Ctrl&amp;gt;h/j/k/l&lt;/code&gt; - ウィンドウ間を移動&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;タブとバッファ&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;bp&lt;/code&gt; - 前のバッファに移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;bn&lt;/code&gt; - 次のバッファに移動&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;bd&lt;/code&gt; - 現在のバッファを閉じる&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Tab&amp;gt;&lt;/code&gt; - 次のバッファに切り替え&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Shift-Tab&amp;gt;&lt;/code&gt; - 前のバッファに切り替え&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;ターミナル&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;ft&lt;/code&gt; - ターミナルをフローティングウィンドウで開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;tt&lt;/code&gt; - ターミナルを新しいタブで開く&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;プラグイン管理&lt;/h2&gt;
&lt;p&gt;LazyVim は Lazy.nvim をプラグイン管理に使用しています。プラグインの管理には以下のコマンドが便利です：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;l&lt;/code&gt; - Lazy プラグインマネージャーを開く&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;pp&lt;/code&gt; - プラグインの確認&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;pu&lt;/code&gt; - プラグインの更新&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;LazyVim のカスタマイズ方法&lt;/h2&gt;
&lt;p&gt;LazyVim の設定は &lt;code&gt;~/.config/nvim/lua/&lt;/code&gt; ディレクトリで管理されています。主な設定ファイルは：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;~/.config/nvim/lua/config/options.lua&lt;/code&gt; - Neovim の基本設定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.config/nvim/lua/config/keymaps.lua&lt;/code&gt; - キーマップの設定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.config/nvim/lua/config/lazy.lua&lt;/code&gt; - プラグイン管理の設定&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.config/nvim/lua/plugins/&lt;/code&gt; - プラグイン固有の設定&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;新しいプラグインを追加するには、&lt;code&gt;~/.config/nvim/lua/plugins/&lt;/code&gt; ディレクトリに新しいファイルを作成します。&lt;/p&gt;
&lt;p&gt;例えば、新しいカラースキームを追加する場合：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;-- ~/.config/nvim/lua/plugins/colorscheme.lua
return {
  {
    &quot;folke/tokyonight.nvim&quot;,
    lazy = false,
    priority = 1000,
    config = function()
      vim.cmd.colorscheme &quot;tokyonight&quot;
    end,
  },
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;トラブルシューティング&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;プラグインのインストールに失敗する場合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;l&lt;/code&gt; でプラグインマネージャーを開き、エラーがあるプラグインを確認&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;Space&amp;gt;pu&lt;/code&gt; で手動更新を試みる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;LSP（言語サーバー）が動作しない場合：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;:LspInfo&lt;/code&gt; コマンドで状態を確認&lt;/li&gt;
&lt;li&gt;必要な言語サーバーがインストールされているか確認（&lt;code&gt;:Mason&lt;/code&gt; で確認）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;フォントの問題（アイコンが正しく表示されない）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Nerd Font がインストールされているか確認&lt;/li&gt;
&lt;li&gt;ターミナルの設定で Nerd Font を使用するよう設定&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;LazyVim は Neovim の設定を簡単にするためのフレームワークで、すぐに使える豊富な機能とカスタマイズの自由度を提供します。VSCode のような使い心地でありながら、Vim/Neovim の効率的な編集能力を活かすことができます。&lt;/p&gt;
&lt;p&gt;基本的なキーバインドを覚えることで、プログラミング作業の効率を大幅に向上させることができるでしょう。また、LazyVim は設定ファイルを自分で調整することで、自分好みの開発環境に育てていくことができます。&lt;/p&gt;
</content:encoded></item><item><title>githubへのpush</title><link>https://orangevaper.dev/posts/how-to-github-push/</link><guid isPermaLink="true">https://orangevaper.dev/posts/how-to-github-push/</guid><description>githubへのソースのpush方法のメモ</description><pubDate>Sat, 23 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;github への push&lt;/h1&gt;
&lt;p&gt;github への push の方法をメモしておきます。てか、そんなにやることないので記事的にどうでしょうか。と思い始めました。このブログを github に push しているのですが、どうやってやったか詳細まで覚えてないので、調べながらメモしますｗ&lt;/p&gt;
&lt;h2&gt;github アカウントを作ってなかったら作成する&lt;/h2&gt;
&lt;p&gt;github を使うので github アカウントを作成。公式サイト（https://github.com/）にアクセスして「Sign up」からアカウントを作成できます。&lt;/p&gt;
&lt;h2&gt;初回だけ git にユーザー名とメールアドレスを設定&lt;/h2&gt;
&lt;p&gt;ローカルの git にユーザー名とメールアドレスを設定しておきます。コミットの履歴情報といったメタデータとして使われる。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global user.name &quot;YourGitHubUsername&quot;
git config --global user.email &quot;youremail@example.com&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;設定の確認&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git config --global --get user.name
git config --global --get user.email
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;github にリポジトリを作成&lt;/h2&gt;
&lt;p&gt;ログイン後 github でリポジトリを作成します。リポジトリを作成時に README を作成するかどうか聞かれるので、作成しないでおきます。&lt;/p&gt;
&lt;h2&gt;リモートリポジトリの URL をコピーする&lt;/h2&gt;
&lt;p&gt;リポジトリが作成されたら、緑色の「Code」ボタンをクリックして表示される URL をコピーします。これは後でローカルリポジトリとリンクさせるために使います。&lt;/p&gt;
&lt;h2&gt;Astro ブログの push&lt;/h2&gt;
&lt;h3&gt;ローカルリポジトリの初期化&lt;/h3&gt;
&lt;p&gt;Astro プロジェクトのルートディレクトリに移動し、以下のコマンドで Git リポジトリを初期化します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd your-astro-blog
git init
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;最初のコミットを作成&lt;/h3&gt;
&lt;p&gt;コミットするファイルを指定（ステージング）します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# すべてのファイルをステージングする場合
git add .

# 特定のファイルだけをステージングする場合
git add src/pages/your-new-post.md
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ステージングしたファイルをコミットします。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git commit -m &quot;初回コミット：Astroブログの設定とコンテンツ&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;リモートリポジトリを設定&lt;/h3&gt;
&lt;p&gt;先ほどコピーした URL を使ってリモートリポジトリを設定します。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git remote add origin https://github.com/yourusername/your-repo-name.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;設定を確認するには：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git remote -v
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;ブランチ名を設定して初回プッシュ&lt;/h3&gt;
&lt;p&gt;最近の GitHub ではデフォルトブランチ名が「main」になっているので、それに合わせます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# ブランチ名をmainに設定
git branch -M main

# 初回プッシュ
git push -u origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;日常的な更新作業&lt;/h2&gt;
&lt;p&gt;記事を追加したり編集したりした後の通常のプッシュ手順：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;変更したファイルをステージング&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;git add .
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;変更内容をコミット&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;git commit -m &quot;記事の追加：GitHubへのプッシュ方法について&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;GitHub にプッシュ&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;トラブルシューティング&lt;/h2&gt;
&lt;h3&gt;認証エラーが発生する場合&lt;/h3&gt;
&lt;p&gt;GitHub は 2021 年 8 月以降、パスワード認証をサポートしなくなりました。代わりに個人アクセストークン（PAT）か SSH 認証を使用する必要があります。&lt;/p&gt;
&lt;h4&gt;個人アクセストークンの設定方法&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;GitHub にログイン&lt;/li&gt;
&lt;li&gt;右上のプロフィールアイコンから「Settings」を選択&lt;/li&gt;
&lt;li&gt;左側のサイドバーで「Developer settings」をクリック&lt;/li&gt;
&lt;li&gt;「Personal access tokens」→「Tokens (classic)」を選択&lt;/li&gt;
&lt;li&gt;「Generate new token」をクリック&lt;/li&gt;
&lt;li&gt;トークンに名前をつけ、適切な権限（repo 全体へのアクセスなど）を選択&lt;/li&gt;
&lt;li&gt;トークンを生成してコピー&lt;/li&gt;
&lt;li&gt;push 時にパスワードの代わりにこのトークンを使用&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;# プッシュ時にユーザー名とトークンを要求される
git push -u origin main
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;コンフリクトが発生した場合&lt;/h3&gt;
&lt;p&gt;リモートとローカルで同じファイルが異なる形で編集されると、コンフリクトが発生します。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;まず最新の変更を取得&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;git pull
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;コンフリクトしたファイルを編集してコンフリクトを解決&lt;/li&gt;
&lt;li&gt;解決したファイルをステージング&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;git add 解決したファイル
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;コミットしてプッシュ&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;git commit -m &quot;コンフリクトを解決&quot;
git push
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Astro ブログの自動デプロイ設定&lt;/h2&gt;
&lt;p&gt;GitHub にプッシュした Astro ブログを自動的にデプロイするには、以下のようなサービスと連携すると便利です：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Netlify&lt;/strong&gt;: GitHub リポジトリと連携して、push するたびに自動的にデプロイ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vercel&lt;/strong&gt;: 同様に GitHub と連携し、プレビューデプロイなども可能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Pages&lt;/strong&gt;: GitHub Actions を使って自動デプロイを設定可能&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例えば、Netlify での設定方法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Netlify にサインアップ/ログイン&lt;/li&gt;
&lt;li&gt;「New site from Git」をクリック&lt;/li&gt;
&lt;li&gt;GitHub を選択してリポジトリを連携&lt;/li&gt;
&lt;li&gt;ビルド設定（ビルドコマンドとパブリックディレクトリ）を指定：
&lt;ul&gt;
&lt;li&gt;ビルドコマンド: &lt;code&gt;npm run build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;パブリックディレクトリ: &lt;code&gt;dist&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;「Deploy site」をクリック&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;これで GitHub にプッシュするたびに自動的にサイトが更新されます。&lt;/p&gt;
&lt;h2&gt;まとめ&lt;/h2&gt;
&lt;p&gt;GitHub へのプッシュは最初は少し手間がかかりますが、慣れれば簡単な作業です。Astro ブログのようなウェブサイトのソースコードを管理するのに最適な方法で、バージョン管理や自宅の PC や外出時のノートパソコンでの作業も可能になります。また、自動デプロイと組み合わせることで、記事を書いてプッシュするだけでウェブサイトを更新できる効率的なワークフローが実現できます。&lt;/p&gt;
</content:encoded></item><item><title>HHKBキーボードのお話</title><link>https://orangevaper.dev/posts/hhkb/</link><guid isPermaLink="true">https://orangevaper.dev/posts/hhkb/</guid><description>私が愛用しているキーボードHHKB Professional BTの紹介をしていこうかと思います。</description><pubDate>Mon, 18 Sep 2023 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;HHKB キーボードのお話&lt;/h1&gt;
&lt;p&gt;今回は私が愛用しているキーボード HHKB Professional BT の紹介をしていこうかと思います。以下は気に入っている点。&lt;/p&gt;
&lt;h2&gt;コンパクト&lt;/h2&gt;
&lt;p&gt;テンキーがないのと、小さいサイズでコンパクトです。デザインもスッキリです。&lt;/p&gt;
&lt;h2&gt;US 配列&lt;/h2&gt;
&lt;p&gt;エンターキーが日本語キーボードと違い横に細長い形状です。スッキリしており好きです。&lt;/p&gt;
&lt;h2&gt;コーディングに最適&lt;/h2&gt;
&lt;p&gt;HHKB に限らず US キーボードも同様ですが、[]、{}、;: &apos;&apos; &quot;&quot;などセットの括弧の配列が便利なように近いキーに割り当てられています。他には HHKB 固有のものとしては特に矢印キーがありません。Fn キーと組み合わせてキーを移動しますが、離れた位置への右手の移動が少なくなり便利です。&lt;/p&gt;
&lt;h2&gt;タイピング効率がいい&lt;/h2&gt;
&lt;p&gt;キーボードの文字が便利に配置されており、なれるとキーボードからマウスへの手の移動が減り、入力作業がはかどります。
ESC が他の標準的なキーボードより近いし、|、\、BackSpace や Delete の位置が近くていいです。&lt;/p&gt;
&lt;h2&gt;気持ちいい打鍵感&lt;/h2&gt;
&lt;p&gt;スコスコ・トコトコという感じの打鍵音と、浅すぎないタイピングと押し心地が癖になります。HHKB 以外の例えばメカニカルキーボードのようなカチカチといったタイピングではない気持ちいいタイピングができます。
ただし、最近のメカニカルキーボードやゲーミングキーボードよりは押し圧は確実に重いと思います。この点だけ好みが分かれるところですね。&lt;/p&gt;
&lt;h2&gt;無刻印が選べる&lt;/h2&gt;
&lt;p&gt;そのキーボード何も書いてないんですね！？と言われるためのキーボードですｗ。ノールックでタイピングというかキーボードを見ないでタッチタイピングができる方の特権かもしれないですが、アルファベットや記号の刻印がキーにないキーボードが選べます。
キーボードに何か書いてあってもタイピングに慣れたらそんなにキーボードを見なくなるでしょ？その延長上です。&lt;/p&gt;
&lt;h2&gt;所有の喜び&lt;/h2&gt;
&lt;p&gt;まるでピアノの鍵盤のような、というか鍵盤ハーモニカのような捉え方もできます。鍵盤ハーモニカと言われるとそんなに高級感ないんですけど、そんな感じです。最近は色のついたキートップを限定数量で販売なんてのもあります。&lt;/p&gt;
&lt;h2&gt;これじゃないとだめになるｗ&lt;/h2&gt;
&lt;p&gt;自宅でも US 配列のメカニカルキーボードを使っていますが、HHKB の打鍵感には勝てません。ESC が Neovim のモード切替に必要だからで HHKB では打ちやすいというのもあります。&lt;/p&gt;
&lt;p&gt;その他には括弧やコロン、セミコロン、カンマ、ダブルコーテーションがシフトで切り替えるだけなのと、右や左で対応しているなど、すごく便利です。&lt;/p&gt;
&lt;p&gt;ゲーム用のキーボードも持っていて、それも US キーボードでいいんですが、やっぱり Neovim には HHKB です。&lt;/p&gt;
&lt;p&gt;キーボードを見ないで使い、ゆったりとタイピングができ、リラックスして入力作業ができます。モニターの高さも高く設定することが可能です。&lt;/p&gt;
&lt;h2&gt;英数、日本語切り替え&lt;/h2&gt;
&lt;p&gt;英数と日本語の切り替えですが、Mac でも Windows でも HHKB キーボードの A キーの左の Caps Lock を Ctrl とし、Ctrl + Space で切り替えるようにしています。これにする利点は、自宅の Windows で はメカニカルキーボードを据え置きにしていることが多いのですが、同じ方法で切り替えることができるからです。&lt;/p&gt;
</content:encoded></item></channel></rss>