<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Gatsby Starter Blog RSS Feed]]></title><description><![CDATA[A starter blog demonstrating what Gatsby can do.]]></description><link>https://yukimakura.cc</link><generator>GatsbyJS</generator><lastBuildDate>Tue, 13 Oct 2026 05:42:44 GMT</lastBuildDate><item><title><![CDATA[718boxster(982)にて自力でAndroidAutoを有効化する！]]></title><description><![CDATA[Porsche 718 Boxster (2018年モデル) 買いました！ いやーーーーーー買っちまいましたよ！！ボクスター！ (実は去年の夏ごろに購入していたのです、忙しくて記事化できず...^^;) オープントップでMR…]]></description><link>https://yukimakura.cc/718boxster(982)にて自力でAndroidAutoを有効化する！/</link><guid isPermaLink="false">https://yukimakura.cc/718boxster(982)にて自力でAndroidAutoを有効化する！/</guid><pubDate>Sat, 26 Jul 2025 10:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;porsche-718-boxster-2018年モデル-買いました&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#porsche-718-boxster-2018%E5%B9%B4%E3%83%A2%E3%83%87%E3%83%AB-%E8%B2%B7%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F&quot; aria-label=&quot;porsche 718 boxster 2018年モデル 買いました permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Porsche 718 Boxster (2018年モデル) 買いました！&lt;/h1&gt;
&lt;p&gt;いやーーーーーー買っちまいましたよ！！ボクスター！&lt;br&gt;
(実は去年の夏ごろに購入していたのです、忙しくて記事化できず...^^;)&lt;br&gt;
オープントップでMR、しかもチョーパワフル！&lt;br&gt;
これが真の人馬一体だと痛感しましたね...&lt;br&gt;
もはや私が下手すぎて足引っ張ってるぐらい^^;&lt;br&gt;
あともちろんMTです！&lt;br&gt;
PDKも素晴らしいと思うのですが、あくまで速さではなく泥臭い楽しさ重視です！&lt;br&gt;
あとMTのほうがリセールも高いことを信じてます！！！&lt;/p&gt;
&lt;p&gt;高かったけど、今後のボクスターはEV化するだの、MTは駆逐されていくだろうと&lt;br&gt;
あと、もし家庭を持つ（全く想像できんが...）ことになったら真っ先に切り捨て候補になるだろうということで&lt;br&gt;
めちゃ奮発しましたよ〜〜〜いや〜買ってよかった！&lt;br&gt;
楽しいし所有欲も鬼満たされる...ε-(´∀｀*)ﾎｯ&lt;/p&gt;
&lt;p&gt;ですが、ただただ走って満足するだけじゃないのが私、ゆきまくらでございます^^;&lt;br&gt;
コーディングだの、PCMの設定だの色々いじっていきますぞい！&lt;br&gt;
んで、これが第一弾です！&lt;/p&gt;
&lt;p&gt;&lt;font color=red &gt;&lt;strong&gt;完全に自己責任でお願いします！文鎮化してもゆきまくらは一切責任とりません！&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=red &gt;&lt;strong&gt;完全に自己責任でお願いします！文鎮化してもゆきまくらは一切責任とりません！&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;font color=red &gt;&lt;strong&gt;完全に自己責任でお願いします！文鎮化してもゆきまくらは一切責任とりません！&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;
&lt;/br&gt;
...3回言ったからヨシ!(もし文鎮化したら修理代めっちゃ高そうだからね...)&lt;/p&gt;
&lt;h1 id=&quot;ネタソース&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%8D%E3%82%BF%E3%82%BD%E3%83%BC%E3%82%B9&quot; aria-label=&quot;ネタソース permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ネタソース&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=ybAS6n9Gw_g&amp;#x26;list=LL&amp;#x26;index=4&amp;#x26;t=1s&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;(YouTube)Android Auto and Apple Car Play on a 2017 Porsche Macan&lt;/a&gt;&lt;br&gt;
↑Macanとなっていますが、多分おなじPCMだとおもったのでこれを参考にしました&lt;/p&gt;
&lt;h1 id=&quot;下準備&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%B8%8B%E6%BA%96%E5%82%99&quot; aria-label=&quot;下準備 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;下準備&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;PC(OS問わず)
&lt;ul&gt;
&lt;li&gt;SDカードをさせるようにしておくこと(USBアダプタでも可)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SDカード&lt;/li&gt;
&lt;li&gt;PCM4系のポルシェ&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;pcでの作業&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pc%E3%81%A7%E3%81%AE%E4%BD%9C%E6%A5%AD&quot; aria-label=&quot;pcでの作業 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;PCでの作業&lt;/h1&gt;
&lt;h2 id=&quot;ファイルのダウンロード&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89&quot; aria-label=&quot;ファイルのダウンロード permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ファイルのダウンロード&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Mr-MIBonk/M.I.B._More-Incredible-Bash/releases&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;プレリリースを除いた、最新のM.I.BのリリースのSource Code(zip)をダウンロードする&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;私は、&lt;code class=&quot;language-text&quot;&gt;V3.6.0 - QR Edition&lt;/code&gt;のSource Code(zip)をダウンロードしました&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://mibsolution.one/#/1&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;mibsolution.oneからパッチをダウンロードする&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;ユーザー名&lt;code class=&quot;language-text&quot;&gt;guest&lt;/code&gt;、パスワード&lt;code class=&quot;language-text&quot;&gt;guest&lt;/code&gt;でログインする&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;M.I.B&lt;/code&gt;→&lt;code class=&quot;language-text&quot;&gt;(最新の日付)_M.I.B_Patches&lt;/code&gt;をダウンロードする
&lt;ul&gt;
&lt;li&gt;私は、&lt;code class=&quot;language-text&quot;&gt;20230926_M.I.B_Patches&lt;/code&gt;でした&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;sdカードの準備&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#sd%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AE%E6%BA%96%E5%82%99&quot; aria-label=&quot;sdカードの準備 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SDカードの準備&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;車でPCMのバージョンを確認する
&lt;ul&gt;
&lt;li&gt;Home画面→ &lt;code class=&quot;language-text&quot;&gt;設定&lt;/code&gt; タブ→ &lt;code class=&quot;language-text&quot;&gt;ソフトウェアアップデート&lt;/code&gt; → &lt;code class=&quot;language-text&quot;&gt;バージョン情報&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;自分のは &lt;code class=&quot;language-text&quot;&gt;MHI2_JP_POG11_P0816 0816&lt;/code&gt; でした&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SDカードをFat32にて、&lt;strong&gt;8GB以下でフォーマットする(←ココ重要)&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;私は、16GBのSDに対してFat32で4GBでフォーマットしました&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;M.I.Bのzipファイルを解凍し、それをフォーマットしたSDにまるっとコピーする&lt;/li&gt;
&lt;li&gt;SDカードのルートディレクトリに&lt;code class=&quot;language-text&quot;&gt;patches&lt;/code&gt;というディレクトリがあるので、そこに&lt;code class=&quot;language-text&quot;&gt;(最新の日付)_M.I.B_Patches.7z&lt;/code&gt;の中身をまるっとコピーする&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;patches&lt;/code&gt; のなかに1.で確認したファイルがあるか確認する。無い場合、諦めるか、近い日付や名前のファイルをコピーし自分のPCMに合うものにリネームする
&lt;ul&gt;
&lt;li&gt;&lt;font color=red &gt;&lt;b&gt;完全自己責任です！普通に文鎮化する可能性があるので覚悟してください!!!&lt;/b&gt; &lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://drive.google.com/file/d/1-aW1MB11W-142IHzsMsqQqQVKGeFji38/view?usp=sharing&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;私が作成した&amp;#x26;成功したファイル(MHI2_JP_POG11_P0816 0816)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SDカードのルートディレクトリに&lt;code class=&quot;language-text&quot;&gt;_Swdlautorun.txt&lt;/code&gt;があるので、&lt;code class=&quot;language-text&quot;&gt;Swdlautorun.txt&lt;/code&gt;にリネームする
&lt;ul&gt;
&lt;li&gt;これを行うと、SDカードをPCMに差したときに自動でアップデートが立ち上がるようになる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;ボクスターでの作業&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9C%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%A7%E3%81%AE%E4%BD%9C%E6%A5%AD&quot; aria-label=&quot;ボクスターでの作業 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ボクスターでの作業&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;SDカードをナビ下のSD1スロットに挿入します&lt;/li&gt;
&lt;li&gt;イグニッションをオンにします &lt;strong&gt;(エンジンは始動しないでください!)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;自動実行を設定している場合、アップデートは自動的に開始されます
&lt;ul&gt;
&lt;li&gt;更新中は3回ほど再起動します。このプロセスが完了するまで待ちます。3回目の再起動後、5分間のタイマーを設定します&lt;/li&gt;
&lt;li&gt;設定していない場合は、ナビでSD1からのソフトウェアアップデートを選択してください&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;「Home」ボタンを押してHome画面に戻し、「Car」ボタンと「Tuner」ボタンを同時に5秒間押し続けると、緑色のメニューが表示されます&lt;/li&gt;
&lt;li&gt;インフォテインメントディスプレイの右側にあるスクロールホイールを使い、「MIB」メニューボタンまでスクロールダウン(左スクロール)します。スクロールホイールを押し込んで確定します。&lt;/li&gt;
&lt;li&gt;この新しいメニューでさらにスクロールダウンし、「patch_unit_aio」メニューが表示されるまで進みます。スクロールホイールを押し込んで確定します&lt;/li&gt;
&lt;li&gt;「Patch Now」ボタンまでスクロールダウンし、エンターを押してこの選択を確定します。いくつかの作業が開始されます&lt;/li&gt;
&lt;li&gt;これが完了したら、「Home」を押してHome画面に戻ります。&lt;/li&gt;
&lt;li&gt;センターコンソールにUSBケーブルでスマートフォンと接続し、AndroidAutoをペアリングすると接続できるはず&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;wireless-android-auto-おまけ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#wireless-android-auto-%E3%81%8A%E3%81%BE%E3%81%91&quot; aria-label=&quot;wireless android auto おまけ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Wireless Android Auto (おまけ)&lt;/h2&gt;
&lt;p&gt;これでナビがネィティブにAndroidAuto対応できたので、あとは安い汎用品の無線化アダプタを買えば無線化できます!&lt;br&gt;
本当は私が買ったも(4000円弱ぐらい)のを紹介したかったのですが、残念ながら終売...(´・ω・｀)ｼｮﾎﾞｰﾝ&lt;br&gt;
一応、&lt;a href=&quot;https://amzn.asia/d/b2CLIKR&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;それっぽいやつのリンク&lt;/a&gt;貼っときます&lt;br&gt;
&lt;strong&gt;(使えるかは保証しませんよ！)&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h1&gt;
&lt;p&gt;＿人人人人人人人人人＿&lt;br&gt;
＞   &lt;a href=&quot;https://yukimakura.cc/RX-8%E3%81%AE%E4%B8%80%E5%B9%B4%E7%82%B9%E6%A4%9C%E3%81%AB%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%BE%E3%81%97%E3%81%9F%EF%BC%81/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;  裏切りのRX-8!!!   &lt;/a&gt; ＜&lt;br&gt;
￣Y^Y^Y^Y^Y^Y^Y￣&lt;/p&gt;
&lt;p&gt;本当は2台持ちしたかった...&lt;br&gt;
では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[NodeRedの自作ノードでDIコンテナを使ってみた(LT会のパワポ)]]></title><description><![CDATA[スライド ビジュアルプログラミングIoTLT vol.19で発表した内容です Github node-red-contrib-di-container-demo]]></description><link>https://yukimakura.cc/NodeRedの自作ノードでDIコンテナを使ってみた/</link><guid isPermaLink="false">https://yukimakura.cc/NodeRedの自作ノードでDIコンテナを使ってみた/</guid><pubDate>Thu, 30 Jan 2025 21:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;スライド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89&quot; aria-label=&quot;スライド permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スライド&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://iotlt.connpass.com/event/340405/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ビジュアルプログラミングIoTLT vol.19で発表した内容です&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 59.27083333333333%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://docs.google.com/presentation/d/e/2PACX-1vShxCa3u6zvBoX4KlFwNpdHKdaUIfRMw7NgwkahFIWgpBuRGjEpVtzxTOuPzPNhPZPmK0-YPq6wX3wq/embed?start=false&amp;amp;loop=false&amp;amp;delayms=60000&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot; style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;h2 id=&quot;github&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#github&quot; aria-label=&quot;github permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Github&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/yukimakura/node-red-contrib-di-container-demo&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;node-red-contrib-di-container-demo&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[stm32-rsのDevContainer環境設定]]></title><description><![CDATA[あいさつ 2025年あけましておめでとうございますm(_ _)m 昨年は、いろいろありました... 元日から大地震 転職(愛知→東京) 車の買い替え(後日記事化予定) 漢字1文字で表すならば「動」か「変」が似つかわしい…]]></description><link>https://yukimakura.cc/stm32-rsのDevContainer環境設定/</link><guid isPermaLink="false">https://yukimakura.cc/stm32-rsのDevContainer環境設定/</guid><pubDate>Mon, 27 Jan 2025 08:30:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;あいさつ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%82%E3%81%84%E3%81%95%E3%81%A4&quot; aria-label=&quot;あいさつ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;あいさつ&lt;/h1&gt;
&lt;p&gt;2025年あけましておめでとうございますm(_ _)m&lt;br&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;p&gt;漢字1文字で表すならば「動」か「変」が似つかわしい1年でした！&lt;br&gt;
今年のモットーとしては、英語をなんとかしたいってところですかね...&lt;br&gt;
ということで、今年もどうぞよろしくおねがい致しますm(_ _)m&lt;/p&gt;
&lt;h1 id=&quot;stm32-rsについて&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#stm32-rs%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&quot; aria-label=&quot;stm32 rsについて permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;stm32-rsについて&lt;/h1&gt;
&lt;p&gt;RustはLLVMを経て様々なアーキテクチャのバイナリを生成することができます。&lt;br&gt;
stm32は皆さんご存知STMicroのマイコンなわけですが、Arm系アーキテクチャ(ただしマイコン用)なのでLLVMとしても対応しています。&lt;br&gt;
&lt;strong&gt;Rustの素晴らしいDX(開発体験の方ね)をこの高コスパのマイコン開発に活かせれるわけです！&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;ただ、(STM32のビルドツールなどの)開発環境を整えるのが若干めんどいのが欠点...&lt;br&gt;
この記事はそれすらを解決しようという目的です。&lt;/p&gt;
&lt;h1 id=&quot;前提条件事前準備&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99&quot; aria-label=&quot;前提条件事前準備 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;前提条件・事前準備&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Ubuntu22.04かDebian12のLinuxOSマシン&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;それ以外はカーネルパニックになっても知らないぞ！（・∀・）ﾆﾔﾆﾔ
&lt;ul&gt;
&lt;li&gt;WSL2は想定してないが、USB-IPの仕様次第?(そもそもまだ入ってなかったっけ?)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;新しいバージョンな分には問題ないはず...&lt;/li&gt;
&lt;li&gt;一応、Ubuntu20.04でもデバック開始とブレークポイントできた&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;VSCode&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Dev Container拡張機能&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Docker&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DevContainerする場合はそりゃ必要。ない人は入れよう！
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;curl -fsSL get.docker.com -o get-docker.sh &amp;amp;&amp;amp; sh get-docker.sh &amp;amp;&amp;amp; sudo gpasswd -a $USER docker &amp;amp;&amp;amp; sudo docker run hello-world &amp;amp;&amp;amp; rm -f get-docker.sh&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://qiita.com/KEINOS/items/bdc9450c1a88c210aa88&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;いつもお世話になってるQiita記事(ありがとうございます)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;stm32マイコン(Nucleoでも可)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;J-Link化されている場合は本記事スコープ外&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;st-link(Nucleoじゃない場合は必要)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;手順&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%89%8B%E9%A0%86&quot; aria-label=&quot;手順 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;手順&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;任意のフォルダを作成し、それをVSCodeで開く&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;.devcontainer&lt;/code&gt;フォルダを作成し、その中に&lt;code class=&quot;language-text&quot;&gt;devcontainer.json&lt;/code&gt;と&lt;code class=&quot;language-text&quot;&gt;init.sh&lt;/code&gt;を作成&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;(ホストOSのバージョンが古い場合は、&lt;a href=&quot;https://hub.docker.com/r/microsoft/devcontainers-base&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;imageを調整してください&lt;/a&gt;)&lt;/p&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;devcontainer.json&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;json&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-json line-numbers&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Ubuntu&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;	&lt;span class=&quot;token property&quot;&gt;&quot;image&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;mcr.microsoft.com/devcontainers/base:jammy&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;	&lt;span class=&quot;token property&quot;&gt;&quot;features&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;&quot;ghcr.io/devcontainers/features/rust:1&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
		&lt;span class=&quot;token property&quot;&gt;&quot;ghcr.io/devcontainers/features/common-utils:2&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;username&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;root&quot;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token property&quot;&gt;&quot;ghcr.io/devcontainers/features/git:1&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;


    &lt;span class=&quot;token property&quot;&gt;&quot;containerEnv&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;remoteEnv&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;

	&lt;span class=&quot;token comment&quot;&gt;// ## IDE&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;customizations&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token property&quot;&gt;&quot;vscode&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;extensions&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;marus25.cortex-debug&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token property&quot;&gt;&quot;settings&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;

	&lt;span class=&quot;token property&quot;&gt;&quot;postCreateCommand&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;.devcontainer/init.sh &amp;amp;&amp;amp; cd /home/developer &amp;amp;&amp;amp; tar -xvf /home/developer/gcc-arm-none-eabi.tar.bz&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;

	&lt;span class=&quot;token property&quot;&gt;&quot;remoteUser&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;root&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
	&lt;span class=&quot;token property&quot;&gt;&quot;runArgs&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;-v&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/dev:/dev&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;--network&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;host&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;--device-cgroup-rule&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;c 189:* rmw&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;init.sh&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token shebang important&quot;&gt;#!/bin/sh&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; openocd pkg-config gdb-multiarch aria2
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ln&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; /usr/bin/gdb-multiarch /usr/bin/arm-none-eabi-gdb

aria2c &lt;span class=&quot;token parameter variable&quot;&gt;-x16&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s16&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-d&lt;/span&gt; /home/developer &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; gcc-arm-none-eabi.tar.bz https://developer.arm.com/-/media/Files/downloads/gnu-rm/10.3-2021.10/gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2?rev&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;78196d3461ba4c9089a67b5f33edf82a&lt;span class=&quot;token operator&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;hash&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;5631ACEF1F8F237389F14B41566964EC


rustup target &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; thumbv6m-none-eabi
rustup target &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; thumbv7em-none-eabi
rustup target &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; thumbv7em-none-eabihf
rustup target &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; thumbv7m-none-eabi

&lt;span class=&quot;token function&quot;&gt;cargo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; cargo-generate

&lt;span class=&quot;token comment&quot;&gt;# tar -xvf /home/developer/gcc-arm-none-eabi.tar.bz&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;あとは&lt;a href=&quot;https://qiita.com/Kosuke_Matsui/items/031b2d60f3242617115e#%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A7%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;このQiita記事&lt;/a&gt;に習って設定を進める&lt;/li&gt;
&lt;li&gt;デバックは、OpenOCDを選択して実行すること&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 325px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 84%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsTAAALEwEAmpwYAAABp0lEQVR42q2U227aQBCG/QZtAe+u1+dzkF0CBkwAg2mUkrZRchn1GfoCffyvstWgVupVzcUv7Wp3P83MvzOG1jaJp7HlBGVpiqIgzzKiKCIIAqIwpJhNKdcbVruW5fbIcnugblqqu4a6ObHaHSnmK5KywshCj/z5B3pxjxy/J8tvSOKEOI57deDb9Yxle8/x/Ez7+MLx/MTpywuHz0+cHp9pHr6x3H8iX+4xPEsgdq/I8oCnJYf2xGJ+y2g0QkrZS5gC1/XY3G3Z7RtW65rDsb3sN9sdQRQjpMRQyiLQJo4y0bbDoqqY3uQIYWIphfot27aJo4gsS0mzlCxNSdMuk4goCnEcB6Ukhut5lOVHPM/ro5mMx5imeQG96RKtEP9Ud9bdM7TWWJZ1efjn+n9kaNvG9/3BoAswDCPquv6rXoOAjuPSpf1Wg8FAM5gS+m7v4lWA8+bM1/NDb7uUVwAms5oo8DGFvIoxRgcKrAm+lkh1BWCZxyy+/8RenVHjd/2AGATs+lc3r4hijzX5gBr6sW3HxVcTbDEeDOuBcZIwr6p+VHU9ORT4C0CayCb1RLSaAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/b34aad0d376c40b2470c2bc18e566b9c/ff46a/image.png&quot;
        srcset=&quot;/static/b34aad0d376c40b2470c2bc18e566b9c/772e8/image.png 200w,
/static/b34aad0d376c40b2470c2bc18e566b9c/ff46a/image.png 325w&quot;
        sizes=&quot;(max-width: 325px) 100vw, 325px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;(おまけ)&lt;a href=&quot;https://zeptoelecdesign.com/rust-embedded3/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Embedded-halを使うともう少し開発しやすくなるはず&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id=&quot;example&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#example&quot; aria-label=&quot;example permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Example&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/yukimakura/stm32-rs-devcontainer-nucleo-f446re&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ゆきまくら製の例(Github)&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;念の為注意&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%BF%B5%E3%81%AE%E7%82%BA%E6%B3%A8%E6%84%8F&quot; aria-label=&quot;念の為注意 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;念の為注意&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;多分、Github CodeSpaceでは(クラウドのため)実行とデバックできないので注意
&lt;ul&gt;
&lt;li&gt;もしかするとUSB-IPを頑張ればできるかもだけど、この記事ではスコープ外とする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;DockerとDevContainer優秀すぎ問題。&lt;br&gt;
案外、組み込み開発では話題に上がりにくいコンテナ仮想化ですが、&lt;br&gt;
普通に設定次第でハードデバイスにアクセスできるので、&lt;br&gt;
この界隈でももっと話題になっても良いと思ってます。&lt;br&gt;
(コンテナ仮想化の原理的にはできて当然なんよな)&lt;/p&gt;
&lt;p&gt;意外と環境構築で躓く人って多いと思うんです(私も昔はそうだった)&lt;br&gt;
なので「誰もが、迷わず、素早く」構築できることって結構重要だと思います。&lt;/p&gt;
&lt;p&gt;是非是非、みなさんもRust✕STM32開発挑戦してみてくださいね！&lt;/p&gt;
&lt;p&gt;では(&lt;em&gt;^^&lt;/em&gt;)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[RX-8の一年点検に行ってきました！]]></title><description><![CDATA[ディーラーにて一年点検 毎度の通りです。 なんやかんやディーラーが落ち着く（脳死） 最寄りが比較的建物が新しいディーラーだからちょっと高級感あって割と好きなんすよね〜 圧縮測定 さぁ！今年も圧縮測ります！ 前回も言いましたが、RE…]]></description><link>https://yukimakura.cc/RX-8の一年点検に行ってきました！/</link><guid isPermaLink="false">https://yukimakura.cc/RX-8の一年点検に行ってきました！/</guid><pubDate>Tue, 25 Jun 2024 11:15:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;ディーラーにて一年点検&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%87%E3%82%A3%E3%83%BC%E3%83%A9%E3%83%BC%E3%81%AB%E3%81%A6%E4%B8%80%E5%B9%B4%E7%82%B9%E6%A4%9C&quot; aria-label=&quot;ディーラーにて一年点検 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ディーラーにて一年点検&lt;/h1&gt;
&lt;p&gt;毎度の通りです。&lt;br&gt;
なんやかんやディーラーが落ち着く（脳死）&lt;br&gt;
最寄りが比較的建物が新しいディーラーだからちょっと高級感あって割と好きなんすよね〜&lt;/p&gt;
&lt;h1 id=&quot;圧縮測定&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%9C%A7%E7%B8%AE%E6%B8%AC%E5%AE%9A&quot; aria-label=&quot;圧縮測定 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;圧縮測定&lt;/h1&gt;
&lt;p&gt;さぁ！今年も圧縮測ります！&lt;br&gt;
前回も言いましたが、RE用のコンプレッションテスターはどうやら常備していないようなので&lt;br&gt;
予約時に宣言をお忘れなく！&lt;/p&gt;
&lt;h2 id=&quot;結果&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B5%90%E6%9E%9C&quot; aria-label=&quot;結果 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;結果&lt;/h2&gt;
&lt;h3 id=&quot;フロント&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88&quot; aria-label=&quot;フロント permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;フロント&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 139.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHM0lEQVR42lWU+VeU1x3G5x9I08Q2tBrjmkQEZBEYYBbmnfedjWVAmGEREJBVGHZQEBVEjB6JJtGUA2qrQXMUFbWa1LjG1rIYYNhhhlkQFZvmn/j0zJjTnv7wnPv95X7uc9/nua9MFAQEjQaVUoVcHkt0dAxRUXJiYxRsD4/k008CCdoaTGhICJs2bMSSqidOHk1I4Fait0f4Z1VcLFs/DWTT+k3IjHo9kiQhCAIajUCcQolSEY9CoSY2Npa42DiUcUq2fBLI++8F+OHrPtpA+LZQggODiAgLIyw0jPDQcLaFhCETtVqMRiMajRZR1KGTJLRaiZgYBTExsSgUKlTKeESNiCSIqBRqwkIjCAwMJnhrMJs3fkxAwGrWrF5HjDwWmUoVT1ycErlcQV1NNed6vqL9UCsNdbWUFBVjSbeQlJiEwWDEJBlINCZgTknFarViMpoQtTrWrFlPwAcfohVEZGq1GoVCiV5norOzgz+fP0vX8eN093Zz7c4N+gf66f3yNMeaD9C8vxlbhY3M9CzyduaSk5NLfV0jiSYzq97/I2k70t4CfWGkpqRz/mw3V7/9hstX+uk5dJKe9Br+1NXFo8bTPPuomPu6ffy9b4B9zS2kmy1kZWbT2NCEWi2x6vdryMnOQaYVBFQqFTk5+dy40ss/71Ty+F4rj0+28FBRTL+ynCHTAeY/rMa+oZZnN+7Q3LKfLMtO8nLyqK6qISpawfqNWygtLkam1Qr+MPbtbeH+9/38dN+G/UEOnrEc5kb2cev6AKPmYzxdtZuxyBaGHj+mob6JgrxCbHv2cKCllY2bA9mwaQt1VTZkvroIgkhVZSUnu45zvvcMd2+c5fmjLxh/dol//HiVyeO9zKW24yju5seH31FdVUdRQTE1tioO7D9IwOr1BAaF0rK3EZler0OhVLL54y1EhEciaAQSE5IoL6uk4/ARer/uYuBuH0PD15gaucvg01uUlVVTWlrO3sZG6msb+d0Ha9keGcPhQ63IUlJSsFgs+OrjeyHbtoURHLyN0NBQwsLCiYtTYU5MJjsjl/r6Rtrb2ykqKqWiopLW1lbKyip49701qNVaOo+0+66sJfXXXhXm55OZkeHvna9jCSYTBr3B79pXfKUyHoUynpLiEmyVNjo6OsjN2807vwnAZErm6FugiNGYgCSKxKs1JCWaSU5KQa/3FTgNqyWDTGsWO7OzKSrcTUNtHU0NDTTUN/DVqVNYrDt5590/kGHNorOjHZk8OpZ4jRZJ1PlfS5I5DVtFFQfbOqlrOsCu3TZyC8rJL/SplJLSSioqqqipqeOzzqOYElP57aq15OXlc+xoh6+HIjpJj1KpJio6lrT0TGrr97HonGfRucDMzAzPhka4feceF/qu8sXpHto6TtDQdJD6hhb2VNRQUFhCeXmFv5OykJBQlEoVkqRD0hkoLavg5KnTeD2LuN0uXrzw8mblFW9WXvJqeQmve5HZ2Rme/zTK/YePuTFwm8vf9nP6TA8t+9uQBQWFsH7dJtau3YBSJVBpq+Xs+QusrLzE5XLi8bhZWXnFq1fLuN2LuBadOBwLOJwL/nVhYYGJiUlGno9yse8KMkmhRKsVCYuKIcm8g+ISG/3Xb/LLL294sbyEx+Pi9euXvHnz2g9++fIFXq8Hl2sRh8PB7Ows4+PjjNsn6O75C7K+7XJ65QpqI+PYlZ5FirWAH+4/4uefV1heXvJv9Ll0e9x+kE9LS17cbvf/Aaenp+nuOYfs+6hYhhUabioEqrPyyCooZ3R0lNevlllaeuvkxZIHj/ct0PMr2OVy+YG+0CbsdsbGx+k6dQbZraAIHkkmzmoNWM1WKutacDhn8XoX/d/M7Xb+NyAfbHnZ65+dTgcLC/NMTU1ht9sZH5/g+s3vkF0Ol3MzXuKoaMJgSuPQkRO43A7m5mZwOGZxuxx4PU5/QIuLDr9T3+pwzDM3N8fk5CRjY+NMTE7ztwdPkSWGRZAfFUO6UkA0pvPlmR7cHieTM9PMzc0yNWVnesqO0zHL/Pys/6DJyQm/fO7ezpMMDY/R1vk5sujIaMK3haPWSIgmC9euD/Dvfy3jnZpgyeNiybuIyznr18LCDDMzU4yNjWK3jzPyfITBwWHs9kmeDY7S8dnnyJKSk9FoRVSCDpM5g9ZDnVz85hJ/HbjF/R/uceVqPxf7LjFwc4AnT54wOjbGyMgwwyNDDA8PMTg4yKLTwe27D2hqaUOm1UkIkoRSLRAvGpArJdRiMrpECwlmK4bEdCTjDv9hKZZcMnbuJr+ogprGZva2HOTixT7czjnOnrtAXkEpsnjfr0kU/dB4QYsg6dAZjCQlmxF1BgymBJLMKSQkmUlISiHNkkFWdg67CgqpsFXR2LSXEydO0NZ2mMzsXGQRkXJU8RpUag1aUUJvMmJO9W1MQ280YN6RijUrE2tGxv9kzSAjM5Ndu/LIzs4mOWUHpoRkBFHPfwCZ3Euo0xEtDQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/f4a43f0d8245e04fd24e6cf5d8e6e870/5a190/image.png&quot;
        srcset=&quot;/static/f4a43f0d8245e04fd24e6cf5d8e6e870/772e8/image.png 200w,
/static/f4a43f0d8245e04fd24e6cf5d8e6e870/e17e5/image.png 400w,
/static/f4a43f0d8245e04fd24e6cf5d8e6e870/5a190/image.png 800w,
/static/f4a43f0d8245e04fd24e6cf5d8e6e870/21335/image.png 1082w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;リア&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AA%E3%82%A2&quot; aria-label=&quot;リア permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;リア&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 141%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHGElEQVR42j2VaVNU2R3G7/skU0Ydo+PSQNP7Qq/39u2NhgYamlUQCasKsikugI6KInFJMjq4JuoYl5nKaEZxQWWxu+luFh2FipNY8yESnUzG+Qa/VF+q8uKp+tc9p577LKfOEaorCqmrLmZzZZhs1UbWrluH0aDDoNfhctnRaTXLs8NGaVEAv0/C6bCRk5PDunUbcNisWPU6THojZpMVwaDX4nSYqYqGsJgM5GSpUG3awCaVCqPRgEarxWg0YjIZCPolCkN+JNGFTqsjW6UmPxikoryCksIwfpeEoMlVk52VhUGvIUedg0q1CW1uLuqcXIwmM3q9gVy1BsltX/5mNKLNkGVn9qppbGhg35699HZ30bilHsFmd2K12rBYbVhtdmW2Wu04nCJ2h1OBwWjBZrFjNdqQRC9e2Y9Bb2blqrWUR6Ps3b2b/n172NvXi+BwulHgcOFyiXg8XkRRxusLkF9QQLigiGhplM0N9TRu30ZrSxstzS0M9B9Ar7ficooKWX9/RmUnQoZElGRkj6wQukUvR48cZuT4UY4dO8aZy+e5ePMq1zsO85fWQa5euERVVR1dnd0Eg2HUuXoO9O/jwMB+dnV3IYiiB1n2IUkyFmseDofIyZMnuXzlGqPnr3G7dYR7DUOkwwPEtNuY//IBHd276OnsoX5LAytXr6ero51DB/vp+T+h148oeZQCnE6JoWMjPL1/nPijPt5c2EbyjyMke0a5b24lfv4Gp/5wmvbtnQwOHOTjNRuprKzk6JGD7OrpXrYsy178fj9mswV/IMjIyGmmxz9nfmKApW+HWFj8K/NP/sbsvVv8PfWAr25doa2tg+Fjw+j0VsXV8NAh9u/dg+B0uvB4PHi9XqUYySNTv7WB9vZuWto6aW7qoLWpjabmZpra2tj62ybKK6ppaWllZHiYouIoGzbk0L+3j08HBxG8Ph/BYJBAIIAkeRAlkU82qNi4MQuTyURenpXMT6VMNJKM3xekpqaW3u4ejg4doaVlO9lqE+3tO5UIhKKiMIXhMJFIhFB+iEhJCdFoOVvq6igujpAfyqyXUBKJUlpWSU1tA9t3dLJtx046u3bR27uXXbsHOHHqHJ+fu4nglWVEUVJUeDNZ+vyUlUWorqrE5w9SGq1i9+79DB07ycnTZzkzeomz5y5z4dI1rl67xe0v7zD28BlPJ+f5179/QggG/IrdvDw7mcY9kozX61PI7Q43peW13Ln7Dd9994bFxUVevXpFMpki9jzB5ORzBbF4ikTyFe/f/5xRKGG323G53LjdopJjhtDtkrBYHVRvbuDGra9YWlpiZibN/MILZufmSaZmiSeSPI8leB5LEk+85N27nxACPi+SKOF2uRHdbpx2F5JbxJFnx6C3UFFVx6U/fcHbt/9kYeEls3MLpFKzJFNzxBMpEokU8USa2MxL3r//gKDO0fDrFatZuWoNH69ZR7Y6l7UbVfxmvYpcnYmS0ip+d+oM33//dtmuQjarqJ1JppmZSRGfSRPPWP7hA8IGVRZmgx6zVovTbMaXZ6PI4SDqdFFgtlEULqNv/xHevv0Hr16/JpWeJ5WeI5WaIzW7PM8k50jNLfHDf35GGNZpuWC1MGq1Mmy28LXFyrjDTUyUGbXaqY9U0DdwmMWl17xeXFzOcH6B9OzccobxBM8mY8RT3/Lu3X8RHtjyeGq3cV9yc8nnYVKWmXJLpAvD3Ba9NBeX0Td4iPRsmtTsHMn0MlEsnlAKmZiaZvJ5nPkXS/z44weEb4xGHhoNPDIYOJ9n5YbBxJjBwiNJ5qLbw9ZQmK49A0zHYqRSmRISJFIp0nOzCqamp7l7/wG3vx7j6dQswhWtjgsaLWc1Ovo1enr0Rk64RA57vGx3ugmKXqq2NDEVj/Hm5QsWYjHGJyY4O3qR/gNDdO/aR+uObnb27mfg0+MI6o9WkfXRStb/YgWfrFiNeb2K/GwNslpHXlYuLpubuoZmRk6c5sjxk+zpP0jb9k6q6xqprm2gorqOzbX11NbVU1O7BWHTmrVKuzaTGU2OBo/sRQ4G8BeEcHtkjGYb4ZIyQuEIvvwiauq2UByJUlhcSqSsnNJoBdGKCqpraqitrUPQ63Tk2exk52jQavUEAkFCoQJCoULyQwV4/QFcokeBPxgiUholP1RIaVk5NZtrqayqUUgLiyOEwiUIVouVzOH+1S9XYLPZCQTzlUshA1HyInp8ypvj9eXjC4Tw+kO4JT+yr4CCojLKq2ppaGylo7Obw4eHENZvzEKnM5KdnYtGayRXY0RnsGLKPJs2NzanRCA/THlFDQ2NzXT19DI0dJTR0bPcunmdRw/v8fTJQyYnHpNOTiNkqQ0YzHacblmRrtzWHe0MDvbz2We/5/Ll81z/4s88GLvLk/H7jN2/w8TEY2LPn/FkfIzpqXEmJ8YZfzzG1LOH/A/ixaJChKP4gwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/0a62545f076ba02a48367b2087c419b8/5a190/image-1.png&quot;
        srcset=&quot;/static/0a62545f076ba02a48367b2087c419b8/772e8/image-1.png 200w,
/static/0a62545f076ba02a48367b2087c419b8/e17e5/image-1.png 400w,
/static/0a62545f076ba02a48367b2087c419b8/5a190/image-1.png 800w,
/static/0a62545f076ba02a48367b2087c419b8/12bff/image-1.png 1032w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;...てか今気づいたんだけど、250rpm換算し忘れてるなこれ&lt;/p&gt;
&lt;h2 id=&quot;去年との比較&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8E%BB%E5%B9%B4%E3%81%A8%E3%81%AE%E6%AF%94%E8%BC%83&quot; aria-label=&quot;去年との比較 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;去年との比較&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;./RX-8%E3%81%AE%E8%BB%8A%E6%A4%9C%E3%81%AB%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%8D%E3%81%BE%E3%81%97%E3%81%9F%EF%BC%81&quot;&gt;昨年&lt;/a&gt;との比較マトリクスです&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;年&lt;/th&gt;
&lt;th&gt;フロントrpm&lt;/th&gt;
&lt;th&gt;フロント1&lt;/th&gt;
&lt;th&gt;フロント2&lt;/th&gt;
&lt;th&gt;フロント3&lt;/th&gt;
&lt;th&gt;リアrpm&lt;/th&gt;
&lt;th&gt;リア1&lt;/th&gt;
&lt;th&gt;リア2&lt;/th&gt;
&lt;th&gt;リア3&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2023&lt;/td&gt;
&lt;td&gt;250&lt;/td&gt;
&lt;td&gt;6.6&lt;/td&gt;
&lt;td&gt;6.6&lt;/td&gt;
&lt;td&gt;6.5&lt;/td&gt;
&lt;td&gt;250&lt;/td&gt;
&lt;td&gt;7.2&lt;/td&gt;
&lt;td&gt;7.1&lt;/td&gt;
&lt;td&gt;6.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2024&lt;/td&gt;
&lt;td&gt;264&lt;/td&gt;
&lt;td&gt;6.9&lt;/td&gt;
&lt;td&gt;7.0&lt;/td&gt;
&lt;td&gt;6.8&lt;/td&gt;
&lt;td&gt;260&lt;/td&gt;
&lt;td&gt;7.5&lt;/td&gt;
&lt;td&gt;7.4&lt;/td&gt;
&lt;td&gt;7.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;250rpm換算で考えるとほぼ一緒って感じですね!&lt;br&gt;
下がってなくて良かったぁぁ😎&lt;/p&gt;
&lt;h2 id=&quot;シンセレネシスpcvバルブクリーナーの感想&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B7%E3%83%B3%E3%82%BB%E3%83%AC%E3%83%8D%E3%82%B7%E3%82%B9pcv%E3%83%90%E3%83%AB%E3%83%96%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%8A%E3%83%BC%E3%81%AE%E6%84%9F%E6%83%B3&quot; aria-label=&quot;シンセレネシスpcvバルブクリーナーの感想 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;シンセレネシス×PCVバルブクリーナーの感想&lt;/h2&gt;
&lt;p&gt;結論、結構良かった！&lt;br&gt;
気持ちかもしれないけど吹け上がりは良くなった気がする&lt;br&gt;
ただ、今年の3月ごろからなんとなく吹け上がりが悪くなったり、(ただでさえ低い)低速トルクが若干落ちたような気がした&lt;br&gt;
まぁ、変えてから10ヶ月近く経ってたわけですし、しゃーなしかな😅&lt;br&gt;
今回の1年点検で変えてからはまた元通り！いいね👍&lt;/p&gt;
&lt;h1 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h1&gt;
&lt;p&gt;今回は一年点検ということで、店舗で2時間ほど待機で終わりました&lt;br&gt;
前回と大きく違うのは今回はコンプレッションテストの様子を見学させてもらえました！&lt;br&gt;
そのためカラー写真というわけです&lt;br&gt;
昨今の自動車の不正の煽りを受けてるのでしょうね...(てかあれは国交省も悪いだろ😡)&lt;br&gt;
手間なのは承知ですが、車を愛する1ユーザーとしては非常に良い取り組みだと心から思いました！&lt;/p&gt;
&lt;p&gt;...実はここだけの話その日の午前に新たなお車を成約致しまして...&lt;br&gt;
これで8ちゃんに異常が見つかったら...と内申ヒヤヒヤしておりました^^;&lt;br&gt;
(クラッチが軋むって？🙉🙉🙉🙉🙉🙉🙉🙉)&lt;br&gt;
いやぁね？そんなカツカツで新しく車買うなよと。あほんだらかと&lt;br&gt;
でもね？次の車は8ちゃんに負けないぐらい楽しく、かつロマンチックなので楽しみです！&lt;br&gt;
かといって8ちゃんは正直手放したくないと思ってます、頑張って2台維持したいなぁ...&lt;/p&gt;
&lt;p&gt;さて、今回の合計金額は&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;th&gt;技術料(円、税込)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;シンセレネシス 0W-30&lt;/td&gt;
&lt;td&gt;13,420&lt;/td&gt;
&lt;td&gt;1,540&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PCVバルブクリーナー&lt;/td&gt;
&lt;td&gt;3,410&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ガスケット&lt;/td&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;純正オイルフィルター&lt;/td&gt;
&lt;td&gt;1,551&lt;/td&gt;
&lt;td&gt;770&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;コンプレッションテスト&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;10,010&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1年点検整備【乗用車】 レギュラー&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;22,330&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;(合計)&lt;/td&gt;
&lt;td&gt;18,480&lt;/td&gt;
&lt;td&gt;34,650&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;全合計で53,130円(税込)となりました！&lt;/strong&gt;&lt;br&gt;
もともとの見積もりでは6万と言われてたので安くなってて助かった...&lt;br&gt;
8ちゃん楽しいよこれからもよろしくね😎&lt;br&gt;
では(&lt;em&gt;^^&lt;/em&gt;)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[【備忘録】LeadingQualityまとめ]]></title><description><![CDATA[手法 各章にまとめがあるのでそれを箇条書き方式で詳細を枝生やしていく
※ゆきまくらが思ったことは項目末尾に  と記載している 1章 品質と価値 歴史は繰り返す。ソフトウェア開発も製造業と同じように初めは 速さという最適化を重視し、次に品質を通じて顧客価値を重視 TQM(Total…]]></description><link>https://yukimakura.cc/【備忘録】LeadingQualityまとめ/</link><guid isPermaLink="false">https://yukimakura.cc/【備忘録】LeadingQualityまとめ/</guid><pubDate>Sat, 22 Jun 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.amazon.co.jp/LEADING-QUALITY-Ronald-Cummings-John/dp/4048931121&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;&lt;img src=&quot;https://m.media-amazon.com/images/I/71yHKgde-BL._SL1500_.jpg&quot; width=&quot;300px&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;手法&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%89%8B%E6%B3%95&quot; aria-label=&quot;手法 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;手法&lt;/h1&gt;
&lt;p&gt;各章にまとめがあるのでそれを箇条書き方式で詳細を枝生やしていく
※ゆきまくらが思ったことは項目末尾に &lt;code class=&quot;language-text&quot;&gt;(感想)&lt;/code&gt; と記載している&lt;/p&gt;
&lt;h1 id=&quot;1章-品質と価値&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1%E7%AB%A0-%E5%93%81%E8%B3%AA%E3%81%A8%E4%BE%A1%E5%80%A4&quot; aria-label=&quot;1章 品質と価値 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1章 品質と価値&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;歴史は繰り返す。ソフトウェア開発も製造業と同じように初めは &lt;strong&gt;速さという最適化を重視し、次に品質を通じて顧客価値を重視&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;TQM(Total Quality Management:総合品質管理)
&lt;ul&gt;
&lt;li&gt;品質を「生産工程に焦点を合わす」のでなく、 &lt;strong&gt;「顧客への価値提供」&lt;/strong&gt; と定義した&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;粗悪な品質は顧客・会社・あなたのキャリアの「３つのC」に悪影響を及ぼす
&lt;ul&gt;
&lt;li&gt;品質がお粗末だったために企業が支払ったコストを合わせると、2017年は約200兆円と算出されている
&lt;ul&gt;
&lt;li&gt;その年のカナダのGDPに匹敵する金額&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;バグフィックに&lt;strong&gt;疲弊し続ける環境ではエネルギー・創造性・モチベーションがチームから失われる&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;このような状況ではいくらマネジメントしても悪循環しか起こり得ない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;「3つのC」に良い影響を及ぼすために、ビジネスの成果と顧客価値に当てるべき
&lt;ul&gt;
&lt;li&gt;テストをするという「プロセス」にとらわれるのではなく、&lt;strong&gt;顧客価値を意識してビルド・機能開発・バグフィックの優先度を決めるべき&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id=&quot;2章-3つの品質ナラティブ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2%E7%AB%A0-3%E3%81%A4%E3%81%AE%E5%93%81%E8%B3%AA%E3%83%8A%E3%83%A9%E3%83%86%E3%82%A3%E3%83%96&quot; aria-label=&quot;2章 3つの品質ナラティブ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2章 3つの品質ナラティブ&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ナラティブとは...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;「物語」「話術」「語り」といった意味を持つ
&lt;ul&gt;
&lt;li&gt;相手（患者、部下、顧客など）視点での物語を重視すること&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.kaonavi.jp/dictionary/narrative/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ナラティブとは？【意味をわかりやすく】ストーリーとの違い(カオナビ)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;品質ナラティブとは、企業で品質について考えたり話したりしてるその「語られ方」&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;組織の品質文化は、意識して表明しているかどうかに関わらず、&lt;strong&gt;品質ナラティブ&lt;/strong&gt;として存在している&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文化というものの本質は&lt;strong&gt;どのような立場であろうと、誰もがその企業の文化を宿していること&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;例えば、文化という概念に疑り深い起業家が「文化とか言う曖昧なものなどどうでも良い！結果とパフォーマンスがすべてだ！」という発言こそがその文化を示している&lt;/li&gt;
&lt;/ul&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;責任ナラティブ: 誰が品質に責任を持つかが考えられ、語られている
&lt;ul&gt;
&lt;li&gt;例):経営層の判断により、AndroidアプリよりもiOSアプリに優先度を割きすぎた結果、Androidアプリの品質が壊滅的になり、結果として競合にユーザーを奪取された&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;テストナラティブ: 品質向上につながる正しいテスト技法はどれか・どのツールを使うべきかが考えられ、語られている
&lt;ul&gt;
&lt;li&gt;例):ある特定のテスト技法やツールさえあれば、品質を向上させられると錯覚してしまうこと
&lt;ul&gt;
&lt;li&gt;銀の弾丸はない&lt;/li&gt;
&lt;li&gt;戦略とは&lt;strong&gt;本質的に問題解決であり、裁量のアプローチは直面する具体的な問題により異なってくる&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;価値ナラティブ: 品質に投資した場合の見返り（ROI: 投資収益率）が考えられ、語られている
&lt;ul&gt;
&lt;li&gt;例:)品質を最大化すべき投資として扱う人と、最小化すべきコストとして扱う人
&lt;ul&gt;
&lt;li&gt;経営人は品質への投資がもたらす具体的な価値を必ずしも納得しているわけでない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;まず、現在の社内のナラティブを把握する
&lt;ul&gt;
&lt;li&gt;組織のさまざまな授業員に「業務で耳にする、品質に関する発言のトップ3」を聞くと従業員が品質についてどう考えているかフィルタリングされていない答えが得られる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;次にそれをどのようにしたいかを考える
&lt;ul&gt;
&lt;li&gt;品質を社内外でどう認識してほしいのか&lt;/li&gt;
&lt;li&gt;1年後にはどんなチームになっていてほしいのか&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id=&quot;3章-品質文化醸成&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3%E7%AB%A0-%E5%93%81%E8%B3%AA%E6%96%87%E5%8C%96%E9%86%B8%E6%88%90&quot; aria-label=&quot;3章 品質文化醸成 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3章 品質文化醸成&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;社内で品質のリーダーシップを発揮するためには、影響力と説得力を身につけねばならない
&lt;ul&gt;
&lt;li&gt;リーダーであれば何らかの形で「売らない売り込み」に何時間も費やしている&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;影響力を発揮できるようにする方法は以下である
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;誰を味方につけるかを知る&lt;/strong&gt;、そして彼らのモチベーション・目標としているもの・恐れているものが何であるかを知る
&lt;ul&gt;
&lt;li&gt;重要なステークホルダーの洗い出し、彼らにゴールや課題、反対する理由や彼らが属するチームに与える影響を質問してみる
&lt;ul&gt;
&lt;li&gt;説得して味方につけたい相手のことを詳しく知れば、&lt;strong&gt;確実にアピールできる伝え方が見つかる&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;より多くの賛同者の支持を集められるだろうし、アイデアは更に明快に理解されるだろう&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;経営層を相手に話すときは、顧客とビジネスにどんな影響があるかを中心に捉えるべき&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://amzn.asia/d/06eFg9cH&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;システムアーキテクチャ構築の原理のビューを彷彿とさせた(感想)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;チーム同士・メンバー同士の&lt;strong&gt;共感を生み出して連携と相互理解を深める&lt;/strong&gt;こと
&lt;ul&gt;
&lt;li&gt;例):営業部長とカスタマーサポート部長を入れ替えたら共感が醸成され、いかに目標を達成するかにフォーカスした共通の視点が作られた
&lt;ul&gt;
&lt;li&gt;ここまで大げさにやらずとも、短期間的に異なる分野の人々が同じ業務を行うことでアイデアを共有すればよい
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ペアリングセッション&lt;/strong&gt;という&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Atlassian社では開発エンジニアと品質チームをうまくペアにしている
&lt;ul&gt;
&lt;li&gt;この例では品質チームから探索的テストのやり方を教わり、良いテストシナリオを開発者が導けるようにしている&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ランチ&amp;#x26;ラーニング
&lt;ul&gt;
&lt;li&gt;経営陣と昼食をとりながら対話する活動&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;経営陣と運用面を担う人たちとの間に醸成される共感もある&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;自分の考えに重みを持たせるために、&lt;strong&gt;エビデンスを用いて品質ナラティブを補強する&lt;/strong&gt;こと
&lt;ul&gt;
&lt;li&gt;社内から得られるエビデンス
&lt;ul&gt;
&lt;li&gt;自社で持っている情報やデータ、チームで試した取り組みなど&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;社外から得られるエビデンス
&lt;ul&gt;
&lt;li&gt;他社事例や統計情報など
&lt;ul&gt;
&lt;li&gt;ただし、&lt;strong&gt;共感してもらうというより信頼してもらうためと捉えるべき&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;勢いを生み出すために、&lt;strong&gt;社内で品質推進者を増やす&lt;/strong&gt;こと
&lt;ul&gt;
&lt;li&gt;アイデアを受け入れてくれそうな役員を見つけ関係を構築しよう&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id=&quot;4章-手動テストと自動テスト&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#4%E7%AB%A0-%E6%89%8B%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88%E3%81%A8%E8%87%AA%E5%8B%95%E3%83%86%E3%82%B9%E3%83%88&quot; aria-label=&quot;4章 手動テストと自動テスト permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;4章 手動テストと自動テスト&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;自動テストは銀の弾丸でない。間違ったテストは逆に品質を悪化させる可能性がある
&lt;ul&gt;
&lt;li&gt;本の事例たち
&lt;ul&gt;
&lt;li&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;&lt;/li&gt;
&lt;li&gt;複数の異なるテストツールをすべて一緒に動作させようとして、大変な時間を要した&lt;/li&gt;
&lt;li&gt;バグが自動テストをかいくぐっていき、ユーザビリティが壊滅的になっていった&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;「すべてのテストを自動化できるか？」という疑問に対しては、テストに以下のタイプがあることを考え答えを出す
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;調査&lt;/strong&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;strong&gt;検証&lt;/strong&gt; : プロダクトの情報が期待通りかをチェックするテスト
&lt;ul&gt;
&lt;li&gt;何が起こるべきかを期待した状態で行われる
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;通常は成功か失敗かの2択しか無い&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&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;a href=&quot;https://amzn.asia/d/0849tXrV&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;単体テストの考え方/使い方&lt;/a&gt;が詳しい(超良書)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id=&quot;5章-プロダクトの成熟度と品質&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#5%E7%AB%A0-%E3%83%97%E3%83%AD%E3%83%80%E3%82%AF%E3%83%88%E3%81%AE%E6%88%90%E7%86%9F%E5%BA%A6%E3%81%A8%E5%93%81%E8%B3%AA&quot; aria-label=&quot;5章 プロダクトの成熟度と品質 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;5章 プロダクトの成熟度と品質&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;ユーザーは、&lt;strong&gt;イノベーター&lt;/strong&gt;から&lt;strong&gt;アーリーアダプター&lt;/strong&gt;を経て、&lt;strong&gt;レイトマジョリティ&lt;/strong&gt;や&lt;strong&gt;ラガード&lt;/strong&gt;へと増えていく&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAIAAABr+ngCAAAACXBIWXMAAAsTAAALEwEAmpwYAAACrklEQVR42n2SS0hUYRTH77ZdEBm4iIoIgqDAFKEIsdChITDfLzLJRUqbFpGgbsxsUVFtpI2LJgWjUXwlOs44ORmUTmPjg9FKZxrn3is6M/de7x3v43ucmKvZINWfw3cO3zk/zsf5DpM7FM4ZDFtH1oocbLGDLXJEKp1s6Thb6+ZaZjbvTK1Xu7iS8ciNCa7WzZU72QonWzgWyRkMXx4KM4UOtmAsUubkbr3nK11clYurcXPVLq5ukm/7Er3/aaNukq9x87c9fP2H9Zvu5H2FiysYjVwfizAbkiJs68K2Ht82JB2LGhJ1LOk4rqJNFcU0LGgovm2IOolrWDJINKHHEppsENkgzDrPKbKsbG2piQTPseFQECMUj8XCoZAkKgAgC9LP4KqmqWBKkbdEIU4pBQCGZVlCCABQQgxThGCEkIEAhK53robh6SEAQBjtAKliVFXdhX/nKEHJ6tgbCBzu7LmY23jW990DABjj/bDZKhVOOqqF9LmTEEjv6rPmNp5peGEV5GgyB/TfsAlSABys07wHYOmEzZ53tSXrWvPpl8PtAEDo/+BkoIleYzZN96VB4JjNnmdpyih9cL6kNfvb2g+TJ3+BcfIkGxJ8nhmgc0c035EdOL8po6wtq7Qt+26HjY+rZiXdDwNQXTdeOaIjzj5YTFe9hyBw3NZrsTRnFrdm1D65dOXe46r2flU3dgcDwCCEZEX+uji9EFp86157ZucnPHaYO6jNn4Olo509F/KbMuqfW8sfZloan56q6ah+ZHf5VkVF1RFOdhaVmD/0cTbkXViRFoIKy67S2GsU7QWhZ3lleHS63+Mfcc8Ojk7PD0wtdTv93U7/zDInyCpDkjuBzZcQoBgoJpQYBAwMBgGSMt3UJZFEYUsUmT+pnY8yYwCyZ5Tu2V4EuoEQRr8AByTzIrP+QAAAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;イノベーションの普及曲線&quot;
        title=&quot;&quot;
        src=&quot;/static/da6580607914f01d8022c592802a3df5/5a190/%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%BF%E7%90%86%E8%AB%96.png&quot;
        srcset=&quot;/static/da6580607914f01d8022c592802a3df5/772e8/%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%BF%E7%90%86%E8%AB%96.png 200w,
/static/da6580607914f01d8022c592802a3df5/e17e5/%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%BF%E7%90%86%E8%AB%96.png 400w,
/static/da6580607914f01d8022c592802a3df5/5a190/%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%BF%E7%90%86%E8%AB%96.png 800w,
/static/da6580607914f01d8022c592802a3df5/d9199/%E3%82%A4%E3%83%8E%E3%83%99%E3%83%BC%E3%82%BF%E7%90%86%E8%AB%96.png 960w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
&lt;ul&gt;
&lt;li&gt;引用:&lt;a href=&quot;https://www.utokyo-ipc.co.jp/column/innovation-theory/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;イノベーター理論をわかりやすく解説！【事例あり】東大IPC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;製品ライフサイクルの中で、QA(Quality Assurance、品質保証)へのアプローチが変化するのは、大きく3つにカテゴライズされる&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;実証段階&lt;/strong&gt;: プロダクトマーケットフィットを模索する
&lt;ul&gt;
&lt;li&gt;ヒットするかわからないため、品質というよりも以下にPoCできるか
&lt;ul&gt;
&lt;li&gt;プロダクトの初期ユーザーは問題に寛容なユーザーが多い傾向だが、&lt;strong&gt;成熟した業界であるほど期待値は通常高くなる&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;予測可能段階&lt;/strong&gt;: スケールに向けて安定したインフラを模索する
&lt;ul&gt;
&lt;li&gt;通常、チームがこの段階で焦点を当てるのは&lt;strong&gt;ソフトウェアの安定性&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;実証実験での不足したテストを挽回しなければならない
&lt;ul&gt;
&lt;li&gt;TDDベースで開発するとリファクタもしやすい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;スケーリング段階&lt;/strong&gt;: マイナスの影響を最小限に抑え、成長への扉を開け放つ
&lt;ul&gt;
&lt;li&gt;この段階になると1%の影響すらブランドイメージに大打撃を与えかねない
&lt;ul&gt;
&lt;li&gt;ブランドというのは、&lt;strong&gt;すべての資産の出来の良さに関連付けて認識されるもの&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;うまく行かなくなってきたというのは、必ずしもQAが失敗し始めたことの表れとは限らない&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ニーズの変化に合わせて戦略を適応させることが、成功のために必要だと示唆されている
&lt;ul&gt;
&lt;li&gt;プロダクトが成熟して複雑になり、同時ユーザーが増えるにつれ品質に関する課題が変わっていく&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id=&quot;6章-継続的テストとフィードバックループ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#6%E7%AB%A0-%E7%B6%99%E7%B6%9A%E7%9A%84%E3%83%86%E3%82%B9%E3%83%88%E3%81%A8%E3%83%95%E3%82%A3%E3%83%BC%E3%83%89%E3%83%90%E3%83%83%E3%82%AF%E3%83%AB%E3%83%BC%E3%83%97&quot; aria-label=&quot;6章 継続的テストとフィードバックループ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;6章 継続的テストとフィードバックループ&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;本当の継続的テストを提供するためには、最初のコンセプトから稼働後まで、すべての段階でテストを行う必要がある&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;自動テストはソフトウェア開発ライフサイクルを構成する要素の1つにすぎない&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 72.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAABgUlEQVR42qWTya6CUAyGef9ncuHKjW40JuKMirM4As7WfE1K8MBd3SYNPaft37/twRMR2e/3kqYppnw+H1Wz3+93dudqmc8zwPv9LiaPx0PiOJbb7VYKhDyfT/XnSWSAm81GQZDz+Szb7Tb7Aozk2VjR6/VaBEySRGq1mjoul4uCmMCaYm4SQiFYFlqGSaVSkdfrJavVKmPC2WWPD4UEMy8bh0cAQLvdThkaGxPmezgcFIiZAUar2IBakZ8ZHo9HWa/XGkQbppxJns/nslwuNY5kCmNHUVRYjGezI4FE2GKHYahF0NlspvfT6VQ6nY4Mh0M5nU4KSNxisciW5xkyyyAQAAL6/b62OplMpF6vqw0rQAeDgZJgHL7vKwFj6eU39x/JWs6/emQ8Hms7prCCCTZd0AFbt5zCUlzAarWqbTFP5kM7o9FI7V6vpy26v+nPs3EveH+8TeYUBIGCt1otPTPXRqOh4O7f8ydD2LA9ALDZMKza7bY0m03pdrvq474M8AsuqjlvKD1V+AAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;開発フェーズごとの不具合の割合&quot;
        title=&quot;&quot;
        src=&quot;/static/82a9a73dc53ac093253e6cdb3bb06e54/5a190/%E9%96%8B%E7%99%BA%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA%E3%81%94%E3%81%A8%E3%81%AE%E4%B8%8D%E5%85%B7%E5%90%88%E3%81%AE%E5%89%B2%E5%90%88.png&quot;
        srcset=&quot;/static/82a9a73dc53ac093253e6cdb3bb06e54/772e8/%E9%96%8B%E7%99%BA%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA%E3%81%94%E3%81%A8%E3%81%AE%E4%B8%8D%E5%85%B7%E5%90%88%E3%81%AE%E5%89%B2%E5%90%88.png 200w,
/static/82a9a73dc53ac093253e6cdb3bb06e54/e17e5/%E9%96%8B%E7%99%BA%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA%E3%81%94%E3%81%A8%E3%81%AE%E4%B8%8D%E5%85%B7%E5%90%88%E3%81%AE%E5%89%B2%E5%90%88.png 400w,
/static/82a9a73dc53ac093253e6cdb3bb06e54/5a190/%E9%96%8B%E7%99%BA%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA%E3%81%94%E3%81%A8%E3%81%AE%E4%B8%8D%E5%85%B7%E5%90%88%E3%81%AE%E5%89%B2%E5%90%88.png 800w,
/static/82a9a73dc53ac093253e6cdb3bb06e54/aa08e/%E9%96%8B%E7%99%BA%E3%83%95%E3%82%A7%E3%83%BC%E3%82%BA%E3%81%94%E3%81%A8%E3%81%AE%E4%B8%8D%E5%85%B7%E5%90%88%E3%81%AE%E5%89%B2%E5%90%88.png 967w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;85%以上のバグが開発の設計とビルドの段階で生じており、ときには1行もコードを書かないうちにバグが混入することもあり
&lt;ul&gt;
&lt;li&gt;早い工程でバグフィックスしたほうがコストが抑えれる
&lt;ul&gt;
&lt;li&gt;確かコストは指数関数的に増えたはず(感想、ソースは忘れた)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;開発パイプラインをよく理解し、それぞれの段階で開発チームにどのようなフィードバックを提供する必要があるか知る&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;どんな情報が求められているかに応じて実施するテストの種類が決まる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;テストの種類ごとにフィードバックループは異なっており、得られる情報・かかるコスト・フィードバックまでの時間に違いがある&lt;/p&gt;
&lt;ul&gt;
&lt;li&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;スピードよりも価値を優先する
&lt;ul&gt;
&lt;li&gt;どれだけフィードバックが早くても、エンジニアが求める情報でないと意味がない！&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;同時並行のテスト実行でスケールを拡大する
&lt;ul&gt;
&lt;li&gt;テストが可能な限りモジュール化され、分離していることが大事&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;継続的改善を通じて学ぶ
&lt;ul&gt;
&lt;li&gt;ただバグを見つけるだけでなく、同じミスが2度と起こらないように振り返り(レトロスペクティブ)をするべき&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;チームを活かすインフラを構築する
&lt;ul&gt;
&lt;li&gt;開発パイプラインをマップ化し、どこでどのようなフィードバックが必要なのか特定することがベストな改善の余地の探り方&lt;/li&gt;
&lt;li&gt;詳細は7章で語られる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id=&quot;7章-テストインフラへの投資&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#7%E7%AB%A0-%E3%83%86%E3%82%B9%E3%83%88%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%81%B8%E3%81%AE%E6%8A%95%E8%B3%87&quot; aria-label=&quot;7章 テストインフラへの投資 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;7章 テストインフラへの投資&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;品質を上げる方法はテストだけではなく、問題を迅速に修正できるようなインフラが整備されていることも重要&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自動テスト、自動デプロイ、容易なロールバック&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;CDが実装されると、本番環境で問題が発見された場合に迅速にリリースしたり、ロールバックしたりできる&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;モニタリングとアラートシステムは「原因ベース」ではなく「現象ベース」であるべき&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;これにより、チームはユーザーが被った影響に集中できる
&lt;ul&gt;
&lt;li&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;情報セキュリティのCIAにつながるものを感じた（感想）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;例): 開発エンジニアが継続的にデプロイし、重要な指標に関わる影響をモニタリングし、問題が発生したときにロールバックできる強固なインフラを整備する
&lt;ul&gt;
&lt;li&gt;より本質的なテストの価値をQAチームも開発チームも見出すことができるようになった&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;カナリアリリースという手法もある
&lt;ul&gt;
&lt;li&gt;プロダクトを開発する社内チームや一部のユーザーだけに対し、限定的に機能をリリースする手法&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;本番環境でのテストを実施するにはベストプラクティスに習熟していなくてはならず、&lt;strong&gt;それさえやればその他のテストは不要と考えるべきではない&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;あくまで本番環境のテストは手法の一つに過ぎず、&lt;strong&gt;本番環境以外のテストを一切しないと大問題になる！&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id=&quot;8章-チームと会社の成長指標&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#8%E7%AB%A0-%E3%83%81%E3%83%BC%E3%83%A0%E3%81%A8%E4%BC%9A%E7%A4%BE%E3%81%AE%E6%88%90%E9%95%B7%E6%8C%87%E6%A8%99&quot; aria-label=&quot;8章 チームと会社の成長指標 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;8章 チームと会社の成長指標&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;成長指標は企業の成長に最も大きな影響を与え、顧客が企業のプロダクトやサービスから最も価値を得ているところに見出される
&lt;ul&gt;
&lt;li&gt;虚栄の評価基準(リーン・スタートアップより)
&lt;ul&gt;
&lt;li&gt;成果につながっているように感じられるが、行動に繋がりにくく、ビジネスの成功とも相関しない数値である
&lt;ul&gt;
&lt;li&gt;例): テスト実行にかかる時間や検出バグ数など
&lt;ul&gt;
&lt;li&gt;それを最終的なゴールにするのではなく、顧客価値という道のりの途中にある分には問題ないはず(感想)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;成長指標は主に以下に分類される
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;アテンションベース（注目ベース）&lt;/strong&gt;: B2C企業でよく適用される
&lt;ul&gt;
&lt;li&gt;プロダクトの本質がエンターテインメントや情報を提供するものである場合に有効
&lt;ul&gt;
&lt;li&gt;ユーザーがどれだけの時間を費やしたかに注目した成長指標&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;トランザクションベース（取引ベース）&lt;/strong&gt;: Eコマースやマーケットプレイスを手掛ける企業でよく適用される
&lt;ul&gt;
&lt;li&gt;プロダクトの本質が、ユーザーに商品やサービスを購入させることである場合に有効
&lt;ul&gt;
&lt;li&gt;ユーザー体験を最適化すること及び購入行動の摩擦を低減させることに注目する成長指標&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;プロダクティビティーベース(生産性ベース)&lt;/strong&gt;: B2B企業でよく適用される
&lt;ul&gt;
&lt;li&gt;プロダクトの本質がデジタルタスクやワークフローを完遂できるよう顧客を支援する場合に有効
&lt;ul&gt;
&lt;li&gt;顧客に与えられたタスクをどれだけ素早く成功させられるかに注目する成長指標&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;成長指標を特定するには顧客に提供してコアバリューを調べ、それを測定に利用する
&lt;ul&gt;
&lt;li&gt;ビジネスのコアと自分たちの作業を結びつけることで、取り組みの価値を自チーム内、同僚、マネージャーと共有できる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;企業の成長指標が何であるべきかが特定されたら、品質に関わるすべての活動をその指標に集中したものにする
&lt;ul&gt;
&lt;li&gt;こうすると、企業の成長を促進するものを中心としたチーム連携が図れる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id=&quot;9章-ローカルペルソナ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#9%E7%AB%A0-%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%9A%E3%83%AB%E3%82%BD%E3%83%8A&quot; aria-label=&quot;9章 ローカルペルソナ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;9章 ローカルペルソナ&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;共感エンジニアリング
&lt;ul&gt;
&lt;li&gt;エンジニアが顧客や顧客を直接サポートする人と一緒に時間を過ごすことで、プロダクトや機能の開発にあたって顧客がどう考えるかを理解できる
&lt;ul&gt;
&lt;li&gt;デザイン思考と通ずるものを感じた(感想)
&lt;ul&gt;
&lt;li&gt;共感（Empathize）&lt;/li&gt;
&lt;li&gt;定義（Define）&lt;/li&gt;
&lt;li&gt;概念化（Ideate）&lt;/li&gt;
&lt;li&gt;試作（Prototype）&lt;/li&gt;
&lt;li&gt;テスト（Test）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;アプリケーション利用者のユーザー体験は利用しているデバイスやOS、そして場所によりまったく新しいものとなる
&lt;ul&gt;
&lt;li&gt;お国柄ってやつ(感想)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;顧客が求める品質を確実に体験できるようにするには、実環境でのテストを目標にする必要がある
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;プロダクトがローカルペルソナに対して確実に価値を発揮できるかを確かめれるよう、テストをローカライズできるかが重要&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ローカルペルソナの環境でテストするために取れる方法には以下のものがある
&lt;ul&gt;
&lt;li&gt;チームを現地に派遣してテストする
&lt;ul&gt;
&lt;li&gt;持てる限りのデバイスをチームに持たせ、ローカルペルソナと同じ環境でテストを行うやり方
&lt;ul&gt;
&lt;li&gt;コストはかかるが、現地特有の問題を一番把握できる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ベータ版のユーザーなど既存のユーザーの力を借りてプロダクトをテストする
&lt;ul&gt;
&lt;li&gt;欠点としてコミュニティーを管理するのに追加のコストや手間がかかり、ボランティアのメンバーはクラッシュログや再現手順などを明確に与えてくれないかもしれない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;クラウドソーシング型のテストプロパイダーなどの外部パートナーと協力する&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id=&quot;10章-品質戦略のリード&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#10%E7%AB%A0-%E5%93%81%E8%B3%AA%E6%88%A6%E7%95%A5%E3%81%AE%E3%83%AA%E3%83%BC%E3%83%89&quot; aria-label=&quot;10章 品質戦略のリード permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;10章 品質戦略のリード&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;ビジョンが必ず先だ
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;明確なビジョンがあればそのうち正しい戦略がついてくる。&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;まず自分自身のビジョンを定め、それが自分の会社・チーム・部門のビジョンに沿っているか確かめる
&lt;ul&gt;
&lt;li&gt;優れたリーダーなら誰でも自分がすることの理由を明確に理解することから始めると指摘されている
&lt;ul&gt;
&lt;li&gt;TEDトークの「優れたリーダーはどうやって行動を促すか」より&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;自分自身のビジョンは長期的に、チームでのビジョンは1〜2年を目安に&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;目的地と現在地を評価してスタート地点とし、戦略を策定するために何が重要なのかを理解する
&lt;ul&gt;
&lt;li&gt;現在の品質ナラティブ、プロダクト成熟度、プロセス&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;戦略策定のプロセスに従って考えているときに&lt;strong&gt;混乱していないとしたら、おそらくそれは間違ったやり方をしている&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;戦略というのは、チームが一緒になって海の真ん中に落とされるようなもの
&lt;ul&gt;
&lt;li&gt;もし混乱せずにプロセスを進められる人がいるなら、やり方を間違っている可能性が高い&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;どれだけ経験を積み重ねたとしても、戦略策定は考えて考えて考え抜く必要がある！&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;品質ナラティブ、テスト、価値、チームのスキルとキャパの観点を交えて検討&lt;/li&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;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h1&gt;
&lt;p&gt;今まで、エンジニアとしての品質ばかりを注視してましたが、&lt;br&gt;
会社の文化やナラティブから品質を高めるというアプローチが非常に興味深く、面白かったです！&lt;br&gt;
本書はOSC2024Nagoyaにてこの本を訳された方のプレゼンで存在を知ったのですが、本当に買ってよかった...&lt;br&gt;
良書だと思います。ぜひ経営層にも一読していただきたい内容ですな😎&lt;/p&gt;
&lt;p&gt;個人的な独断と偏見な感覚だと&lt;br&gt;
ビジネス色6、技術色4な感覚です。&lt;br&gt;
ですが、エンジニアでも十分読めるし、なんならイメージすることだって容易なぐらいでした。&lt;/p&gt;
&lt;p&gt;いやーやっぱりイベントに足を運ぶのはいいものですね...&lt;br&gt;
一期一会ですな😋&lt;/p&gt;
&lt;p&gt;では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[360度カメラ動画の音を消す[GoProFusion]]]></title><description><![CDATA[背景 先日、会社のメンバーと遊びに行く機会がありました そのときに、アクティビティを360度カメラで撮影すると面白いかな〜と思い、 GoProFusionという360度カメラを中古で買いました！ 本体のお値段としては15000円ほどで、2018年発売、新品だと8800…]]></description><link>https://yukimakura.cc/360度カメラ動画の音を消す[GoProFusion]/</link><guid isPermaLink="false">https://yukimakura.cc/360度カメラ動画の音を消す[GoProFusion]/</guid><pubDate>Wed, 12 Jun 2024 08:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h1&gt;
&lt;p&gt;先日、会社のメンバーと遊びに行く機会がありました&lt;br&gt;
そのときに、アクティビティを360度カメラで撮影すると面白いかな〜と思い、&lt;br&gt;
GoProFusionという360度カメラを中古で買いました！&lt;br&gt;
本体のお値段としては15000円ほどで、2018年発売、新品だと88000円もするらしい（ワォ&lt;/p&gt;
&lt;p&gt;GoPro社としては初の360度カメラらしく、色々クセがありますが、&lt;br&gt;
意外とキレイに撮れます&lt;/p&gt;
&lt;p&gt;んまぁ、色々撮影したわけで、&lt;br&gt;
360度映像となると共有がなかなか難しい...🤔&lt;/p&gt;
&lt;p&gt;今回はYouTubeにアップロードし、URL知ってる人のみの限定公開という形で&lt;br&gt;
共有することにしました&lt;/p&gt;
&lt;p&gt;ずっととりっぱで、イケないことまで喋ってたりするので&lt;br&gt;
今回はそれをごっそり除こうという企画です！^^;&lt;/p&gt;
&lt;h1 id=&quot;下準備&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%B8%8B%E6%BA%96%E5%82%99&quot; aria-label=&quot;下準備 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;下準備&lt;/h1&gt;
&lt;p&gt;以下のものを準備しとく&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;360度映像ソース(.mp4がおすすめ)
&lt;ul&gt;
&lt;li&gt;今回はGoPro Fusion Studioでエンコードしたものを使用&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;FFmpeg
&lt;ul&gt;
&lt;li&gt;いつもの。音を取り除く&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/google/spatial-media/releases/tag/v2.0&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Spatial Media Metadata Injector(GoogleのOSS)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;こいつが動画に360度のメタ情報を埋め込むツール&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;音を取り除く&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%9F%B3%E3%82%92%E5%8F%96%E3%82%8A%E9%99%A4%E3%81%8F&quot; aria-label=&quot;音を取り除く permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;音を取り除く&lt;/h1&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;ffmpeg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;360&lt;/span&gt;度動画.mp4 &lt;span class=&quot;token parameter variable&quot;&gt;-vcodec&lt;/span&gt; copy &lt;span class=&quot;token parameter variable&quot;&gt;-an&lt;/span&gt; 生成される無音の360度動画.mp4&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;-an&lt;/code&gt;がキモ&lt;br&gt;
こいつが音を消すやつ&lt;/p&gt;
&lt;h1 id=&quot;メタ情報を埋め込む&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%A1%E3%82%BF%E6%83%85%E5%A0%B1%E3%82%92%E5%9F%8B%E3%82%81%E8%BE%BC%E3%82%80&quot; aria-label=&quot;メタ情報を埋め込む permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;メタ情報を埋め込む&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Spatial Media Metadata Injectorを起動&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;My video is spherical (360)&lt;/code&gt;にチェックを入れる&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Open&lt;/code&gt;をクリックし、&lt;code class=&quot;language-text&quot;&gt;生成される無音の360度動画.mp4&lt;/code&gt;を選択&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Inject metadata&lt;/code&gt;をクリックすると、保存先を聞かれるので指定する&lt;/li&gt;
&lt;li&gt;出来上がりを待つべし待つべし
&lt;ul&gt;
&lt;li&gt;意外とすぐ終わる&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;GoPro Playerなどで生成した無音360度動画がちゃんと360度モードで見れるか確認してください&lt;/p&gt;
&lt;h1 id=&quot;youtubeにアップロードする&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#youtube%E3%81%AB%E3%82%A2%E3%83%83%E3%83%97%E3%83%AD%E3%83%BC%E3%83%89%E3%81%99%E3%82%8B&quot; aria-label=&quot;youtubeにアップロードする permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;YouTubeにアップロードする&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;手順にしたがって普通にうｐる
&lt;ul&gt;
&lt;li&gt;アップロードしてみないと360度動画として上がったかが確認できないっぽそう&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h1&gt;
&lt;p&gt;360度カメラ、結構面白いです&lt;br&gt;
ただ、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;電池持ち悪い&lt;/li&gt;
&lt;li&gt;エンコードに少々難あり
&lt;ul&gt;
&lt;li&gt;特にGoProFusionは公式から見捨てられた感&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GoProFusionには大きく2つのエンコード手段があります&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;スマホの&lt;code class=&quot;language-text&quot;&gt;GoPro Quik&lt;/code&gt;アプリにてエンコード&lt;/li&gt;
&lt;li&gt;PCの&lt;code class=&quot;language-text&quot;&gt;GoPro Fusion Studio&lt;/code&gt;にてエンコード&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;エンコード速度としては、
&lt;strong&gt;スマホのほうがPCの20〜30倍ぐらいエンコード速いです&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;そうなると、スマホでいいじゃんってなるのですが、&lt;br&gt;
PCでやったほうがカメラのつなぎ目の処理が上手に感じるんですよね...&lt;br&gt;
まぁなんで、急ぎな映像じゃない場合はPCでやったほうがいいのかなと思いました&lt;br&gt;
(それにストレージも結構食うしね^^;)&lt;/p&gt;
&lt;p&gt;んまぁ、そんな感じでよい360度カメラライフをお送りください〜😎&lt;br&gt;
(純正も互換品もバッテリーパックがほぼ市場になくて困ってる...orz)&lt;/p&gt;
&lt;p&gt;では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[CSharpの拡張メソッドで関数型言語のパイプ演算子風を考える]]></title><description><![CDATA[背景 先週、オープンソースカンファレンス名古屋というイベントに参加してきました！ そこで、NervesというElixirベースの開発フレームワークの存在を知り、絶賛Elixirお勉強中でございます (いやTypeScriptやれよ) 当方、Elixir…]]></description><link>https://yukimakura.cc/CSharpの拡張メソッドで関数型言語のパイプ演算子風を考える/</link><guid isPermaLink="false">https://yukimakura.cc/CSharpの拡張メソッドで関数型言語のパイプ演算子風を考える/</guid><pubDate>Tue, 04 Jun 2024 08:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h2&gt;
&lt;p&gt;先週、オープンソースカンファレンス名古屋というイベントに参加してきました！&lt;br&gt;
そこで、NervesというElixirベースの開発フレームワークの存在を知り、絶賛Elixirお勉強中でございます&lt;br&gt;
(いやTypeScriptやれよ)&lt;/p&gt;
&lt;p&gt;当方、Elixirが実質初の関数型言語でございまして、&lt;br&gt;
色々学びが多くて嬉しいです（語彙力&lt;/p&gt;
&lt;p&gt;その中で&lt;code class=&quot;language-text&quot;&gt;パイプ演算子&lt;/code&gt;というものが非常に興味を持ちました&lt;br&gt;
ざっくりどういうものかを説明すると&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;elixir&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-elixir line-numbers&quot;&gt;&lt;code class=&quot;language-elixir&quot;&gt;&lt;span class=&quot;token function&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;baz&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;new_function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;other_function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;というクソ入れ子なブツを&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;elixir&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-elixir line-numbers&quot;&gt;&lt;code class=&quot;language-elixir&quot;&gt;&lt;span class=&quot;token function&quot;&gt;other_function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;new_function&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;baz&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;bar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;foo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;という書き方ができるというものです&lt;/p&gt;
&lt;p&gt;入れ子がスッキリするのも良いのですが、自分的には&lt;br&gt;
&lt;strong&gt;本来呼ばれる順番がシーケンシャルに並んでいる&lt;/strong&gt;ところに美しさを感じました&lt;/p&gt;
&lt;p&gt;ふむ、これは是非CSharpでも活かしたいと思ったわけです&lt;br&gt;
(Linqだってある意味同じことをしてるじゃないですか！Linqはいいぞ!)&lt;/p&gt;
&lt;h2 id=&quot;完成品&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%AE%8C%E6%88%90%E5%93%81&quot; aria-label=&quot;完成品 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;完成品&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/yukimakura/OpePipeForCSharp&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Githubのレポ&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://www.nuget.org/packages/OpePipeForCSharp&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Nugetでも配布しました！&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;解説&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A7%A3%E8%AA%AC&quot; aria-label=&quot;解説 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;解説&lt;/h2&gt;
&lt;p&gt;中の実装は以下のみです！&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;csharp&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-csharp line-numbers&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;summary&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// 関数型言語のパイプ演算子のような機能を拡張メソッドにて提供する&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;/summary&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;typeparam name=&quot;T&quot;&gt;対象となる値の型&amp;lt;/typeparam&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;param name=&quot;value&quot;&gt;&amp;lt;/param&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;param name=&quot;action&quot;&gt;返り値がVoidとなる任意の処理&amp;lt;/param&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;returns&gt;拡張メソッドの引数valueの値が何も処理されずにそのまま返される&amp;lt;/returns&gt;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Pipe&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;T&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Action&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; action&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;summary&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// 関数型言語のパイプ演算子のような機能を拡張メソッドにて提供する&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;/summary&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;typeparam name=&quot;FromT&quot;&gt;対象となる値の型&amp;lt;/typeparam&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;typeparam name=&quot;ToT&quot;&gt;引数funcによって変形された返り値の型&amp;lt;/typeparam&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;param name=&quot;value&quot;&gt;&amp;lt;/param&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;param name=&quot;func&quot;&gt;任意の値を加工する処理&amp;lt;/param&gt;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;/// &amp;lt;returns&gt;引数funcによって変形された返り値&amp;lt;/returns&gt;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;ToT&lt;/span&gt; &lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Pipe&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;FromT&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ToT&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;FromT&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Func&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;FromT&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ToT&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; func&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;func&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;この2つで、結構やりたいことができます&lt;/p&gt;
&lt;h3 id=&quot;ケース1-つらつら処理をつなげる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B1%E3%83%BC%E3%82%B91-%E3%81%A4%E3%82%89%E3%81%A4%E3%82%89%E5%87%A6%E7%90%86%E3%82%92%E3%81%A4%E3%81%AA%E3%81%92%E3%82%8B&quot; aria-label=&quot;ケース1 つらつら処理をつなげる permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ケース1 つらつら処理をつなげる&lt;/h3&gt;
&lt;p&gt;※&lt;code class=&quot;language-text&quot;&gt;Should().Be()&lt;/code&gt;ってやつは&lt;a href=&quot;https://github.com/fluentassertions/fluentassertions&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;FluentAssertion&lt;/a&gt;っていうテストのヘルパー的奴です&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;csharp&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-csharp line-numbers&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Pipe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Pipe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Should&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Be&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;101&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;ケース2-引数を省略&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B1%E3%83%BC%E3%82%B92-%E5%BC%95%E6%95%B0%E3%82%92%E7%9C%81%E7%95%A5&quot; aria-label=&quot;ケース2 引数を省略 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ケース2 引数を省略&lt;/h3&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;csharp&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-csharp line-numbers&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 事前に関数を定義しておくと...       &lt;/span&gt;
&lt;span class=&quot;token class-name&quot;&gt;Func&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; addFunc &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// 自動的にマッピング!&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Pipe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;addFunc&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Pipe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Should&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Be&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;101&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;※お察しかと思いますが、関数の引数が2つ以上ある場合や型がマッチしない場合はラムダ式必須です&lt;br&gt;
※もちろん、Func型でなくても普通に定義した関数でも同等のことができます&lt;/p&gt;
&lt;h3 id=&quot;ケース3-処理の間にログ的な出力を差し込む&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B1%E3%83%BC%E3%82%B93-%E5%87%A6%E7%90%86%E3%81%AE%E9%96%93%E3%81%AB%E3%83%AD%E3%82%B0%E7%9A%84%E3%81%AA%E5%87%BA%E5%8A%9B%E3%82%92%E5%B7%AE%E3%81%97%E8%BE%BC%E3%82%80&quot; aria-label=&quot;ケース3 処理の間にログ的な出力を差し込む permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ケース3 処理の間にログ的な出力を差し込む&lt;/h3&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;csharp&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-csharp line-numbers&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;DummyRecord&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;yukimakura&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; thruFlag &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token class-name&quot;&gt;Func&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;DummyRecord&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; tfFunc &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ID&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token class-name&quot;&gt;Action&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; modThruFlag &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; thruFlag &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token class-name&quot;&gt;Func&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; addFunc &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Pipe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;tfFunc&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Pipe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;modThruFlag&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;//こいつをたとえばConsole.WriteLineとかにしても良い、そうするとtfFuncの返り値の値が標準出力される&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Pipe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;addFunc&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Pipe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Should&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Be&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;101&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

thruFlag&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Should&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;BeTrue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;...ふむふむ、なかなか魅力的ではないですか？（・∀・）ﾆﾔﾆﾔ&lt;/p&gt;
&lt;h2 id=&quot;デメリットの考察&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%87%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88%E3%81%AE%E8%80%83%E5%AF%9F&quot; aria-label=&quot;デメリットの考察 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;デメリットの考察&lt;/h2&gt;
&lt;p&gt;...さて、表面上はいいことづくしなように見えてしまいますが、&lt;br&gt;
この&lt;strong&gt;CSharpという王道オブジェクト指向言語において&lt;/strong&gt;考えなければならない問題があります&lt;/p&gt;
&lt;h3 id=&quot;如何にこの関数型アプローチがハマるか&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%A6%82%E4%BD%95%E3%81%AB%E3%81%93%E3%81%AE%E9%96%A2%E6%95%B0%E5%9E%8B%E3%82%A2%E3%83%97%E3%83%AD%E3%83%BC%E3%83%81%E3%81%8C%E3%83%8F%E3%83%9E%E3%82%8B%E3%81%8B&quot; aria-label=&quot;如何にこの関数型アプローチがハマるか permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;如何にこの関数型アプローチがハマるか&lt;/h3&gt;
&lt;p&gt;まず、これが根本的に致命傷かもしれません&lt;br&gt;
純粋関数のような実装ばかりしていればこのアプローチにハマると思います&lt;br&gt;
しかし、大半の場合はオブジェクトに操作が紐づくケースだと思います&lt;br&gt;
...といいますか、オブジェクト思考だと一般論的にはそちらのほうが美しいとされることも多いのではないのでしょうか？&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;csharp&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-csharp line-numbers&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;internal&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;HogeClass&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; Count &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;CountUpAndGet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; count&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        Count &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; count&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; Count&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;てきな、&lt;code class=&quot;language-text&quot;&gt;CountUpAndGet()&lt;/code&gt;を呼ぶごとに結果が変わる、&lt;br&gt;
純粋関数ではないような作りです&lt;/p&gt;
&lt;p&gt;これだと、関数型アプローチにはハマらないと思いますが&lt;br&gt;
別にこれは絶対悪というわけではないと思います&lt;br&gt;
(もっとも、単体テストを考えたときに脆いテストになってしまいそうですが...&lt;br&gt;
&lt;a href=&quot;https://amzn.asia/d/fcBlfgT&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;参考:UnitTesting&lt;/a&gt;)&lt;/p&gt;
&lt;h3 id=&quot;知らない人がこのコードを見たときの違和感&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%9F%A5%E3%82%89%E3%81%AA%E3%81%84%E4%BA%BA%E3%81%8C%E3%81%93%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E8%A6%8B%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E9%81%95%E5%92%8C%E6%84%9F&quot; aria-label=&quot;知らない人がこのコードを見たときの違和感 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;知らない人がこのコードを見たときの違和感&lt;/h3&gt;
&lt;p&gt;...これは慣れてもらうしかない部分もあるかもしれませんが、&lt;br&gt;
直感的な部分で、「これ、意味あるの？」と思われる方も居られる気はします&lt;/p&gt;
&lt;p&gt;事実、これを導入したからと言って圧倒的に開発しやすくなっただとか、&lt;br&gt;
処理性能が上がっただとかは無いです&lt;/p&gt;
&lt;p&gt;あくまで、考え方的な話にはなると思いますが、&lt;br&gt;
入れ子構造よりも、行われる処理が文頭からシーケンシャルに行われるというナチュラル感や、コードの文字数の削減(ただし微々たるもの、チリツモやで！)の恩恵はあるので私は無駄だとは思いません&lt;/p&gt;
&lt;p&gt;昨今、多様性多様性と大絶叫している世の中なのでチームで開発する場合は&lt;br&gt;
合意形成が大事だと思います(当たりさわりの無い言い回し)&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;書いてるうちに途中で&lt;code class=&quot;language-text&quot;&gt;Pipe()&lt;/code&gt;よりも&lt;code class=&quot;language-text&quot;&gt;Then()&lt;/code&gt;のほうが適切に思えてきたゆきまくらです^^;&lt;/p&gt;
&lt;p&gt;この件はぶっちゃけ正解はない世界だと思いますが、&lt;br&gt;
影響の少ない範囲で用法用量守って効率的に開発する分にはいいと思います&lt;br&gt;
なにも、&lt;strong&gt;オブジェクト指向言語だからといってオブジェクト指向のパラダイムに縛られる必要は無いのです！&lt;/strong&gt;&lt;br&gt;
(たとえは、JavaのSpringだってAOP(アスペクト指向プログラミング)を練り込んできてるでしょう？)&lt;br&gt;
まぁ、ユースケースをイメージすると、DIおよびストラテジーパターンを採用しているアーキテクチャなシステムがあると想定して、その末端の各ストラテジーにこの手法を採用するとかは影響範囲が大きくなくて比較的導入しやすいのかなとは思います&lt;/p&gt;
&lt;p&gt;純粋関数であることの利点としては&lt;a href=&quot;https://amzn.asia/d/fcBlfgT&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;UnitTesting&lt;/a&gt;でも書いてあるように、&lt;br&gt;
単体テストの単純化および脆くなりにくいテストの構築に貢献してくれるはずです&lt;br&gt;
なので、&lt;strong&gt;パラダイムの(用法用量を守った)多様性&lt;/strong&gt;も注視して今後は開発していくのが何よりも重要なのでしょう(持論)&lt;/p&gt;
&lt;p&gt;では(&lt;em&gt;^^&lt;/em&gt;)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[BlazorとPixiJSを融合させてみるぞ]]></title><description><![CDATA[前置き Blazorでグラフィカルなアプリケーションを作るとき皆さんはどうしますか？ ...といいますかぶっちゃけあまりニーズが少ないのか、はたまたこれから出てくるのか🤔 
ちょいと仕事でBlazor…]]></description><link>https://yukimakura.cc/BlazorとPixiJSを融合させてみるぞ/</link><guid isPermaLink="false">https://yukimakura.cc/BlazorとPixiJSを融合させてみるぞ/</guid><pubDate>Tue, 02 Apr 2024 10:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;前置き&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%89%8D%E7%BD%AE%E3%81%8D&quot; aria-label=&quot;前置き permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;前置き&lt;/h1&gt;
&lt;p&gt;Blazorでグラフィカルなアプリケーションを作るとき皆さんはどうしますか？&lt;br&gt;
...といいますかぶっちゃけあまりニーズが少ないのか、はたまたこれから出てくるのか🤔&lt;br&gt;
&lt;br/&gt;
ちょいと仕事でBlazorでグラフィカルなアプリケーションを作らなければならず、&lt;br&gt;
とりあえず、BECanvasというHTML5のCanvasをC#にラッピングしてくれるライブラリを使っていました。&lt;br&gt;
しかし、お察しの通りヤツはGPUをあまり賢く使ってくれません。&lt;br&gt;
(結果激重になってしまった...orz)&lt;br&gt;
と、言うわけでGPUを上手に使うことで見事SDGsを果たそうという企画です（大げさ&lt;/p&gt;
&lt;h1 id=&quot;レポデモ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%AC%E3%83%9D%E3%83%87%E3%83%A2&quot; aria-label=&quot;レポデモ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;レポ＆デモ&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/yukimakura/PixiJSBlazorDemo&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ゆきまくら製デモのレポです&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 66.66666666666666%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe id=&quot;inlineFrameExample&quot; title=&quot;Inline Frame Example&quot; src=&quot;https://yukimakura.github.io/PixiJSBlazorDemo/&quot; style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt; &lt;/iframe&gt; &lt;/div&gt;
&lt;p&gt;デモの概要を軽く説明すると、&lt;code class=&quot;language-text&quot;&gt;Click me&lt;/code&gt;を押すとキャンバス上に■が現れます。&lt;br&gt;
その■をクリックまたはタップすると、色が変わり、キャンバス外の&lt;code class=&quot;language-text&quot;&gt;lask clickobj&lt;/code&gt;の項目に選択されたオブジェクトの情報が表示される感じです。&lt;br&gt;
&lt;strong&gt;Pixi-Viewportも導入してあるので、思うがままにヌルヌル拡大縮小できます!&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id=&quot;問題点&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%95%8F%E9%A1%8C%E7%82%B9&quot; aria-label=&quot;問題点 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;問題点&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;PixiJSの導入バージョン及び、Pixi-Viewportの導入バージョンが古め
&lt;ul&gt;
&lt;li&gt;なんか、Pixi-Viewportが最新だと言うこと聞いてくれなかった...(´・ω・`)
&lt;ul&gt;
&lt;li&gt;さらに最新のPixiJSだとWebGPU対応周りで結構変わってるっぽい？&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;裏を返せば、Pixi-Viewport使わない方は最新を導入してください&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;詳解&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A9%B3%E8%A7%A3&quot; aria-label=&quot;詳解 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;詳解&lt;/h1&gt;
&lt;p&gt;気が向いたら書きます＆レポの方も気が向いたらコメント追記します（おい&lt;/p&gt;
&lt;h1 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h1&gt;
&lt;p&gt;昨日はエイプリルフールだからなんかネタぶっこもうかと思って、&lt;br&gt;
音のソノリティ✕アル中カラカラ（もう古い？）の動画でも作ろうかなと思ってたが、&lt;br&gt;
Tictokでやってる人見つけてしかもそんなにバズってなかったので萎えました（おい&lt;br&gt;
&lt;br&gt;
にしても、PixiJSとかWebGLすごいね...&lt;br&gt;
こんなお手軽にプラットフォーム気にぜずGPU上手に使えるとは...&lt;br&gt;
標準化及びそれに準拠してる方々には頭が上がりませんな^^;&lt;br&gt;
では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ThinkPadX1C6のファンをNidecから変えて比較してみる！]]></title><description><![CDATA[ネタ元 reddit ↑概要としては、夫婦でThinkPad X1 Carbon Gen6を買ったのだが、 妻の機体が明らかにうるさい＆サーマルスロットリングが起きているというもの ちなみに、うるさい方がNidec…]]></description><link>https://yukimakura.cc/ThinkPadX1C6のファンをNidecから変えて比較してみる！/</link><guid isPermaLink="false">https://yukimakura.cc/ThinkPadX1C6のファンをNidecから変えて比較してみる！/</guid><pubDate>Sun, 10 Mar 2024 10:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;ネタ元&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%8D%E3%82%BF%E5%85%83&quot; aria-label=&quot;ネタ元 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ネタ元&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/thinkpad/comments/c7zpah/x1_carbon_6th_gen_horrible_cooling_fan_design/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;reddit&lt;/a&gt;&lt;br&gt;
↑概要としては、夫婦でThinkPad X1 Carbon Gen6を買ったのだが、&lt;br&gt;
妻の機体が明らかにうるさい＆サーマルスロットリングが起きているというもの&lt;br&gt;
ちなみに、&lt;strong&gt;うるさい方がNidec製の模様(日本電産どうした！！？)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;んで、うちの子も裏蓋開けたら&lt;strong&gt;Nidec製でした...&lt;/strong&gt;&lt;br&gt;
Ubuntuでは、パワーマネジメントが上手いのかぶっちゃけあんまり気にならなかったのですが、&lt;br&gt;
ひょんな事から、Windowsのゲームが遊びたくなり、&lt;strong&gt;Windowsで使うと、めちゃくちゃ悲惨！！！&lt;/strong&gt;&lt;br&gt;
ということで、アリエクで仕入れてみたので比較しますぞい&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://ja.aliexpress.com/item/1005006413511193.html?channel=twinner&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;商品リンクはこちら&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;写真で見る違い&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%86%99%E7%9C%9F%E3%81%A7%E8%A6%8B%E3%82%8B%E9%81%95%E3%81%84&quot; aria-label=&quot;写真で見る違い permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;写真で見る違い&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 92%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAAsTAAALEwEAmpwYAAAEyElEQVR42h2QaU8TBgCG+wuWLPuwI9kcEsADp4J4SzlKKS3QAoUelFbogUhr6UGV0tL7wgLFajlbEeTwmHhM3WbcsjjdotvIsvhpW/yyH7Bl2ednkT/wvM/7CI4dO4ZS2YFOp6GrS4lCIUcmk1JfV4dc3oJKo+RAxUEqKvezo2gnH3z4MUU7iykpKePDjz7hnXffR3SqEp1CSPneUgRarYrBwbMIa4SIxSLE4gZqa2uoqjqEsOYU571umqRSiop2om6TYOhqYVdpKUVFxWg6pPjsJvpa92Fseg9tWwMCp9OO3W6nvrYGdVc7hh4NGlUHssYGjh45ilUtZyI6irSlBadFi3/IxL7yPezevQttRzO2XhUnqyrYV7YDl0WFIJmMYR9y0NQkpqtDgVwmRdYkQdYo4vgpIakeCc9XJvD4RhBVn+DYkUpEtSdpaqihXniCyooDCIWnqBFW47JqEays5LeB+h71NrRT2Y5K1YFWo+RkXR1xnZhvckE8Pi/ihgZKS0r5dEfRdoK3t8v37OHwoUoc9gFSIQuCaCzC0JANXbcKrbYLnU5NR5ucXr0WkURCrl/B7aST6dz0dpLdu/dw+PBRDhw4SFlZGcXFJZSWlOF02PCGHQii8RjpVBiFogXboIUBSy96nYZ+kwGZvJXrTjWJ3laGXHYsptNUVFSi0elRaXSUl5ezd+/e7ZHunh4ybw2vFuYJhccwGvX0mw3bIINOR59eS3tnB2vubhJ9cqxWC1dnpxDV1yES1dMsa6G5UcJn+/ajbG5kym0m6jMiSKeTpNMpTKZerAMm+o0GBi1mrP1mZM0yJowK5s/3EfC5ycRHaZVKqK0+SXNjI5p2JXp1Ow6jlocZLzPhfgSxWIgbq3nikQCj3mHiseC2sU6vR6VWMTekITTYQ9A7jO+CnXjExYhrEPNpDT6vHfewFWF1NcerKrgwZkMQDPrYWFngxvIc66t5fnj5jO+/vM1G2ErGpuesQUvE62JmKslk1I3PZURcX4dc1oRaVk9KJ8KvkdCn7cTtNCMYC/hZms8ymYqwtrrE3c11/nh6nX++XmQz5iQaGGVtIUMmFWPEaSTiMSGXShhx2Vh1q/hrLcj6uIeN+SSbhXEEfr+PG8vzZCeT3P58ja0Xj/j72wXefLXOq0KK6XSM5ZlJppNhAp4BAn47p7s7GXac5c2sja1CiCe3Fnm4dJG7+XEE3lEvj7/YYGnhMjdvrPD656f8912Of1/dYWs+RCo4wuJ0iqmIn/vnBrgc96HTKPFYzbyZs/Nbzs1PKxd5kAtyZ9twzEchP8vC7CWWlhZ4/miNreUQT8bPsbUYITF2gUL2Io4zZsLGbsbDw/SolXgGTvNLIcD9CQ8vsx6e5JPcXkwiiCfi5PPzLF9bYDZ3ic2rGX7fiPIiYebPe7PMZTMkAhdQK5oxWQx4Rm30dXcy2N/Lr4s+XicM/Jgd5sG1DLeuhBB4/QFmL0+wefMauewkq4vTPLuZ43EuxL3CNLnpNAaNEmWLlHalHJ1Zi6qtBd+QmcRwP06lmLC9l1TKzaD/DIIRzzCB80P4R9zEowGS8TDLywVmZrLEwwFSkRAmfTfyxgbkfd0E00nGfD7mrkyQzk4QnUzgCgZxeB04Y27+B1AANj7RLjSAAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/5b7b5b2a1996a1423e9387fe0e846b72/5a190/nidecAndDelta.png&quot;
        srcset=&quot;/static/5b7b5b2a1996a1423e9387fe0e846b72/772e8/nidecAndDelta.png 200w,
/static/5b7b5b2a1996a1423e9387fe0e846b72/e17e5/nidecAndDelta.png 400w,
/static/5b7b5b2a1996a1423e9387fe0e846b72/5a190/nidecAndDelta.png 800w,
/static/5b7b5b2a1996a1423e9387fe0e846b72/c1b63/nidecAndDelta.png 1200w,
/static/5b7b5b2a1996a1423e9387fe0e846b72/6f464/nidecAndDelta.png 1464w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 106%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAVCAYAAABG1c6oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFf0lEQVR42iWT2VJbhwFA76+00z54knTsgIyx2LUhtKAFwb1cXwkhhBDakJCuLBAQECAbzF7MZjmhJdhpnKExwQslGGInsRPbiU3isd12On3r9CdOp8nDeT1P5wgN9bXo62vRnq/E3Gig0ajjvXfexWA2Ek8l0FZVcaasjHdOneJ3v/kt5e+f5pzmzK+Un0Zb8T7lZ96jxVaNueb3CA5rI7LkQXLb8bU6Udw2vG4rstOMaNHR4baTzaapq67GYDSRiXdzdWaYpek840NJBrMR1FSIQTWK2VCH0CGLBD02Pp+MsVdMcPdSnKNiD0cFL99M+LidVxjM9mNrdnBjOMBfs62UimnWRyIsZbtYSCnMx0RW1Q5klxlhJKxwb7yHOx8ucHhjjTtbKzyYz/LVSDvfXw5wO9dOKtVHj1PPjnSKzV4rj1UTR9FqjqI1HAY1HCjvst9bQyToRdgZ7OAztZ0HxRivVy7y6o8Z3i6nebWY4GQuyhdDflIZlSVZy07GzcHRAV+PSTzNNfJj3sLP2QYexyr5NqOn2OdDuFfoYb3Xzd4H3bxeUTkqhBhT7Iwqdg5HA3yqytiNBkpKJY9GJW5NqXw9aOfFqIOHGSMf+rQc9ul4quqJmjUIj+f7uT3c+YvwZDFJUnLQ1uKmyWik12lib8CHpa6KUpeeF/kmdhONPB91cifViFVbToWmgvOn/8AXfSZGxVqEh9MJni6keDKb5HA8TLvDTjYepscn4zY18JmqIJn1rHUaeDnq5tmlC/w03sKkrCMQ6OJwdwtRkoiYytnN2BEeFCO8XOjjx6UMPyym6ZfstLtduKxWcoqL40IPstXIRtDEyVgb3457eTEhcq3Xhiy1MzaQRq83UGyt5FHxAsLDqSiPJsN8WYzxZjXLkysJVuIKm7kQz+dSHBfCiBYTVwNG3ub0bPgbuNnfyj9m/cz4GxHrNAx7tPxcsBN3VSMcFCPcz/spJb3869oAb1dU/r6a482yyslckumAG5vJyLhs5HW6kuOes0StNfw57uKkKPPDeBtPPnCwlXKitFgQBkMXmO7yMN3dxieFFM/XRtm/nGa30MeVqJeA1IZf9CA21jMvVnFdqmTJcRrRpKPXaSDs1GHXVxGWXfxlrYjQ7W1DbNRzMBzk1nCMaxvrjAzmyWWzRCNRUrEInVIrutoaWluaMNXUstpSxoJSj91mQ5HbsFnM5FK9fPrRLIKv3UO628fR5QTPJsNcvzxCfihPOtlHXzSCV2z9JSNrhYZcs42BkMyOv4zDcAXBC63MzxZRFIlkJMD2ehFhKJchFg2zd+Uib+YS7E9nySajdMgyAa+C7GlBbPXQoq1kSvSwMTP06yXZBtaHwpSuLTNVuEgs5GN7dQJBVdOMxIL8e2OQ1wtJfpqJE2uzE+jspLvTjyJJiG4X1RoNTU16bo74eD5k57uCh4d5ByPZOMl4iGiog+21CQSvIjOZ7OZVaYyd0iJPF1TSspNUf5qeYBBfezsOqwVTVRV1DbX8aUBkfzrN7vVFjgcdOA1adPU1hAIKm8sFBLvVwngyxLONUW5urvNkPkvUbSYWT9DV4UfytGA2GKg/W4G+sYHrqof7E73cLU3zXd6MtbqMyvPnEB0NhKNtCK5mO4X+CP/9KM9/Sjn+OR+jy1KP399JNqPS4fVhqKtHU3YGnU9mIR/hoLuSlzkdX424CAS9SAEv8ZiXWC6E0Gyzku9PcH8qxd5YL19eyZD4f0qiSFZV8SlearXVVFZokDq7WF6a48alDJ8XE9wqzfLx1grbt3ap65ghGFAQmq0W8kM5fD4vsizTFexG7U9gt9iwNFkx6PTo6uo5f1aD4pXY3ipxZ/8u948Pufe3PT7evEqoeJdz0hxtrS7+B+KXzpcREw4aAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/52c69644c029c209b9dff40ba0e57618/5a190/nidecAndDeltaRear.png&quot;
        srcset=&quot;/static/52c69644c029c209b9dff40ba0e57618/772e8/nidecAndDeltaRear.png 200w,
/static/52c69644c029c209b9dff40ba0e57618/e17e5/nidecAndDeltaRear.png 400w,
/static/52c69644c029c209b9dff40ba0e57618/5a190/nidecAndDeltaRear.png 800w,
/static/52c69644c029c209b9dff40ba0e57618/7a1fb/nidecAndDeltaRear.png 1030w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
写真左側が今回買ったファンで、右側がNidecファンです&lt;br&gt;
&lt;strong&gt;ひと目見ただけで明らかに通気口のサイズが違うことが分かります&lt;/strong&gt;&lt;br&gt;
Nidecは空気吸う気ほとんどないですね^^;&lt;/p&gt;
&lt;p&gt;余談ですが、アリエクの写真ではよくわからないメーカーの絵だったので期待していなかったのですが、&lt;br&gt;
実際届いたものを見ると、Delta製のシールが貼ってありました！&lt;br&gt;
まぁ、その代わりに中古っぽかったですけど、良しとしましょう（寛容&lt;/p&gt;
&lt;h2 id=&quot;ベンチマークや観測方法&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%99%E3%83%B3%E3%83%81%E3%83%9E%E3%83%BC%E3%82%AF%E3%82%84%E8%A6%B3%E6%B8%AC%E6%96%B9%E6%B3%95&quot; aria-label=&quot;ベンチマークや観測方法 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ベンチマークや観測方法&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TH3P4G3にてRTX2080を外付け&lt;/li&gt;
&lt;li&gt;3DMarkのFireStrike（アルティメットじゃないやつ）&lt;/li&gt;
&lt;li&gt;Windows11 23H2&lt;/li&gt;
&lt;li&gt;OpenHardwareMonitorにて1Hzごとにセンサーデータをロギング&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;計測結果&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A8%88%E6%B8%AC%E7%B5%90%E6%9E%9C&quot; aria-label=&quot;計測結果 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;計測結果&lt;/h2&gt;
&lt;h3 id=&quot;cpuの使用率温度動作周波数の推移&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#cpu%E3%81%AE%E4%BD%BF%E7%94%A8%E7%8E%87%E6%B8%A9%E5%BA%A6%E5%8B%95%E4%BD%9C%E5%91%A8%E6%B3%A2%E6%95%B0%E3%81%AE%E6%8E%A8%E7%A7%BB&quot; aria-label=&quot;cpuの使用率温度動作周波数の推移 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;CPUの使用率、温度、動作周波数の推移&lt;/h3&gt;
&lt;p&gt;CPUの使用率、温度、動作周波数の3つの観点でグラフ化しました&lt;br&gt;
※微妙にデータの取得数が違うのはご了承ください🙇‍♀🙇‍♀🙇‍♀&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 61.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAACgUlEQVR42m2Sa28bVRCG8zv5AfyBIr5SqSBEBCoCkQ8NFUohqFUQQbmINJe60BQ7lZPGySp2HDt17I131/aunXX2cvZcHuR1QkBlpDlzjs7Mq0evZkYphZKKSdVa59VoTZZlBEGA67o4jsPA9/E8j16/TyZE3qP/J2e4CcNdKA2jMKbf87Btm57nEQU+juvgdLu5uDb/nriLmSRN6LsBcT8gEQpxFaLCEJllSKVy0ltqKRVRpklcBxleoeE/dMaYKaFbt2ltFen4ml6thWzUMHF0g35HIjNFdQDixEJ1Lt77zwknT6d6ztvlXayOomudTwcCHxVFUzpjSIUi9kecDyFtnKGcS4ye/t1mLjg5WlabVwvbHJ6OqR+8I6scIIMAeRX+Q3A9ihlc+rmgbJ6h2i3UoP8eZS7Y3Dth/YslXuy0sEpNstKfhL0hVyenkMR547jr0aq7VNsp1+Uymd0hq+zn3hoh0NH1VHBi7HnpmPl7P7IwX+Z4s4x6/QKrMeZydQPdbuaNvcMa1UqHutWlvbaF2+wy/uMlRkn09Rhpt+8IL0sVfvjoCcvfbVNbewU7K1jLBY7vz+I+XSLd36O7vsXvj7aorBXpzT+ieurjFwqgFXoYkO5O7jd72FzdpvLNArX7n/Py4y85np1j/+ECz3+tsLFYpPDpYxqfPKD+1beU555hff09b37apPR4BWlfID0H/8MPSJ6vTgVrZyPenXTplI4o/OVRPBjghhOjNcoYTodg12xUOCJyPcLBiM3lIz5b7CN2Nkh+WyL+5WdkvcrMxNQoSUlEhpj4YSTGSGSWkEYRIo4wMiZTkjQVCCnRStCPNd5QkMYx6XiMMCZf9L8B/zp44W0JAvcAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/a0cd318401fd65a884c74168f1dee528/5a190/usage.png&quot;
        srcset=&quot;/static/a0cd318401fd65a884c74168f1dee528/772e8/usage.png 200w,
/static/a0cd318401fd65a884c74168f1dee528/e17e5/usage.png 400w,
/static/a0cd318401fd65a884c74168f1dee528/5a190/usage.png 800w,
/static/a0cd318401fd65a884c74168f1dee528/84ee5/usage.png 1076w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 61.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAABgElEQVR42q2T3Y7TMBCF8/5PwiU3+wiAxFYrob1ALO2WQpImbdz8NK1jj+0P2WkpAu7KkY7O2J45Gv9lzjmcCD7SuaThon3Xsd/tKIsCpRTbsmToe7zzBO/nGnGpzl3qM/5AAEbjaYcju0aRVxXbuubctpR1Td00qENLfzzyL2QnrRnrClvk2KhlgS4K9HqF3qw5r75i9zVONZhdjS5zTkWOLkvsjw1SbRPtt1d835HFjtx4hF7h+xZRCroGv6tSYtQwdMhB4bsDvj0QxiFpzPVqjx96XLUlnEYyEWEylucShmluux5Buzk2bmaEluuRgPW3I7oybTmGy62weHV8eBHevDcsVsLzd8fn3PFSOj4uhXdfLJ82wtNaeFwKbxeGhydL8BerMGsWb2aykgbWBYZzSGviAtqEpM4HtJ3VSsD7wNkExinm3pgMxQrGmmQyT84F1/iW/Lf+vv7L0Mf35P3t2QTuQmatxRhzMQt38XIp/xdpy1rr1OU9nKaJ+I1/Ak6GqHL9ZSTUAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/33b512d60443ac5b04e4184876d42e90/5a190/temp.png&quot;
        srcset=&quot;/static/33b512d60443ac5b04e4184876d42e90/772e8/temp.png 200w,
/static/33b512d60443ac5b04e4184876d42e90/e17e5/temp.png 400w,
/static/33b512d60443ac5b04e4184876d42e90/5a190/temp.png 800w,
/static/33b512d60443ac5b04e4184876d42e90/84ee5/temp.png 1076w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 61.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAAB5ElEQVR42q2TQW/TQBCF/YP5CXDgABwrDlwqRBRxaQ8tSEiNEBRKlQNcANEgqBJRogg7qZPYWdtr73rXH9q1UwocYaSn3Zkdz7z1vA3qusbBGtPCWpRSrFYroihisVgwm82YLxbEcex9d1ZVFU3T+HxjzBUCOtMGRC7ZbDas12v/YRiGHlEYki2XzOdz38TFkiQhTVOf6whtLRBC+ANjoaw0ZVkiywqlNForz6TWNbau0dpBUylFWVXkhURK2d7QWs+4Y+ioNz7g0IWu9s0f+3btNi7R2haOoeuwSnPefbOEiQEsw6+KH2vrk5VnZUhzQ7wxPrYpDGlpCVPrifiy1nd1DA0fzgU7Byv2TzNuP6k4mTScjxPeT0omCTz/Av2h4sWnircjwZtJw81+zI2HG+T3KfZijFnGnmXgemajMy57PT7fvc/TO3tEx0PSR7uMdx8jXh0zPXrNqHdIMhgw2X9GdnrC4MERB7f6yJcD5OEeYuce+uwjgSxLclf9MkREMTaaYmYXWFmAkthMoLOcRiTYIgddYRYRSlZkawG1buUjBI1WBG46Tn/d76XhlzXXnO3Z9aF43023G4gfSlEUZFnmnba4bSXQycCtXgF/xexvytgWDfjP5q/sxOue27/A1XBP7ydVV5bU+wcyyAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/64e3196f259d5e73f93d4d05adcff2d4/5a190/freq.png&quot;
        srcset=&quot;/static/64e3196f259d5e73f93d4d05adcff2d4/772e8/freq.png 200w,
/static/64e3196f259d5e73f93d4d05adcff2d4/e17e5/freq.png 400w,
/static/64e3196f259d5e73f93d4d05adcff2d4/5a190/freq.png 800w,
/static/64e3196f259d5e73f93d4d05adcff2d4/84ee5/freq.png 1076w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;br&gt;
&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h3 id=&quot;3dmarkの結果&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#3dmark%E3%81%AE%E7%B5%90%E6%9E%9C&quot; aria-label=&quot;3dmarkの結果 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;3DMarkの結果&lt;/h3&gt;
&lt;h4 id=&quot;nidec&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#nidec&quot; aria-label=&quot;nidec permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Nidec&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 63%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAACC0lEQVR42l1TTa/SUBDtP3ehy7d06VKDuHgLY2KeG3SDiRghPsITI7UUWkppod8ftx/HnCGXgDeZTC935syZM4Ox2WywttfwnAP80EWsXPB0fSc+z3MEQQDHcbDf7+H7PrIsQ13XYjx934uPogiGJPY9gsLBU/gVf5NH1G0BfZIkwel0utyZbJomJpMJZrPZDSBjjVSF+GC9xL15h5HzGg/2K7z9/Rw//AcJStMErusKy8PhIOBkzWQa2fJeliU8z4PxZvkM8/DLuRLOlcjwfnWHb/v3aMoe3t7DbreTlo/H4wUwTVO0bYumaYQl34zv/kcBUY1CkiUoqgJ916PrWgz/vIAVPKHMbrVarVaYTqdYLBY3v8dxDIMfy+USo88jjMdjDAYDDN8NgRaYBp8wModIj6WwJEMaE6uqQlEUl9bJmpIIYBRH2G63EmjbNubz+XlqWYifv6aIo0SmSzCtI9ujv26Zd4M6UFCuACvykYeBbD1NUtHqujUW55T/b1kAWZkT1MbKBGYBpZR8c3p847QZz070Ol0z504bnrdDGIZi/JGJemnJltrwjcm6IBeYpltnUX5z+Q2lGqhaCRuaBrrWRWvFQWjm9PpOz3gWNizbFNpkYlmW7BuDqBNbZBDZ6PZpesmZR/2Zy3fR0IvXyIoUVVUjL3JJ0CvBYGpFjQhMTz31f1oD804w+n/m8NfnieAqmgAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/1224dcbc231c32d1e7cb1ec729b329d4/5a190/3dmarkNidec.png&quot;
        srcset=&quot;/static/1224dcbc231c32d1e7cb1ec729b329d4/772e8/3dmarkNidec.png 200w,
/static/1224dcbc231c32d1e7cb1ec729b329d4/e17e5/3dmarkNidec.png 400w,
/static/1224dcbc231c32d1e7cb1ec729b329d4/5a190/3dmarkNidec.png 800w,
/static/1224dcbc231c32d1e7cb1ec729b329d4/c1b63/3dmarkNidec.png 1200w,
/static/1224dcbc231c32d1e7cb1ec729b329d4/29007/3dmarkNidec.png 1600w,
/static/1224dcbc231c32d1e7cb1ec729b329d4/82e86/3dmarkNidec.png 1978w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h4 id=&quot;delta&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#delta&quot; aria-label=&quot;delta permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Delta&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 63%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAACDklEQVR42lVSTW/aQBT0P++hPebYYy/9kppLDlWiKOohhwoqFbWgVOWjooQYDLbBYHvx19reieahjcDS6q1335s3M2+dxWKBJ/cJvrdBGK2Q6BX4taaVmGUZttstPM9DEASyeFYUBfI8R9se8/jFcQxHCo3BNvcwin7gMf2DqslfktI0xX6/f/kvyxKDwQC9Xg/dbhda67NcR+kI1/O3uJpd4N77hDv3Hb78e43f4Z0kKZVitVoJS67dbieFZKmUkmgZ+74P5/PkFf7uvkuxMUaibgtc/b/Az+Ar6sLAD3ys12uRS7aUykiJTdOgrmupZTPnV3h7BKk11CFFWRZo6hZt2+By+gbz7QjFoTprOJ1O0e/3MR6Pz86TJIHDzXA4RKfTEU9urm/w4eN7mAoYRN9wP7uE2hXC0g6FhVVViZ/cWws2m80RME5i8YmXrutiNBoBBogPER7GfSRxijAMBYxFVi7jqWT+O0SnoexIb+zUmGhaA5UqMf9UGp8aVU0mk7NzAWRnO0E7RQKzAcG55/R4RxXMtzIJcMqcjRwmR1Eki4csJBgXpdAb3rHYNqRcK9kS4J6P39G6hq60sOGyQKe+WK84BMvcDsVG5rOx8+jOhDaZzOdzeW9MWi6XIpFJZGPlc5Ep1bCO/rOW9+JhkCxwyBXKskKWZ1LAjoxMplf0iMCMtIjRek9g++AZnwHvC9fKXoMMywAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/6a0605620ec79ebc46d9fb18cc362fdc/5a190/3dmarkDelta.png&quot;
        srcset=&quot;/static/6a0605620ec79ebc46d9fb18cc362fdc/772e8/3dmarkDelta.png 200w,
/static/6a0605620ec79ebc46d9fb18cc362fdc/e17e5/3dmarkDelta.png 400w,
/static/6a0605620ec79ebc46d9fb18cc362fdc/5a190/3dmarkDelta.png 800w,
/static/6a0605620ec79ebc46d9fb18cc362fdc/c1b63/3dmarkDelta.png 1200w,
/static/6a0605620ec79ebc46d9fb18cc362fdc/29007/3dmarkDelta.png 1600w,
/static/6a0605620ec79ebc46d9fb18cc362fdc/82e86/3dmarkDelta.png 1978w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;約20%もスコアが向上しました！！！&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;考察とか感想とか&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%80%83%E5%AF%9F%E3%81%A8%E3%81%8B%E6%84%9F%E6%83%B3%E3%81%A8%E3%81%8B&quot; aria-label=&quot;考察とか感想とか permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;考察とか感想とか&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;換装前は起動しただけで100℃手前
&lt;ul&gt;
&lt;li&gt;そりゃクロック上がらんわな...
&lt;ul&gt;
&lt;li&gt;2.2GHzが平均ぐらい。それ以上は上がらん&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;音は静かになった
&lt;ul&gt;
&lt;li&gt;計測手段を持っていないので官能検査ではあるが、静かに鳴った気がする&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;風量も増えた気がする
&lt;ul&gt;
&lt;li&gt;官能検査（以下略&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;結論&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B5%90%E8%AB%96&quot; aria-label=&quot;結論 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;結論&lt;/h2&gt;
&lt;p&gt;おすすめ！&lt;br&gt;
ThinkPad X1C6が気に入ってるなら5000円の投資の価値ありかと&lt;/p&gt;
&lt;p&gt;では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[10万円アンダーでディザスタリカバリ対応のSSDのNASを構築するぜ！（概要編)]]></title><description><![CDATA[経緯・モチベーション 2024年1月…]]></description><link>https://yukimakura.cc/10万円アンダーでディザスタリカバリ対応のSSDのNASを構築するぜ！（概要編）/</link><guid isPermaLink="false">https://yukimakura.cc/10万円アンダーでディザスタリカバリ対応のSSDのNASを構築するぜ！（概要編）/</guid><pubDate>Sat, 10 Feb 2024 15:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;経緯モチベーション&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B5%8C%E7%B7%AF%E3%83%A2%E3%83%81%E3%83%99%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3&quot; aria-label=&quot;経緯モチベーション permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;経緯・モチベーション&lt;/h2&gt;
&lt;p&gt;2024年1月1日、北陸に大きな地震が牙を剥きました。&lt;br&gt;
ちょうど実家に帰っていた私は家族総出で津波から逃げたわけですが、
そんな中で姉貴がラップトップの心配をめちゃくちゃしてました&lt;br&gt;
姉貴は所謂ネト充側の人間でして、データが非常に重要とのこと&lt;br&gt;
&lt;br&gt;
ラップトップを家に置いてきたことをとても後悔していました
&lt;br&gt;
今回は偶然何事もなかったので良かったですが、&lt;br&gt;
この際せっかく遠隔地に私がいるのにこの状況を活かさないのはもったいないと思い、&lt;br&gt;
構築しようと思い至ったわけです&lt;br&gt;
&lt;br&gt;
すでに実家にはNASがあり、そこに家族写真などのデータもあるため、
父親も案外乗り気になってくれて、SSDを買ってくれました(実質総額の半分を出してくれました、ありがとう)&lt;br&gt;
...まぁ、フルSSDの部分は私のロマンなんですけどね^^;&lt;/p&gt;
&lt;h2 id=&quot;全体の構成図&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%85%A8%E4%BD%93%E3%81%AE%E6%A7%8B%E6%88%90%E5%9B%B3&quot; aria-label=&quot;全体の構成図 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;全体の構成図&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://www.plantuml.com/plantuml/svg/dLJVJzDG57w_VyNDdahY4ZHeVBHGP8kXDDoDFNVh7JHRMrBQ1JGatdiP0GmIDO8y4GsA49t61m9gz8yvbiJ_mlJ7sZAMeFRfzfppdU_qV5_llILFTptVQgCsRNhOSx1hpYzus31Tsl1CnqPDLxSe3de7GUyKFq8OOwpFKzl3XHcrAW7_0k8xY0tWxu0V0Jy4ne5ltIXhdJ7iTAYBorhdpaW1wqlueTbgwJDgDMeIzotCB5AxDbi9FZyDkcylpZQ0_GIn0s8tGvJyUa8SFWt7MdJiQ03YDBr9Ru6wSvewqJQfxMMWEKsD8AieppPjsgOs8LNhlktvXBeTwkP6YxD3gIn3Dop9rKrZD0UOrKrZw62wLTU1zLIPPCMgJ2vDPBOfBbJ9U72u--lRAs3F256MnwHRbV7biPY342M_xw1t6dpz6AntWVM0hG7V1lu2sCd5yK6m_puZakqLj8eQRSStS4rM4mM1hmFR1lO3s0xmpQZ75h1rOA__JjOJO7lnN2ijg-KEw9XiDf4pLnSdXWkeb2QqM8KXm33P1mq3JyjQSH9VdLGgQtDNh1TrdAfTvw9uc0pHTz40HBrFOdMbagBa2AwLkAGeqjtAU0mfAGhwHtqZbbXVX6goYel5J8taFVtBK4bHqW9L9XZrIzFeL0qdKTbUIQFXvZ52_KPfqt0RX2ZfUsJ_z8IBcS_x1vn3zhrvgHso7O_YwEvncWEw4zhmNQhA5M2zC0Zi2DYdo8Wxy9X5DObjiego1lmDY4qG7u2V0t_-kxiTd0bW-y2V86eRE6H40yINRYOGBqEq423MWkuclZbLNroABIWHfsXJBp8MY3qGny3FHwBKRALuUtJqGJd7SVNR_fyYxNgFsePljVy0&quot; alt=&quot;plantuml&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;ざっくりとしたソフト構成&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%96%E3%81%A3%E3%81%8F%E3%82%8A%E3%81%A8%E3%81%97%E3%81%9F%E3%82%BD%E3%83%95%E3%83%88%E6%A7%8B%E6%88%90&quot; aria-label=&quot;ざっくりとしたソフト構成 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ざっくりとしたソフト構成&lt;/h2&gt;
&lt;h3 id=&quot;minipcゆきまくらのお家&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#minipc%E3%82%86%E3%81%8D%E3%81%BE%E3%81%8F%E3%82%89%E3%81%AE%E3%81%8A%E5%AE%B6&quot; aria-label=&quot;minipcゆきまくらのお家 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;MiniPC(ゆきまくらのお家)&lt;/h3&gt;
&lt;h4 id=&quot;softether-vpn-server&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#softether-vpn-server&quot; aria-label=&quot;softether vpn server permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SoftEther VPN Server&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;OSはOpenWRTのAmd64版
&lt;ul&gt;
&lt;li&gt;DDで書き込んだ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;4系
&lt;ul&gt;
&lt;li&gt;OpenWRTのパッケージマネージャーでは5系と4系がラインナップされてるのだが、何故か5系だと、OpenVPNのポート設定が変えれなかったため&lt;/li&gt;
&lt;li&gt;ホントはDockerで入れたかったけど、DockerでやるとTapデバイス周りでコケたので断念&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SecureNATは無効化
&lt;ul&gt;
&lt;li&gt;スループット上げるため&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;nfsサーバー&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#nfs%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC&quot; aria-label=&quot;nfsサーバー permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;NFSサーバー&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;外付けHDDをネットワークストレージにするため&lt;/li&gt;
&lt;li&gt;バックアップ用で、1日1回程度で実家SSDNASとrsyncする
&lt;ul&gt;
&lt;li&gt;原則、他のPCはこのHDDNASにアクセスしない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Dockerにて構築予定&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;minipc実家&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#minipc%E5%AE%9F%E5%AE%B6&quot; aria-label=&quot;minipc実家 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;MiniPC(実家)&lt;/h3&gt;
&lt;h4 id=&quot;mdadm&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#mdadm&quot; aria-label=&quot;mdadm permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;mdadm&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;SSD4枚をソフトウェアRaid0化する
&lt;ul&gt;
&lt;li&gt;ちなみにフルSSD化するモチベは静かなのと、小さいのと、ランダムアクセスが速いから
&lt;ul&gt;
&lt;li&gt;シーケンシャルアクセスを極めても1Gbpsのネットじゃ活きん...(´；ω；｀)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;samba-server&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#samba-server&quot; aria-label=&quot;samba server permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Samba Server&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;普段みんながアクセスする用&lt;/li&gt;
&lt;li&gt;Dockerにて構築予定
&lt;ul&gt;
&lt;li&gt;2TBほどTimeMachine設定&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;登場人物紹介&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%99%BB%E5%A0%B4%E4%BA%BA%E7%89%A9%E7%B4%B9%E4%BB%8B&quot; aria-label=&quot;登場人物紹介 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;登場人物紹介&lt;/h2&gt;
&lt;h3 id=&quot;minipcゆきまくらのお家-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#minipc%E3%82%86%E3%81%8D%E3%81%BE%E3%81%8F%E3%82%89%E3%81%AE%E3%81%8A%E5%AE%B6-1&quot; aria-label=&quot;minipcゆきまくらのお家 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;MiniPC(ゆきまくらのお家)&lt;/h3&gt;
&lt;p&gt;メルカリで買った中古のMiniPC&lt;br&gt;
小さいくせに、本体に電源ユニット内蔵なのが結構気に入ってる&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Price : ￥9,000&lt;/li&gt;
&lt;li&gt;Model：FUJITSU FMVB10001&lt;/li&gt;
&lt;li&gt;CPU : Core i5-7500T CPU @ 2.70GHz&lt;/li&gt;
&lt;li&gt;RAM : DDR4 6GB&lt;/li&gt;
&lt;li&gt;OS : OpenWRT (23.05.2 (r23630-842932a63d))&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;minipc実家のnas&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#minipc%E5%AE%9F%E5%AE%B6%E3%81%AEnas&quot; aria-label=&quot;minipc実家のnas permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;MiniPC(実家のNAS)&lt;/h3&gt;
&lt;p&gt;ヤフオクで買った中古のMiniPC&lt;br&gt;
電源ユニットは外だしだが、ミニPCのくせにUSB3が6つのあるのが気に入ってる&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Price : ￥5,000&lt;/li&gt;
&lt;li&gt;Model：NEC Mate MC-T&lt;/li&gt;
&lt;li&gt;CPU : Core i3-6100T CPU @ 3.20GHz&lt;/li&gt;
&lt;li&gt;RAM : DDR4 8GB&lt;/li&gt;
&lt;li&gt;OS : Ubuntu 22.04.3 LTS&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;openwrt導入済みhub&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#openwrt%E5%B0%8E%E5%85%A5%E6%B8%88%E3%81%BFhub&quot; aria-label=&quot;openwrt導入済みhub permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;OpenWRT導入済みHub&lt;/h3&gt;
&lt;p&gt;引っ越しした当時、ヤマダ電気で買ったIODataの最安Wifiルーター(たしか4000円台で買ったはず？)&lt;br&gt;
偶然OpenWRTに対応してた&lt;br&gt;
最安のくせに、OpenWRT入れてみたら結構性能良くて感動した&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Price : ￥4,000（ぐらい&lt;/li&gt;
&lt;li&gt;Model: WN-DX1167R&lt;/li&gt;
&lt;li&gt;CPU : MediaTek MT7621A @ 880MHz
&lt;ul&gt;
&lt;li&gt;しれっと2コア4スレなのすごい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;ssdたち&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ssd%E3%81%9F%E3%81%A1&quot; aria-label=&quot;ssdたち permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SSDたち&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cfd.co.jp/biz/product/detail/cssd-m2l2trgaxn.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;CFDの2TBのSSD&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Price : ￥13000 x 4 = ￥52000&lt;/li&gt;
&lt;li&gt;速度は少し遅いが、値段の割にTLCでTBWが1200TBWあったのが決め手で購入&lt;/li&gt;
&lt;li&gt;USBアダプタはアリエクにて購入
&lt;ul&gt;
&lt;li&gt;￥5,000&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;hdd&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#hdd&quot; aria-label=&quot;hdd permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;HDD&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://kakaku.com/item/K0001400942/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;WDBlueの8TB(WD80EAZZ)&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Price : ￥17000&lt;/li&gt;
&lt;li&gt;定番のWDBlue。安くて評価も高いためこれにする&lt;/li&gt;
&lt;li&gt;USBアダプタはAmazonにて
&lt;ul&gt;
&lt;li&gt;￥2,000&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;合計金額&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%90%88%E8%A8%88%E9%87%91%E9%A1%8D&quot; aria-label=&quot;合計金額 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;合計金額&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;約￥94,000&lt;/strong&gt;でした!!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一部丼勘定ですみません🙇‍♀&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;今回はここまでとさせてもらいます&lt;br&gt;
一部のものはすでに設定が終わっているので、&lt;br&gt;
各コンポーネントたちは追々記事化していきます
&lt;br&gt;
どちらの家もIPv4 over IPv6なので、スループットが安定して200Mbps以上出ています&lt;br&gt;
そのため常時接続でも実用的かと睨んでいます&lt;br&gt;
実際、家族の協力を得て私の家のVPNサーバーにつないだ状態でOoklaのIPA Server 400Gでベンチしたところ、午後8時ぐらいだったにも関わらず、250Mbps以上出てました
&lt;br&gt;
10万アンダーと書かれているものの、半分はSSDなので、HDDにすることで大幅なコスト削減が可能かと思われます
少し、複雑で多少ハードルは高いかもしれませんが、&lt;br&gt;
災害等に備えるのも悪くないのではないでしょうか？&lt;br&gt;
&lt;br&gt;
また、VPNで同じネットワークに参加できるので、遠隔地のPS5にリモート接続や、遠隔地のテレビ視聴など副産物があります&lt;br&gt;
なかなか良いですね&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;話変わって、この記事はMeta Quest2を被りながらUbuntuマシンで書いております&lt;br&gt;
最近VisionProが出て、MRにてPCの画面を見ながらの作業ってどうなんだろうと思い、&lt;br&gt;
手元にあったQuest2で試しているわけです&lt;br&gt;
Linuxマシンでは無理だろな...と思い調べてみるとImmersedというソフトがなんとLinuxも対応しているではありませんか！！&lt;br&gt;
ということでやってみた次第です&lt;br&gt;
&lt;br&gt;
ブラインドタッチができると結構ありだなーって思います&lt;br&gt;
ただ、純正ストラップだとやはり視界がぼやけやすいかも
あと慣れてないので目が疲れる...&lt;br&gt;
けどめちゃくちゃトラックポイントとヨギボーの相性いいです（笑）
みなさんもお試しあれ^^;&lt;/p&gt;
&lt;p&gt;では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[copyqでwin10のようなクリップボード履歴をUbuntuで味わおう！]]></title><description><![CDATA[Win10以降のクリップボード履歴、良き 正直あまりWindowsが好きではないゆきまくらです（ドモドモ ただ、近年のWindowsで  で呼び出せるアイツ、クッソ便利なんよなぁ... ...ということで、Ubuntuちゃんでもこれを実現していきましょう！ copyq…]]></description><link>https://yukimakura.cc/copyqでwin10のようなクリップボード履歴をUbuntuで味わおう！/</link><guid isPermaLink="false">https://yukimakura.cc/copyqでwin10のようなクリップボード履歴をUbuntuで味わおう！/</guid><pubDate>Sat, 10 Feb 2024 10:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;win10以降のクリップボード履歴良き&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#win10%E4%BB%A5%E9%99%8D%E3%81%AE%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%89%E5%B1%A5%E6%AD%B4%E8%89%AF%E3%81%8D&quot; aria-label=&quot;win10以降のクリップボード履歴良き permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Win10以降のクリップボード履歴、良き&lt;/h2&gt;
&lt;p&gt;正直あまりWindowsが好きではないゆきまくらです（ドモドモ&lt;br&gt;
ただ、近年のWindowsで &lt;code class=&quot;language-text&quot;&gt; Win + v&lt;/code&gt; で呼び出せるアイツ、クッソ便利なんよなぁ...&lt;br&gt;
...ということで、Ubuntuちゃんでもこれを実現していきましょう！&lt;/p&gt;
&lt;h2 id=&quot;copyqを導入する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#copyq%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B&quot; aria-label=&quot;copyqを導入する permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;copyqを導入する&lt;/h2&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; copyq&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;簡単お手軽ですな(^^)&lt;/p&gt;
&lt;h2 id=&quot;セットアップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97&quot; aria-label=&quot;セットアップ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;セットアップ&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;UbuntuのOSの設定から、&lt;code class=&quot;language-text&quot;&gt;super + v&lt;/code&gt;のショートカットを消す&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 79.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB20lEQVR42oVU25abMAzMT/SQEMDczB0DZktPCf2ifdj9/5fpGaVmm3TZPsyxseTRSEI+RVGEi+8jzVJcLhcopXA+nz+Bh+v1ijiOZfU878EeBAHCMMQpSRIhoRNBA4NwdTYGutsDOXe+f4NkOyGj0tH3fYG7lGUZyrIUO52fSejryJyQEy/pXKOqSpi+R1VVqJsGTV2jKAoh7bpOkKapfDtorcU/z3MhvhPSKUlQaI1pspimaUfbtkJKlZ+haRoJREKqFMJzFIPIdYFxHGHMIE7cf395EaVHhHVdo+97CUoyIXyzId7nEFtXoB8nTOOIn+uKZfkhCo4U8px2Y8wj4auN8DoFWBuNpjeYrYW1Fm3Xydp33SEpFf6TshcpfAsUMq0xGCMRh8HADAOGYUBZVocps8ZMmYR7l2MVQYWhNMXOM+Z5FmXLssj+f02hAHZ7V8j2c8MoNDKi6x5xRCa/V12LShLuNSQhVdA4z/beCK3l7Ct19Dd/SvRQQ46WUrFEvN1u8ru0bSMXvgL9m7aVOlPhRw1lrAKZjtu2YV1XbNsvIaYz19GtT3C1JvkDIVUydY4W9zxzY+XSTtP7zHP2nxGr+KOGPHA/Jl8V9ziQ2M2uEGstl5nN0WtDwt8PK8pyhQTVxwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/641c663fe2b7e92e55b877d834ca7ddd/5a190/ubuntusuperv.png&quot;
        srcset=&quot;/static/641c663fe2b7e92e55b877d834ca7ddd/772e8/ubuntusuperv.png 200w,
/static/641c663fe2b7e92e55b877d834ca7ddd/e17e5/ubuntusuperv.png 400w,
/static/641c663fe2b7e92e55b877d834ca7ddd/5a190/ubuntusuperv.png 800w,
/static/641c663fe2b7e92e55b877d834ca7ddd/d9199/ubuntusuperv.png 960w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
2. UbuntuのGUIメニューからcopyqを起動
3. 設定画面を開く
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 396px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 91.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAAsTAAALEwEAmpwYAAACoUlEQVR42o1U7W7iMBDkCXo9FQEhJJAPJ7YT5zspBChUoiddpev7v82cdkNoq6vu7sdqba+9O54de/Lw8ACy6ein09t8Oh3m3+/voRKN049nzOcL5HmOb3d3aNoWfd9DKcXe931MXNeF4zhYrVZwnBVs2+YxGY9tG4vFAuv1GkII0H7P89hvNhsek6c4+Qkl84MAWWYQCoGqrJCmCVctyxImy3G5XKC14gIjAPJkVJiQ0X5KOqEFyhxFAkJEkHGMKIoQxzFMmiI1GY5PT5zQsqwbchovl0s2x3URhuFwZU7oeUj0UIECdFgrBd8PeL60LB4XZQkhQiitUdUNqrJAlueMjtZd94pwvdnwIh2WUsFkBlprxLG8rgeMWCcp4lhwrG1b5JlBkiQcE2HI6G9XljKGlJKJ5wZEER+kAkSFH/icOAgCeJ6PIBh4K4oCSiqmiTgdmuL7KIsBfl3VUEqiqirUdY00TZEXORKdcONormlsUjRth9PpxGeVVkNCQuOsVpjNZiyP+WwOy1pgPp8PhFMTWFLOTU4kL/IUp+ZQk5bWcugyER5LhfP5jK7r0O97bLdbNE2NMAh488dkn21YX/sbZF0JZ+UMCOn+pP4kTdiT/qqqZCmN4v2bEWWRjAZhG2PQ7w94e/uFn6+v6NqGkxLZxGPTNMzl6L8yiu22OwY2YQk8PuLl5YLz85mTpMYgy7JrAzRLY/T0iihGRUcbi5PsbsImMRN02pwZw12j6sfjkTk9HA7s66ZBJMJrc5ybMZfj0yMeSFMEmVDFccR6LKsKu90OTV1zsq5t+XqREH8kJOOEH38b6qj9YaNtD9Lg9dFfPwg6/JVN6AA9qf2+R7/fQ4TBp6T/sveXJt9fiuf7TGgsJTxv8+l7+h8b/0JC+BsBJQOaqv+AZwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;copyqsetting&quot;
        title=&quot;&quot;
        src=&quot;/static/7a933c45f24b0c07f6dffad9a95f24ca/db910/copyqsetting.png&quot;
        srcset=&quot;/static/7a933c45f24b0c07f6dffad9a95f24ca/772e8/copyqsetting.png 200w,
/static/7a933c45f24b0c07f6dffad9a95f24ca/db910/copyqsetting.png 396w&quot;
        sizes=&quot;(max-width: 396px) 100vw, 396px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
4. 自動起動ON
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 670px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 96.50000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAAAsTAAALEwEAmpwYAAACxklEQVR42pWUS2/TQBSF8x9BILGCsikskgqp7ZKqWSH4MUhs2IDECiGUh5PYY8czfttp4jjOo43TNNFB95KUppQCI11pNGN/c++5Z6b0ZG8fD5/t49Hzl3jwdB+P916gXK7g4KCC4+NjVKtVnJyc8Pz0tIqjoyOUy2VUKpXf4vDwEKU377/h7WcXrz8qvPog8e5LiFmxQBgECMMQrusiiiKs12sURYH5fI7Ly8s7g/ZLzUYDYeBhnOdYr1ZYrVbI85xBlmXCdT04joIQAu12G57nYTweI8syjEajnaD1UkvT4LkuLuZz0Li6uuKN/qCPVktDrVaHME2YQsC0zB0QHXwzJpMJSnSyUgrFYrEDjKKQ133fhxAGOp0OlOPw3nQ64Z/vBFqmiTiOURS7wCAIYOg6/CBAksQMpnkQ+DAMASkVhlnGUu0A6/Ua0nSAwWCA2WzG4hKQGkJl6h2dS6Vs0zTFcDhEv9/nuF02A23bZg1ns3NuyHL5K0NN07gRWlODMAzOaDqd8j7FnSVTq6lMsgUNgtLHlHG3a4EOZC09D70k4cxvg3aAy+USNwfBaZNKCjZetLtdGIYBy7IY/l/ArQ/Pej3OiqCtVovLbzab3Jw8H/8/kG4HmZiMTcBOp40oijFIU4zye3z4J2CcxFBKwvd8SClh2xKu67Bd0nR4fVuo6xQ0vxdIFpG2DcdxNtpJ6Iax8aCEVJJ1JhB9+1cgnSqlzRnpus532fc9vuPCFKyn3HhzNMr+Daik5K7qnQ6DqePKUaytoxyY5s9sk16PNb3XNnQyPwj0MJgCjUaDddyWa3UtSFvCljY3cHsFSxfjCRZFgcWiuH7TtkDyH+kXhAGEISC6JvzAh+84ELrOmWbZCIPhENFZD2eDFKVeXYOn1HXaN+1AJWxflfn5HN9lDZrRRiYdRIZAmMRwbAUz8PCp+RVBkuIH6w5rDRf2EFYAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;autolaunchon&quot;
        title=&quot;&quot;
        src=&quot;/static/b999aa752de2348261d3ee21e713515b/d67fd/autolaunchon.png&quot;
        srcset=&quot;/static/b999aa752de2348261d3ee21e713515b/772e8/autolaunchon.png 200w,
/static/b999aa752de2348261d3ee21e713515b/e17e5/autolaunchon.png 400w,
/static/b999aa752de2348261d3ee21e713515b/d67fd/autolaunchon.png 670w&quot;
        sizes=&quot;(max-width: 670px) 100vw, 670px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
5. &lt;code class=&quot;language-text&quot;&gt;マウスカーソルの下にメインウィンドウを表示&lt;/code&gt;のショートカットを&lt;code class=&quot;language-text&quot;&gt;super + v&lt;/code&gt;にする
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 71.50000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAACEElEQVR42o1Ty47aQBD0P3JZFjhwhQP/k+ueIuULcohyiZRIUaK9GO8KA8bvt42BxcZ2RdVgRLIbJSOVBma6q6u7xkq/38fd3R1GoxGGwyEGgwF6vR4G9/dyNplMMJvNMJ1OBYwZji4YnsE4YjweQ/F9H3meo8V5tW0LnhW7AmVZoigK7HY7bLdbVFWFpml+A+O513WN0+kERdM0mJaNU92gblrZ4ziG63oIggCO7cB2HKzXawRBiCzLEIYBkiSG57owTRNRFOFwOEhRZfH8hMBz0C1WIyFVcQ/DUBLSNJX/G9OEbduCuapKUSqnQnajfPr6E19UA5pXQPX3mHuFKOElg0lCFcbGEPI8y6UYFSZJImNhqwTPlYeP3/Dus4YPjx4evtt4/8NGFCd4OeyFjOqWy6W0RCWcGbHf70VVN7srYXU8om3qVy1Le5sNXNeFqs6vbXU7jbxVdyUsy0ocrttWUNW1zIsDdlwXQRjCdRxpr0skIZPfJGTF21VfCNM0EXdJpuv6K0K6/d+EnE+x3YopRJZncndLyBjm/pOQM6QaktiODcuywLeq6wtJ6Iz46wzfUsh2eEmHaQ5JDcNAcSHskv8kZJ5yLMvrUyCYQIVxFMnXQSI6bVuWGCXJ1UkUvhyPQkpQGGevBPoSge8LO4O4n01J5fcteMaHvfFMaKtnhIsVbNOE47h4XD1BNy38As4vDSq0MjlLAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;alt text&quot;
        title=&quot;&quot;
        src=&quot;/static/b188ad91044b83ad95e66d22bea299fe/5a190/changecopyqshortcut.png&quot;
        srcset=&quot;/static/b188ad91044b83ad95e66d22bea299fe/772e8/changecopyqshortcut.png 200w,
/static/b188ad91044b83ad95e66d22bea299fe/e17e5/changecopyqshortcut.png 400w,
/static/b188ad91044b83ad95e66d22bea299fe/5a190/changecopyqshortcut.png 800w,
/static/b188ad91044b83ad95e66d22bea299fe/9a1cf/changecopyqshortcut.png 924w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;動作確認&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D&quot; aria-label=&quot;動作確認 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;動作確認&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 753px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 69%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAADM0lEQVR42nWT7U+bZRTGn78BWl768rQQao0ttsR9cB81Ub8CDS8Ws8Uw2aCFEES2zsUtYXNo2mYGV2iDEnG6rCZmftePaoBtLAHBQkGQUESR0vcWCj/z3GxkaDzJlXM/J+e67nOf5xyp5oUXsZx+DZO1DqPBQFVV1QkYjQZkWT6G0WjEIMsY/pWrxBVIBr0eWadBp9WgKiujTEF5uYBKpaJSoxVkWT6CTqcTqKyspLS0VOSo1WoqKipETFKS9XoZq8XCubNOzrzVRtubrThbW3j77BlcXZ1c9lxk4L1+PJcu0uN2ceWyh0sD/ZzveIfOC+fpdnXS3dlBe3s7Uo3JRLlaxelXXmf4h1+5NR7GOzrO0O3PuT0R5sYnQW4Oj3H91igfB8a56v1UfHuDE/hCE/hDXzAU+opvp6Kkkgkkq9WKTlPBy6++ge/7CK7BYTqufETXNT/nPDdp6/2AFreH1p73abwwQNdVH0OfhbkevMuN4F0+DH7NtdF73JuMsvrbypFgTY2J1pYWivs5Zh5MsbjwCz//9CPT01M8fjzDzMwjHj56yIPpadbX11Hs8PCQZ61YLLC8vIxks9mQDTINjY1kslkiv2+yXYB0NkcqmSS+GyedThOPxykWi+wVCqRTKTLp9ElkMqysrCDV1dkxm804HI3k8nki61ss/Znmr7932IzF2N7eZm9vj1wux/7+viAq52eRz+dJpVJEIhEku93OcyYTDodDEJUqFEsmk8RiMRKJpIgpxKc+m83+R1DJX1paQjr10iksFgtNTU3HgodCMCEEN//YpFAokMsfVaiIZf+nwrm5OaTa2lqqq6upb2g47k/uyY07Ozuid5lshmQiIUipTEb8kIODgxNQ+jw/P4/0vNmMXq+nublZ3PTd/fuEw99w586XhEIhxsbGCAaDjIwECARG8Pl9+P3+Y3i9XgKBAFtbWywsLCAp1anUaurr69nd3WVwcJD+d/vp6+vD5XLhdrvp6e4Wvre3l6nJSdbW1ohGo2JMFL+6ukoikWBxcRHJbrOJJzudTjY2NlDGqKSkBI1GI3ZW8cqOKjuu1WqZnZ19MndF8fSn86i0Q+n5P9BjCle0qVYHAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;test&quot;
        title=&quot;&quot;
        src=&quot;/static/080692a3ccb8cfd196b3c67d560e75ec/17a7a/test.png&quot;
        srcset=&quot;/static/080692a3ccb8cfd196b3c67d560e75ec/772e8/test.png 200w,
/static/080692a3ccb8cfd196b3c67d560e75ec/e17e5/test.png 400w,
/static/080692a3ccb8cfd196b3c67d560e75ec/17a7a/test.png 753w&quot;
        sizes=&quot;(max-width: 753px) 100vw, 753px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
任意の場所で &lt;code class=&quot;language-text&quot;&gt;super + v&lt;/code&gt;を押すことで、&lt;br&gt;
マウスポインターの周辺にcopyqの履歴画面が出てこればOK!&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;Ubuntuが120％使いやすくなったぞ！（雑&lt;br&gt;
では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[TH3P4G3(85W版)とTeslaP40をUbuntu22.04でセットアップした【外付けGPU】]]></title><description><![CDATA[この記事のTeslaP40版です そもそもなぜTesla P40🤔？ 今、LLMがアツい！（そんなのわかってる 最近では結構ローカルでLLMを動かす遊びができたりします GoogleさんやらMicrosoft…]]></description><link>https://yukimakura.cc/TH3P4G3(85W版)とTeslaP40をUbuntu22.04でセットアップした/</link><guid isPermaLink="false">https://yukimakura.cc/TH3P4G3(85W版)とTeslaP40をUbuntu22.04でセットアップした/</guid><pubDate>Sat, 10 Feb 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://yukimakura.cc/TH3P4G3(85W%E7%89%88)%E3%81%A8RTX2080%E3%82%92Ubuntu22.04%E3%81%A7%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%97%E3%81%9F/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;この記事のTeslaP40版です&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;そもそもなぜtesla-p40&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%9D%E3%82%82%E3%81%9D%E3%82%82%E3%81%AA%E3%81%9Ctesla-p40&quot; aria-label=&quot;そもそもなぜtesla p40 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;そもそもなぜTesla P40🤔？&lt;/h2&gt;
&lt;p&gt;今、LLMがアツい！（そんなのわかってる&lt;br&gt;
最近では結構ローカルでLLMを動かす遊びができたりします&lt;br&gt;
GoogleさんやらMicrosoftさんやらはスマホで動かす用の小規模言語モデルというもの開発中とのこと(SLMって言うらしいよ)&lt;/p&gt;
&lt;p&gt;ローカルLLMをやるにあたって死活問題なのが、そう&lt;strong&gt;VRAM&lt;/strong&gt;!&lt;br&gt;
LLama系で量子化したモデルでも賢いのを使おうとすると平気で何十ギガも食ってくる(ﾋﾟｴﾝ&lt;br&gt;
そこで、目をつけたのが&lt;strong&gt;Tesla P40&lt;/strong&gt;です&lt;/p&gt;
&lt;p&gt;ざっとスペック&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;Cudaコア数&lt;/td&gt;
&lt;td&gt;3840&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compute Capability&lt;/td&gt;
&lt;td&gt;6.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VRAM&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;24GB&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TDP&lt;/td&gt;
&lt;td&gt;250W&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://www.techpowerup.com/gpu-specs/tesla-p40.c2878&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;詳細はTechPowerUpさんにて&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;なんと&lt;strong&gt;24GB！！&lt;/strong&gt;&lt;br&gt;
でも、RTX3090やRTX4090だって24GB...&lt;br&gt;
それにTeslaなんて....お高いんでしょう？🤔&lt;br&gt;
&lt;br&gt;
...それがなんとebayやアリエクでは &lt;strong&gt;2〜3マソで買えるのです!(もちろん中古ね)&lt;/strong&gt;&lt;br&gt;
多分、データセンターの世代交代による引退品が大量に流れてきてるのでしょうねぇ&lt;/p&gt;
&lt;p&gt;ちな、スペック的にはGTX1080Ti相当とのこと&lt;br&gt;
つまり、TensorCoreは搭載されておりません...（悲しい&lt;br&gt;
それでもいいという方はお試しあれ！（なんせ安いからシクッてもあんまりイタくないのがいいよね&lt;/p&gt;
&lt;h2 id=&quot;物理的な構成&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%89%A9%E7%90%86%E7%9A%84%E3%81%AA%E6%A7%8B%E6%88%90&quot; aria-label=&quot;物理的な構成 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;物理的な構成&lt;/h2&gt;
&lt;h3 id=&quot;th3p4g385w&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#th3p4g385w&quot; aria-label=&quot;th3p4g385w permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TH3P4G3(85W)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PCIeをThunderbolt3に変換するアダプタ&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;tesla-p40-24gb&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#tesla-p40-24gb&quot; aria-label=&quot;tesla p40 24gb permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Tesla P40 24GB&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ebayで買った
&lt;ul&gt;
&lt;li&gt;1週間で届いた（SFExpress速い。しゅごい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;atx-1260ga1-80plus-bronze-600w-enhance製&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#atx-1260ga1-80plus-bronze-600w-enhance%E8%A3%BD&quot; aria-label=&quot;atx 1260ga1 80plus bronze 600w enhance製 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ATX-1260GA1 80PLUS BRONZE 600W (Enhance製)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ハードオフで3300円買った動作保証品(ジャンクじゃない)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;thinkpad-x1-carbon-gen6&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#thinkpad-x1-carbon-gen6&quot; aria-label=&quot;thinkpad x1 carbon gen6 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ThinkPad X1 Carbon Gen6&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;相棒&lt;/li&gt;
&lt;li&gt;スペック
&lt;ul&gt;
&lt;li&gt;Intel Core i7 8650U&lt;/li&gt;
&lt;li&gt;16GB RAM(速度はシラネ)&lt;/li&gt;
&lt;li&gt;訳あってWLANはBroadcom bcm94360ng
&lt;ul&gt;
&lt;li&gt;お察しください(^_^;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;いろいろやったこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%84%E3%82%8D%E3%81%84%E3%82%8D%E3%82%84%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8&quot; aria-label=&quot;いろいろやったこと permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;いろいろやったこと&lt;/h2&gt;
&lt;h3 id=&quot;nvflashでcomputeモードからgraphicsモードに切り替える&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#nvflash%E3%81%A7compute%E3%83%A2%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89graphics%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AB%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B&quot; aria-label=&quot;nvflashでcomputeモードからgraphicsモードに切り替える permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;nvflashでcomputeモードからgraphicsモードに切り替える&lt;/h3&gt;
&lt;p&gt;これがコンシューマ機との大きな違い
pcieのデバイスのアクセス領域をちょめちょめして高速化する機能がデフォで有効らしく(Resizable BAR)、&lt;br&gt;
それが、原因で&lt;strong&gt;dmesgにてエラー吐きながら認識・再認識を繰り返します&lt;/strong&gt;
なので、まずGPU側にてそれを無効化します&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;頑張って&lt;code class=&quot;language-text&quot;&gt;nvflash&lt;/code&gt;というユーティリティを入手する&lt;/li&gt;
&lt;li&gt;eGPUを接続し、ubuntuの&lt;code class=&quot;language-text&quot;&gt;設定&lt;/code&gt;→&lt;code class=&quot;language-text&quot;&gt;このシステムについて&lt;/code&gt;→&lt;code class=&quot;language-text&quot;&gt;ソフトウェアとアップデート&lt;/code&gt;→&lt;code class=&quot;language-text&quot;&gt;追加のドライバ&lt;/code&gt;にて&lt;code class=&quot;language-text&quot;&gt;X.Org.X.server&lt;/code&gt;になっているか確認する&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;なってないなら、&lt;code class=&quot;language-text&quot;&gt;sudo apt remove nvidia*&lt;/code&gt;とかでいろいろ消したりしてX.Orgに切り替える
&lt;ul&gt;
&lt;li&gt;もし、これをやってネットが死んだら、下の方にあるおまけを参考にしてみてください&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;sudo ./nvflash --list&lt;/code&gt;でデバイスが認識されているのを確認し、&lt;br&gt;&lt;code class=&quot;language-text&quot;&gt;sudo ./nvflash --gpumode graphics&lt;/code&gt;を実行する&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;nvidiaのドライバをインストール&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#nvidia%E3%81%AE%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&quot; aria-label=&quot;nvidiaのドライバをインストール permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;nvidiaのドライバをインストール&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;GPUをThinkPadにぶっ挿す&lt;/li&gt;
&lt;li&gt;設定→このシステムについて→ソフトウェアのアップデート→追加のドライバータブを開く&lt;/li&gt;
&lt;li&gt;nvidia-driver-535(プロプライエタリ)を選択し変更の適用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;再起動せず、eGPU Switcherのセットアップに続く&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;egpu-switcherのセットアップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#egpu-switcher%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97&quot; aria-label=&quot;egpu switcherのセットアップ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;eGPU Switcherのセットアップ&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://qiita.com/y-vectorfield/items/8960c804441d2ebd605e#egpu-switcher%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97egpu%E4%B8%8A%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8Bx-window-system&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;このQiitaの記事を参考にしました&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;eGPU Switcherをインストール&amp;#x26;セットアップ&lt;/li&gt;
&lt;/ol&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; add-apt-repository ppa:hertg/egpu-switcher
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; egpu-switcher
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; egpu-switcher setup&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;再起動&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;※もし、GUIが死んでも&lt;code class=&quot;language-text&quot;&gt;Ctrl+Alt+ファンクションキー(F2〜F6)&lt;/code&gt;で&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;CUIの別セッション開けれるのでそこで頑張ってなんとか復旧してください！(力技)&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;オプションdockerのインストールセットアップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3docker%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97&quot; aria-label=&quot;オプションdockerのインストールセットアップ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;(オプション)Dockerのインストール&amp;#x26;セットアップ&lt;/h3&gt;
&lt;p&gt;私は、あまり環境を汚したくないので、基本コンテナで開発してます。&lt;br&gt;
ネイティブにCUDAを入れるのは汚れる＆ダルいのでDockerでやっちゃいます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Dockerのインストール &lt;a href=&quot;https://qiita.com/KEINOS/items/bdc9450c1a88c210aa88&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;いつもこのQiitaを参考にさせてもらってます&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-fsSL&lt;/span&gt; get.docker.com &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; get-docker.sh &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sh&lt;/span&gt; get-docker.sh &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; gpasswd &lt;span class=&quot;token parameter variable&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;token environment constant&quot;&gt;$USER&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run hello-world &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; get-docker.sh&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;再起動&lt;/li&gt;
&lt;li&gt;Nvidia Container Toolkitのインストール＆セットアップ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;https://zenn.dev/usagi1975/articles/2022-09-05-000000_docker_gpu#nvidia-container-toolkit%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;このzennを参考にしました&lt;/a&gt;&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;distribution&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; /etc/os-release&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; $ID$VERSION_ID&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-fsSL&lt;/span&gt; https://nvidia.github.io/libnvidia-container/gpgkey &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; gpg &lt;span class=&quot;token parameter variable&quot;&gt;--dearmor&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-L&lt;/span&gt; https://nvidia.github.io/libnvidia-container/&lt;span class=&quot;token variable&quot;&gt;$distribution&lt;/span&gt;/libnvidia-container.list &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tee&lt;/span&gt; /etc/apt/sources.list.d/nvidia-container-toolkit.list

&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; update &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; nvidia-container-toolkit

&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; nvidia-ctk runtime configure &lt;span class=&quot;token parameter variable&quot;&gt;--runtime&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;docker
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; systemctl restart &lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;コンテナ内でGPUが認識されているか確認する&lt;/li&gt;
&lt;/ol&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--gpus&lt;/span&gt; all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで、nvidia-smiを確認できればおｋ！&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-text line-numbers&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.29.06              Driver Version: 545.29.06    CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  Tesla P40                      Off | 00000000:3E:00.0 Off |                  Off |
| N/A   36C    P8               9W / 250W |      4MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+
&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;オプションeccを有効化無効化する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3ecc%E3%82%92%E6%9C%89%E5%8A%B9%E5%8C%96%E7%84%A1%E5%8A%B9%E5%8C%96%E3%81%99%E3%82%8B&quot; aria-label=&quot;オプションeccを有効化無効化する permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;(オプション)ECCを有効化・無効化する&lt;/h2&gt;
&lt;p&gt;ここでは言及しませんが、さすがデータセンター用でECCが使えるようです&lt;/p&gt;
&lt;h2 id=&quot;おまけみすってネットが死んだとき&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%8A%E3%81%BE%E3%81%91%E3%81%BF%E3%81%99%E3%81%A3%E3%81%A6%E3%83%8D%E3%83%83%E3%83%88%E3%81%8C%E6%AD%BB%E3%82%93%E3%81%A0%E3%81%A8%E3%81%8D&quot; aria-label=&quot;おまけみすってネットが死んだとき permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;(おまけ)みすってネットが死んだとき&lt;/h2&gt;
&lt;p&gt;クリーンな環境だとあまり問題にならないですが、&lt;br&gt;
すでにnvidiaのドライバ等入れてたときにそれを一旦消すと、&lt;br&gt;
たまに大事なものも一緒に消してしまうらしいです&lt;br&gt;
(私はRTX2080のときとP40のときで2回ネット周りがまるっと死んだ)&lt;/p&gt;
&lt;p&gt;まぁあくまで私の環境での復旧策ということで。&lt;/p&gt;
&lt;h3 id=&quot;カーネルのバージョンを調べる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B&quot; aria-label=&quot;カーネルのバージョンを調べる permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;カーネルのバージョンを調べる&lt;/h3&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;uname&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-a&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;出力&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;txt&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-txt line-numbers&quot;&gt;&lt;code class=&quot;language-txt&quot;&gt;Linux yukimakura-ThinkPad-X1-Carbon-6th 6.5.0-17-generic #17~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 16 14:32:32 UTC 2 x86_64 x86_64 x86_64 GNU/Linux&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで、カーネルのバージョンが &lt;code class=&quot;language-text&quot;&gt;6.5.0-17-generic&lt;/code&gt;ということが分かりました&lt;/p&gt;
&lt;h3 id=&quot;別のマシンpcでもスマホでも可を用意しlinux-modules-extraを拾ってくる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%88%A5%E3%81%AE%E3%83%9E%E3%82%B7%E3%83%B3pc%E3%81%A7%E3%82%82%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%A7%E3%82%82%E5%8F%AF%E3%82%92%E7%94%A8%E6%84%8F%E3%81%97linux-modules-extra%E3%82%92%E6%8B%BE%E3%81%A3%E3%81%A6%E3%81%8F%E3%82%8B&quot; aria-label=&quot;別のマシンpcでもスマホでも可を用意しlinux modules extraを拾ってくる permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;別のマシン(PCでもスマホでも可)を用意し、linux-modules-extraを拾ってくる&lt;/h3&gt;
&lt;p&gt;そう、このモジュールがうっかり消されてしまうモジュールです！&lt;br&gt;
こいつがないからネットにつながらないのです（この原因がわかるのに何時間も費やした...&lt;br&gt;
&lt;br&gt;
&lt;a href=&quot;https://pkgs.org/search/?q=linux-modules-extra&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;pkgs.orgから該当するカーネルバージョンのlinux-modules-extraを探してダウンロードします&lt;/a&gt;&lt;br&gt;
それをUSBメモリなどのリムーバブルディスクにてコピーし、&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; dpkg &lt;span class=&quot;token parameter variable&quot;&gt;-i&lt;/span&gt; ./がいとうするlinux-modules-extra&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;してインストールすると復活するはず？&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;最初、試しで買ったときにデバイスが認識を繰り返して、&lt;br&gt;
dmesgでBar周りでエラー吐きまくったときは正直絶望しましたが、&lt;br&gt;
なんとかなってほんと良かったです…&lt;br&gt;
VRAMが24GBあれば量子化モデルであれば34BパラメーターのLLMとかいけちゃいます(yiとかね)&lt;br&gt;
ぜひぜひラップトップ勢も、諦めずに外付けTelsaで遊んでみては？&lt;/p&gt;
&lt;p&gt;おまけのおまけで、同環境でRTX2080とP40をBlenderベンチした結果貼っときます&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;テスト項目&lt;/th&gt;
&lt;th&gt;GPU&lt;/th&gt;
&lt;th&gt;結果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;monster&lt;/td&gt;
&lt;td&gt;RTX2080&lt;/td&gt;
&lt;td&gt;1298.992945&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;monster&lt;/td&gt;
&lt;td&gt;P40&lt;/td&gt;
&lt;td&gt;386.695855&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;junkshop&lt;/td&gt;
&lt;td&gt;RTX2080&lt;/td&gt;
&lt;td&gt;699.879324&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;junkshop&lt;/td&gt;
&lt;td&gt;P40&lt;/td&gt;
&lt;td&gt;250.4996267&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;classroom&lt;/td&gt;
&lt;td&gt;RTX2080&lt;/td&gt;
&lt;td&gt;619.444119&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;classroom&lt;/td&gt;
&lt;td&gt;P40&lt;/td&gt;
&lt;td&gt;190.203885&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;差開きスギィ....!&lt;/strong&gt;&lt;br&gt;
では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Winlatorのコンテナ内を日本語化する]]></title><description><![CDATA[閑話休題(挨拶) みなさま、あけましておめでとうございます（は？ ...ってもう…]]></description><link>https://yukimakura.cc/Winlatorのコンテナ内を日本語化する/Winlatorのコンテナ内を日本語化する/</link><guid isPermaLink="false">https://yukimakura.cc/Winlatorのコンテナ内を日本語化する/Winlatorのコンテナ内を日本語化する/</guid><pubDate>Mon, 05 Feb 2024 08:00:00 GMT</pubDate><content:encoded>&lt;h1 id=&quot;閑話休題挨拶&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%96%91%E8%A9%B1%E4%BC%91%E9%A1%8C%E6%8C%A8%E6%8B%B6&quot; aria-label=&quot;閑話休題挨拶 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;閑話休題(挨拶)&lt;/h1&gt;
&lt;p&gt;みなさま、あけましておめでとうございます（は？&lt;br&gt;
...ってもう2月ですね、すんません。&lt;br&gt;
今年初記事でございます&lt;br&gt;
元日は実家に戻っていたのですが...&lt;br&gt;
やれ地震だの大津波警報だのてんやわんやな正月でした...&lt;br&gt;
落ち着いて酒も飲めなかった...&lt;br&gt;
一応、サービスエリアまで死ぬ気で家族で逃げたので被災者です（被災者ヅラすな&lt;br&gt;
なんせ実家すぐ海なんでね...怖くてしゃーなかったです&lt;br&gt;
震源地の人はいまも辛い思いをされてると思います。&lt;br&gt;
復興は大変だと思いますが、ぜひとも頑張ってください（ある意味残酷な言葉よな&lt;br&gt;
&lt;br&gt;&lt;/p&gt;
&lt;h1 id=&quot;準備物&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%BA%96%E5%82%99%E7%89%A9&quot; aria-label=&quot;準備物 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;準備物&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://mega.nz/folder/Li4yQTxR#JJavQFVe0IY7CSQChprx4Q&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Winlator Mr.J Fix41(V3.2).apk と main.3.com.winlator.obb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ファイラーアプリ&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;how-to&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#how-to&quot; aria-label=&quot;how to permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;How To&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;Mr.J版APKをインストール&lt;/li&gt;
&lt;li&gt;(Amdroid 11以降の場合)任意のフォルダーの権限をWinlator宛に適切に割当、そこに、&lt;code class=&quot;language-text&quot;&gt;main.3.com.winlator.obb&lt;/code&gt;を設置する
&lt;ul&gt;
&lt;li&gt;これをしないとobbのインポートに失敗するため要注意(これにハマった)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Winlatorを起動する&lt;/li&gt;
&lt;li&gt;起動したあと、権限が求められるので承認し、&lt;code class=&quot;language-text&quot;&gt;Unable to find the obb image.&lt;/code&gt;とポップアップが出るが、&lt;code class=&quot;language-text&quot;&gt;Cancel&lt;/code&gt;を押す&lt;/li&gt;
&lt;li&gt;アプリ内の&lt;code class=&quot;language-text&quot;&gt;Settings&lt;/code&gt;を開き、一番下までスクロールすると&lt;code class=&quot;language-text&quot;&gt;Install OBB Image&lt;/code&gt;ボタンがあるのでそれを押し、&lt;code class=&quot;language-text&quot;&gt;Open File&lt;/code&gt;を押す&lt;/li&gt;
&lt;li&gt;2で設置したobbファイルを選択する&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Installed Version&lt;/code&gt;が0.0から変わっていることを確認する&lt;/li&gt;
&lt;li&gt;トップページへ戻り、適当なコンテナを作成し、起動&lt;/li&gt;
&lt;li&gt;コンテナ内の&lt;code class=&quot;language-text&quot;&gt;Start&lt;/code&gt;ボタンを押し、&lt;code class=&quot;language-text&quot;&gt;System Environment&lt;/code&gt;→&lt;code class=&quot;language-text&quot;&gt;Local Area Settings&lt;/code&gt;→&lt;code class=&quot;language-text&quot;&gt;Japan-ja_JP&lt;/code&gt;を押す&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 417px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 57.50000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAACXBIWXMAAAsTAAALEwEAmpwYAAAC0UlEQVR42nWSW0jTYRiH//fRbXSQEuxEYNlNJwihoIvu6qKbThZ01MzKjMpqXiRRptMddK3MTCEro1QQK81DmjJTbG3q5k5tTqebm3Nrc849sX8RRPrB8/G+H9/74315f0LiBRmJGSX/sTZTxrqL8gVJWqzmohxh160Kdt4sZ/uNx3/ZcfMJm64oFxSNvyVnl7Irt5wdf9iZ+4Rt19VszFIg9H3X068bwjPzkwnfDJPTQTxeH4fuV5FwvpgNWYq/YhsvKVh26iF5r9qwj47RM6Cjf9DIsNWObXKa1DtPEYwjJuz2UeInFosRE4MoadIacYx4N5suK0Xi8cozhRQ2dBMLTOEY0eMdsxLyuQiEwuzNe4bgtAzzw6AlEg7+FhWvCAfuVrA0rYBV54pZcVbK8jNFJKTLWHI0n5PqVqo00zxoGKKs1YGyzUV5j59USQWCpMFOfqOdR72zqHtnUWnCKLoC1PfoqHrfTmVTB5VN7SLquo+8buui+vOI+EfW/IPCRiMFbX6KOgLsvv0U4YVmghrNGJWddt70TdBiiVKn9VHQ6kXyMUB+sw9Jk4d7n7xIGl1k1QdpMc0y63MxbhnG7TARmp4kGI6wJ68CwWrU4XY5iM39JBoJiWOHgjN0GyZ422OiWTtKq95F3RcDnUYP/eNQ3a7nmOwVh4tqOFL8kuPyWtKU79icXYpgszswGE2YLTYic1Hm5iEciRIM+DEMDzKo16HVDjA0qOfbwABup43nH76w7HQhazJKWJ1eTMJ5KQnnpKITBKfTidlsxmAw4Ha7ic7HiEXCnCx5yfosJVuvqdiSoyIlRyV2sCW7jM1XVaKd/uGSgrWZcgSr1Yrf7yccjjAXjTIvrhnS1fUkZcpJyVGLAsnZZSRfjYuVifYR8wUQujs7aOnsJePxV9Kk7ZxQajhb6+Vg+Sj7Sq3sV9lIlVmRN1sY80wxMj6F2bU4vwBbSMAtdNM2jQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2024 02 05 07 57 42&quot;
        title=&quot;&quot;
        src=&quot;/static/557423aa5504c344b529b60b6b831882/f27fb/2024-02-05-07-57-42.png&quot;
        srcset=&quot;/static/557423aa5504c344b529b60b6b831882/772e8/2024-02-05-07-57-42.png 200w,
/static/557423aa5504c344b529b60b6b831882/e17e5/2024-02-05-07-57-42.png 400w,
/static/557423aa5504c344b529b60b6b831882/f27fb/2024-02-05-07-57-42.png 417w&quot;
        sizes=&quot;(max-width: 417px) 100vw, 417px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
10. コンテナ再起動して、日本語化されているか確認する&lt;br&gt;
&lt;br&gt;
以上!&lt;/p&gt;
&lt;h1 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h1&gt;
&lt;p&gt;このブログで一番盛り上がっていたWinlatorネタです（笑）&lt;br&gt;
Winlatorの記事だけ異様にアクセスされてるという...&lt;br&gt;
やっぱみんなギャルゲーをポータブル化したいんやなぁって
&lt;br&gt;
本当は、サクラノ刻のムービー再生時問題解決してから記事化しようかと思ってたのですが、
12時間ぐらい格闘してもダメだったんで、一旦日本語化のみで上げます。&lt;br&gt;
いくつか、心当たりはついていて&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;どうやら、ムービーのコーデックは&lt;code class=&quot;language-text&quot;&gt;wmv&lt;/code&gt;らしく、これがめんどくさい
&lt;ul&gt;
&lt;li&gt;DXVK ✕ Wine 64bitがwmvとすこぶる相性悪いらしい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;そもそもwmvのコーデックが入ってない？
&lt;ul&gt;
&lt;li&gt;Mr.J版だとそうかも？&lt;/li&gt;
&lt;li&gt;ピュア版のWinlatorだと、DXVKは相変わらずダメだが、WineD3Dだと途中まで行ける&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;が調べた結果です。
winetrickが使えればもう少し進めやすいのですが、それがないのがキツイ...
海外のフォーラムのニキが、&lt;code class=&quot;language-text&quot;&gt;wmvというクソコーデックのせいでゲームができないのは問題だ&lt;/code&gt;と嘆いていました...ほんとそれな...&lt;br&gt;
&lt;br&gt;
...まぁもう少し調べてみます&lt;br&gt;
Ethornellさん、もうそろそろ動画のコーデックをx264とかにしませんかね??&lt;br&gt;
最近、ガンダムSEEDのラクス構文というのが密かに流行っているらしいのですが、&lt;br&gt;
それを借りると、&lt;br&gt;
「ゲームの中でwmvを再生したいのではありません。やりたいゲームの中にwmvが紛れ込んでいるのです！」ってお気持ち。&lt;/p&gt;
&lt;p&gt;今日はここまで！&lt;br&gt;
では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[LLama2系モデル(Xwin-LM)でSemanticKernelやってみた【LLamaSharp】]]></title><description><![CDATA[背景 最近、生成AIが激アツですね。 私もその熱に影響を受けた一人なわけで。 クラウドで生成できるAIはお手軽かつ賢くて素晴らしいのですが、 やはり、仕事の情報やプライベートの情報をホイホイクラウドに投げるのもね... ...というのは建前で！本当は手持ちGPU…]]></description><link>https://yukimakura.cc/LLama2系モデル(Xwin-LM)でSemanticKernelやってみた【LLamaSharp】/</link><guid isPermaLink="false">https://yukimakura.cc/LLama2系モデル(Xwin-LM)でSemanticKernelやってみた【LLamaSharp】/</guid><pubDate>Sun, 03 Dec 2023 22:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h2&gt;
&lt;p&gt;最近、生成AIが激アツですね。&lt;br&gt;
私もその熱に影響を受けた一人なわけで。&lt;br&gt;
クラウドで生成できるAIはお手軽かつ賢くて素晴らしいのですが、&lt;br&gt;
やはり、仕事の情報やプライベートの情報をホイホイクラウドに投げるのもね...&lt;br&gt;
...というのは建前で！本当は手持ちGPUで出来たほうが浪漫があるじゃないですか！(結局それかよ)&lt;br&gt;
&lt;br&gt;
世間ではもっぱらクラウドで処理する系の生成AIばかり取り上げられていますが、&lt;br&gt;
LLama系モデルを使うと逸般の誤家庭のPCでできるので、&lt;br&gt;
今日はそれをベースにSemanticKernelができるというLLamaSharpで遊んでみます！&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://yukimakura.cc/TH3P4G3(85W%E7%89%88)%E3%81%A8RTX2080%E3%82%92Ubuntu22.04%E3%81%A7%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%81%97%E3%81%9F/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;PCの構成はこちらの記事をご覧ください！&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;前提条件&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6&quot; aria-label=&quot;前提条件 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;前提条件&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;dockerでnvidiaのGPU(CUDA11以降)が使えること&lt;/li&gt;
&lt;li&gt;VRAMが8GB以上あること
&lt;ul&gt;
&lt;li&gt;なくてもいいが、その代わり使うモデルを変えたり、&lt;code class=&quot;language-text&quot;&gt;ModelParams&lt;/code&gt;の&lt;code class=&quot;language-text&quot;&gt;GpuLayerCount&lt;/code&gt;を減らしたりして調整すること&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;VSCodeをインストールすること&lt;/li&gt;
&lt;li&gt;VSCodeの拡張機能に &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Dev Conainers&lt;/a&gt;をインストールすること&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;ソースコード&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89&quot; aria-label=&quot;ソースコード permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ソースコード&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/yukimakura/llamasharp_SK_Demo&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;yukimakura/llamasharp_SK_Demo&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;手順&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%89%8B%E9%A0%86&quot; aria-label=&quot;手順 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;手順&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;私のデモレポをクローンする&lt;/li&gt;
&lt;/ol&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;git&lt;/span&gt; clone https://github.com/yukimakura/llamasharp_SK_Demo.git&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;vscodeで私のレポを開く&lt;/li&gt;
&lt;/ol&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;code ./llamasharp_SK_Demo&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;F1を押し、「Dev Container: Reopen in Container」をクリックする&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 668px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 49%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAAsTAAALEwEAmpwYAAACAklEQVR42nWPSY/TQBSELQY4MoILCpPNa7sdu9t2e4uzkMkMYRgJIY6IIHFCSKxHTvz1D7nJHDhw+PSqS/1K9ZxgkSLSnESVLPQdhkSXyEWGjCXxf4iEQAxaSqRcEMsERyYxabejvnpNsb0h395Q7m7tXL18g2z3uPkar9j8g19uSftrkm6PqHcE1Y651DipjLnYH3n29hfnh2+Wx69+cH74SvjuN4+uPnOvec+D7shZe+R+e+Ss+8DD1Ufmb35ycfuFJ9efeHr7nVG6xMmSBFGuiJcv8M1zArNFVGtkvSUc/GpNWCzxyg2h2ZCuDuSbAxOhGEUFF/qScbZhkvX4QuLsLy/Jy4qi7UnKliwvaUxBVeZUZUGhM7p+jW5WBPGCKCuIYok/nxJ47ok53nxGGPg4QRCwUAV5t0HkDWlZU1UGXRiydktSdhT9jrxe4rtzi+d5+L5vCUSKLxa4QUSapjhKZWRKUdc1WmuLMca+B6q6pmlalNa4rovn+Sc8vCE0bfBljhclRFGEo7VC65zlckme5zRtY/Xg9X2PMaVt3HUdQohTqGexej7D91xcd/a3oR8EDGfHcUwURnZpIAxD61lkjEyk9YaQu9Bhz3U9JpOJZfjr6DhCK4UxFW3bns6sbMvKGJRWFEVBlmVMp1Nms5mdQ6BSivF4zOFwYL1eMxqN+APH5TPfUKr1IAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 12 03 22 17 24&quot;
        title=&quot;&quot;
        src=&quot;/static/4e65a30c60be651117140b7f8ff5fe42/74866/2023-12-03-22-17-24.png&quot;
        srcset=&quot;/static/4e65a30c60be651117140b7f8ff5fe42/772e8/2023-12-03-22-17-24.png 200w,
/static/4e65a30c60be651117140b7f8ff5fe42/e17e5/2023-12-03-22-17-24.png 400w,
/static/4e65a30c60be651117140b7f8ff5fe42/74866/2023-12-03-22-17-24.png 668w&quot;
        sizes=&quot;(max-width: 668px) 100vw, 668px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
4. 開発コンテナのセットアップが終わるまで待つ&lt;br&gt;
5. ターミナルを開き、以下を実行してモデルをダウンロードする&lt;br&gt;
&lt;strong&gt;合計10GB以上ダウンロードが行われるので要注意！&lt;/strong&gt;&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;chmod&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;755&lt;/span&gt; downloadModels.sh
./downloadModels.sh&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 777px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 21%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAzElEQVR42m2PS2qEQBRFHacdtP9PWYpW+4mjdgNpEcwe2gbFieD+F3BC1SA0JIMDj8flcK+VSUme5wRhgO/7ZFmGlBJRFFT1jaKQVEqZv+Nc8TwP13WJoog0Tf9gDcPAPM9M08Tj8UXf9yilqJuGuv2kUje+55nzPNn3nXVdOY6D+30wBZIkIY7jX6xxHNm2jedzYVleRqZDQgiESEmFoCxLuq6jbVuapjG3XqFbvsuM0HEcPi4XbNs2hGFogu8EQWCm6kYaz/f+lWnhD3bKcK6x1JzMAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 12 03 22 21 41&quot;
        title=&quot;&quot;
        src=&quot;/static/64522dd3460ead96487d05b96a49f2ad/108f8/2023-12-03-22-21-41.png&quot;
        srcset=&quot;/static/64522dd3460ead96487d05b96a49f2ad/772e8/2023-12-03-22-21-41.png 200w,
/static/64522dd3460ead96487d05b96a49f2ad/e17e5/2023-12-03-22-21-41.png 400w,
/static/64522dd3460ead96487d05b96a49f2ad/108f8/2023-12-03-22-21-41.png 777w&quot;
        sizes=&quot;(max-width: 777px) 100vw, 777px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;モデルのダウンロードが終わったら、&lt;code class=&quot;language-text&quot;&gt;dotnet run&lt;/code&gt;する&lt;/li&gt;
&lt;/ol&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;cd&lt;/span&gt; llamaSk
dotnet run&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;遊び方&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%81%8A%E3%81%B3%E6%96%B9&quot; aria-label=&quot;遊び方 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;遊び方&lt;/h2&gt;
&lt;p&gt;起動時に &lt;code class=&quot;language-text&quot;&gt;アトリと会話する場合は 1 を、SemanticKernelのデモは 2 を入力&lt;/code&gt;と出るので半角数字で1か2を入力する&lt;/p&gt;
&lt;h3 id=&quot;普通に会話する-1&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%99%AE%E9%80%9A%E3%81%AB%E4%BC%9A%E8%A9%B1%E3%81%99%E3%82%8B-1&quot; aria-label=&quot;普通に会話する 1 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;普通に会話する (1)&lt;/h3&gt;
&lt;p&gt;このモードは普通にllamaのモデルと会話するだけです。&lt;br&gt;
ちょいちょいアホなところが可愛いです。&lt;br&gt;
&lt;br&gt;
ちなみになぜ「アトリ」かというと、私が好きなギャルゲーのキャラだからです！笑&lt;br&gt;
2024年にアニメ化するので絶対に見てくれってばよ！&lt;br&gt;
ATRIはいいぞぉ(^^)&lt;br&gt;
&lt;a href=&quot;https://atri-mdm.com/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ATRI公式サイト&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;semantickernelする-2&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#semantickernel%E3%81%99%E3%82%8B-2&quot; aria-label=&quot;semantickernelする 2 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SemanticKernelする (2)&lt;/h3&gt;
&lt;p&gt;これは、残念ながらアトリちゃんを混ぜ込めませんでした...(´；ω；｀)&lt;br&gt;
事前に設定してあるPluginを文章から読み出すデモです。&lt;br&gt;
このデモでは&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;{場所}の天気を教えて
&lt;ul&gt;
&lt;li&gt;これに対する答えは、&lt;code class=&quot;language-text&quot;&gt;{場所}は槍の雨が降るでしょう。(嘘です。実装めんどいからやってない)&lt;/code&gt;と返答します&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;{場所}のニュースを教えて
&lt;ul&gt;
&lt;li&gt;これに対する答えは、{場所}をGoogleのニュースAPIから取得して、上位5件のニュースのタイトルを取得して出力します&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;{方向}のモーターを回して
&lt;ul&gt;
&lt;li&gt;これに対する答えは、&lt;code class=&quot;language-text&quot;&gt;{方向}側のモーターをまわします！boooooooo!&lt;/code&gt;と返答します&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;といった問に対して答えるプラグインを実装しています。&lt;/p&gt;
&lt;p&gt;ただし、所詮13BのLLMなので、関数を呼んでくれないことが多々あります。&lt;br&gt;
...というか呼んでくれないほうが多いぐらいかもヽ(･ω･)/ｽﾞｺｰ&lt;/p&gt;
&lt;h2 id=&quot;動画&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8B%95%E7%94%BB&quot; aria-label=&quot;動画 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;動画&lt;/h2&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://www.youtube.com/embed/kAn2uvd-QFo?si=TiTV55CWF5OxXGTD&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot; style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;うん、おもしろい！&lt;br&gt;
まだ実用性は乏しいですが、夢と浪漫がありますな〜&lt;br&gt;
そして、一つ思ったことは、&lt;strong&gt;SemanticKernelはある程度モデルが賢くないと成り立たないということ！（当たり前）&lt;/strong&gt;&lt;br&gt;
まぁ、こういう課題も案外すぐに解決されていくのでしょうね...&lt;br&gt;
最近、MicroSoftがマシンリソースの削減のためにモデルの軽量化やASICの製作など躍起になっていますが、徐々に少ないリソースや専用ASICなどによってオンプレ生成AIは身近になっていくことでしょう！&lt;br&gt;
AI戦国時代の到来ですな!!&lt;br&gt;
&lt;br&gt;
今日は記事を2連投しました！&lt;br&gt;
意外とLLamaSharpの調整に時間がかかってしまい、&lt;br&gt;
こんな時間になってしまった...&lt;br&gt;
オムニのロボットのネタとかもあるのに...&lt;br&gt;
それはまた今度ということで！（絶対書けよ未来の自分）&lt;br&gt;
では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[TH3P4G3(85W版)とRTX2080をUbuntu22.04でセットアップした【外付けGPU】]]></title><description><![CDATA[TH3P4G3(85W版)ってなんぞ？ ...まぁ、こんな辺境ブログの記事にぶち当たる方には蛇足と思いますが、 中華製外付けGPUアダプターです。 私が購入したTH3P4G3のリンク 2マン前後で購入でき、そのくせThunderbolt…]]></description><link>https://yukimakura.cc/TH3P4G3(85W版)とRTX2080をUbuntu22.04でセットアップした/</link><guid isPermaLink="false">https://yukimakura.cc/TH3P4G3(85W版)とRTX2080をUbuntu22.04でセットアップした/</guid><pubDate>Sun, 03 Dec 2023 18:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;th3p4g385w版ってなんぞ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#th3p4g385w%E7%89%88%E3%81%A3%E3%81%A6%E3%81%AA%E3%82%93%E3%81%9E&quot; aria-label=&quot;th3p4g385w版ってなんぞ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TH3P4G3(85W版)ってなんぞ？&lt;/h2&gt;
&lt;p&gt;...まぁ、こんな辺境ブログの記事にぶち当たる方には蛇足と思いますが、&lt;br&gt;
中華製外付けGPUアダプターです。&lt;br&gt;
&lt;a href=&quot;https://ja.aliexpress.com/item/1005006106871443.html&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;私が購入したTH3P4G3のリンク&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2マン前後で購入でき、そのくせThunderbolt3のデイジーチェーン接続にも対応という&lt;br&gt;
高コスパなのがとても魅力的です。&lt;br&gt;
しかも！&lt;strong&gt;この85W版はノートPCに85WまでThunderbolt3経由で給電できる&lt;/strong&gt;というスグレモノ！&lt;br&gt;
なんか、見た感じ今年の後半に出たっぽい？&lt;br&gt;
ほとんど従来版(65W)と値段も変わらないのでこれをポチりました。&lt;br&gt;
&lt;br&gt;
これはどうでもいい情報ですが、私はちょうど独身の日セールで&lt;br&gt;
クーポンマシマシで買えたので、約1.6マンほどで買えました〜&lt;br&gt;
ラッキー(^^)&lt;/p&gt;
&lt;h2 id=&quot;物理的な構成&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%89%A9%E7%90%86%E7%9A%84%E3%81%AA%E6%A7%8B%E6%88%90&quot; aria-label=&quot;物理的な構成 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;物理的な構成&lt;/h2&gt;
&lt;h3 id=&quot;th3p4g385w&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#th3p4g385w&quot; aria-label=&quot;th3p4g385w permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TH3P4G3(85W)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;主役(？)&lt;/li&gt;
&lt;li&gt;PCIeをThunderbolt3に変換するアダプタ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;しれっと意外と高いThunderbolt3ケーブルが同封なの助かる&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;geforce-rtx-2080-gamingpro-oc-palit製&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#geforce-rtx-2080-gamingpro-oc-palit%E8%A3%BD&quot; aria-label=&quot;geforce rtx 2080 gamingpro oc palit製 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;GeForce RTX™ 2080 GamingPro OC (PALiT製)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;メルカリで激安で買ったGPU&lt;/li&gt;
&lt;li&gt;VRAMは8GB&lt;/li&gt;
&lt;li&gt;なんかファンがブン回るとクソうるさい&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;atx-1260ga1-80plus-bronze-600w-enhance製&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#atx-1260ga1-80plus-bronze-600w-enhance%E8%A3%BD&quot; aria-label=&quot;atx 1260ga1 80plus bronze 600w enhance製 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ATX-1260GA1 80PLUS BRONZE 600W (Enhance製)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ハードオフで3300円買った動作保証品(ジャンクじゃない)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;thinkpad-x1-carbon-gen6&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#thinkpad-x1-carbon-gen6&quot; aria-label=&quot;thinkpad x1 carbon gen6 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ThinkPad X1 Carbon Gen6&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;相棒&lt;/li&gt;
&lt;li&gt;スペック
&lt;ul&gt;
&lt;li&gt;Intel Core i7 8650U&lt;/li&gt;
&lt;li&gt;16GB RAM(速度はシラネ)&lt;/li&gt;
&lt;li&gt;訳あってWLANはBroadcom bcm94360ng
&lt;ul&gt;
&lt;li&gt;お察しください(^_^;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 69.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD6klEQVR42h2TWVDUBQCH/6/1UuMkUxyhgOCeHPvfA5AFsRVGYN3lit0IEFb2wF12FQk2LkUUlSBEEHAMaEUDS8cDA1GQQzkUvMgam5qcaaaZeum1p6/Rh9/r9/DN9xMCIwMM9Pfhb2hmuzSO6BgZ4eERBAUF88677/Pepg8J/liC13+S27OL/DA5xditSXpHb3D225v0XrpG9+hV/Kd7aT0XQHi+Nsvayj3Gx8cw7M5GFHWI2mTCtsSwaXMooeHbkKozOXf+Gn//+x+v/vyHjd//4tEvr1l8+Zr+0e+5NLXA9Ue/cXn2OcKT1Xu8WJ/hxfpd5mau8ePEOIHAME7XAdLTDWTnmEjLyMVjO0hn1wXaTvXjb+7CWdNKmbueon0OauoasFc3YPM0IqyvTvNmG09n+OPXJebv38DrcVFstaARNSTEq9CoNGh1etS6NOI1qaToU0jUJpOXtQd7RQlZZjNJOhFjhh5hdXmKjadzLM3dou9sJ/srHciVGpJTd6NQxiGVKZFIFEhiFMTFqlDEqsnemYChaBeaYh0mTyo2s4FDbht5xl0Izx7PcP3qZbq7Oxjs76b9ZBvmvAKMpjxi5TL0SfFUlWfTfLiEnGwDdr2GlvREvq5N40xfEV9WaUiURuHxuDho+xRh8f5tTnV0sLZ6l1c/L7Px7AFNjX4cdhvH/G6yMnaRpNMyPjpAT+cxlBIJYVExFG6L5KHhE6pFNWJaKpkZGfjsVoQrYwGGhgd5+WKBpcU7PHk8z5EjTRj35tLUWE9VZRlBQSHEKuNwVhSTkqwjQSPy0Qeb6ZFE4LWYKSjMJzg4DGveXoSRkQtcuRLg2focKw+n+en5A77qaMe414zP68btrEAqkaJVi1Q7SnHsL6O81MLWyEiOflGNNTeLrWEhhISEER0tRRg8P8DNG+M8XZtn/dEMq8uz1NTWvQVWVbmo9TpRq1QkJ+rQqFQo5Qrksii0GpHTjT4KC/OprfFRbLGwJTQMYWjkAmNjgbfu1lZnCYxeorjUhs1mY195BQ2H3YjxcSjkSuJj5UijIxB3KAh3xVByIJ/eljpOVJqoNyfh2yMiTE9P0Hq8jcWFu6ysLNPRM4Q5rwizOZ8co5nmOh8yyXZCgkNJUMooMGVS7/mM5m4TR1x6Dhti8O2MpNUop+fz5DcdzjE0PEyl4wD1DS00tnYQuU369iWWIiutTbWk6xNxllvoPepjsGE/PZWZdJbE0ZIro71QpMeawGBZIhfduxEmJyeYuH0Hf9MJ5EqRskovseoU7J46ykv3cajawfF6O9+1u/nGa+KMVaTNKMGfL6GrRMtFRwpjrh1cdhs448zhf8/CfpDy632AAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 12 03 17 32 59&quot;
        title=&quot;&quot;
        src=&quot;/static/089944a83295d473ad1faa36ea68f5d0/5a190/2023-12-03-17-32-59.png&quot;
        srcset=&quot;/static/089944a83295d473ad1faa36ea68f5d0/772e8/2023-12-03-17-32-59.png 200w,
/static/089944a83295d473ad1faa36ea68f5d0/e17e5/2023-12-03-17-32-59.png 400w,
/static/089944a83295d473ad1faa36ea68f5d0/5a190/2023-12-03-17-32-59.png 800w,
/static/089944a83295d473ad1faa36ea68f5d0/c1b63/2023-12-03-17-32-59.png 1200w,
/static/089944a83295d473ad1faa36ea68f5d0/b9024/2023-12-03-17-32-59.png 1203w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;いろいろやったこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%84%E3%82%8D%E3%81%84%E3%82%8D%E3%82%84%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8&quot; aria-label=&quot;いろいろやったこと permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;いろいろやったこと&lt;/h2&gt;
&lt;h3 id=&quot;nvidiaのドライバをインストール&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#nvidia%E3%81%AE%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&quot; aria-label=&quot;nvidiaのドライバをインストール permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;nvidiaのドライバをインストール&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;GPUをThinkPadにぶっ挿す&lt;/li&gt;
&lt;li&gt;設定→このシステムについて→ソフトウェアのアップデート→追加のドライバータブを開く&lt;/li&gt;
&lt;li&gt;nvidia-driver-535(プロプライエタリ)を選択し変更の適用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;再起動せず、eGPU Switcherのセットアップに続く&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;egpu-switcherのセットアップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#egpu-switcher%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97&quot; aria-label=&quot;egpu switcherのセットアップ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;eGPU Switcherのセットアップ&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://qiita.com/y-vectorfield/items/8960c804441d2ebd605e#egpu-switcher%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97egpu%E4%B8%8A%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8Bx-window-system&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;このQiitaの記事を参考にしました&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;eGPU Switcherをインストール&amp;#x26;セットアップ&lt;/li&gt;
&lt;/ol&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; add-apt-repository ppa:hertg/egpu-switcher
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; update
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; egpu-switcher
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; egpu-switcher setup&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;再起動&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;※もし、GUIが死んでも&lt;code class=&quot;language-text&quot;&gt;Ctrl+Alt+ファンクションキー(F2〜F6)&lt;/code&gt;で&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;CUIの別セッション開けれるのでそこで頑張ってなんとか復旧してください！(力技)&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;オプションdockerのインストールセットアップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3docker%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97&quot; aria-label=&quot;オプションdockerのインストールセットアップ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;(オプション)Dockerのインストール&amp;#x26;セットアップ&lt;/h3&gt;
&lt;p&gt;私は、あまり環境を汚したくないので、基本コンテナで開発してます。&lt;br&gt;
ネイティブにCUDAを入れるのは汚れる＆ダルいのでDockerでやっちゃいます。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Dockerのインストール &lt;a href=&quot;https://qiita.com/KEINOS/items/bdc9450c1a88c210aa88&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;いつもこのQiitaを参考にさせてもらってます&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-fsSL&lt;/span&gt; get.docker.com &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; get-docker.sh &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sh&lt;/span&gt; get-docker.sh &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; gpasswd &lt;span class=&quot;token parameter variable&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;token environment constant&quot;&gt;$USER&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run hello-world &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-f&lt;/span&gt; get-docker.sh&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;再起動&lt;/li&gt;
&lt;li&gt;Nvidia Container Toolkitのインストール＆セットアップ&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;https://zenn.dev/usagi1975/articles/2022-09-05-000000_docker_gpu#nvidia-container-toolkit%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;このzennを参考にしました&lt;/a&gt;&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token assign-left variable&quot;&gt;distribution&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt; /etc/os-release&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; $ID$VERSION_ID&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-fsSL&lt;/span&gt; https://nvidia.github.io/libnvidia-container/gpgkey &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; gpg &lt;span class=&quot;token parameter variable&quot;&gt;--dearmor&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-s&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-L&lt;/span&gt; https://nvidia.github.io/libnvidia-container/&lt;span class=&quot;token variable&quot;&gt;$distribution&lt;/span&gt;/libnvidia-container.list &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;sed&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g&apos;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;\&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tee&lt;/span&gt; /etc/apt/sources.list.d/nvidia-container-toolkit.list

&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; update &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;apt&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-y&lt;/span&gt; nvidia-container-toolkit

&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; nvidia-ctk runtime configure &lt;span class=&quot;token parameter variable&quot;&gt;--runtime&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;docker
&lt;span class=&quot;token function&quot;&gt;sudo&lt;/span&gt; systemctl restart &lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;コンテナ内でGPUが認識されているか確認する&lt;/li&gt;
&lt;/ol&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;docker&lt;/span&gt; run &lt;span class=&quot;token parameter variable&quot;&gt;--rm&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--gpus&lt;/span&gt; all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;これで、nvidia-smiを確認できればおｋ！&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;eGPU Switcherによってめちゃくちゃ快適なeGPU✕Ubuntu環境ができました！&lt;br&gt;
自分は3DCGというよりも、生成AIで遊びたいので、あまりVRAMの無駄遣いをしたくありません。&lt;br&gt;
その点、ラップトップだと内蔵グラフィックスがあるので、&lt;br&gt;
そいつで描画させて、GPUはCUDAだけみたいな感じが可能です。&lt;br&gt;
はたまた、描画にGPUを使いたければ、eGPU Switcherをいじったり、&lt;br&gt;
GPUの映像端子にケーブルさすなりすればRTXぱわーを感じれるわけですな。&lt;br&gt;
&lt;br&gt;
ちな、安定性は3日間起動しっぱなしでもモウマンタイだったので&lt;br&gt;
自分的には💯でした。&lt;br&gt;
(ただし、描画は内蔵グラ設定)&lt;/p&gt;
&lt;p&gt;今回かかった金額(ノートPC除く)は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GPU (20000円)&lt;/li&gt;
&lt;li&gt;電源 (3300円)&lt;/li&gt;
&lt;li&gt;TH3P4G3 85W (15744円)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;で合計&lt;strong&gt;39044円!&lt;/strong&gt;&lt;br&gt;
ギリ4マン切った！やったぜ！&lt;br&gt;
&lt;br&gt;
TH3P4G3、おすすめです。&lt;br&gt;
(写真撮り忘れたけど、梱包が結構しっかりしてて驚いた)&lt;br&gt;
みなさんも是非遊んでみてくださいな！&lt;br&gt;
では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[RDRAのすゝめ(LT会のパワポ)]]></title><description><![CDATA[背景 エンジニアの輪 at 名古屋(第…]]></description><link>https://yukimakura.cc/RDRAのすゝめ(LT会のパワポ)/</link><guid isPermaLink="false">https://yukimakura.cc/RDRAのすゝめ(LT会のパワポ)/</guid><pubDate>Sat, 18 Nov 2023 21:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h2&gt;
&lt;p&gt;エンジニアの輪 at 名古屋(第6回)にて発表させて頂いた資料です。&lt;br&gt;
今回は生意気にも上流工程の話です。&lt;br&gt;
生意気上等でも、個人的にはここまで要件定義における具体的なフレームワークって無いと思い感動し、どうしても皆さんに共有したかったので発表しました。&lt;br&gt;
（知らないだけならごめんなさいm(_ _)m)&lt;br&gt;
RDRAの詳細については、神崎先生の本やRDRA.jpに委ねます。&lt;br&gt;
私事で恐縮ですが、今、開発業務をしていて正直少しRDRAを当てはめにくいのですが、&lt;br&gt;
それでもアクターに与える価値ドリブンで要件定義が出来るのって素晴らしいと思います。&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-text line-numbers&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;俺たちの技術、すげぇだろ？ == 顧客が本当に求めていたもの&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;は必ずしも当てはまらないのでね...(むしろほとんど無いのでは？)&lt;/p&gt;
&lt;p&gt;アクター(ステークホルダ)の要求をいかに引き出して、
それを仕様化できるのほんとすごいわ...
&lt;br&gt;
また、このスライドは結構急ぎで作った＆私もRDRAと出会ってそんなに時間が経っていないので、&lt;br&gt;
ミスリードな解釈があるかもしれません...&lt;br&gt;
その時はご指摘いただけると幸いです。&lt;/p&gt;
&lt;h2 id=&quot;スライド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89&quot; aria-label=&quot;スライド permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スライド&lt;/h2&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 59.27083333333333%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://docs.google.com/presentation/d/e/2PACX-1vS1xbq3L1raS9NN2FsnY9ZMVnkVIB32LYl4WHOmxelWHRAYlPj9ntgRi-uGwPb_WqFMxfQFo3nlqX7a/embed?start=false&amp;amp;loop=false&amp;amp;delayms=3000&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot; style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;</content:encoded></item><item><title><![CDATA[Foundational C# をサクッと取得してみた]]></title><description><![CDATA[背景 Javaとかは認定資格とかが結構いろいろあるが、 C#は全くと言っていいほどそういうものがなかった。 (厳密には2022年あたりまであったのだが廃止となった) それが！急に2023年8月末にMSがfreeCodeCamp…]]></description><link>https://yukimakura.cc/FoundationalCsharpをサクッと取得してみた/</link><guid isPermaLink="false">https://yukimakura.cc/FoundationalCsharpをサクッと取得してみた/</guid><pubDate>Wed, 20 Sep 2023 21:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h2&gt;
&lt;p&gt;Javaとかは認定資格とかが結構いろいろあるが、&lt;br&gt;
C#は全くと言っていいほどそういうものがなかった。&lt;br&gt;
(厳密には2022年あたりまであったのだが廃止となった)&lt;br&gt;
それが！急に2023年8月末にMSがfreeCodeCampとコラボと言う形で&lt;br&gt;
&lt;code class=&quot;language-text&quot;&gt;Foundational C# Certification&lt;/code&gt;という資格を打ち出した！&lt;br&gt;
しかも無料！&lt;br&gt;
...てなわけでやってみた！&lt;/p&gt;
&lt;h2 id=&quot;mslearnに登録し6つのラーニングパスをすべてクリアする&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#mslearn%E3%81%AB%E7%99%BB%E9%8C%B2%E3%81%976%E3%81%A4%E3%81%AE%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0%E3%83%91%E3%82%B9%E3%82%92%E3%81%99%E3%81%B9%E3%81%A6%E3%82%AF%E3%83%AA%E3%82%A2%E3%81%99%E3%82%8B&quot; aria-label=&quot;mslearnに登録し6つのラーニングパスをすべてクリアする permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;MSLearnに登録し、6つのラーニングパスをすべてクリアする&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/users/dotnet/collections/yz26f8y64n7k07&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ここに公式のラーニングパスのまとめがあるので、全てクリアする&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;これがなかなかのボリューム。公式曰く30時間分ほどらしい&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;6つのトロフィーが取得されているか確認する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#6%E3%81%A4%E3%81%AE%E3%83%88%E3%83%AD%E3%83%95%E3%82%A3%E3%83%BC%E3%81%8C%E5%8F%96%E5%BE%97%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B&quot; aria-label=&quot;6つのトロフィーが取得されているか確認する permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;6つのトロフィーが取得されているか確認する&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/users/me/achievements#trophies-section&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;トロフィー一覧を確認する&lt;/a&gt;&lt;br&gt;
6つあればOK！
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 41%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABtUlEQVR42k2SW2/TQBBG8wIoiW80ttfX2IkvSWy3OKaOk6C2ojStKlEkeEAVEk/8/99w0G6lwsOnGZ25aGZ2R8E8IV7mBFFMEEbKusLDcV1mroPr+a9ypBUetuvgCO9fTLxwIQSj28efHB5+MXJSJvOKqVRSEZUdp6c/vA1LJnHFJN6gL86ZhhnXp2fmF1e8CQrFZY2xaHD8kFHeXZMevjLJthirHmM1oK922NkFm6vvGOs9RrlDL3vM6oieVOT9PX53h1ZcqnyrOmKuB2zZ0Ixz3uctetqgJRVaUqOlNUa4xCha7GpQk0k+TRvMuERLSux6j1V0aIvmtdb2AkbL/Re84cRYJGhxiSE1XxFkNfubJ8b+Ai0qlKx0gx7MGT79INoceOclTKMCPS4xkzWObJgOJ9zjN8ZJw2TZMs22an2Rt+zufyumSbZo0YueaVywPTwTf3hgnJyjLbboWYex7LC9kNFs2eB9vMOqDhhlj1HKu+zUNE57g7u9xZJ3LHp1TzOtcfKOsP7MWb7Dyi45Kwblq4auF6jdZ8LHFoGS9B35FfxQ+UoqJ1BcvqbtB//xlxwhPP4CV23cjq8uFzsAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 09 20 20 22 13&quot;
        title=&quot;&quot;
        src=&quot;/static/f2730a46c04b4df88987ce80a337937c/5a190/2023-09-20-20-22-13.png&quot;
        srcset=&quot;/static/f2730a46c04b4df88987ce80a337937c/772e8/2023-09-20-20-22-13.png 200w,
/static/f2730a46c04b4df88987ce80a337937c/e17e5/2023-09-20-20-22-13.png 400w,
/static/f2730a46c04b4df88987ce80a337937c/5a190/2023-09-20-20-22-13.png 800w,
/static/f2730a46c04b4df88987ce80a337937c/c1b63/2023-09-20-20-22-13.png 1200w,
/static/f2730a46c04b4df88987ce80a337937c/01ccc/2023-09-20-20-22-13.png 1399w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;freecodecampにログインしそれぞれのトロフィーと連携する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#freecodecamp%E3%81%AB%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%97%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E3%81%AE%E3%83%88%E3%83%AD%E3%83%95%E3%82%A3%E3%83%BC%E3%81%A8%E9%80%A3%E6%90%BA%E3%81%99%E3%82%8B&quot; aria-label=&quot;freecodecampにログインしそれぞれのトロフィーと連携する permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;freeCodeCampにログインし、それぞれのトロフィーと連携する&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/users/me/transcript&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;MSLearnのトランスクリプトを開く&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;リンクの共有&lt;/code&gt;→&lt;code class=&quot;language-text&quot;&gt;リンクの生成&lt;/code&gt;→&lt;code class=&quot;language-text&quot;&gt;リンクのコピー&lt;/code&gt;をクリックする&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 42.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABU0lEQVR42n2Sy26DMBBFWabGNo8Asc3DQEIFUZugLlCVVRv1/3/pVmMSRNTH4mqGMRzfmcFTSkFrje12+6AkSVxM0xRxHIMxBt/3FzHmI+UMhjPEfH6mujeOI6ZpgrUWbduiaRrUdY2qqpZ4B3LOIWUAKSUCKdEFHGUU4BAKBEE4A7uue/iYgBTzPF/gURQtDgkqhEAYhsj8DQrOkEmBp9u519gSTT2DyKUxxgEpJyiJgHfYvWXKN8x3Yqu6d7584fz+gXa/R1EU2CkFZQw0SWt3wdrhWvymdc3r3y6o+zOSNIXOUlRqh3KXIc8ytxASLYfmSLP7DfwA7J4btHuLtu8wHSyuLwOu4ys++wOOw4DT6eSA1OK65R9ub2deaUtUdYW8KmCNwpBrHAuDvdGubRrDXy3Pvw9b5ICCC5eEQYgoiucBU02IxdV/zugyGgVtnd77BtAB3Z73H19KAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 09 20 20 37 24&quot;
        title=&quot;&quot;
        src=&quot;/static/a69e7b78976ea7429f6242127a51dad1/5a190/2023-09-20-20-37-24.png&quot;
        srcset=&quot;/static/a69e7b78976ea7429f6242127a51dad1/772e8/2023-09-20-20-37-24.png 200w,
/static/a69e7b78976ea7429f6242127a51dad1/e17e5/2023-09-20-20-37-24.png 400w,
/static/a69e7b78976ea7429f6242127a51dad1/5a190/2023-09-20-20-37-24.png 800w,
/static/a69e7b78976ea7429f6242127a51dad1/c1b63/2023-09-20-20-37-24.png 1200w,
/static/a69e7b78976ea7429f6242127a51dad1/7e11a/2023-09-20-20-37-24.png 1235w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/learn/foundational-c-sharp-with-microsoft/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;freeCodeCampのC＃のページに飛び、ログインする&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Courses&lt;/code&gt;のそれぞれ最後に&lt;code class=&quot;language-text&quot;&gt;Trophy - コースの名前&lt;/code&gt;があるのでそれをクリックする&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Your Microsoft Transcript Link&lt;/code&gt;に先程コピーしたURLを貼り付け、&lt;code class=&quot;language-text&quot;&gt;Link Account&lt;/code&gt;をクリックする&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 797px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 17.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAl0lEQVR42oWMzQ6CMBCE+/4vBiYgEAOJ4E/UxMS223LoFi8yhoIoxsTDl5mdnV1RN0cM7PanoNv6gPPlCt/dwb77i2O/QBAZfGNtCx4KzoGZg45+zBxzyNl7PPp+gSCy0yMLMqPXZKAUQSrCTWpIpSGlnrIP1QRj25nhXhRFhTwvf5JlJeI4RRSliFfrML/31dx5kSQbPAFjESkt4lTLTQAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 09 20 20 41 16&quot;
        title=&quot;&quot;
        src=&quot;/static/2f07cf87cd75a2b8473e1a1c301b835f/43fbc/2023-09-20-20-41-16.png&quot;
        srcset=&quot;/static/2f07cf87cd75a2b8473e1a1c301b835f/772e8/2023-09-20-20-41-16.png 200w,
/static/2f07cf87cd75a2b8473e1a1c301b835f/e17e5/2023-09-20-20-41-16.png 400w,
/static/2f07cf87cd75a2b8473e1a1c301b835f/43fbc/2023-09-20-20-41-16.png 797w&quot;
        sizes=&quot;(max-width: 797px) 100vw, 797px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ol start=&quot;6&quot;&gt;
&lt;li&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;Verify Trophy&lt;/code&gt;をクリックする&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;残りのコースの項目もVerifyする&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;これ、実はミソで&lt;strong&gt;TrophyさえすべてVerifyできれば試験を受けれる&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 536px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 237.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAwCAYAAAARtFotAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGTklEQVR42pWXaY/bRgyG/f//VFAEaJE2RZN0117fhyyfkmzdt1g8HI3s3bQfugCXo5kRxSFfvhyPrl4g0+lSXPck6/VOXPeo4/l8LZ4XyI8fE3EcV97eFrJYrGW9diTPC/n413Wd5EUpozhOxLv6EoaRBMFNfP8mt1soQXCX+z1Uo4xZs2Pm7R4kTTM1qgYxNBlPZT5bytvbXGbTpaxXW1ku1jJ+ncpmvZX5bKXri8VKNhtHnN1eNpud7B1XdltH99+Cm5RlJaMwyWV3uIp79mV/8mXL+BLoeLM/i3O4qmbP1r1IEKaSV62kZaM6qxpJy1rSopEkK2W09VI5B7HsL6Ec/Fi8KJeiFckakbz9WdJaJKmMRuKyEy/M5BJXcghLGbm3Qlw/Fucayf4ayTFIxU9qI6kRL6mGMRKkzbDHiys533M53Us5h4WMCGRVN5KXtVQNupI4zSVKMrlHiYRRKklW6Jg5JE4zKap6kLJqVGd5IaPr1ZdffvlNvv7xTf78+kN+//KXfP8+lv3+KPP5Sl5f3uRy8TQZQGax2OgYmHz80yzf7pGMx3M5n6+y3e4Vc0DHYstqhk3TStu2w1zbdv1a9zAYJ6mC+XA4yel0lfPZE8c5yHK5VU9WQGi5Uc/4GOBHKAbmVqud7HZ7aZpGirKU0T2MZDZbDi8hHHW12ujcbLbSdTQfoIIAs+8HA7CjKFbPCzwEjHlRKCjLsux1JVVVSV03UjeNVHWtc3Vd6/zH+GGsaVtz5CRJhcScThcNPl97jhGbjTZj5omliaeZo9qob60U/jGJN13XqjfWK0S/3hhP8QKNIQwauFXDqRQ29zDWBFwuvsYPD8k4CToeL7Lduso+PM9ma53bbPYKq8dpjOiRmdztXD32crWVMDQGCTYfAUqEA0NkHMbhA/v9QY+KZyQDg4WNIRuBAnBhDBTgPjRzGOUUfJh19G5noAV80E0NbCqDw2WP/p1zUFrCOMbYyJhQWNjM5it9BntoMGw87IyHnJsMZVmumkQ8s7DqoVq6n9c6UbjxngIbtoWNiZfn3ySKkyGzRgzG2idp2maADnuiKFFn1GDRw6bpxUDmARsjj+eyqt5Byz5XdfVgG9gFWLy8TDUB09lSy4/SI24EHsJwnKMmCdhQgiTnQRZ9ljnq589fNAHfvr3KZLJQI8TFoN9oSs5IrS8SKtae4zqUHt7hKUL5gTuKH+YBf8x5nq/4NOsG+GbPVcX378ZD2uHr60whwNGm05WMxzOZTGaqCQOQmU4Xql9fp7pvpl1yIZPxXKZvS8mywhi07oNHhDGZZkz27JiqSLNMoDuqiTV6OmPk0eiTVAPOcdGE4P/9dfrRgW2yfsAEXwAGbdcpLGCg9zg0LNMqhTUD3Dhl0RfIiAqBCIjl/R71iTFXE451u0W6hvcQA2RC0pi3c8QP42oQd6lX8AdVQQoE32aULMMuwIo9PL/8/aZGbRfEEYUNBtM01waFAbwzMPAUxHael9FQFmRwOp11DU40TO+bJmX5kLQDBWAyfVtohQAJPAdSjE1HNF4jHFfr3wvU6KMFVJUWtYVP0Scmy3Mz36/ZEvvXPPdM9NSkPDmeLnrk5yb1LM9s83H+XZMqhiZVa53CLMo8fRMCKnVPY3af8bx66B42fZOKlJ0fSTG1StCD213XTJu9yt49KohNL+5+OoUeGYMkhBctIdgLER+ZTOaaBK4hQAfjeMppzIWg1gKAiUwM06yHw0n5DShY0euvc5DD4ax70OyBD1kDl2AW7GocDWwS7WSmy22VONlkwY73zAElc5Jt38A2/WVqN9R/btmmoEnlhn70JkH2nqU19TtkdpjvhuOTODUI9jzvprHzrqZW9S44NKT30n5sWE2jNKaOWdjYrzY9o9gGpLev2jQte7exDcrusWzEc5rl5gZLbCgvYkWMSIh7OMvheNZnm5zVeqc3Bvdw6puVM1xAj8ez8RAYfPr0qzIHbsMceR/PPM/1AoAok0exFEXRz5sy5biskRglB9yE74ij+cllbqdonu3PMD4EItBQvr29soYMMQyjeHAfvQZfO3cgilw9egjzeIxnSd+DEFuSIzYBSvtlxje8uocS4Bk/KnsvmPsv1uG9JMkMbDDGC9YwiTLdLRJOYDsdghdadlU1CGVnYpnLP46ESP2UvtC6AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 09 20 20 44 56&quot;
        title=&quot;&quot;
        src=&quot;/static/343f192da17c7d49fcfc7782fa91cfdc/2d920/2023-09-20-20-44-56.png&quot;
        srcset=&quot;/static/343f192da17c7d49fcfc7782fa91cfdc/772e8/2023-09-20-20-44-56.png 200w,
/static/343f192da17c7d49fcfc7782fa91cfdc/e17e5/2023-09-20-20-44-56.png 400w,
/static/343f192da17c7d49fcfc7782fa91cfdc/2d920/2023-09-20-20-44-56.png 536w&quot;
        sizes=&quot;(max-width: 536px) 100vw, 536px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;お受験する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%8A%E5%8F%97%E9%A8%93%E3%81%99%E3%82%8B&quot; aria-label=&quot;お受験する permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;お受験する！&lt;/h2&gt;
&lt;p&gt;あとは残された&lt;code class=&quot;language-text&quot;&gt;Foundational C# with Microsoft Certification Exam&lt;/code&gt;をクリアするのみ！&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;問題数は80問&lt;/li&gt;
&lt;li&gt;英語（ブラウザの翻訳機能をつかえばOK）&lt;/li&gt;
&lt;li&gt;制限時間はなし(ただし計測はされる)&lt;/li&gt;
&lt;li&gt;70%以上解ければ合格&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ちなみにゆきまくらは&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-text line-numbers&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;Foundational C# with Microsoft Certification 
Exam: Passed 
Number of questions: 80 Correct answers: 72
Percent correct: 90% 
Time: 32:02&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;であった&lt;/p&gt;
&lt;h2 id=&quot;証明書を発行する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%82%92%E7%99%BA%E8%A1%8C%E3%81%99%E3%82%8B&quot; aria-label=&quot;証明書を発行する permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;証明書を発行する&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://www.freecodecamp.org/settings&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;freeCodeCampのSettingsに飛ぶ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Username&lt;/code&gt;、&lt;code class=&quot;language-text&quot;&gt;Name&lt;/code&gt;を設定する（Saveを忘れずに）&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;Privacy Settings&lt;/code&gt;にて、&lt;code class=&quot;language-text&quot;&gt;My profile&lt;/code&gt;、&lt;code class=&quot;language-text&quot;&gt;My name&lt;/code&gt;、&lt;code class=&quot;language-text&quot;&gt;My certifications&lt;/code&gt;、&lt;code class=&quot;language-text&quot;&gt;My timeline&lt;/code&gt;を&lt;code class=&quot;language-text&quot;&gt;Public&lt;/code&gt;に変更する(Saveを忘れずに)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 544px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 119%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAYAAAD6S912AAAACXBIWXMAAAsTAAALEwEAmpwYAAACqUlEQVR42o2V25aiQAxF+f+/6+6ZVkcQuYPcQUDth8zaQWi0Zc08xLqYSp1zkhRG1w/yys7dIK4Xyq/fOzEtRz43prx/bGVvHqUfLi/9GQ1+cBguFx2X1p47KcpaqrqRsqolLyod50DDTyAGDgfbFevgytHx1RzHl4PtieMEEgSxhFGiFsUniaKThGEiUZQoAz+IdOR/QBjc7nqR+EEsQZhIEMb3eSyeP+43bSdNe54N5HVz1v1p3p77EWGel2IdHD08XK4PlL/Xw0K3cT85ZYoMGY6uL/bRU2kMokMFyCCckI57p/nmZ5suZc4F5EARVk0rcZJKWdYzIv58TtJzsDQvFWVVt3cAqcphZHmppQDlNCvU8gLn/L4uNdPPAdmbAgJoDlhWjdJlQXCC4cy8KCud4/NYc71cb19y+7opk+vtpmvNct20c6BvPZb2mjIan9JcmrbVC8d5J0ZRVJohxw11Y61zlui4yPUCTeDEBsmgrwEpZG541VJrAQFBQNChNQFhqxqy+P+Ag8rAGWhTe9QiJaZJQbs/e1tvZONfQSeENANtOiax0jngFCEpp9UmlMuOWStqEMVxKpVWydgYNInWIY+DaR7V0GMqFeh0ff8yIKgIxOOClphqSHOjAZbdqz9OMkWLQfEVSlhcrteZ0eV6uz8O9yzbtqeoKNJlHa5pCCvHDRRImhcaQx8HysZ1Q80aSZmafKQ2rGoIE3p4pByJ54cjZbQgYzzzU5NjHKCf1yhzOegIQqazvBjLBg2nh5Ms4TA+nuN6rXzw4zL9VHT9fLEi5LnnE5BlhYq71JADiD8lgEP4ULc8sJwnmeiprcc3YrPZy25nyXZr/jD2394+5e198+DDfFozbjamfm+MJMlkvz+KZTmrtt1ast1ZD3vmkw81jO5/AQxvG+mdDc5QAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 09 20 20 55 14&quot;
        title=&quot;&quot;
        src=&quot;/static/a8dd257f2c2824ac586bb3259271fce5/b3e51/2023-09-20-20-55-14.png&quot;
        srcset=&quot;/static/a8dd257f2c2824ac586bb3259271fce5/772e8/2023-09-20-20-55-14.png 200w,
/static/a8dd257f2c2824ac586bb3259271fce5/e17e5/2023-09-20-20-55-14.png 400w,
/static/a8dd257f2c2824ac586bb3259271fce5/b3e51/2023-09-20-20-55-14.png 544w&quot;
        sizes=&quot;(max-width: 544px) 100vw, 544px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
4. &lt;code class=&quot;language-text&quot;&gt;Academic Honesty Policy&lt;/code&gt;に同意する&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;I agree to freeCodeCamp&apos;s Academic Honestry Policy.&lt;/code&gt;をクリック&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 99.50000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAC0ElEQVR42nVUy27TUBDtl7XrVt1RVSIBxAohUf4AfoBf6JplkVK1lQCVHazY0KSNH/EzTuLEsZ133Ac96Ix93UQti9GMJ9fnnnNm4o35YomnYjSeIOxHiIYJhnGKQRQjTvKcjsb433sbTzWXWSYvNi4NuG4brhdAN2y0gy4ct41ub4DFMpPgeZVLwMl0jnQ0wXgyk8wgw9l8gcl0hulsvlYzJ+lYzjEn6Uj6ArjIMpFl2R78dhe9MBJ2vXCAMIyETX8wlKAF/J11r+iz1+n2VwCXmdxEWZ4fiF+8gLfGyUgye/SPzxJxKr1hnBQ5xXgyXQFMx2hZHmzHh9ly0NRaMExHQtMt6LoFw7DzMG1hTxWrMRqXgEvxjrQpjxF0wlIqZXfkuY9ON+8TILfhAZAelwwpg1O0bB+tllvUHlqWK5msTdORzN8YV5oJz+8gSXJLHnnIdWgHPRmMCvrKVVHPQdCTCwgkz51QbGJdAnLnhsNEfNOUV6aNq6ZZ9pgvrwzJDDI3jJwtAcmw3EMy5C7Ztp+H4wtb22lLbYhUV3oEom88HxdSOV1irHnIpusG8H3K6Il0JYuDoDRKV30OhvuXD6ovi77GkB4qAJUJ7qu6TbBQPGVNhgQhEW6I+geVgFHh4apvrDU9r1VIT7PQaOjluXpDk3NKerk2+Z++Lwwpg3kQJXIrb1cM6BV3V3n26OOgADkAms7M1WDmkAjMmnJXB8a+4wXlO2trw01vNnPJXAUlsXGp46Ku4aLeRL2hS6jV4VmuEi/i4EpARXk1lMz8M5YbT49Yz+YP303Kvr27w9/7e2TX1zkgABwefsbW1h52d19je/sF9vbeoFJ5h0rlANXqe1SrB2X9vOjv77/F9s5L7Oy8wubmM3z4+IlQ2Li5vcWfiyaOjs5wfPwdtdo3nJyc4/TsHCenzD+kVs/SK3Kt9lXeOfpyhp+/fuP65gb/ADY6rX9VKvxEAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 09 20 20 56 30&quot;
        title=&quot;&quot;
        src=&quot;/static/64969b8b6d108ff4b26814af8dd07982/5a190/2023-09-20-20-56-30.png&quot;
        srcset=&quot;/static/64969b8b6d108ff4b26814af8dd07982/772e8/2023-09-20-20-56-30.png 200w,
/static/64969b8b6d108ff4b26814af8dd07982/e17e5/2023-09-20-20-56-30.png 400w,
/static/64969b8b6d108ff4b26814af8dd07982/5a190/2023-09-20-20-56-30.png 800w,
/static/64969b8b6d108ff4b26814af8dd07982/1b1d5/2023-09-20-20-56-30.png 876w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
5. スクロールし、&lt;code class=&quot;language-text&quot;&gt;Foundational C# with Microsoft&lt;/code&gt;の&lt;code class=&quot;language-text&quot;&gt;Claim Certification&lt;/code&gt;をクリックする&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;以上！お疲れ様でした(&lt;em&gt;^^&lt;/em&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 66.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAAChElEQVR42lWSTU8TYRDH9ztICAcunEWEeDAkJNoWDDEhrBoLiRoNPXgmfgETrhw8eudGJLRqGzRUCiXSNwq0FIq0aaktXcpuC23py/blb2aWrTDJP/PsPjPzzPyeR5id/YjR0WmMj7+CKM5gcnKGvShaeD02Ng2TyYxR0xQeG8wQn07h7ZvXeP7iPZ6JM5iYeAej0QyD4SXm5z9DsFg+oKdnEH19DzE4OIaBARN70tDQE/T2PkB39wDHdN3px937j2A2GzA8LGJkZBL9/UZ0dd3jmLm5TxAWF7+hXL5CNptDNnt2S+l0FpKUY52dnfO/jCQjnZFxeipxDu3Jch6SdA7b158QbLYfIGs2m2i327y+diiVyohEjhCNxnBw8AfxeBKVShU3Tctpc77D8QuC1brCG6raQKvV5gASBciygnA4iuPjBEKhA8RiCShKHq1Wi2Movtls8beqqrDbnRCs1x2SUUIgsAePJ8iFtrfDXIw6I4XDhzg6iiEUOkQ0GkcwGOKR9Ya0Dm+MTKcQq1QqzYyIYSZDkphfMvkXqVSGi9C3rBQ6qKignQrqDBuNRmdcGqFcrqBUumKOJLo48tVqjUWFKE4fn/JvjUwbxWIRl5eXqFQqKBQKHei6yPJ5BbVajfnpxfSCt0amAEVREAwGsbrqxO7uXgeF3onGOYZIZB+BQACJRJIPoLO0kZ3/b7ler+PiosiMTk4yyOVkfiL6beooisUyc6YLJM6FwoXGv65qBZeXVzoja+2jk6zBVpkfSe+WnoqOQDfa+25fhbCw8AU7O/vwenfg8+2y3G4fXC4PNja8cLm2sLb2m0Vrt9uL9XUPNjd98Pu1eL9/D1tb21hacuAfX5B48eY3srkAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 09 20 20 24 41&quot;
        title=&quot;&quot;
        src=&quot;/static/9ca65273b6573fc5e4927156e12822af/5a190/2023-09-20-20-24-41.png&quot;
        srcset=&quot;/static/9ca65273b6573fc5e4927156e12822af/772e8/2023-09-20-20-24-41.png 200w,
/static/9ca65273b6573fc5e4927156e12822af/e17e5/2023-09-20-20-24-41.png 400w,
/static/9ca65273b6573fc5e4927156e12822af/5a190/2023-09-20-20-24-41.png 800w,
/static/9ca65273b6573fc5e4927156e12822af/c1b63/2023-09-20-20-24-41.png 1200w,
/static/9ca65273b6573fc5e4927156e12822af/1628f/2023-09-20-20-24-41.png 1232w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
&lt;a href=&quot;https://www.freecodecamp.org/certification/yukimakura/foundational-c-sharp-with-microsoft&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;ゆきまくらの証明証書&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;ネットのニュース記事にて見つけて、早速飛び乗ってみました！&lt;br&gt;
MSLearnをまともに使ったことなく、当初勘違いでfreeCodeCampにてトロフィーを発行するものだと思っていました。(ちゃんと読めって話ですよね...)&lt;br&gt;
もちろん、日本語の紹介ブログや記事もないわけで最初戸惑いましたがなんとかクリアできました！ヤッタネ👍&lt;br&gt;
自称最速日本語紹介記事になったと思います。ええ。&lt;/p&gt;
&lt;p&gt;当方はある程度C#触れるので今回はめちゃくちゃ飛ばしながらやりましたが、&lt;br&gt;
(約1.5hぐらいで取得できました)&lt;br&gt;
学習コンテンツとしてはとても良質だと思います。&lt;br&gt;
それこそ、企業でも新卒の教育コンテンツとしても使ってもよし、趣味でやってもよしと活用の幅は広いと思います。&lt;br&gt;
&lt;strong&gt;しかも無料ネ！(激アツ)&lt;/strong&gt;&lt;br&gt;
ありがとうございます...MS様...&lt;/p&gt;
&lt;p&gt;そして今回改めてMSLearnの優秀さに気づけれました！&lt;br&gt;
Azureの勉強とかもMSLearnでガンガン勧めていこうかと。&lt;/p&gt;
&lt;p&gt;では今日はこんなところで！&lt;br&gt;
では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[AndroidスマホでWindowsノベルゲー(ギャルゲー)めっちゃ捗ろうぜ！(winlator)]]></title><description><![CDATA[日本語化版記事書きました！ Winlatorのコンテナ内を日本語化する 背景 買ったギャルゲーが消化しきれない!!

...皆さん、このような悩みは誰しも1度や2度、 10…]]></description><link>https://yukimakura.cc/AndroidスマホでWindowsノベルゲー(ギャルゲー)めっちゃ捗ろうぜ！(winlator)/</link><guid isPermaLink="false">https://yukimakura.cc/AndroidスマホでWindowsノベルゲー(ギャルゲー)めっちゃ捗ろうぜ！(winlator)/</guid><pubDate>Sat, 19 Aug 2023 23:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;日本語化版記事書きました&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96%E7%89%88%E8%A8%98%E4%BA%8B%E6%9B%B8%E3%81%8D%E3%81%BE%E3%81%97%E3%81%9F&quot; aria-label=&quot;日本語化版記事書きました permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;日本語化版記事書きました！&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://yukimakura.cc/Winlator%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%86%85%E3%82%92%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96%E3%81%99%E3%82%8B/Winlator%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E5%86%85%E3%82%92%E6%97%A5%E6%9C%AC%E8%AA%9E%E5%8C%96%E3%81%99%E3%82%8B/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Winlatorのコンテナ内を日本語化する&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;買ったギャルゲーが消化しきれない!!&lt;/strong&gt;
&lt;br/&gt;
...皆さん、このような悩みは誰しも1度や2度、&lt;br&gt;
100度ほど思ったことがあるのではないでしょうか？&lt;br&gt;
私は日頃思ってます (煩悩おい
&lt;br/&gt;
&lt;strong&gt;そんなみなさんに朗報です！今回はそのソリューションを提案します！！&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;これで世界平和です!(&lt;em&gt;^_^&lt;/em&gt;)&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;winlatorのご紹介&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#winlator%E3%81%AE%E3%81%94%E7%B4%B9%E4%BB%8B&quot; aria-label=&quot;winlatorのご紹介 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Winlatorのご紹介&lt;/h2&gt;
&lt;h3 id=&quot;winlatorとは&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#winlator%E3%81%A8%E3%81%AF&quot; aria-label=&quot;winlatorとは permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Winlatorとは&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/brunodev85/winlator&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Winlator&lt;/a&gt;とは、Android(Arm64でも可)上で、&lt;br&gt;
Wine環境をコンテナ化してくれる&lt;strong&gt;神アプリ&lt;/strong&gt;である。&lt;br&gt;
&lt;strong&gt;HWアクセラレーションもある程度効くし、ネットワーク通信も、音声も出力される。&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;wineとは&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#wine%E3%81%A8%E3%81%AF&quot; aria-label=&quot;wineとは permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Wineとは&lt;/h3&gt;
&lt;p&gt;Wineとは、WindowsアプリケーションをUnix/Linux系のOS上で動かせるようにするプログラムである。&lt;br&gt;
Wineはエミュレーターではなく、Windows APIを変換して動かす方式で、Mac OSやLinux、Androidで動作させることが出来る。
&lt;strong&gt;簡単に言えばWineは、Linux上でWindowsを動作させているのではなく、LinuxにWindowsと同じ挙動をさせているのである。&lt;/strong&gt;(Wikipedia引用)
→つまり、CPUエミュレーションを行っていないため、Windowsエミュレータに比べパフォーマンスの劣化が少ないことが特徴。&lt;/p&gt;
&lt;h2 id=&quot;動作確認環境&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D%E7%92%B0%E5%A2%83&quot; aria-label=&quot;動作確認環境 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;動作確認環境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Galaxy S23 Ultra (docomo) 512GB
&lt;ul&gt;
&lt;li&gt;CPU SoC: Snapdragon® 8 Gen 2 Mobile Platform for Galaxy&lt;/li&gt;
&lt;li&gt;RAM 12GB &amp;#x26; 仮想RAM8GB&lt;/li&gt;
&lt;li&gt;One UI 5.1&lt;/li&gt;
&lt;li&gt;Android 13&lt;/li&gt;
&lt;li&gt;ルート化はしていません。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;winlatorの導入2023-08-19現在&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#winlator%E3%81%AE%E5%B0%8E%E5%85%A52023-08-19%E7%8F%BE%E5%9C%A8&quot; aria-label=&quot;winlatorの導入2023 08 19現在 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Winlatorの導入(2023-08-19現在)&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/brunodev85/winlator/releases&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;WinlatorのAPK&lt;/a&gt;をスマホでダウンロードする。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/brunodev85/winlator/releases/tag/v1.0.0&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;main.1.com.winlator.obb&lt;/a&gt;をスマホでダウンロードする。&lt;/li&gt;
&lt;li&gt;WinlatorのAPKをインストールする。&lt;/li&gt;
&lt;li&gt;初回起動時にmain.1.com.winlator.obbの場所を聞かれるので、指定する。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;サクラの刻やってみた&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B5%E3%82%AF%E3%83%A9%E3%81%AE%E5%88%BB%E3%82%84%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%9F&quot; aria-label=&quot;サクラの刻やってみた permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;サクラの刻、やってみた！&lt;/h2&gt;
&lt;p&gt;発売日に買ったくせに全然進めれてないサクラの刻を捗らせてみようと思います&lt;br&gt;
このゲーム、ほとんどエッチシーンが無いので、内容的には割とどこでも出来ちゃうんですよね〜&lt;/p&gt;
&lt;h3 id=&quot;事前準備&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99&quot; aria-label=&quot;事前準備 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;事前準備&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;適当な手段で、スマホのDownloadフォルダーにサクラの刻のアプリケーションを入れる&lt;/li&gt;
&lt;li&gt;(できれば)OPムービー以降のセーブデータもスマホのDownloadフォルダーに入れとく
&lt;ul&gt;
&lt;li&gt;理由は後述&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;winlatorの設定&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#winlator%E3%81%AE%E8%A8%AD%E5%AE%9A&quot; aria-label=&quot;winlatorの設定 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Winlatorの設定&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;画面右上のの「＋」を押して、コンテナを作成する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGgABAAIDAQAAAAAAAAAAAAAAAAQFAQIDBv/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAGVmf0srVkgFAKDYvXnx//EABwQAAEFAAMAAAAAAAAAAAAAAAABAgMEFBESMP/aAAgBAQABBQJK/JlMo1vX00yi2JTTKf/EABYRAQEBAAAAAAAAAAAAAAAAABEAIP/aAAgBAwEBPwEjP//EABYRAQEBAAAAAAAAAAAAAAAAABEAIP/aAAgBAgEBPwFnP//EABoQAAICAwAAAAAAAAAAAAAAAAAyAaEwMUH/2gAIAQEABj8CGg3BzI1DUNR//8QAHhAAAgEDBQAAAAAAAAAAAAAAAAERIdHwMDFBUeH/2gAIAQEAAT8hjvisbE/AwIiPs26LUUtoSVoxof/aAAwDAQACAAMAAAAQQC88w8//xAAWEQEBAQAAAAAAAAAAAAAAAAARACD/2gAIAQMBAT8QEM//xAAWEQEBAQAAAAAAAAAAAAAAAAARACD/2gAIAQIBAT8QUs//xAAfEAACAgEEAwAAAAAAAAAAAAABEQAxYRAhQfCBwdH/2gAIAQEAAT8QZGBBIS3XN8wCoHnAwRMRs2+w4balb9wPmAJ5MFaitRWpABO+IyAL67TA74n/2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;topmenu&quot;
        title=&quot;&quot;
        src=&quot;/static/9c94ac15499d4ada356bbb31ce8a1f3b/4b190/topmenu.jpg&quot;
        srcset=&quot;/static/9c94ac15499d4ada356bbb31ce8a1f3b/e07e9/topmenu.jpg 200w,
/static/9c94ac15499d4ada356bbb31ce8a1f3b/066f9/topmenu.jpg 400w,
/static/9c94ac15499d4ada356bbb31ce8a1f3b/4b190/topmenu.jpg 800w,
/static/9c94ac15499d4ada356bbb31ce8a1f3b/47311/topmenu.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
2. 作成したコンテナの「︙」をタップし、Editをタップする
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAEEBQIG/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAG1N+bmg0koKAYHRuvPj//EAB0QAAEEAgMAAAAAAAAAAAAAAAABAgMUBBESMDH/2gAIAQEAAQUCTH2VSqNbxE96rMouRKWZT//EABYRAQEBAAAAAAAAAAAAAAAAABEAIP/aAAgBAwEBPwEjP//EABYRAAMAAAAAAAAAAAAAAAAAAAARIP/aAAgBAgEBPwEc/wD/xAAaEAACAgMAAAAAAAAAAAAAAAAAMgGhMDFB/9oACAEBAAY/AhoNwcyNQ1DUf//EAB8QAAIBAwUBAAAAAAAAAAAAAAABESFRkTBBYXHR8P/aAAgBAQABPyGO9ocVQrMBywER3NuiGq7uPSUvkJLyPmh//9oADAMBAAIAAwAAABAU7zzDz//EABYRAQEBAAAAAAAAAAAAAAAAABEAIP/aAAgBAwEBPxAQz//EABcRAAMBAAAAAAAAAAAAAAAAAAABESD/2gAIAQIBAT8QrKz/AP/EAB0QAAICAwEBAQAAAAAAAAAAAAERADEhQWHwEMH/2gAIAQEAAT8QZmAIhMrd7mUhuiAcGCaGyWYcNtSt/sOsrSnJeCoooK+ivpABPfIyAL84nB75P//Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;topmenu and conainermenu&quot;
        title=&quot;&quot;
        src=&quot;/static/6928b285f0b0e8dae3913260558a88c6/4b190/topmenu_and_conainermenu.jpg&quot;
        srcset=&quot;/static/6928b285f0b0e8dae3913260558a88c6/e07e9/topmenu_and_conainermenu.jpg 200w,
/static/6928b285f0b0e8dae3913260558a88c6/066f9/topmenu_and_conainermenu.jpg 400w,
/static/6928b285f0b0e8dae3913260558a88c6/4b190/topmenu_and_conainermenu.jpg 800w,
/static/6928b285f0b0e8dae3913260558a88c6/47311/topmenu_and_conainermenu.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
3. 以下のように設定する
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIFAQT/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB6yg6SykGMgMYKNActEAT/8QAGxAAAgIDAQAAAAAAAAAAAAAAAAEDFAIgQQT/2gAIAQEAAQUCrFUq6d16JpliUfolFNmj/8QAFhEBAQEAAAAAAAAAAAAAAAAAEQAg/9oACAEDAQE/ASM//8QAFhEBAQEAAAAAAAAAAAAAAAAAEQAg/9oACAECAQE/AWc//8QAGxAAAgIDAQAAAAAAAAAAAAAAAAExoSAhMkH/2gAIAQEABj8ClEolZ+HmGmdUdUadH//EAB8QAAICAQQDAAAAAAAAAAAAAAABESEQMUFR0aHw8f/aAAgBAQABPyG9eA9yH8RvvhiErkZDkQIjjJfQ7FP1CS6jRxTek//aAAwDAQACAAMAAAAQ6yXAw/8A/8QAGREAAgMBAAAAAAAAAAAAAAAAABEBECFB/9oACAEDAQE/EEENuH0//8QAGBEAAgMAAAAAAAAAAAAAAAAAABEBIEH/2gAIAQIBAT8QYakrD//EACAQAQACAgICAwEAAAAAAAAAAAEAESExQZFh8RBx4fD/2gAIAQEAAT8QoulaXFor84g092Z1R9HxvHVmjNb/ACeB3M3DcbFG/JK+sUuF5wS0SA8Qb1FCEIUeZwrO/XLIcv5xBkOVq29T/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;normalsetting1&quot;
        title=&quot;&quot;
        src=&quot;/static/e93dab916f0a1ef29cd706b0cbecdeea/4b190/normalsetting1.jpg&quot;
        srcset=&quot;/static/e93dab916f0a1ef29cd706b0cbecdeea/e07e9/normalsetting1.jpg 200w,
/static/e93dab916f0a1ef29cd706b0cbecdeea/066f9/normalsetting1.jpg 400w,
/static/e93dab916f0a1ef29cd706b0cbecdeea/4b190/normalsetting1.jpg 800w,
/static/e93dab916f0a1ef29cd706b0cbecdeea/47311/normalsetting1.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGQAAAwEBAQAAAAAAAAAAAAAAAAECBAUG/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAHU9zucB0iWaTVgE15+ztnnxP/EABwQAAICAgMAAAAAAAAAAAAAAAABAxQCBBAgQf/aAAgBAQABBQKsVSryj3uskyxKPYlFNmj/xAAWEQADAAAAAAAAAAAAAAAAAAAAESD/2gAIAQMBAT8BFP8A/8QAFhEAAwAAAAAAAAAAAAAAAAAAABEg/9oACAECAQE/ARz/AP/EABsQAAICAwEAAAAAAAAAAAAAAAABMTIQIaEw/9oACAEBAAY/ApRKLLE+WmW4W4afD//EACAQAAIBAwQDAAAAAAAAAAAAAAABERAhMUFRkdFx4fD/2gAIAQEAAT8hucB9kT9BN8vgl7uBtydxHmmtbTRXYYpugQXUYcU3xP/aAAwDAQACAAMAAAAQ9y0AIP8A/8QAGBEAAwEBAAAAAAAAAAAAAAAAAAERIEH/2gAIAQMBAT8QiIwr0//EABgRAAMBAQAAAAAAAAAAAAAAAAABESBB/9oACAECAQE/EKysOcP/xAAeEAEAAgICAwEAAAAAAAAAAAABABEhMUFhcZHwsf/aAAgBAQABPxAGpmNO5cuivvLN+zEj43XnMPTvx+9RKbLnkqUENOp5e0Mm7nMperqBWv2GpVt29VDUQIooo8ynxz96ghBv5xBkOVq2+p//2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;normalsetting2&quot;
        title=&quot;&quot;
        src=&quot;/static/050029fd70e9d7dcbabd0123e8aea3e1/4b190/normalsetting2.jpg&quot;
        srcset=&quot;/static/050029fd70e9d7dcbabd0123e8aea3e1/e07e9/normalsetting2.jpg 200w,
/static/050029fd70e9d7dcbabd0123e8aea3e1/066f9/normalsetting2.jpg 400w,
/static/050029fd70e9d7dcbabd0123e8aea3e1/4b190/normalsetting2.jpg 800w,
/static/050029fd70e9d7dcbabd0123e8aea3e1/47311/normalsetting2.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAUBAgMEBv/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHrGF0WDMMybASLnp5+46EAn//EAB0QAAICAQUAAAAAAAAAAAAAAAABAxQCBBARIEH/2gAIAQEAAQUCrFUqnu/IuyyTLEg9RKKbNH//xAAWEQEBAQAAAAAAAAAAAAAAAAARACD/2gAIAQMBAT8BIz//xAAWEQADAAAAAAAAAAAAAAAAAAAAESD/2gAIAQIBAT8BHP8A/8QAGxAAAgIDAQAAAAAAAAAAAAAAAAEyoSAhMUH/2gAIAQEABj8COoksPDqz0yVEqNOj/8QAIRAAAgEDAwUAAAAAAAAAAAAAAAEREDFBIZHhUXGB0fD/2gAIAQEAAT8h7lsz7InwCqzcTBpyvBniueaK3A9epK7NogvUWcU62n//2gAMAwEAAgADAAAAEGslwIP/AP/EABgRAQEAAwAAAAAAAAAAAAAAABEAARBB/9oACAEDAQE/EBCN4e3/xAAYEQADAQEAAAAAAAAAAAAAAAAAAREQQf/aAAgBAgEBPxCsouucP//EACAQAQACAQMFAQAAAAAAAAAAAAEAESExgdEQUWGR8EH/2gAIAQEAAT8Qc6a/DSwtFfnLOTKPB6G8sEgU3pnXi4MNKhnX7WoIVTMW2La3QDseoSldDtSEQABCn6gJaW/OIIoHz2gyHK1avqf/2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;normalsetting3&quot;
        title=&quot;&quot;
        src=&quot;/static/1a820d614b23034cb934e54682801366/4b190/normalsetting3.jpg&quot;
        srcset=&quot;/static/1a820d614b23034cb934e54682801366/e07e9/normalsetting3.jpg 200w,
/static/1a820d614b23034cb934e54682801366/066f9/normalsetting3.jpg 400w,
/static/1a820d614b23034cb934e54682801366/4b190/normalsetting3.jpg 800w,
/static/1a820d614b23034cb934e54682801366/47311/normalsetting3.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAECBQME/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAfW0LpmNMc7QLILDCG4wSf/EAB0QAAICAwADAAAAAAAAAAAAAAABERQCAxATMUH/2gAIAQEAAQUCrFUqn3s8ggXolTg01Y2M8uaFu2I//8QAFhEBAQEAAAAAAAAAAAAAAAAAEQAg/9oACAEDAQE/ASM//8QAFhEBAQEAAAAAAAAAAAAAAAAAEQAg/9oACAECAQE/AWc//8QAHBAAAgICAwAAAAAAAAAAAAAAAAERoSEyAjAx/9oACAEBAAY/AvUbI2XZhkPlRKdGHR//xAAeEAACAgICAwAAAAAAAAAAAAAAASExEXEQQZHh8P/aAAgBAQABPyGbxBo+iM/QX05p9mrFI9hSt+eJxLgTotMhJbKQa0KoT0KUWZqf/9oADAMBAAIAAwAAABDLKvyT/wD/xAAYEQEBAAMAAAAAAAAAAAAAAAARAAEgIf/aAAgBAwEBPxAQ0wnb/8QAGBEAAgMAAAAAAAAAAAAAAAAAABEBIEH/2gAIAQIBAT8QYakrD//EACEQAQACAgICAgMAAAAAAAAAAAEAESExUWFB0RChkcHw/9oACAEBAAE/EP2GSwtBff3LPZgFFLmzPwedQW2nnjuUq/r/ALiMDQlNZllg5dsHbDnaZ2b2889xl6geWiFrZMU5iSyBNJu4jsHY+uLgV0mP6giHK1bfxP/Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;normalsetting4&quot;
        title=&quot;&quot;
        src=&quot;/static/a2237e98b8645da0faf5482bc87c0143/4b190/normalsetting4.jpg&quot;
        srcset=&quot;/static/a2237e98b8645da0faf5482bc87c0143/e07e9/normalsetting4.jpg 200w,
/static/a2237e98b8645da0faf5482bc87c0143/066f9/normalsetting4.jpg 400w,
/static/a2237e98b8645da0faf5482bc87c0143/4b190/normalsetting4.jpg 800w,
/static/a2237e98b8645da0faf5482bc87c0143/47311/normalsetting4.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGQAAAwEBAQAAAAAAAAAAAAAAAAIFAwQG/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAesoOkwpgj5hoKKJFYtnnxP/xAAcEAACAgIDAAAAAAAAAAAAAAAAAQIUAxEEMDH/2gAIAQEAAQUCrFUq9GiPjW0oaaaZZyj5GUWaaP/EABYRAQEBAAAAAAAAAAAAAAAAABEAIP/aAAgBAwEBPwEjP//EABYRAQEBAAAAAAAAAAAAAAAAABEAIP/aAAgBAgEBPwFnP//EABsQAAICAwEAAAAAAAAAAAAAAAABMTIQIaEw/9oACAEBAAY/ApRKLLwjNmaZbhbhp8P/xAAgEAABBAICAwEAAAAAAAAAAAABABEhMRBBYdFxkaHh/9oACAEBAAE/IZx8k/XqT/wW7yLy00F4MEQ7chNBc4KDwHSDvUgh1KnA81X/2gAMAwEAAgADAAAAEOsqwMD/AP/EABkRAAIDAQAAAAAAAAAAAAAAAAARARAhQf/aAAgBAwEBPxBBDbh9P//EABkRAAIDAQAAAAAAAAAAAAAAAAARARAhQf/aAAgBAgEBPxBhjLlcP//EACAQAQACAQQDAQEAAAAAAAAAAAEAESExQXGRYcHwEFH/2gAIAQEAAT8QouhaVLSvzjudmW4iOS/w5jS6IXWsqB5jmc93q/2/UNuHTV49xZIBa6dS3KbyEVUZwMeJQ2R3iAU+/Eshu+cQZDlYNXqf/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;normalsetting5&quot;
        title=&quot;&quot;
        src=&quot;/static/bcf26f9bec77f3c12f2130a8922e7a75/4b190/normalsetting5.jpg&quot;
        srcset=&quot;/static/bcf26f9bec77f3c12f2130a8922e7a75/e07e9/normalsetting5.jpg 200w,
/static/bcf26f9bec77f3c12f2130a8922e7a75/066f9/normalsetting5.jpg 400w,
/static/bcf26f9bec77f3c12f2130a8922e7a75/4b190/normalsetting5.jpg 800w,
/static/bcf26f9bec77f3c12f2130a8922e7a75/47311/normalsetting5.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
4. 作成したコンテナの「︙」をタップし、Runをタップする
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGQABAAMBAQAAAAAAAAAAAAAAAAEEBQIG/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAG1N+bmg0koKAYHRuvPj//EAB0QAAEEAgMAAAAAAAAAAAAAAAABAgMUBBESMDH/2gAIAQEAAQUCTH2VSqNbxE96rMouRKWZT//EABYRAQEBAAAAAAAAAAAAAAAAABEAIP/aAAgBAwEBPwEjP//EABYRAAMAAAAAAAAAAAAAAAAAAAARIP/aAAgBAgEBPwEc/wD/xAAaEAACAgMAAAAAAAAAAAAAAAAAMgGhMDFB/9oACAEBAAY/AhoNwcyNQ1DUf//EAB8QAAIBAwUBAAAAAAAAAAAAAAABESFRkTBBYXHR8P/aAAgBAQABPyGO9ocVQrMBywER3NuiGq7uPSUvkJLyPmh//9oADAMBAAIAAwAAABAU7zzDz//EABYRAQEBAAAAAAAAAAAAAAAAABEAIP/aAAgBAwEBPxAQz//EABcRAAMBAAAAAAAAAAAAAAAAAAABESD/2gAIAQIBAT8QrKz/AP/EAB0QAAICAwEBAQAAAAAAAAAAAAERADEhQWHwEMH/2gAIAQEAAT8QZmAIhMrd7mUhuiAcGCaGyWYcNtSt/sOsrSnJeCoooK+ivpABPfIyAL84nB75P//Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;topmenu and conainermenu&quot;
        title=&quot;&quot;
        src=&quot;/static/6928b285f0b0e8dae3913260558a88c6/4b190/topmenu_and_conainermenu.jpg&quot;
        srcset=&quot;/static/6928b285f0b0e8dae3913260558a88c6/e07e9/topmenu_and_conainermenu.jpg 200w,
/static/6928b285f0b0e8dae3913260558a88c6/066f9/topmenu_and_conainermenu.jpg 400w,
/static/6928b285f0b0e8dae3913260558a88c6/4b190/topmenu_and_conainermenu.jpg 800w,
/static/6928b285f0b0e8dae3913260558a88c6/47311/topmenu_and_conainermenu.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
5. サクラの刻のセーブデータをDドライブからCドライブに移行しておく&lt;br&gt;
- &lt;strong&gt;このDドライブは。スマホのDownloadフォルダーがマッピングされている（超便利）&lt;/strong&gt;&lt;br&gt;
- 詳細は割愛(ざっくりいうと、ユーザーの中のAppDataのRoamingにある)&lt;br&gt;
- &lt;strong&gt;日本語は文字化けしているが気にせず頑張る&lt;/strong&gt;&lt;br&gt;
6. エクスプローラーが開くので、Dドライブ→サクラの刻のexeを開く&lt;br&gt;
- このとき、インストーラーではなく、直接ゲームのexeを起動すること(インストーラーは多分起動しない？)&lt;br&gt;
7. &lt;strong&gt;Enjoy!&lt;/strong&gt;&lt;br&gt;
- 当方の環境では、平均50FPSぐらいで安定。&lt;br&gt;
- 音声は、DX ComponentsをすべてNativeにすることで音切れなく安定&lt;br&gt;
- Builtinにすると、時々ポツポツ音切れが見られる&lt;/p&gt;
&lt;h2 id=&quot;現状yukimakuraが直面してる問題&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%8F%BE%E7%8A%B6yukimakura%E3%81%8C%E7%9B%B4%E9%9D%A2%E3%81%97%E3%81%A6%E3%82%8B%E5%95%8F%E9%A1%8C&quot; aria-label=&quot;現状yukimakuraが直面してる問題 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;現状、yukimakuraが直面してる問題&lt;/h2&gt;
&lt;h3 id=&quot;opムービーで死ぬ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#op%E3%83%A0%E3%83%BC%E3%83%93%E3%83%BC%E3%81%A7%E6%AD%BB%E3%81%AC&quot; aria-label=&quot;opムービーで死ぬ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;OPムービーで死ぬ&lt;/h3&gt;
&lt;p&gt;これは、なかなか難しい問題です...&lt;br&gt;
多分、Winlatorの問題ではなくWineの問題かと思われ...&lt;br&gt;
実は、macOSのWineにて以前Wine上でサクラの刻やってたのですが、&lt;br&gt;
&lt;strong&gt;ここでも、ムービーに切り替わると死んでました...&lt;/strong&gt;&lt;br&gt;
まぁ、しゃーなしで、OPムービーを超えたセーブデータを読み込むしか無いですね...&lt;br&gt;
↓途中まで再生できるが、毎回ここで死ぬ&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 46.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAJABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDBAX/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAABpbKi88YT/8QAGxAAAwACAwAAAAAAAAAAAAAAAQMEAjMREjH/2gAIAQEAAQUCiICku7YVnl0uhHtm/wD/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAEDAQE/AT//xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAbEAACAQUAAAAAAAAAAAAAAAAAAQIQESExgf/aAAgBAQAGPwJGbaoiRw//xAAcEAACAgIDAAAAAAAAAAAAAAAAARGxIWExQXH/2gAIAQEAAT8hSeJh8+sanqye5Jl6RfKtlQ//2gAMAwEAAgADAAAAEEwP/8QAFhEBAQEAAAAAAAAAAAAAAAAAAQAh/9oACAEDAQE/EAyb/8QAFBEBAAAAAAAAAAAAAAAAAAAAEP/aAAgBAgEBPxA//8QAHBAAAgIDAQEAAAAAAAAAAAAAACEBETGhsUGR/9oACAEBAAE/EHmJJVoghpyLMYPscKP9Lf7k0gyF/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;movie freeze&quot;
        title=&quot;&quot;
        src=&quot;/static/8ac8af1b914621274fe3d71f7714ab7a/4b190/movie_freeze.jpg&quot;
        srcset=&quot;/static/8ac8af1b914621274fe3d71f7714ab7a/e07e9/movie_freeze.jpg 200w,
/static/8ac8af1b914621274fe3d71f7714ab7a/066f9/movie_freeze.jpg 400w,
/static/8ac8af1b914621274fe3d71f7714ab7a/4b190/movie_freeze.jpg 800w,
/static/8ac8af1b914621274fe3d71f7714ab7a/e5166/movie_freeze.jpg 1200w,
/static/8ac8af1b914621274fe3d71f7714ab7a/b17f8/movie_freeze.jpg 1600w,
/static/8ac8af1b914621274fe3d71f7714ab7a/fb7c9/movie_freeze.jpg 2316w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;br&gt;
↓以下、ムービーを途中まで再生できた設定&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGgAAAwADAQAAAAAAAAAAAAAAAAIFAQMEBv/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHrKDpMKYI+rJsMCq0Bi4efE//EAB0QAAICAgMBAAAAAAAAAAAAAAABAxQCQQQQESD/2gAIAQEAAQUCrFUq/G+/BGxZJliUfIlFNmj/xAAWEQEBAQAAAAAAAAAAAAAAAAARACD/2gAIAQMBAT8BIz//xAAWEQEBAQAAAAAAAAAAAAAAAAARACD/2gAIAQIBAT8BZz//xAAbEAACAgMBAAAAAAAAAAAAAAAAATEyICGhQf/aAAgBAQAGPwKUSiyzg8w0y3C3DT4f/8QAHxAAAQQCAgMAAAAAAAAAAAAAAAERITEQkdHhQWFx/9oACAEBAAE/IWdR66h/Qebyj5NNNnxsIbCBLgWRHuIRJxFOI81P/9oADAMBAAIAAwAAABDrIsDw/wD/xAAZEQACAwEAAAAAAAAAAAAAAAAAEQEQIUH/2gAIAQMBAT8QQQ24fT//xAAZEQACAwEAAAAAAAAAAAAAAAAAEQEQIUH/2gAIAQIBAT8QYYy5XD//xAAjEAEAAgIBAgcBAAAAAAAAAAABABEhMWFBkRBRcbHB0fDx/9oACAEBAAE/EFsJ8K+4LYh5x6ncwXGxwl+B6zYyF1uVA5ir1tu3lcpVYq9lfLEKAFt4ZYJarzuCtUxAhCGnrKLDLn+csgN/nEOQ5Wrb2n//2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;moviesetting1&quot;
        title=&quot;&quot;
        src=&quot;/static/e2ecb4ff0bf1dc27bc744a73d39daa8a/4b190/moviesetting1.jpg&quot;
        srcset=&quot;/static/e2ecb4ff0bf1dc27bc744a73d39daa8a/e07e9/moviesetting1.jpg 200w,
/static/e2ecb4ff0bf1dc27bc744a73d39daa8a/066f9/moviesetting1.jpg 400w,
/static/e2ecb4ff0bf1dc27bc744a73d39daa8a/4b190/moviesetting1.jpg 800w,
/static/e2ecb4ff0bf1dc27bc744a73d39daa8a/47311/moviesetting1.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAECBAUG/8QAFgEBAQEAAAAAAAAAAAAAAAAAAAEC/9oADAMBAAIQAxAAAAG07zuaBoko01QAS5+ZsmAJ/8QAHRAAAgIBBQAAAAAAAAAAAAAAAAEDFCACBBITQf/aAAgBAQABBQKsVSrh7nyTLEo9xKd2tH//xAAWEQADAAAAAAAAAAAAAAAAAAAAESD/2gAIAQMBAT8BFP8A/8QAFhEAAwAAAAAAAAAAAAAAAAAAABEg/9oACAECAQE/ARz/AP/EABsQAAICAwEAAAAAAAAAAAAAAAABMTIQIaEw/9oACAEBAAY/ApRKLLE+WmW4W4afD//EACAQAAIBAwQDAAAAAAAAAAAAAAABERAhMVFxkdFBYeH/2gAIAQEAAT8hucWD14ifwJvl8EvVwJ6m4jenmtposMYpugQXULHFN8T/2gAMAwEAAgADAAAAEPflPCP/AP/EABgRAAMBAQAAAAAAAAAAAAAAAAABESBB/9oACAEDAQE/EIiMK9P/xAAYEQADAQEAAAAAAAAAAAAAAAAAAREgQf/aAAgBAgEBPxCsrDnD/8QAHhABAAIBBQEBAAAAAAAAAAAAAQARMSFBYXGR8LH/2gAIAQEAAT8Qwj2rDLi0r5yzPpiR7bjvNHhz1+8lY2XXcqDqLF7Tt6i3vc3lLxdQKx+xmS7eKxDEIUUUUd5T6dfvEEIM/OkKQZWrL5P/2Q==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;moviesetting2&quot;
        title=&quot;&quot;
        src=&quot;/static/240ce955ecc34fced916c7ae474bdef8/4b190/moviesetting2.jpg&quot;
        srcset=&quot;/static/240ce955ecc34fced916c7ae474bdef8/e07e9/moviesetting2.jpg 200w,
/static/240ce955ecc34fced916c7ae474bdef8/066f9/moviesetting2.jpg 400w,
/static/240ce955ecc34fced916c7ae474bdef8/4b190/moviesetting2.jpg 800w,
/static/240ce955ecc34fced916c7ae474bdef8/47311/moviesetting2.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAUBAgMEBv/EABUBAQEAAAAAAAAAAAAAAAAAAAAB/9oADAMBAAIQAxAAAAHrGF0WDMMybASLnp5+46EAn//EAB0QAAICAQUAAAAAAAAAAAAAAAABAxQCBBARIEH/2gAIAQEAAQUCrFUqnu/IuyyTLEg9RKKbNH//xAAWEQEBAQAAAAAAAAAAAAAAAAARACD/2gAIAQMBAT8BIz//xAAWEQADAAAAAAAAAAAAAAAAAAAAESD/2gAIAQIBAT8BHP8A/8QAGxAAAgIDAQAAAAAAAAAAAAAAAAEyoSAhMUH/2gAIAQEABj8COoksPDqz0yVEqNOj/8QAIBAAAgEDBAMAAAAAAAAAAAAAAAEREDFBIVGR4YHR8P/aAAgBAQABPyG6JXDPsifQKrNxMGnK8Geq57orcD13JXZxEF6izinW0//aAAwDAQACAAMAAAAQSyXAg/8A/8QAGBEBAQADAAAAAAAAAAAAAAAAEQABEEH/2gAIAQMBAT8QEI3h7f/EABgRAAMBAQAAAAAAAAAAAAAAAAABERBB/9oACAECAQE/EKyi65w//8QAIBABAAIBAwUBAAAAAAAAAAAAAQARMSGB8EFRYZHREP/aAAgBAQABPxBvZX4lYWivzln0ynQ5yOn4bywSBTeNc/Lgw0qGueZqCFU1i2xbW6Adj1CUrodqQiAAIU6oCWlvHSCKBx7QZDlasvqf/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;moviesetting3&quot;
        title=&quot;&quot;
        src=&quot;/static/d04bccbf8abde373dd7e403c670a4fdd/4b190/moviesetting3.jpg&quot;
        srcset=&quot;/static/d04bccbf8abde373dd7e403c670a4fdd/e07e9/moviesetting3.jpg 200w,
/static/d04bccbf8abde373dd7e403c670a4fdd/066f9/moviesetting3.jpg 400w,
/static/d04bccbf8abde373dd7e403c670a4fdd/4b190/moviesetting3.jpg 800w,
/static/d04bccbf8abde373dd7e403c670a4fdd/47311/moviesetting3.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAUBAgT/xAAVAQEBAAAAAAAAAAAAAAAAAAAAAf/aAAwDAQACEAMQAAAB9ah2kxRHPWAwu5DFpCJ//8QAHBAAAgIDAQEAAAAAAAAAAAAAAAERFAIQEwNB/9oACAEBAAEFAqxVKp93OoI3KlNNWPRnXNHbNH//xAAWEQEBAQAAAAAAAAAAAAAAAAARACD/2gAIAQMBAT8BIz//xAAWEQEBAQAAAAAAAAAAAAAAAAARACD/2gAIAQIBAT8BZz//xAAcEAACAgIDAAAAAAAAAAAAAAAAATGhAhEhMDL/2gAIAQEABj8ClEo9Lsk08qNp0cOj/8QAHhAAAgICAgMAAAAAAAAAAAAAAAEhMUFxEPARgZH/2gAIAQEAAT8hJ3I6EenDM5NWWPYUrf0VDiXAnRaZGEhspBrQqhPQVcXman//2gAMAwEAAgADAAAAEEgq/ND/AP/EABgRAQEAAwAAAAAAAAAAAAAAABEAASAh/9oACAEDAQE/EBDTCdv/xAAYEQACAwAAAAAAAAAAAAAAAAAAEQEgQf/aAAgBAgEBPxBhqSsP/8QAIBABAAICAgMAAwAAAAAAAAAAAQARITFBUWGRoRDR8P/aAAgBAQABPxBS0KdUwRor4uxfPvwB7PJn8b8QavSzyHcpV/P+6iiwJWMyywcvLB2w52mQW9vfb3GXqBy0QtbJinMeXQDSbtiOwdj+uLgV0mP5LIGVq2+p/9k=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;moviesetting4&quot;
        title=&quot;&quot;
        src=&quot;/static/609dcf381a0cbb6790389599ed25acfd/4b190/moviesetting4.jpg&quot;
        srcset=&quot;/static/609dcf381a0cbb6790389599ed25acfd/e07e9/moviesetting4.jpg 200w,
/static/609dcf381a0cbb6790389599ed25acfd/066f9/moviesetting4.jpg 400w,
/static/609dcf381a0cbb6790389599ed25acfd/4b190/moviesetting4.jpg 800w,
/static/609dcf381a0cbb6790389599ed25acfd/47311/moviesetting4.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 214.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAArABQDASIAAhEBAxEB/8QAGQAAAwEBAQAAAAAAAAAAAAAAAAIFAwQG/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAesoOkwpgj5hoKKJFYtnnxP/xAAeEAACAQMFAAAAAAAAAAAAAAAAARQCAxEEECAxQf/aAAgBAQABBQKMRSLw93wU9NZSow00yTdHqLor1aP/xAAWEQEBAQAAAAAAAAAAAAAAAAARACD/2gAIAQMBAT8BIz//xAAWEQEBAQAAAAAAAAAAAAAAAAARACD/2gAIAQIBAT8BZz//xAAbEAACAgMBAAAAAAAAAAAAAAAAATEyECGhMP/aAAgBAQAGPwKUSiy8IzZmmW4W4afD/8QAHxAAAgEEAwEBAAAAAAAAAAAAAAERECExYUHR4XGR/9oACAEBAAE/IYeRr+RPwOc1U1RfCPhQtExtEQ5NMT2HwKXqEl1GHFN8T//aAAwDAQACAAMAAAAQ6yLAwP8A/8QAGREAAgMBAAAAAAAAAAAAAAAAABEBECFB/9oACAEDAQE/EEENuH0//8QAGREAAgMBAAAAAAAAAAAAAAAAABEBECFB/9oACAECAQE/EGGMuVw//8QAIRABAAICAgICAwAAAAAAAAAAAQARITFhcUGRwfAQUdH/2gAIAQEAAT8QWwnwr+wWxDzim/ZguNjhL/B3NjIXW5UDmOZz3e3938Q8cOtvXzFkgFrr1LcpvYRVRnQx4lDZHzEAp9+JZDy+uIMhysG31P/Z&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;moviesetting5&quot;
        title=&quot;&quot;
        src=&quot;/static/60b9703cd1d3851193541c55bce534f0/4b190/moviesetting5.jpg&quot;
        srcset=&quot;/static/60b9703cd1d3851193541c55bce534f0/e07e9/moviesetting5.jpg 200w,
/static/60b9703cd1d3851193541c55bce534f0/066f9/moviesetting5.jpg 400w,
/static/60b9703cd1d3851193541c55bce534f0/4b190/moviesetting5.jpg 800w,
/static/60b9703cd1d3851193541c55bce534f0/47311/moviesetting5.jpg 1080w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;アプリを一瞬でもバックグラウンドにするとマウスカーソルが死ぬクリックできなくなる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%B8%80%E7%9E%AC%E3%81%A7%E3%82%82%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E3%81%AB%E3%81%99%E3%82%8B%E3%81%A8%E3%83%9E%E3%82%A6%E3%82%B9%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%81%8C%E6%AD%BB%E3%81%AC%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8B&quot; aria-label=&quot;アプリを一瞬でもバックグラウンドにするとマウスカーソルが死ぬクリックできなくなる permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;アプリを一瞬でもバックグラウンドにすると、マウスカーソルが死ぬ(クリックできなくなる)&lt;/h3&gt;
&lt;p&gt;これ、結構困ってます。&lt;br&gt;
現状だと、うっかりブラウザや他のチャットアプリなど切り替えると、&lt;br&gt;
&lt;strong&gt;クリックが効かなくなる&lt;/strong&gt;んですよね...&lt;br&gt;
これ私だけ？？🤔&lt;/p&gt;
&lt;h3 id=&quot;おまけsteamはインストール出来たけど肝心のsteam自体が激重&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%8A%E3%81%BE%E3%81%91steam%E3%81%AF%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E5%87%BA%E6%9D%A5%E3%81%9F%E3%81%91%E3%81%A9%E8%82%9D%E5%BF%83%E3%81%AEsteam%E8%87%AA%E4%BD%93%E3%81%8C%E6%BF%80%E9%87%8D&quot; aria-label=&quot;おまけsteamはインストール出来たけど肝心のsteam自体が激重 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;(おまけ)Steamはインストール出来たけど、肝心のSteam自体が激重&lt;/h3&gt;
&lt;p&gt;ついでに、NeedyGirl Overdoseもスマホで出来たらな。と思って、&lt;br&gt;
挑戦してみたのですが、&lt;strong&gt;Steamが重すぎてコンテンツのインストールが大変でした。&lt;/strong&gt;&lt;br&gt;
スマホでいつでも超絶最かわ天使ちゃんを拝みたいので、もう少し粘ります。&lt;br&gt;
続報あったら、追記か新しく記事起こすかも。&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;まぁぁぁぁぁじで感動した&lt;/strong&gt;&lt;br&gt;
これ、ガチで長年の夢だったんですよね。&lt;br&gt;
それこそ、6年越しレベル。&lt;br&gt;
昔、AsusがZenfone2というスマホを販売していて、自分がそれだったのですが、&lt;br&gt;
そいつは当時珍しくRAM4GB積んでいて、かつAtom搭載だったんです。&lt;br&gt;
正直爆熱だわ、電池持ちクソ悪いわでいい印象がほぼなかったスマホでしたが、&lt;br&gt;
唯一Atomということで、Winアプリを動かせれるんじゃないかと期待させられました。&lt;br&gt;
一応、CrossOverというアプリが自分が求めるものに近かったのですが、&lt;br&gt;
さすがAtom、実用皆無でした...&lt;em&gt;(:3」∠)&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;それが！！！いよいよ！！！！スナドラのAndroidで動くわけです！！！！&lt;/strong&gt;
&lt;strong&gt;全俺が泣いた(´；ω；｀)ｳｯ…&lt;/strong&gt;&lt;br&gt;
&lt;del&gt;Windows11(aarch64版)のx64エミュレーションなんて要らんかったんや&lt;/del&gt;&lt;br&gt;
では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ユニットテストについて学んだ事や思う事まとめ(LT会のパワポ)]]></title><description><![CDATA[背景 第2回ITたこ焼きの会にて発表したスライドです。 自分語りですが、ユニットテストと言われて初学者はすぐにピンと来る方は、 案外少ないのでは無いでしょうか？ 少なくとも、自分はあまりピンときませんでした。 その中で、一筋の光明として出会ったのが、Unit Testing…]]></description><link>https://yukimakura.cc/ユニットテストについて学んだ事や思う事まとめ(LT会のパワポ)/</link><guid isPermaLink="false">https://yukimakura.cc/ユニットテストについて学んだ事や思う事まとめ(LT会のパワポ)/</guid><pubDate>Sat, 19 Aug 2023 23:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h2&gt;
&lt;p&gt;第2回ITたこ焼きの会にて発表したスライドです。&lt;br&gt;
自分語りですが、ユニットテストと言われて初学者はすぐにピンと来る方は、&lt;br&gt;
案外少ないのでは無いでしょうか？&lt;br&gt;
少なくとも、自分はあまりピンときませんでした。&lt;br&gt;
その中で、一筋の光明として出会ったのが、&lt;a href=&quot;https://www.manning.com/books/unit-testing&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Unit Testing(Manning社)&lt;/a&gt;、&lt;a href=&quot;https://amzn.asia/d/iC60MNC&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;日本語版&lt;/a&gt;という本でした。&lt;br&gt;
この本が教えてくれたこととして、自分的に一番トキメイたことは、&lt;br&gt;
ユニットテストは、時としてアーキテクチャの見直しの機会や気付きを与えてくれることでした。&lt;br&gt;
システム設計の世界は正解がない分、奥深く、そして個性が出る世界だな。としみじみ考えさせられました。&lt;br&gt;
このスライドをみて、少しでもこの世界を味わっていただける方がおられると幸いです（何様だ！笑&lt;/p&gt;
&lt;h2 id=&quot;スライド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89&quot; aria-label=&quot;スライド permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スライド&lt;/h2&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 59.27083333333333%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://docs.google.com/presentation/d/e/2PACX-1vSn093Yqj5BVqzYkE4fkb55nqRB-eQlMpdvqreGpo3qAtsHvHgE3Hh38gWPt-6MDI9udXYxCyxA5HXk/embed?start=false&amp;amp;loop=false&amp;amp;delayms=3000&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot; style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;</content:encoded></item><item><title><![CDATA[CSharpのgRPCサーバーでUDSとTCP同時受けする]]></title><description><![CDATA[TL;DR Kestrelの設定を変更すればOK MSのソースを真似ればできる デモソースはここ(ゆきまくらのGithub) ざっくり解説 サーバーサイド Kestrelの設定にて、(16〜19行目)でUDSの受け設定をし、 (20〜23行目)でTCP…]]></description><link>https://yukimakura.cc/CSharpのgRPCサーバーでUDSとTCP同時受けする/</link><guid isPermaLink="false">https://yukimakura.cc/CSharpのgRPCサーバーでUDSとTCP同時受けする/</guid><pubDate>Tue, 08 Aug 2023 08:15:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;tldr&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#tldr&quot; aria-label=&quot;tldr permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Kestrelの設定を変更すればOK
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/ja-jp/aspnet/core/grpc/interprocess-uds?view=aspnetcore-7.0&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;MSのソースを真似ればできる&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/yukimakura/grpc_uds_tcp_server_dotnet_demo/tree/main&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;デモソースはここ(ゆきまくらのGithub)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;ざっくり解説&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%96%E3%81%A3%E3%81%8F%E3%82%8A%E8%A7%A3%E8%AA%AC&quot; aria-label=&quot;ざっくり解説 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ざっくり解説&lt;/h2&gt;
&lt;h3 id=&quot;サーバーサイド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89&quot; aria-label=&quot;サーバーサイド permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;サーバーサイド&lt;/h3&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;Program.cs&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;csharp&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-csharp line-numbers&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;serverside&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Services&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;grpcschema&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;Microsoft&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;AspNetCore&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Server&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Kestrel&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Core&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; builder &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; WebApplication&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;CreateBuilder&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;args&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Additional configuration is required to successfully run gRPC on macOS.&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// For instructions on how to configure Kestrel and gRPC clients on macOS, visit https://go.microsoft.com/fwlink/?linkid=2099682&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Add services to the container.&lt;/span&gt;
builder&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Services&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;AddGrpc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; udsAddress &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Combine&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Path&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;GetTempPath&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;socket.tmp&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;builder&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;WebHost&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ConfigureKestrel&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;serverOptions &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    serverOptions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ListenUnixSocket&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;udsAddress&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; listenOptions &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        listenOptions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Protocols &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; HttpProtocols&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Http2&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    serverOptions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Listen&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;System&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Net&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;IPAddress&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Parse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;0.0.0.0&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;18686&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ListenOptions &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        ListenOptions&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Protocols &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; HttpProtocols&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Http2&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; app &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; builder&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Build&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;



&lt;span class=&quot;token comment&quot;&gt;// Configure the HTTP request pipeline.&lt;/span&gt;
app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;MapGrpcService&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;GreeterService&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;MapGet&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;/&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

app&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Run&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Kestrelの設定にて、&lt;code class=&quot;language-text&quot;&gt;ListenUnixSocket&lt;/code&gt;(16〜19行目)でUDSの受け設定をし、&lt;br&gt;
&lt;code class=&quot;language-text&quot;&gt;Listen&lt;/code&gt;(20〜23行目)でTCPの受け設定をしている。&lt;/p&gt;
&lt;h3 id=&quot;クライアントサイド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%B5%E3%82%A4%E3%83%89&quot; aria-label=&quot;クライアントサイド permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;クライアントサイド&lt;/h3&gt;
&lt;h4 id=&quot;tcp&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#tcp&quot; aria-label=&quot;tcp permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;TCP&lt;/h4&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;UnitTest.cs(一部抜粋)&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;csharp&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-csharp line-numbers&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;Fact&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;TCPTest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; channel &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; GrpcChannel&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ForAddress&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;TCPAddress&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; req &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;grpcschema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;HelloRequest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;てぃーしーぴぃそけっと&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; client &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;grpcschema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Greeter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GreeterClient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;channel&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; reply &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; client&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;SayHelloAsync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;req&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    reply&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Message&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Should&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Be&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Hello &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; req&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;５行目でTCPでのサーバーのアドレスを設定している&lt;/p&gt;
&lt;h4 id=&quot;udsunixdomainsocket&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#udsunixdomainsocket&quot; aria-label=&quot;udsunixdomainsocket permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;UDS(UnixDomainSocket)&lt;/h4&gt;
&lt;p&gt;クライアントサイドのUDSでは、&lt;br&gt;
&lt;strong&gt;UDSのコールバック処理を別途用意する必要がある&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;UnixDomainSocketsConnectionFactory.cs&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;csharp&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-csharp line-numbers&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;System&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Net&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;System&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Net&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Sockets&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;clientside&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;UnixDomainSocketsConnectionFactory&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;readonly&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;EndPoint&lt;/span&gt; endPoint&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;UnixDomainSocketsConnectionFactory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;EndPoint&lt;/span&gt; endPoint&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;endPoint &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; endPoint&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;ValueTask&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;Stream&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ConnectAsync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;SocketsHttpConnectionContext&lt;/span&gt; _&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token class-name&quot;&gt;CancellationToken&lt;/span&gt; cancellationToken &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; socket &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;Socket&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;AddressFamily&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Unix&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; SocketType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Stream&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ProtocolType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Unspecified&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;try&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; socket&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ConnectAsync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;endPoint&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; cancellationToken&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ConfigureAwait&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;NetworkStream&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;socket&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;catch&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            socket&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Dispose&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;UnitTest.cs(一部抜粋)&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;csharp&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-csharp line-numbers&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;Fact&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;Task&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;UDSTest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; udsEndPoint &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;UnixDomainSocketEndPoint&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;UDSAddress&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; connectionFactory &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;UnixDomainSocketsConnectionFactory&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;udsEndPoint&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; socketsHttpHandler &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;SocketsHttpHandler&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        ConnectCallback &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; connectionFactory&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;ConnectAsync&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; channel &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; GrpcChannel&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ForAddress&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        TCPAddress&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;//←これはなんでもいい(無視される)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;            &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;GrpcChannelOptions&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        HttpHandler &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; socketsHttpHandler&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; req &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;grpcschema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;HelloRequest&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ゆにっくすどめいんそけっと&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; client &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;grpcschema&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Greeter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;GreeterClient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;channel&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; reply &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; client&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;SayHelloAsync&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;req&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    reply&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Message&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Should&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Be&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Hello &quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; req&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Name&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;11行目でTCPのアドレスが引数として要求されるが、
無視されるので、適当な値をいれる。&lt;/p&gt;
&lt;h2 id=&quot;〆と注意点&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86%E3%81%A8%E6%B3%A8%E6%84%8F%E7%82%B9&quot; aria-label=&quot;〆と注意点 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆と注意点&lt;/h2&gt;
&lt;p&gt;注意点として、Kestrelから&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-text line-numbers&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;warn: Microsoft.AspNetCore.Server.Kestrel[0]
      Overriding address(es) &apos;http://localhost:5151&apos;. Binding to endpoints defined via IConfiguration and/or UseKestrel() instead.&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;と警告が吐かれる。&lt;br&gt;
まぁ、内容を読めば、「せやな」としか言いようが無いので...&lt;br&gt;
&lt;br/&gt;
案外、簡単かつお手軽にUDS対応が出来ることがわかったと思います。&lt;br&gt;
また、.Net7からUDSはお手軽に使えるようになりましたが、&lt;br&gt;
.Net8からは名前付きパイプ経由も出来るようになるらしいです。&lt;br&gt;
選択肢が増えることは良いことだぁ(&lt;em&gt;^^&lt;/em&gt;)&lt;br&gt;
あと、タイトルだけCSharpとなっているのは、&lt;br&gt;
なんか#を入れるとルーティングが狂うからです。（おい&lt;br&gt;
では(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[DependencyInjectionのすゝめ(LT会のパワポ)]]></title><description><![CDATA[背景 エンジニアの輪 at 大阪(第10回)にて発表させて頂いた資料です。 DependencyInjection(以下DI…]]></description><link>https://yukimakura.cc/DependencyInjectionのすゝめ(LT会のパワポ)/</link><guid isPermaLink="false">https://yukimakura.cc/DependencyInjectionのすゝめ(LT会のパワポ)/</guid><pubDate>Sun, 06 Aug 2023 18:15:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h2&gt;
&lt;p&gt;エンジニアの輪 at 大阪(第10回)にて発表させて頂いた資料です。&lt;br&gt;
DependencyInjection(以下DIと略す)コンテナは様々な言語やフレームワークで標準サポートされているようですが、&lt;br&gt;
今回の発表会で、「とりあえず使ってはいるのだけれど、正直旨味がいまいちピンとこない」との方がチラホラ見られました。&lt;br&gt;
それを聞いて私も、&lt;strong&gt;めっっっちゃ気持ち分かるわ...&lt;/strong&gt; となりました(^_^;)&lt;br&gt;
ずるい言い方をすると、結局のところはDIを意識して設計・製作しないと腹落ちしないんですよね。&lt;br&gt;
出来るなら、まずDIで実装してみる。→どこがDIか、具体的になぜどこからどう注入されるのかというのを分かる人から聞くのがやはり効率が良いのでしょうかね？&lt;br&gt;
&lt;br/&gt;
今回のLT会でドメイン駆動設計(以下DDDと略す)のテーマのあったのですが、私は今のところDDDの本質や旨味を腹落ちしきってないです。&lt;br&gt;
ですが、DDDの経験者さんも結局抽象的な概念で、ぶっちゃけ哲学といえば哲学だからDDDで実装してみたり、DDDで実装されてるコードやプロジェクトをみたり携わらないと納得しないと思うと言われてしまいました。&lt;br&gt;
&lt;strong&gt;圧倒的納得っ....!!!&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;スライド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89&quot; aria-label=&quot;スライド permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スライド&lt;/h2&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 59.27083333333333%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://docs.google.com/presentation/d/e/2PACX-1vROj76itC8oHgCvJVhddIWOo_AueX3nS9m_xCPR54PoSksR20wRUzTi0ArYgamZKwhifwjLuRqDj4ti/embed?start=false&amp;amp;loop=false&amp;amp;delayms=3000&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot; style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;</content:encoded></item><item><title><![CDATA[32Bitとか64Bitって、あれなんなん？(LT会のパワポ)]]></title><description><![CDATA[背景 第1回ITたこ焼きの会にて発表したスライドです。 自分語りになって恐縮ですが、 学生時代、自分はこの32bitとや64bitの違いが ピンとこない期間が長かったです。 それが分かった転機がCPUの創りかた(神書籍、エンジニアは必読レベル)や 学校でのPIC…]]></description><link>https://yukimakura.cc/32Bitとか64Bitって何なん？(LT会のパワポ)/</link><guid isPermaLink="false">https://yukimakura.cc/32Bitとか64Bitって何なん？(LT会のパワポ)/</guid><pubDate>Sun, 23 Jul 2023 09:15:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h2&gt;
&lt;p&gt;第1回ITたこ焼きの会にて発表したスライドです。&lt;br&gt;
自分語りになって恐縮ですが、&lt;br&gt;
学生時代、自分はこの32bitとや64bitの違いが&lt;br&gt;
ピンとこない期間が長かったです。&lt;br&gt;
それが分かった転機が&lt;a href=&quot;https://www.amazon.co.jp/CPU%E3%81%AE%E5%89%B5%E3%82%8A%E3%81%8B%E3%81%9F-%E6%B8%A1%E6%B3%A2-%E9%83%81/dp/4839909865&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;CPUの創りかた(神書籍、エンジニアは必読レベル)&lt;/a&gt;や&lt;br&gt;
学校でのPICアセンブラの授業でした。&lt;br&gt;
正直プログラムやコンピュータを触り始めた方にとって、&lt;br&gt;
わかりやすいかどうかは微妙ですが、&lt;br&gt;
コンピュータの根底の部分の一つなのでぜひ理解した上で&lt;br&gt;
使っていただければと思っております。（何様のつもりか&lt;br&gt;
ただただ、テクニカルな話を述べるだけでもつまらないので、&lt;br&gt;
小ネタ的にゲームハードも交えた変遷を取り入れてみました。&lt;br&gt;
&lt;strong&gt;届け俺の思いっ！！&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;スライド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89&quot; aria-label=&quot;スライド permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;スライド&lt;/h2&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 59.27083333333333%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://docs.google.com/presentation/d/e/2PACX-1vTqVkUhonksyab3ZI1liXlFxsI89RMBbxhrV52Nl_Fypf708tZtVNTMOBfUhsPCNm4QFrW1wsC4tBAP/embed?start=false&amp;amp;loop=false&amp;amp;delayms=3000&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot; mozallowfullscreen=&quot;true&quot; webkitallowfullscreen=&quot;true&quot; style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;</content:encoded></item><item><title><![CDATA[Nextjs 13で環境変数が倒せなかった話]]></title><description><![CDATA[背景 職場でフロントエンドがNextjs(13)、バックエンドにC#のgRPC-Webサーバーの システムを構築しております。 フロントエンドからバックエンドのgRPC-Webサーバーを直接叩くので、 フロントエンド側にgRPC-WebサーバーのURL…]]></description><link>https://yukimakura.cc/Nextjsで環境変数が倒せなかった話/</link><guid isPermaLink="false">https://yukimakura.cc/Nextjsで環境変数が倒せなかった話/</guid><pubDate>Sun, 23 Jul 2023 08:45:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h2&gt;
&lt;p&gt;職場でフロントエンドがNextjs(13)、バックエンドにC#のgRPC-Webサーバーの&lt;br&gt;
システムを構築しております。&lt;br&gt;
フロントエンドからバックエンドのgRPC-Webサーバーを直接叩くので、&lt;br&gt;
フロントエンド側にgRPC-WebサーバーのURLを伝搬しなければなりません。&lt;br&gt;
ある程度製作が進んだところで&lt;br&gt;
デプロイについていろいろ考え始めたところ、&lt;br&gt;
まぁ鉄板にコンテナに包もうと思ったわけです。&lt;br&gt;
コンテナ化するならURLの設定値は環境変数経由で&lt;br&gt;
渡したほうが良さそうだなと。&lt;br&gt;
&lt;br/&gt;
ところが...どっこい！&lt;br&gt;
&lt;br/&gt;
いろいろ試しても王道策はダメ！&lt;br&gt;
_&lt;em&gt;(:3」∠)&lt;/em&gt; &amp;#x3C; ﾀｶｻﾞﾜｼﾞｭﾝｽｹ&lt;br&gt;
はぁ...&lt;br&gt;
んで、妥協案と言いますか...折衷案？を考えたので&lt;br&gt;
一応シェアする感じです。&lt;br&gt;
王道なやり方ご存じの方、教えてくださると感謝カンゲキ雨嵐とな。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;※毎度お馴染み、当方はtypescriptやweb系技術についてズブの素人です。ご注意ください。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;いろいろ試した王道策&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%84%E3%82%8D%E3%81%84%E3%82%8D%E8%A9%A6%E3%81%97%E3%81%9F%E7%8E%8B%E9%81%93%E7%AD%96&quot; aria-label=&quot;いろいろ試した王道策 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;いろいろ試した王道策&lt;/h2&gt;
&lt;h3 id=&quot;processenv&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#processenv&quot; aria-label=&quot;processenv permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;process.env&lt;/h3&gt;
&lt;p&gt;こいつが一番記事が多い＆王道そう。&lt;br&gt;
ただこいつ、&lt;strong&gt;ビルド時に解決されちゃうんですよね...&lt;/strong&gt;&lt;br&gt;
というわけで断念...&lt;/p&gt;
&lt;h3 id=&quot;publicruntimeconfigとserverruntimeconfig&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#publicruntimeconfig%E3%81%A8serverruntimeconfig&quot; aria-label=&quot;publicruntimeconfigとserverruntimeconfig permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;publicRuntimeConfigとserverRuntimeConfig&lt;/h3&gt;
&lt;p&gt;これが、一番やりたいことに近そうだったのですが、&lt;br&gt;
&lt;strong&gt;当方の環境だと、ビルドエラーが出ちゃうんですよね...&lt;/strong&gt;&lt;br&gt;
&lt;a href=&quot;https://github.com/vercel/next.js/issues/19910&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;一応GithubのIssueにも上がってますが、使い物にならないという結論に...&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;折衷案のつもり&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%8A%98%E8%A1%B7%E6%A1%88%E3%81%AE%E3%81%A4%E3%82%82%E3%82%8A&quot; aria-label=&quot;折衷案のつもり permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;del&gt;折衷案（のつもり？）&lt;/del&gt;&lt;/h2&gt;
&lt;h3 id=&quot;大雑把な概要と手順&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%A4%A7%E9%9B%91%E6%8A%8A%E3%81%AA%E6%A6%82%E8%A6%81%E3%81%A8%E6%89%8B%E9%A0%86&quot; aria-label=&quot;大雑把な概要と手順 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;&lt;del&gt;大雑把な概要と手順&lt;/del&gt;&lt;/h3&gt;
&lt;p&gt;&lt;del&gt;まぁ、とても愚直に設定を返すAPIを実装して、&lt;/del&gt;&lt;br&gt;
~~ それを初期化時に呼び出す感じです。~~&lt;br&gt;
&lt;del&gt;サーバーサイドのAPIならprocess.envが使えたので、&lt;/del&gt;&lt;br&gt;
&lt;del&gt;そこで、&lt;/del&gt;&lt;br&gt;
&lt;del&gt;1. サーバーサイドで環境変数から設定オブジェクトを作成&lt;/del&gt;&lt;br&gt;
&lt;del&gt;2. Webクライアントが初期化時にサーバーサイドのAPIを叩いて設定オブジェクトを受信＆読み込み&lt;/del&gt;&lt;br&gt;
&lt;del&gt;といったフローです。&lt;/del&gt;&lt;br&gt;
&lt;del&gt;まぁ、愚直で王道だよね。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color=red&gt;↑ゆきまくらの勘違いでした！結局この方法もビルド時に埋め込まれます！(2023-07-23追記)&lt;/font&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;font color=red&gt;以下の項目はサーバーサイドAPIの実装例程度にとどめた認識をお願いします🙇&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;実装の簡単なガイド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%AE%9F%E8%A3%85%E3%81%AE%E7%B0%A1%E5%8D%98%E3%81%AA%E3%82%AC%E3%82%A4%E3%83%89&quot; aria-label=&quot;実装の簡単なガイド permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;実装の簡単なガイド&lt;/h3&gt;
&lt;p&gt;なんか、Nextjs13で結構APIの実装方法が変わったみたい？&lt;br&gt;
&lt;a href=&quot;https://codevoweb.com/build-a-simple-api-in-next-js-13-app-directory/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;こちらのサイトを参考にしました。&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;サーバーサイド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89&quot; aria-label=&quot;サーバーサイド permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;サーバーサイド&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;src/app/api/settings&lt;/code&gt;にフォルダを作る&lt;/li&gt;
&lt;li&gt;そのフォルダ内に&lt;code class=&quot;language-text&quot;&gt;route.ts&lt;/code&gt;を作成する。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;route.ts&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;typescript&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-typescript line-numbers&quot;&gt;&lt;code class=&quot;language-typescript&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;GET&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;request&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; NextRequest&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  
  &lt;span class=&quot;token comment&quot;&gt;//適当な設定情報を格納したクラス&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; settingobj &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; foo&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; process&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;env&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;FOO&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; NextResponse&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;settingobj&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;クライアントサイド&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%B5%E3%82%A4%E3%83%89&quot; aria-label=&quot;クライアントサイド permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;クライアントサイド&lt;/h4&gt;
&lt;p&gt;クライアントサイドの任意の場所で&lt;code class=&quot;language-text&quot;&gt;fetch(&apos;/api/settings&apos;)&lt;/code&gt;呼ぶ。&lt;br&gt;
(つまり、HTTPAPIをコールするってこと)&lt;/p&gt;
&lt;h4 id=&quot;ヒントbodyファイル2023-07-23追記&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%92%E3%83%B3%E3%83%88body%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB2023-07-23%E8%BF%BD%E8%A8%98&quot; aria-label=&quot;ヒントbodyファイル2023 07 23追記 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;(ヒント？？).bodyファイル(2023-07-23追記)&lt;/h4&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;.next/server/app/api&lt;/code&gt;ディレクトリに&lt;code class=&quot;language-text&quot;&gt;settings.body&lt;/code&gt;というファイルが生成されており、&lt;br&gt;
こいつを試しに手で変えてやると、ビルド後の変数の値が切り替わった。&lt;br&gt;
(つまり、ビルド後のファイルを直に編集)&lt;br&gt;
ただ、これを実運用に持っていくには、あまりに邪道過ぎてやりたくないな...&lt;br&gt;
困ったものだ...(´Д｀)ﾊｧ…&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;まぁ、クライアントサイドが環境変数直接アクセスできないのは&lt;br&gt;
理論的には分からなくもない。&lt;br&gt;
けどさぁ、例えば動的にデリバリーするコンテンツの変数を&lt;br&gt;
配信直前に変更できる工夫とかはあってもいいようにも思えてしまう。&lt;br&gt;
(欲張りか？)&lt;br&gt;
今までWebUIのシステムをまともに考えた事がなかったから、&lt;br&gt;
圧倒的に経験値が足りなくて辛み...&lt;br&gt;
まぁ楽しいのだけれども。&lt;br&gt;
実は、まだ当方では完全解決とまでは行ってなくて、&lt;br&gt;
&lt;del&gt;DIコンテナに設定を注入するアーキテクチャにしてしまったため、&lt;/del&gt;&lt;br&gt;
&lt;del&gt;この設定を読み出す関数をコールする&lt;/del&gt;&lt;br&gt;
&lt;del&gt;タイミングに悩んでいるところであるヽ(･ω･)/ｽﾞｺｰ&lt;/del&gt;&lt;br&gt;
↑これはDAOに実装を固めて、だましだまし使うことにした。(2023-07-23追記)&lt;br&gt;
一難去ってまた一難、泣きっ面に蜂、弱り目に祟り目、虎口に逃れて竜穴に入る...&lt;br&gt;
では(&lt;em&gt;^^&lt;/em&gt;)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[NextjsでDIコンテナ経由でイベントを発火してみる[typescript]]]></title><description><![CDATA[背景 仕事でWebUIでアプリを作ることになり、いろいろ勉強中です。 偶然、このブログを作っていた事が色々役に立ちました。 まぁそんなこんなで、コンポーネントをまたいでやり取りするケースが出てきて、 いろいろ考えたわけです。 
当方、C#が今のところ一番得意なようで、 もしC…]]></description><link>https://yukimakura.cc/NextjsでDIコンテナ経由でイベントを発火してみる[typescript]/</link><guid isPermaLink="false">https://yukimakura.cc/NextjsでDIコンテナ経由でイベントを発火してみる[typescript]/</guid><pubDate>Sat, 08 Jul 2023 11:10:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h2&gt;
&lt;p&gt;仕事でWebUIでアプリを作ることになり、いろいろ勉強中です。&lt;br&gt;
偶然、このブログを作っていた事が色々役に立ちました。&lt;br&gt;
まぁそんなこんなで、コンポーネントをまたいでやり取りするケースが出てきて、&lt;br&gt;
いろいろ考えたわけです。&lt;br&gt;
&lt;br/&gt;
当方、C#が今のところ一番得意なようで、&lt;br&gt;
もしC#で組むならDIコンテナ✕イベントでやるなと。&lt;br&gt;
ということで、TSでもDIコンテナ✕イベントをやる方法を模索しました。&lt;br&gt;
ホントはMessagePipeのようにDIコンテナの&lt;br&gt;
セットアップが簡単にできるやつがあったら良かったんですが、&lt;br&gt;
見つけられなかった(ぶっちゃけそんなにガチに探してないです、あったら教えてくださいm(_ _)m)&lt;br&gt;
ので、&lt;a href=&quot;https://github.com/ai/nanoevents&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;nanoevents&lt;/a&gt;と&lt;a href=&quot;https://github.com/inversify/InversifyJS&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;inversify&lt;/a&gt;を組み合わせて見ることにしました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;※当方はtypescriptやweb系技術についてズブの素人です。ご注意ください。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;結論ソース&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B5%90%E8%AB%96%E3%82%BD%E3%83%BC%E3%82%B9&quot; aria-label=&quot;結論ソース permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;結論(ソース)&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/yukimakura/nextjs_inversify_and_nanoevents_demo&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Githubに置きました&lt;/a&gt;&lt;br&gt;
Dockerで環境構築してください。&lt;br&gt;
&lt;a href=&quot;https://yukimakura.cc/%E3%81%84%E3%81%84%E3%81%8B%EF%BC%9FDocker%E3%81%A7%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AB%E5%8B%95%E7%9A%84%E7%94%9F%E6%88%90%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%81%AFBindMount%E3%81%97%E3%81%A1%E3%82%83%E3%81%84%E3%81%91%E3%81%AA%E3%81%84%E3%81%9E%EF%BC%9F%E7%B4%84%E6%9D%9F%E3%81%A0%E3%81%9E%EF%BC%9F/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;Dockerで環境構築する際はぜひこの記事も参考にしてみてください！&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;また、お初ですが、&lt;code class=&quot;language-text&quot;&gt;devcontainer.json&lt;/code&gt;を設置してあるので、&lt;br&gt;
&lt;strong&gt;Github Codespaceを使うとセットアップが自動化されます。&lt;/strong&gt;&lt;br&gt;
便利な世の中だなぁ...（しみじみ&lt;/p&gt;
&lt;h2 id=&quot;詳解&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A9%B3%E8%A7%A3&quot; aria-label=&quot;詳解 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;詳解&lt;/h2&gt;
&lt;h3 id=&quot;diコンテナとnanoeventsの導入&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#di%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%A8nanoevents%E3%81%AE%E5%B0%8E%E5%85%A5&quot; aria-label=&quot;diコンテナとnanoeventsの導入 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DIコンテナとnanoeventsの導入&lt;/h3&gt;
&lt;h4 id=&quot;依存解決&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BE%9D%E5%AD%98%E8%A7%A3%E6%B1%BA&quot; aria-label=&quot;依存解決 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;依存解決&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;inversifyを導入(記事いっぱいあるため割愛)&lt;/li&gt;
&lt;li&gt;nanoeventsを導入&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;shell&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;shell&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-shell line-numbers&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;yarn&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;add&lt;/span&gt; nanoevents&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;イベントをハンドリングするインターフェースとクラスの準備&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%92%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%99%E3%82%8B%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%81%A8%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E6%BA%96%E5%82%99&quot; aria-label=&quot;イベントをハンドリングするインターフェースとクラスの準備 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;イベントをハンドリングするインターフェースとクラスの準備&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;新規に&lt;code class=&quot;language-text&quot;&gt;IHogeEventProvider.tsx&lt;/code&gt;を作成する&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;IHogeEVentProvider.tsx&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;tsx&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-tsx line-numbers&quot;&gt;&lt;code class=&quot;language-tsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;CallbackFunc&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;push&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IHogeEventProvider&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function-variable function&quot;&gt;publish&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;push&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function-variable function&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cbFunc&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;CallbackFunc&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;新規に&lt;code class=&quot;language-text&quot;&gt;IHogeEvent.tsx&lt;/code&gt;を作成する&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;IHogeEvent.tsx&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;tsx&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-tsx line-numbers&quot;&gt;&lt;code class=&quot;language-tsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IHogeEvent&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function-variable function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;push&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;新規に&lt;code class=&quot;language-text&quot;&gt;HogeEventProvider.tsx&lt;/code&gt;を作成する&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;HogeEventProvider.tsx&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;tsx&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-tsx line-numbers&quot;&gt;&lt;code class=&quot;language-tsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; CallbackFunc&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; IHogeEventProvider &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@/interfaces/IHogeEventProvider&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; IHogeEvent &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@/interfaces/eventSchemas/IHogeEvent&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; injectable &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;inversify&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Emitter&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; createNanoEvents &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;nanoevents&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;reflect-metadata&apos;&lt;/span&gt;

@&lt;span class=&quot;token function&quot;&gt;injectable&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;HogeEventProvider&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IHogeEventProvider&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; emitter&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Emitter&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;IHogeEvent&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token function&quot;&gt;constructor&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;emitter &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token generic-function&quot;&gt;&lt;span class=&quot;token function&quot;&gt;createNanoEvents&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;IHogeEvent&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;publish&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;push&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token builtin&quot;&gt;boolean&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;emitter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;emit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;push&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;push&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cbFunc&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; CallbackFunc&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;emitter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;push&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;push &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token function&quot;&gt;cbFunc&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;push&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;diコンテナのセットアップ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#di%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97&quot; aria-label=&quot;diコンテナのセットアップ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DIコンテナのセットアップ&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;tsconfig.jsonを修正&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;&quot;experimentalDecorators&quot;: true&lt;/code&gt;と&lt;code class=&quot;language-text&quot;&gt;&quot;emitDecoratorMetadata&quot;: true&lt;/code&gt;を追加&lt;/p&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;tsconfig.json&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;json&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-json line-numbers&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;compilerOptions&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;target&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;es5&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;lib&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;dom&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;dom.iterable&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;esnext&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;allowJs&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;skipLibCheck&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;strict&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;forceConsistentCasingInFileNames&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;noEmit&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;esModuleInterop&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;module&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;esnext&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;moduleResolution&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;node&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;resolveJsonModule&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;isolatedModules&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;jsx&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;preserve&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;incremental&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;experimentalDecorators&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;emitDecoratorMetadata&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;    &lt;span class=&quot;token property&quot;&gt;&quot;plugins&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;next&quot;&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;paths&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;&quot;@/*&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;./src/*&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;include&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;next-env.d.ts&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;**/*.ts&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;**/*.tsx&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;.next/types/**/*.ts&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;exclude&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;node_modules&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;next.config.jsを修正&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;next.config.js&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-js line-numbers&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;/** @type {import(&apos;next&apos;).NextConfig} */&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; nextConfig &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token literal-property property&quot;&gt;experimental&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token literal-property property&quot;&gt;instrumentationHook&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

module&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;exports &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; nextConfig&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;新規に&lt;code class=&quot;language-text&quot;&gt;Types.ts&lt;/code&gt;を作成する&lt;br&gt;
この中にはDIコンテナに登録するための型情報リストが格納されると思ってもらって良い&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;Types.ts&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;tsx&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-tsx line-numbers&quot;&gt;&lt;code class=&quot;language-tsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; IHogeEventProvider &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@/interfaces/IHogeEventProvider&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;TYPES&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    IHogeEventProvider&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Symbol&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&apos;IHogeEventProvider&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  
  &lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;TYPES&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;新規に&lt;code class=&quot;language-text&quot;&gt;inversify.config.ts&lt;/code&gt;を作成する&lt;br&gt;
&lt;strong&gt;この中で、DIコンテナの登録処理を行う&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;inversify.config.ts&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;tsx&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-tsx line-numbers&quot;&gt;&lt;code class=&quot;language-tsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Container &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;inversify&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;TYPES&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;@/dependencyInjections/Types&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; IHogeEventProvider &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;@/interfaces/IHogeEventProvider&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; HogeEventProvider &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;@/implements/HogeEventProvider&apos;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; myContainer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Container&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
myContainer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-function&quot;&gt;&lt;span class=&quot;token function&quot;&gt;bind&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;IHogeEventProvider&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;TYPES&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;IHogeEventProvider&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;HogeEventProvider&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;inSingletonScope&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; myContainer &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;diコンテナとイベントの呼び出し方使い方&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#di%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%81%A8%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%AE%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E6%96%B9%E4%BD%BF%E3%81%84%E6%96%B9&quot; aria-label=&quot;diコンテナとイベントの呼び出し方使い方 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;DIコンテナとイベントの呼び出し方・使い方&lt;/h2&gt;
&lt;h3 id=&quot;subscriber&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#subscriber&quot; aria-label=&quot;subscriber permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Subscriber&lt;/h3&gt;
&lt;p&gt;例として、&lt;a href=&quot;https://github.com/yukimakura/nextjs_inversify_and_nanoevents_demo/blob/main/src/components/LeftComponent.tsx&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;LeftComponent.tsx&lt;/a&gt;で示す&lt;/p&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;LeftComponent.tsx&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;tsx&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-tsx line-numbers&quot;&gt;&lt;code class=&quot;language-tsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; useState &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;react&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; myContainer &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@/dependencyInjections/inversify.config&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; HogeEventProvider &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@/implements/HogeEventProvider&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;TYPES&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@/dependencyInjections/Types&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Props&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;LeftComponent&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;props&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Props&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; eventAction &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; myContainer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-function&quot;&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;HogeEventProvider&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;TYPES&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;IHogeEventProvider&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;isOn&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; setIsOn&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;useState&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    eventAction&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;subscribe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        &lt;span class=&quot;token function&quot;&gt;setIsOn&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;isOn&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;token plain-text&quot;&gt;        ひだりのこんぽーねんと&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;token plain-text&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;isOn &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;おん&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;おっふ&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;token plain-text&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;token plain-text&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; LeftComponent&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;8行目でDIコンテナからEventProviderを取り出し、&lt;br&gt;
11-13行目でイベント購読のコールバック処理を記述している&lt;/p&gt;
&lt;h3 id=&quot;publisher&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#publisher&quot; aria-label=&quot;publisher permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Publisher&lt;/h3&gt;
&lt;p&gt;例として、&lt;a href=&quot;https://github.com/yukimakura/nextjs_inversify_and_nanoevents_demo/blob/main/src/components/RightComponent.tsx&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;RightComponent.tsx&lt;/a&gt;で示す&lt;/p&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;RightComponent.tsx&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;tsx&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-tsx line-numbers&quot;&gt;&lt;code class=&quot;language-tsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; useState &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;react&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; myContainer &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@/dependencyInjections/inversify.config&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; HogeEventProvider &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@/implements/HogeEventProvider&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token constant&quot;&gt;TYPES&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@/dependencyInjections/Types&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Button &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;antd&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Props&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;RightComponent&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;props&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; Props&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; eventAction &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; myContainer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-function&quot;&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;HogeEventProvider&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token constant&quot;&gt;TYPES&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;IHogeEventProvider&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;token plain-text&quot;&gt;            右のコンポーネント&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token plain-text&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Button&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;primary&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;  &lt;span class=&quot;token attr-name&quot;&gt;onClick&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; eventAction&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;publish&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt; Button &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Button&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; RightComponent&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;10行目でDIコンテナからEventProviderを取り出し、&lt;br&gt;
15行目でイベントの発信を行っている&lt;/p&gt;
&lt;h2 id=&quot;実行の様子&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%AE%9F%E8%A1%8C%E3%81%AE%E6%A7%98%E5%AD%90&quot; aria-label=&quot;実行の様子 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;実行の様子&lt;/h2&gt;
&lt;p&gt;RightComponentにあるButtonを押すことで、&lt;br&gt;
LeftComponentの表示が切り替わっているのがわかる&lt;/p&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://www.youtube.com/embed/1S21hIumpdc&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot; style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;p&gt;もちろんイベントのため、&lt;br&gt;
&lt;strong&gt;複数の一斉購読も可能&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&quot;gatsby-resp-iframe-wrapper&quot; style=&quot;padding-bottom: 56.25%; position: relative; height: 0; overflow: hidden; margin-bottom: 1.0725rem&quot; &gt; &lt;iframe src=&quot;https://www.youtube.com/embed/2LNx2mE36JA&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen=&quot;&quot; style=&quot; position: absolute; top: 0; left: 0; width: 100%; height: 100%; &quot;&gt;&lt;/iframe&gt; &lt;/div&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;DIコンテナから使う側はほぼMessagePipeと同じ使用感になったので&lt;br&gt;
結構満足です(｀・ω・´)&lt;br&gt;
しかし、DIコンテナの登録が鬼面倒くさいですね...&lt;br&gt;
これなんとかしたいなぁ...&lt;br&gt;
&lt;br/&gt;
まぁとりあえずこれで比較的キレイ＆楽チンに&lt;br&gt;
コンポーネント間通信ができるようになりましたね！&lt;br&gt;
めでたしめでたし？&lt;br&gt;
では(&lt;em&gt;^^&lt;/em&gt;)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[いいか？Dockerで開発するときに動的生成フォルダはBindMountしちゃいけないぞ？約束だぞ？]]></title><description><![CDATA[背景 ...とにかくGatsbyのビルドが遅い！（●｀ε…]]></description><link>https://yukimakura.cc/いいか？Dockerで開発するときに動的生成フォルダはBindMountしちゃいけないぞ？約束だぞ？/</link><guid isPermaLink="false">https://yukimakura.cc/いいか？Dockerで開発するときに動的生成フォルダはBindMountしちゃいけないぞ？約束だぞ？/</guid><pubDate>Wed, 05 Jul 2023 22:10:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;背景&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%83%8C%E6%99%AF&quot; aria-label=&quot;背景 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;背景&lt;/h2&gt;
&lt;p&gt;...とにかくGatsbyのビルドが遅い！（●｀ε´●）ﾌﾟﾝｽｶ&lt;br&gt;
明らかに遅すぎてもはやコンテナ環境が悪いのでは？といろいろ調べた結果そのとおりでした。&lt;/p&gt;
&lt;p&gt;まぁ、使ってるコンピュータもそんなにいいものではないですし、&lt;br&gt;
なにせ爆熱でサーマルスロットリング起きてる説濃厚なので...&lt;/p&gt;
&lt;p&gt;↓あがいた跡&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot;&gt;&lt;p lang=&quot;ja&quot; dir=&quot;ltr&quot;&gt;たしかにgRPC FUSEからVirtioFSにしたら早くなった気がする！&lt;br&gt;&lt;br&gt;...けどGatsbyあきらかにビルド遅すぎんか&lt;br&gt;&lt;br&gt;Gatsbyが遅いのか、i7 8650が遅いのか...&lt;br&gt;ﾌｧｲｯｯ！！ &lt;a href=&quot;https://t.co/bNYD8N7boO&quot;&gt;pic.twitter.com/bNYD8N7boO&lt;/a&gt;&lt;/p&gt;&amp;mdash; クワイン·ゆき·まくらすきぃ (@yukimakura86) &lt;a href=&quot;https://twitter.com/yukimakura86/status/1674409444191670272?ref_src=twsrc%5Etfw&quot;&gt;June 29, 2023&lt;/a&gt;&lt;/blockquote&gt; &lt;script async src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;h2 id=&quot;やったこと&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%84%E3%81%A3%E3%81%9F%E3%81%93%E3%81%A8&quot; aria-label=&quot;やったこと permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;やったこと&lt;/h2&gt;
&lt;h3 id=&quot;とりあえずdocker-desktopの設定を変える&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9Adocker-desktop%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%82%92%E5%A4%89%E3%81%88%E3%82%8B&quot; aria-label=&quot;とりあえずdocker desktopの設定を変える permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;とりあえず、Docker Desktopの設定を変える&lt;/h3&gt;
&lt;p&gt;gRPC FUSE からVirtioFSに変更→あまり変わらず...&lt;/p&gt;
&lt;h3 id=&quot;node_modulesのみをvolumemountにする&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#node_modules%E3%81%AE%E3%81%BF%E3%82%92volumemount%E3%81%AB%E3%81%99%E3%82%8B&quot; aria-label=&quot;node_modulesのみをvolumemountにする permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;node_modulesのみをVolumeMountにする&lt;/h3&gt;
&lt;p&gt;&lt;font color=red&gt;&lt;h3&gt;爆速！！！&lt;/h3&gt;&lt;/font&gt;&lt;br&gt;
↑今回の本題です&lt;br&gt;
※当たり前ですが、ネイティブよりは早くなりませんよ&lt;br&gt;
これでネイティブより早いと言うことは、&lt;br&gt;
「いやーやっぱり生音声よりハイレゾ音源のほうが良い音質だな〜」&lt;br&gt;
って言ってるのと似てると思います。&lt;/p&gt;
&lt;h2 id=&quot;おさらいvolumemountとbindmountってなぁに&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%8A%E3%81%95%E3%82%89%E3%81%84volumemount%E3%81%A8bindmount%E3%81%A3%E3%81%A6%E3%81%AA%E3%81%81%E3%81%AB&quot; aria-label=&quot;おさらいvolumemountとbindmountってなぁに permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;(おさらい)VolumeMountとBindMountってなぁに？&lt;/h2&gt;
&lt;p&gt;BindMountとVolumeMountは、Dockerコンテナ内にデータを永続化するための2つの異なる方法です。&lt;/p&gt;
&lt;p&gt;BindMountは、ホストマシン上の特定のファイルやディレクトリをコンテナ内に直接マウントすることができます。&lt;br&gt;
これにより、&lt;strong&gt;コンテナ内からホストマシン上のファイルやディレクトリにアクセスすることができます。&lt;/strong&gt;&lt;br&gt;
ただし、ホストマシンのファイルシステムに依存しており、&lt;strong&gt;可搬性が低いという欠点があります。&lt;/strong&gt;
&lt;br/&gt;
一方、VolumeMountはDockerによって完全に管理される独立したストレージ領域です。&lt;br&gt;
&lt;strong&gt;ホストマシン上のディレクトリ構造やOSに依存せず、複数のコンテナ間で安全に共有することができます。&lt;/strong&gt;&lt;br&gt;
また、ボリュームはDocker CLIコマンドやDocker APIを使用して管理することができます。&lt;br&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;...とBingAI先生が申しております(｀・ω・´)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;パフォーマンスに関しては全然まっっったく違います！&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;BindMountは引くほど遅いです&lt;/strong&gt;&lt;br&gt;
(すくなくともWSL2とmacに関しては。Linuxはまだ未検証)&lt;br&gt;
&lt;a href=&quot;https://github.com/docker/for-mac/issues/3677&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;2019年ごろからIssueに上がっていますが未だにOpenのままのようです&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;簡易ベンチマーク&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B0%A1%E6%98%93%E3%83%99%E3%83%B3%E3%83%81%E3%83%9E%E3%83%BC%E3%82%AF&quot; aria-label=&quot;簡易ベンチマーク permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;簡易ベンチマーク&lt;/h2&gt;
&lt;h3 id=&quot;計測環境&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A8%88%E6%B8%AC%E7%92%B0%E5%A2%83&quot; aria-label=&quot;計測環境 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;計測環境&lt;/h3&gt;
&lt;h4 id=&quot;ホスト&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%9B%E3%82%B9%E3%83%88&quot; aria-label=&quot;ホスト permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ホスト&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;ThinkPad X1 Carbon Gen6
&lt;ul&gt;
&lt;li&gt;Hardware
&lt;ul&gt;
&lt;li&gt;Core i7 8650u&lt;/li&gt;
&lt;li&gt;RAM 16GB (LPDDR3 2133MHz)&lt;/li&gt;
&lt;li&gt;SUNEAST SE900NVG3-01TB&lt;/li&gt;
&lt;li&gt;Broadcom BCM94360NG&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Software
&lt;ul&gt;
&lt;li&gt;macOS 12.6.3 (Monterey)&lt;/li&gt;
&lt;li&gt;Docker Desktop 4.16.2 (95914)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;コンテナ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A&quot; aria-label=&quot;コンテナ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;コンテナ&lt;/h4&gt;
&lt;p&gt;node:18-bullseye&lt;/p&gt;
&lt;h3 id=&quot;結果&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B5%90%E6%9E%9C&quot; aria-label=&quot;結果 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;結果&lt;/h3&gt;
&lt;p&gt;Pure : シンプルな&lt;strong&gt;BindMount&lt;/strong&gt;&lt;br&gt;
(ex) &lt;code class=&quot;language-text&quot;&gt;-v $(pwd)/tmp:/ws&lt;/code&gt;&lt;br&gt;
&lt;br/&gt;
Delegated : Delegatedオプション付きの&lt;strong&gt;BindMount&lt;/strong&gt;&lt;br&gt;
(ex) &lt;code class=&quot;language-text&quot;&gt;-v &amp;amp;(pwd)/tmp:/ws:delegated&lt;/code&gt;&lt;br&gt;
&lt;br/&gt;
VolumeMountNM : &lt;strong&gt;node_modulesのみVolumeMount&lt;/strong&gt;&lt;br&gt;
(ex) &lt;code class=&quot;language-text&quot;&gt;-v node_module_volume:/ws/node_modules&lt;/code&gt;&lt;br&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;h4 id=&quot;npm-install&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#npm-install&quot; aria-label=&quot;npm install permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;npm install&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;マウント条件&lt;/th&gt;
&lt;th&gt;real&lt;/th&gt;
&lt;th&gt;user&lt;/th&gt;
&lt;th&gt;sys&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Delegated&lt;/td&gt;
&lt;td&gt;6m46.746s&lt;/td&gt;
&lt;td&gt;5m25.364s&lt;/td&gt;
&lt;td&gt;3m47.648s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pure&lt;/td&gt;
&lt;td&gt;8m15.052s&lt;/td&gt;
&lt;td&gt;6m38.064s&lt;/td&gt;
&lt;td&gt;3m50.435s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Delegated &amp;#x26; VolumeMountNM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1m50.672s&lt;/td&gt;
&lt;td&gt;2m6.004s&lt;/td&gt;
&lt;td&gt;1m15.796s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pure &amp;#x26; VolumeMountNM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1m46.771s&lt;/td&gt;
&lt;td&gt;2m0.373s&lt;/td&gt;
&lt;td&gt;1m1.540s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&quot;gatsby-build&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#gatsby-build&quot; aria-label=&quot;gatsby build permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;gatsby build&lt;/h4&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;マウント条件&lt;/th&gt;
&lt;th&gt;real&lt;/th&gt;
&lt;th&gt;user&lt;/th&gt;
&lt;th&gt;sys&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Delegated&lt;/td&gt;
&lt;td&gt;8m32.072s&lt;/td&gt;
&lt;td&gt;8m26.974s&lt;/td&gt;
&lt;td&gt;4m0.114s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pure&lt;/td&gt;
&lt;td&gt;7m7.828s&lt;/td&gt;
&lt;td&gt;6m42.795s&lt;/td&gt;
&lt;td&gt;1m39.654s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Delegated &amp;#x26; VolumeMountNM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1m13.318s&lt;/td&gt;
&lt;td&gt;2m19.687s&lt;/td&gt;
&lt;td&gt;0m13.755s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pure &amp;#x26; VolumeMountNM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2m13.731s&lt;/td&gt;
&lt;td&gt;8m21.418s&lt;/td&gt;
&lt;td&gt;1m1.227s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;当方も積極的にDockerを使ってきたつもりでしたが、&lt;br&gt;
お恥ずかしいことにこのことに今まで気づきませんでした...&lt;br&gt;
でもまさか、こんなに差があるとは...恐ろしや...&lt;br&gt;
今回の例はGatsbyでしたが、Gatsbyに限らず全てに共通することと思っています。&lt;br&gt;
コンテナ仮想化はめちゃくちゃ便利ですが、&lt;br&gt;
罠もいろいろありそうなのでしっかり学んだ上で活用していきたいですなぁ&lt;br&gt;
WSL2の環境でも試しましたが、この記事の結果と似た傾向を示していたので、&lt;br&gt;
ぜひお試しあれ。&lt;/p&gt;
&lt;p&gt;小ネタですが、BingAI先生にBindMountとVolumeMountのパフォーマンスについて&lt;br&gt;
聞いたところ、全く正反対のことを答えて来やがりました...&lt;br&gt;
みなさんも用法用量を守って活用しましょうね(^_^;)&lt;br&gt;
では(&lt;em&gt;^^&lt;/em&gt;)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[RX-8の車検に行ってきました！]]></title><description><![CDATA[ディーラー車検 昨年の1年点検は安上げようとオートバックスにお願いしました。 ところがどっこい、8ちゃんはエンジン以外でも特殊なところがたくさんあるようで、
ラジエターまわりの寿命が来ていたのですが、扱えないと断られてしまいました... んで、ディーラーに持ってって1…]]></description><link>https://yukimakura.cc/RX-8の車検に行ってきました！/</link><guid isPermaLink="false">https://yukimakura.cc/RX-8の車検に行ってきました！/</guid><pubDate>Sun, 02 Jul 2023 22:45:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;ディーラー車検&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%87%E3%82%A3%E3%83%BC%E3%83%A9%E3%83%BC%E8%BB%8A%E6%A4%9C&quot; aria-label=&quot;ディーラー車検 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ディーラー車検&lt;/h2&gt;
&lt;p&gt;昨年の1年点検は安上げようとオートバックスにお願いしました。&lt;br&gt;
ところがどっこい、8ちゃんはエンジン以外でも特殊なところがたくさんあるようで、
ラジエターまわりの寿命が来ていたのですが、扱えないと断られてしまいました...&lt;br&gt;
んで、ディーラーに持ってって15マソかけて冷却周りの取っ替えをしました。
&lt;br/&gt;
そんなかんじで、悩むの面倒くさいので今回ははじめからディーラーにお願いしたわけであります。&lt;/p&gt;
&lt;h2 id=&quot;圧縮測定&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%9C%A7%E7%B8%AE%E6%B8%AC%E5%AE%9A&quot; aria-label=&quot;圧縮測定 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;圧縮測定&lt;/h2&gt;
&lt;p&gt;自分がうちの子を購入してから、一回も圧縮比を測定したことなかったので&lt;br&gt;
これを機に一緒にお願いしました。&lt;br&gt;
ロータリーエンジンはレシプロと明らかに構造が違うので、レシプロ用の圧縮測定器が使えないのです...&lt;br&gt;
なので、事前に言っておかないと、測定機がディーラーになかったりするので配慮が必要です。&lt;br&gt;
(本音を言うならディーラーなら1つぐらい常備しておいて貰いたいものですが...)&lt;/p&gt;
&lt;h3 id=&quot;結果&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B5%90%E6%9E%9C&quot; aria-label=&quot;結果 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;結果&lt;/h3&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 133.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAbCAYAAAB836/YAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHWklEQVR42iWU91PTCRqHv6O7c5ZdC2AZy2LXsyAWdBELCKLSRCAiIq5d0UXsi8CqC4qogCBIS+hNkRBCaCFAaBpICAaIEIji6Vr2XMebu7n7+bmB/QPeZ573/XzmFV6m7aU31Rd9sj+GrGCMT8LpfRzBi5LrvCi/T29lAt3SWLor4jC2ltCvq2WgW4VJX8/Qi0be9Lfz4ZWWL++N/PvzEMLrikj+HO7i03AvH96aeDvcj3nQwODLLgb6OnlpaMWgU2HQ1tPTWUtvRxXGjir6dTUMvajHpFdi7lHzu1nL148mhDf1Sfz3f//h04fXvDEbeTNkYNikw2RopaejFn2rjK7mUvQtZTyrL0Epy+JJTjyZSTdIir1Kgzxr1PpVbwt/DBsQzNVJ/OvrF96+GoH10lAnQ5wax93b4YSGHOHEERGH9u/m1FER/j678djtyE4XB9atXsK8uRakxYVj0tYwoFPxfqgL4W1rAV+/fuH1QA9vzUYe3I/G38+DvXtcsV2znBUrFzLdajw/zLZgje3fsbdfw9bN63HYuAo728WI4yMYeF7Jy45a3pk6ET7qZPz5+TPm/hcMGbsoK8kmNuoah4N88fdzQ+S9g22bVuKwcQU/Be7h+rWz/BTgycWzB7kVfprspBv0P6vAqKninakD4b1OzqePnxjs62KwT0d68j083V24euEE0sKHZDyIJDUujN/CTnMowIv8jDuEnT9KzK8h3L8ZQmbCiOEIUMG7AQ3C6+cVvBk2Y+x+Ro+2GVmxhMuhJ7kedpbmqhySYq/g7roRH4+/bpcSF8Gln4NwdVrPVvsVpN4Lw6SppG8EOGL4slXKgFFPt0ZFZ7MCTaOMS+eOE375BEWSWGJv/MwvoUEc2u/GAZEbqfGRnDzsw5xZk5k7axLJMZcZ7FRg7Kjm/aAWQVtXiF7TQJuylOeqUs6eDMDaeibnggNJvHOFkFP7OHbQHdEeZ0LPBBIdGYKPpxMujms54OtMadZdjM8r6NfW/ZWy6kky6uoilNIMGuUSXJzsmD9/Jls2r2XzJlvs1i5h+bJZzJ1twaIFs9i1w4H9vq4E+LoQfMSb8vwEetrL6dcp+WDuQqjKi0UpTae2NAVVeTo3rp7kwpkDnD8TSJC/26iJrc081tkswmv3Fs6e9Cc64hSXzvgTeekwipIkDO3lDOhVfHjdjdBYlkaDLGMU1qzIQq0Qo5KlUVf2iJqnD5EXx1OWH4u86AGN8kzaa7Npr8uivUZMW42EjoYiep7Led3Xwh9vjQgtFRLUlZJRWFtNDh2qAvTNJXS3FNPdWkR3awGGtiL0zcXomgrRNhbQWZ+Dtj4XbUM+Xc1P6OusYri/nc+/9yO0yCU0V4hRV0hoqcqmU1WAtnFkMB9dUz5d6jx0TXl01OeiUebSocxBq8xBp8pD31RIl/oJvZoqho3t/HPEsKk8nUZpGi0yMbKcOESejvh4bMXVcR0uW2zZ5bSWPbvt2eW8Ebftdnjv+pF9Xls5JHLlaIA7T3Pj6X1ehUnfxIdXBoQmaQZN5Wm0K7KRZt/Fz8sR0R4nLKaMZ9y3AlO+H8vUKd8wdqzAxHFjmPzdWGZYTsB6tiXWc6wQJ97A3K1iyKDm46tuBHV5JiOWrZViKgviiYkMxt97O6uXz2P+XEsWzrNi8YJpzJg+mTkzpzDTcgIzLMezYulc1tksJjslCvPos23i40htWmQZqKWptMszKEmLwtPVHrvVi3h4+yI3rxwl8sIhIi4EEXpqHyeDPDl/QsStX47j6+bAxdP7KUyLwdylZFCv4t2gBkEtfURjaTKt5WnkJUUSuHc7TptW81QcQ8LNEE4EuuG1YwOBPi5s2bgCd+f1SLNi2OexhcgLhylIvcWQrhqTrpZ/GFsRVCWJKIsSUBYm0Fz2iLLMGLbb21CaEUNq7CUCvLex+AdLtv24Ckf7VXi62PE4PYqdW2zxdduMJCECc6eCfo2CYUMjQm3+fapz79FYnEh2XBib1y9jg80iHkafJ8DbifMnfDnosx2R+zY2rF7I1o3LyY4PZ9XCmUyf8jeSos4zpKnA2CrFrKtBqMqJRZF1h5bSFC4f92OsILBuxTzCzx0cXcvPzQEP5/X4eWzjdJAXt68eIy3mIsvnT8Ni4hjiIoMZaCulp7EY07NyBEVODHJJzCjwuGgngiAwadw3zJg6EYtJE5j6/XhmWExkifV0HNYuJcjbmaOiHSyztsJm8UzSYy/S05CPvi6XPnUxglwSjUwcTX1hHDfOHcTdcT0+Ozfh7GDDupXWLJ1vxRyrCcyfM5UpE8by3bdjWL5gGmuWzcZvtz1FD8Ppqs5EW5VBtzIboSLzJjLxb1RIoqnKjaWu8D7V+XcpF0dRnBxOXsJVChKvkRwdyoVj3hwTORNy2IPQI56EBYsoSYmgozKFZ7IUOhWpCOXpkUjTfkWacR2Z+CZySRSK7FvU5sZQX3CXppI4mksf0CZNplOehqbiES2libSUJdL0OA51yX2an9yjrSwOjSye/wMuw3pJL8dJ6gAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 07 02 22 28 34&quot;
        title=&quot;&quot;
        src=&quot;/static/e7744b8dc42aba31a9535d99ff06ce2a/5a190/2023-07-02-22-28-34.png&quot;
        srcset=&quot;/static/e7744b8dc42aba31a9535d99ff06ce2a/772e8/2023-07-02-22-28-34.png 200w,
/static/e7744b8dc42aba31a9535d99ff06ce2a/e17e5/2023-07-02-22-28-34.png 400w,
/static/e7744b8dc42aba31a9535d99ff06ce2a/5a190/2023-07-02-22-28-34.png 800w,
/static/e7744b8dc42aba31a9535d99ff06ce2a/c1b63/2023-07-02-22-28-34.png 1200w,
/static/e7744b8dc42aba31a9535d99ff06ce2a/07a9c/2023-07-02-22-28-34.png 1440w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
たしかNo1がフロント、No2がリアって言っていた気がします。&lt;br&gt;
2008年ものの後期RX-8TypeSで、走行距離は75000kmぐらいです。&lt;br&gt;
うーん、極端に悪くはないけど、良くもないなぁ...&lt;br&gt;
もともと、中古で買ったときも店側から圧縮はあんまり良くないので、&lt;br&gt;
期待しないでくださいと言われていました。&lt;br&gt;
ちなみにエンジン切る時に吹かさないと、偶にカブることがあります。&lt;/p&gt;
&lt;h2 id=&quot;クラッチが軋む問題&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AF%E3%83%A9%E3%83%83%E3%83%81%E3%81%8C%E8%BB%8B%E3%82%80%E5%95%8F%E9%A1%8C&quot; aria-label=&quot;クラッチが軋む問題 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;クラッチが軋む問題&lt;/h2&gt;
&lt;p&gt;長距離の下道ドライブをしていると、クラッチのオンオフを繰り返すことになりますね。
それで、しばらくするとなんか、クラッチペダルの根本のほうがｷｼｷｼ...鳴くようになるんですよね...&lt;br&gt;
んで、また放置しとくとケロッと治ってる。
ディーラーの人に相談してみましたが、あまり聞かない症例っぽい？
とりあえず、根本のバネ機構付近にグリスをつけてもらって様子見となりました。&lt;/p&gt;
&lt;h2 id=&quot;エンジンオイル&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%82%AA%E3%82%A4%E3%83%AB&quot; aria-label=&quot;エンジンオイル permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;エンジンオイル&lt;/h2&gt;
&lt;p&gt;いままでは、WacosのProstage-s 0w-30を使っていたのですが、&lt;br&gt;
ディーラーということで、シンセレネシスを初投入してみました！&lt;br&gt;
ただ、シンセレネシスだと4L缶となってしまい、400ml足りない&lt;br&gt;
(Renesis用ならキッチリ合せておこうよ...)らしいので、&lt;br&gt;
残りの400mlは&lt;a href=&quot;https://amzn.asia/d/cEHFiJQ&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;PCVバルブクリーナー&lt;/a&gt;というものを勧められたので試しに入れてみました。&lt;br&gt;
一応ロータリーエンジンにも実績あると言っていたので信じます！！！&lt;/p&gt;
&lt;h2 id=&quot;下回り洗浄&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%B8%8B%E5%9B%9E%E3%82%8A%E6%B4%97%E6%B5%84&quot; aria-label=&quot;下回り洗浄 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;下回り洗浄&lt;/h2&gt;
&lt;p&gt;雪国や潮風に当たる環境で走行するならやっといたほうがいいと進められたのですが、&lt;br&gt;
いまのところその予定はない...&lt;br&gt;
ただ！もう15年選手となる車なので、奮発しちゃいました！&lt;br&gt;
(ムダヅカイジャナイヨ！)&lt;/p&gt;
&lt;h2 id=&quot;金額明細&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%87%91%E9%A1%8D%E6%98%8E%E7%B4%B0&quot; aria-label=&quot;金額明細 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;金額明細&lt;/h2&gt;
&lt;p&gt;ドドーンと公開しちゃいます！&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 133.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAbCAYAAAB836/YAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHIUlEQVR42i2T6VeU5xmH3yY9TeKx5iTWRnu0aYytbaLVY422MRoVjbjhUm1d4oayCKIEZpgZZnlnZWaYfWc2mQGBMUpRDIusAkpQiAvEtRo1jUtM2qZ/wdUD5sN1nvN8uc59P7/fI1x1f8RV1wqu2JfRL/6FIcsyrnrXMVi+gvPGJXSKH3Letp4+Szo9llX0WNLpNq+mTZtGr2kFg7aVXC5fzGXrIkY8yxFG/GsZld5s9nCuoZrO+irOnkjQWF1BT1OK8+2N9LafoaftM3o7WujpaqWvu43z59oZGhriepObC9o5DJUv5aJ1GcKwbz1D1uU8vd3P18/+x/CXt7j/9SMefvOI73/4N9/95xnffv+UJ98+4umzxzx+8i8ePXrI0ycP+O6H/3KzI0ZnyUzaFXPpM69AuGRL54J2EV8NnOLWnXv09/UyMnyFe1/d5v79O9y9d5O7d29y+/YI/7xznVs3rjFy7Qvu3hrmwcMHXGn0cFb6B9o1H9BjWoHQoVlKV+lCbnbXMjh0hfbWJtpamujqbKOvp4OR4UFu3rjMl8OXGL56kWuXLzD4+TmuX+nnzu3rDHxazj8Oz6Rdl8Z5SzpC3ZEFnC6ax8CpAJ0dHTQ3nuTihS7amhro7WphaKCbK4PdDH3eQX9PMwN9rQz0tjDUf5aRqxc5d8xIMns6LbrltGs/RPDunUVo3+9pjIqcrq+lrjJAQyrOZycTdDan6G0/QU/bcbpb6uhuqaWzqYbm+gS9Z1Nc6mvlTERJ9MAMGko/4JRsAYJu81uIG6dRXV5AdYWdpL+MuNdApd9AY52PpuPPaaxxc6raSUOVk9qwhaaUl+4zVdT7ZQT3zySRP4vUkbkIpeunolg3hQpdNl6LCptYRMwj4rXI8FnlJIN6aiJGqoJ64h41lT6RYyEjdZEyGutC1Lil2Ha+RSBzBlX5sxGUGVORrJyAU/p3PFY1XrMMp1GK0yQl4lZTGdCSCGiJeTXEPGqibhVxr5pKv5ZPk27CxhzEjZNw7nqL2MHZCOpNbyJPfw2vdDNhjwGvRYGx9DB2QzEhh4qjfi3HwsYx6SiVfpHKgEgiIFIbtxEU96BaOwHL9l/jz/wdgnL9r5B9NAFfyQbiAdPYqg6DhJCjlJhHQ03EQCpexrGwgZqwnuqwjuqKUUTq4hYC6h3IV4/HsGUy1h3TEGTpv0C6cjweSQYhjxF7mQJ7mRyXRYHPpiLs1RL2aPHb1XhtKhxmOVZDCSaxCI9NS0S/G1n6K4ibJqHbPBlBsWYihUtfxq/eg9euw6iRUG5S4LWrcVmVBFxa4kEjEZ+WmF9HzKcj7teNhZWqdFKh24Nk1UuUZryOuGEigmTlqxxa/FN8ym1UhqyEbAoqHCrCLhX+cjmJoI4TlRZqo0bqYiZqo4axlY/HTNRXOQmJu5GsGod87WsYtkxBOLJsPAVLfoJXtpmY30zEpSHkUOIySQm71CSDBmqiJqor9CSCzwOJe1XUjEqPlo8JC9NeRrH2dczb3kQ4kjaBvEUCruIMKtx6DIp8QnYlTqMEm66IoF1BTdRAMqQl4lZy1KumpkJPTUhHKmahQpdFYdp41BvewLztNwgFy8eRs1DA/sk6Ih4D7jIpEddo39SE7KVjNRkVJEer4teQ8KnHziq/yPGomYgpD8nqiag3TMa2422EvCU/Y988AUdhBsfCVtzGYsIOJVVBHUm/SFVg9GfoSPo0RJ2K5zgUxB1ykl41EWMu0jVvoFo/GfvOtxGy33+RXXMEXNK/kYpaCVqlmJV5xFylJH+cKO4pJeKUEXXKibrkHHUpiNlLCJpLiBjzkKyZimbjVOzbZyDsnf8Cu+YKiFmrsCgPI83dgTTvYzTF+xGL92OU52CQZ6MvOYDuR4yybAzFWWiLsikvyUSWMZ3yXe8Szp6HsGf+C+ydLyDdthCD7CDFOduQ5u1EcXgPskO7UBdlIkoPoCnOHGP0ri3KRFeYibHkIMYjO9BseQdf1ntUHvozQs6SceQufgXV3qW4y0pxGSTYdZ9gVhVgKs1HL8tBV5KFVrIfbUkWeukBjJIDmKRZ2FQFGAq2Iv51Jp798/Ht+xOCdN1U5GumEJTvpPXUCU6nEjTUxak7GiARslPh1OMxKygXCylT5lMmz6VMlo1Zlo1VeQjdwQ0UrZiEesNvce+dh2D9+B38+97ljOsQlwcv0nW2hbbmRlob62lIJTmeDJMIOgjYtDj0UsoU+RikWRil+7Eo89HmZZC76CUK036Ja88chFD2H6mXLOSLWg0PvnnMhf4Bensv0NfbR2tzE6cb6jmZOkY85MFr1WHRFI+9tUmeg11fiP7QJkaDzV/6Kvqt0xFqi96jW7+MG4ksHnYFuNvi4Xqjg/4qka6ogkZ3AUc12/EWrkHcvYCSrbMoWDOd3JXTyE2bRub7E9kxWyB30YsUrfw5/wc/um8mf1PvUwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 07 02 22 43 42&quot;
        title=&quot;&quot;
        src=&quot;/static/bad9ddd91ef55f86846637c8d47df37e/5a190/2023-07-02-22-43-42.png&quot;
        srcset=&quot;/static/bad9ddd91ef55f86846637c8d47df37e/772e8/2023-07-02-22-43-42.png 200w,
/static/bad9ddd91ef55f86846637c8d47df37e/e17e5/2023-07-02-22-43-42.png 400w,
/static/bad9ddd91ef55f86846637c8d47df37e/5a190/2023-07-02-22-43-42.png 800w,
/static/bad9ddd91ef55f86846637c8d47df37e/c1b63/2023-07-02-22-43-42.png 1200w,
/static/bad9ddd91ef55f86846637c8d47df37e/07a9c/2023-07-02-22-43-42.png 1440w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
20マンぎり行かないかな〜と思ってたら足出た(笑)&lt;br&gt;
そいえば驚いたのですが、今の発煙筒って車のガラス割る機能も備えてるんですって！&lt;br&gt;
忘れないようにせな...&lt;/p&gt;
&lt;h2 id=&quot;おまけ代車はmazda3&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%81%8A%E3%81%BE%E3%81%91%E4%BB%A3%E8%BB%8A%E3%81%AFmazda3&quot; aria-label=&quot;おまけ代車はmazda3 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;(おまけ)代車はMazda3&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsTAAALEwEAmpwYAAAD9ElEQVR42h2QW0+aBwCGv7Spy7LEdG3Wlp6xaq1O2ipqh6gcFAqC9RsgYAU5KQgICHI+g4IWzJodsmTrbpYsjevs1h2u+jt2sZv9if2AZ9G79+p9n/cRRoYHeDAkZXR4ALVyEuO8AvX0GLNPHqHTKPh8Sc+zxQXEZRM26zOcTitulxOH3YrX4yK46cPvXWPT72bNYUUYn5ShVsqZmx5nTilHNKp4LmpxWxfw2nU4RQ1exyJ2ywJm4xwL89OoVZ+h005jebbA+qqZ1RUjNssiDvsSgs6sYWJyHIVyGqvViiiK6Iw6DAYteo3ybMhhM7GxbsHlfEpiw4plcYYlg4KIe4Fu2Us6aKIcX8Fl0yBIpINc7xtENqFArpjjvmyMvodyjCaREdkjHo9P0XdbyoO+AeSfDuNYmEOvmGB+XoljSUV+1cS3ZTe5iAOD+gmCZzNGLl9jxekmFElw2HnJ0Rdf89PrE45fv2UzHGNKpUGmmOHe8CiSew+YGpNjMWlYFpdphC38sL9O2DpP2hlESGcr/PbrX7x58463J3/w85t3HP/yO4etDnajSL+0n9vSAfqGZVy8IqH32k2U/UOEFdMY1Gq+aYX5qrzGhlXL9kYO4eTkT6q1NiazlVyxzvHxW+JmO/rLt1H1XkV76QaqjyXMXpKg+eQW2t6r2O+M4J6YxWRYJpuMEPKu8nRej95gQ/ju+x9RzujQ680sGkXa6mUCwhX8H9zE8+EtnvdIcPZcw3dBQvDcFWznLxOSq3hutJBIpDio5UjvbONxe7BYVxE63S9RqZ+yLNow6oxEJDJavcN0PxrisOcujfM36PZIOeq9z27/JJ6hcdY1ZpwOH9l0hnJul0ImRXw7QTKZRQgEgng9fsKRKPlInMd9w0yOTmHpHyPQP0Xn3iyhayO4tCIlcZ34QyXmJRuJnTzRcJRKucJOPMFWKEIsGkcoFYq0W232mw32a02q90f5t+cCf/dcYOrOIIoZI+GrI7zuGeGdcIsN6UNWPEEK+QqpnSTdzhHhrQjB4BZejw+htbdPtVyhmM1Rq9eJbW/zvreXV9dvMjf6hIh0in/uivx3cZH35wYJmGwkcxUKuSKZdJbOiy6RcASvx0soGEI4aLWpV2uUiyWqpTKVep2trS2iOzvkKhWSuxlKkRSvTD4OnF4qjQbFQol0apdyscxh+wXRcAS/z49rzYXQrNWpVWs06nWajcZZ+WkuFgpk07vkczk2gx580QAHRwfUK1Uy6Qy7ySStvRbtVovgRoDgZpAV28qpwwKnHiulErVK+UzyXnOPZqNJMZ8jn0kTC2+Rjcd5+eKAVDxGLp0iGY/R7XTOIE4vhzY3CPj9/A/QkWunIZy9jwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 07 02 22 54 20&quot;
        title=&quot;&quot;
        src=&quot;/static/ba97881ea5bbd22c2f7e9d972fad2616/5a190/2023-07-02-22-54-20.png&quot;
        srcset=&quot;/static/ba97881ea5bbd22c2f7e9d972fad2616/772e8/2023-07-02-22-54-20.png 200w,
/static/ba97881ea5bbd22c2f7e9d972fad2616/e17e5/2023-07-02-22-54-20.png 400w,
/static/ba97881ea5bbd22c2f7e9d972fad2616/5a190/2023-07-02-22-54-20.png 800w,
/static/ba97881ea5bbd22c2f7e9d972fad2616/c1b63/2023-07-02-22-54-20.png 1200w,
/static/ba97881ea5bbd22c2f7e9d972fad2616/29007/2023-07-02-22-54-20.png 1600w,
/static/ba97881ea5bbd22c2f7e9d972fad2616/d2c28/2023-07-02-22-54-20.png 4000w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
マツダコネクトもサクサクうごくし、内装おしゃれだし、世界観作り込まれてて、そして安い。&lt;br&gt;
もっと売れててもおかしくないと思うぐらいいい車でした！&lt;br&gt;
RX-8にマツコネをつけるか、Mazda3にロータリーエンジンを積むか、&lt;br&gt;
悩ましいなぁ（笑）&lt;br&gt;
でもやっぱりRX-8のほうが楽しいですね...&lt;br&gt;
高級指向なので、静音性がなかなか高かったです。&lt;br&gt;
故にエキゾーストがあまり聞こえてこない...&lt;br&gt;
ジレンマなんだなぁ...&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;いやー最初の見積もりで18マンって言われてて、故障箇所見つかって30マンとか、それ以上になったらどうしよう...&lt;br&gt;
と怯えていたのですが、いい意味で裏切られた結果となったってのがお気持ちです。&lt;br&gt;
うちの子はフルラッピングしてるので、洗車機に入れられないのですが、&lt;br&gt;
そこは気を利かせてくれたようで電話で断りを入れてくれました！嬉しいね(^^)&lt;br&gt;
あと、ドンピシャ今月から、&lt;br&gt;
&lt;strong&gt;車の車検シールの貼る位置が、運転席側の右端に貼ることが義務化&lt;/strong&gt;されたそうです！&lt;br&gt;
そして、ディーラーの担当者さんが、右上に張ったにも関わらず、&lt;br&gt;
右上を意識しすぎて、前のやつ(バックミラーの裏に貼ってあった)やつを&lt;br&gt;
剥がし忘れるというお茶目なシーンがありましたとさ。
では(&lt;em&gt;^^&lt;/em&gt;)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[GatsbyでComponents内クエリを書くと、useStaticQueryがエラーを吐く話]]></title><description><![CDATA[経緯 サイドバーにタグ一覧コンポーネントや月別アーカイブコンポーネントを作成していると、発生した。 なかなかググっても解決策は出てこず...  解決策(あくまで自分の環境での話) 基本、GraphiQL…]]></description><link>https://yukimakura.cc/GatsbyでComponents内クエリを書くと、useStaticQueryがエラーを吐く話/</link><guid isPermaLink="false">https://yukimakura.cc/GatsbyでComponents内クエリを書くと、useStaticQueryがエラーを吐く話/</guid><pubDate>Sun, 02 Jul 2023 22:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;経緯&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E7%B5%8C%E7%B7%AF&quot; aria-label=&quot;経緯 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;経緯&lt;/h2&gt;
&lt;p&gt;サイドバーにタグ一覧コンポーネントや月別アーカイブコンポーネントを作成していると、発生した。&lt;br&gt;
なかなかググっても解決策は出てこず...&lt;/p&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;text&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-text line-numbers&quot;&gt;&lt;code class=&quot;language-text&quot;&gt;Unhandled Runtime Error
Close
One unhandled runtime error found in your files. See the list below to fix it:


Error in function useStaticQuery in ./.cache/static-query.js:83
The result of this StaticQuery could not be fetched. This is likely a bug in Gatsby and if refreshing the page does not fix it, please open an issue in https://github.com/gatsbyjs/gatsby/issues

./.cache/static-query.js:83
Open in Editor
  81 |     return context[query].data
  82 |   } else {
&gt; 83 |     throw new Error(
     |          ^
  84 |       `The result of this StaticQuery could not be fetched.\n\n` +
  85 |         `This is likely a bug in Gatsby and if refreshing the page does not fix it, ` +
  86 |         `please open an issue in https://github.com/gatsbyjs/gatsby/issues`&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 43%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAABMUlEQVR42pXR20rDQBDG8TyGbbWHZNNkT0m23SQ9i+iNIPRhFLyo7/6XTStWtEgvfvDtzO4wsNHefbCvDjzLdx6TV55OuizervIiD0TePuDUPZXcUmbBpuPkDiNWyEl7kYp/i8rSU/slM9fgqpqmXlHXS5QqSYVCCEl6RpykiSKJM+LJ0TFPifx8TdvsaOstfrai0J7CeLR0qPxIyxlazU7nChV60iFiTTKRJGNJPMq7HIUtkknG8C6h3xvRuxl2Qv7PoD9m0B8xvE3IUkM8zoiMc2hf48oKawtkrshzeRUpFcYY8kwRWVdRNHO8L6icpawMRfnN2kBjjcZcoPVRWCayxjD3inplOu3W0G4Mi61lsbM0a4Ob627o18NL8jBwKhTT9EScSX/Ww6/+6P8h3PkE2FETWUyGhkQAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 07 02 22 05 42&quot;
        title=&quot;&quot;
        src=&quot;/static/5415f2f1351fb7e4467984ab54ea848a/5a190/2023-07-02-22-05-42.png&quot;
        srcset=&quot;/static/5415f2f1351fb7e4467984ab54ea848a/772e8/2023-07-02-22-05-42.png 200w,
/static/5415f2f1351fb7e4467984ab54ea848a/e17e5/2023-07-02-22-05-42.png 400w,
/static/5415f2f1351fb7e4467984ab54ea848a/5a190/2023-07-02-22-05-42.png 800w,
/static/5415f2f1351fb7e4467984ab54ea848a/c1b63/2023-07-02-22-05-42.png 1200w,
/static/5415f2f1351fb7e4467984ab54ea848a/387f2/2023-07-02-22-05-42.png 1518w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;解決策あくまで自分の環境での話&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A7%A3%E6%B1%BA%E7%AD%96%E3%81%82%E3%81%8F%E3%81%BE%E3%81%A7%E8%87%AA%E5%88%86%E3%81%AE%E7%92%B0%E5%A2%83%E3%81%A7%E3%81%AE%E8%A9%B1&quot; aria-label=&quot;解決策あくまで自分の環境での話 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;解決策(あくまで自分の環境での話)&lt;/h2&gt;
&lt;p&gt;基本、GraphiQLでクエリを作成・確認をしてからそれを脳死コピペで使っていたのが原因だった。&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 417px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB5UlEQVR42p2U/3KaQBDHfZAmCCpyHpwUzU35IQdqTKzOJEaTzvQF+v5P8O3sTrAYCG39Y+c4WD58v7vL9bxoDRXvYMsFRtMSg8BgqAoMlIGlDFxVYKkMviuDXBlMp/Ss5Jy26A2CgkG0cfycoy8zuNJAS4NjkCPWj/DnG+hwiXuZQXgxbrwE/UnWiF51QcoqlQQVQYnDfI9fegc/P8It3uCZVxzutohmW9jhmvMbQDdcwtePZyDtncDgViSwog304oTX7IST3uNF77HQO7jJAe582w60JhkskbLlukJOEDGGeo9x8RPDaANLJPjixbAoxCeWCeSGq0uFFZChKUT8jEl6xGi6hCNz2DJvhTFw/HUFWbPMLxFQpOck28/hfXuCXLxhNHuA02L1j2WR4mYcny3T2kgUCZyggEheMJpv2XJ/0g7tUc3E7P5dYc7rxyT6EI0XQbrsMpAAVLfKMpWALFuVZZHCDgp48RO8+Pm8une7y1rXLd96yYXl5jikGIRrriMBHVVyXf862DR/pPBjEo0IAaX5gWH0wDX91HIdyPZbgPxclQy1fcOK/x0YLpswqi8p5f837W5KE7hqwBy/u7OdQBqj6l51+lgivR5YNeUaWKdC6vj/wlrPwwpyDawVeA2kDvwNL5NswDOuaiAAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 07 02 22 11 06&quot;
        title=&quot;&quot;
        src=&quot;/static/85b60b719d3ab6feb074bb259117a8bc/f27fb/2023-07-02-22-11-06.png&quot;
        srcset=&quot;/static/85b60b719d3ab6feb074bb259117a8bc/772e8/2023-07-02-22-11-06.png 200w,
/static/85b60b719d3ab6feb074bb259117a8bc/e17e5/2023-07-02-22-11-06.png 400w,
/static/85b60b719d3ab6feb074bb259117a8bc/f27fb/2023-07-02-22-11-06.png 417w&quot;
        sizes=&quot;(max-width: 417px) 100vw, 417px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;br&gt;
みんなquery名が &lt;code class=&quot;language-text&quot;&gt;MyQuery&lt;/code&gt;となってしまっており、&lt;br&gt;
どうやら基本的にはクエリ名の競合はNGなようだ。&lt;br&gt;
クエリ名をみんなバラバラにしたところ、&lt;br&gt;
エラーが出なくなった。&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;h3&gt;圧倒的初見殺しッッッ！&lt;/h3&gt;   
皆さんもお気をつけて。   
(^^)ノシ</content:encoded></item><item><title><![CDATA[Gatsbyブログに月別アーカイブを追加]]></title><description><![CDATA[前提条件 GraphQLのスキーマとして、gatsby-starter-blog…]]></description><link>https://yukimakura.cc/Gatsbyブログに月別アーカイブを追加/</link><guid isPermaLink="false">https://yukimakura.cc/Gatsbyブログに月別アーカイブを追加/</guid><pubDate>Thu, 29 Jun 2023 23:13:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;前提条件&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6&quot; aria-label=&quot;前提条件 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;前提条件&lt;/h2&gt;
&lt;p&gt;GraphQLのスキーマとして、&lt;a href=&quot;https://www.gatsbyjs.com/starters/gatsbyjs/gatsby-starter-blog&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;gatsby-starter-blog&lt;/a&gt;をベースとする&lt;/p&gt;
&lt;h2 id=&quot;コード&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B3%E3%83%BC%E3%83%89&quot; aria-label=&quot;コード permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;コード&lt;/h2&gt;
&lt;h3 id=&quot;コンポーネント作成&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E4%BD%9C%E6%88%90&quot; aria-label=&quot;コンポーネント作成 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;コンポーネント作成&lt;/h3&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;src/components&lt;/code&gt;下に&lt;code class=&quot;language-text&quot;&gt;monthlyarchives.js&lt;/code&gt;を作成し、以下コピペ&lt;/p&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;monthlyarchives.js&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;js&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-js line-numbers&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; graphql&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; useStaticQuery&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Link &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;gatsby&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react&apos;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; styled &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;@emotion/styled&apos;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;MonthlyArchives&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; Wrapper &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; styled&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;div&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;groupBy&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;array&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; getKey&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt;
        Array&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;from&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            array&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;reduce&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;map&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; cur&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; idx&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; src&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; key &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getKey&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cur&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; idx&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; src&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; list &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; map&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;list&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; list&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;push&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;cur&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; map&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;key&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;cur&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; map&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


    &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; data &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;useStaticQuery&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;graphql&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;
  query MonthlyArchiveQuery {
    allMarkdownRemark {
      edges {
        node {
          fields {
            slug
          }
          frontmatter {
            title
            date
          }
        }
      }
    }
  }
  &lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; groupingData &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;groupBy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;data&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;allMarkdownRemark&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;edges&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;item&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;item&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frontmatter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;date&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;7&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; item&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;node&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;item&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; item&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; yearGropuingDara &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;groupBy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;groupingData&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;substring&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Wrapper &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;center&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;h4&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;月別アーカイブ&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;h4&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;center&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;ol style&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;listStyle&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;paddingLeft&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;1em&apos;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;yearGropuingDara&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;yearGr&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
                        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;details&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;summary&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;yearGr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;yearGr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;flat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;Infinity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;summary&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;ol style&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;listStyle&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;paddingLeft&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;1em&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;groupBy&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;yearGr&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;month&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                                        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
                                            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                                &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;details&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                                    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;summary&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;month&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;month&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; x&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;flat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;Infinity&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;length&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;summary&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                                    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;ol style&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;listStyle&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;none&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;paddingLeft&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;1em&apos;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                                        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;month&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;sort&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;a&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;b&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frontmatter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;date &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frontmatter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;date&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;days&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                                                            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
                                                                &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                                                    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Link to&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;days&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fields&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;slug&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; itemProp&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                                                        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;days&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frontmatter&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;title&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;span&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                                                    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Link&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                                                &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;li&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                                            &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                                        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
                                                    &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;ol&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                                &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;details&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;li&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                                        &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                                    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
                                &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;ol&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;details&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;li&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
                    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;ol&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
        &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;Wrapper&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt; MonthlyArchives&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;使用例&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BD%BF%E7%94%A8%E4%BE%8B&quot; aria-label=&quot;使用例 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;使用例&lt;/h3&gt;
&lt;p&gt;あとは任意の場所にコンポーネントを宣言する&lt;/p&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;hoge.js&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;jsx&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-jsx line-numbers&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; graphql&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; useStaticQuery &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;gatsby&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react&apos;&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; MonthlyArchives &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;./monthlyarchives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;Hoge&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;


  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token plain-text&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;MonthlyArchives&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;こんな感じになる↓&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 270px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 130.5%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAaCAYAAAC3g3x9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAFdklEQVR42lWVa28bxxWG+VObFCiKBEbaOAYcrrgk90ZaDRo7cmq7aD+0cYGgQFoltmXREkWKoni/L28ixaUkU3fqZl3spCie4AxlO/lwOFzs7DPnvHPmHd9Be4pxN8hea4pdV2O3OcV2Q2PcDXG+EeHMszldtybjwFbvd1xNzZEY1TUOOkFO1g1OByY+Ae4LrKkx7gQ47oW42LDYa05xtCb/ba62HF5v3+HNdpSDjq5Au+5k4e36ZPHTdZMzz8J32NUnQFfjnw9+w+OHH/L3+7/l+b8/5rt//I5q4ibN9G2efnuD6vJtVp59wtNvf0/yhxscdgIqw+NemFeezauhjU+yOOwGGdX8PH70Ad88/IC/zXzI4n8/wU19xlruNqXFm8w+/oj84i3ysT+QenKDdvqWkkmyPOkbShKB+o77YSTkhZQvJV2+jPJq6HC0FuSkH1Yhq78eRdlvBdRckWRU9ytNRTsFHDr4hC6x19LYb2kcr+lcbTpcbDjqY9H2dN1QogtUnrcb/nchcol2AlPA/XaI7PynVBOfEZ/9I6lnNykuaTQzOuOezbarc7hmcty3ORk47DSDjBr6u5Dns4H5DuqT1XfbJvOxL4gvTLO48AWJpS/JZmaoVf5CIXePXObPFHP3qJVmKGTvkst8ST57HZm71CqPOB86nHkOvnMvzKj9J775l0Um9inxJ7dYfeGnWwyTfP45c9/dZPGHWzTSfjZqOhvVAF41wKCiq5DnXO6vnCmghU/SPewaVAt3SSzfI576mtjyQxZTD8kXH7GQ/Jpk6j6J9AMSK/d5sjBDbGmGpeWviCe/YiExQ6P6gMtNh9OBAD2Lg06Ag+Ztyqs6sXiEdGaa5Mo0/UaUUdtkvRrCq4Wp58PMvwgxFwszO2ewsBCikglytG5xMbQnQPmR3ZTjtFHT2GiY7PUiHPQcXnYiLCaiPI+ZtMoO+x2DccuvukFaZ7/p50B2+bptZPRJD6n2cDW86hTrdYtRJ8LOmsPumsNqOkoyYdKp2LxsWQr0sn59jhsaO25AZfYr4N61IRy2/fy0GeZ/2xavtyx+Gtn8f9vgygvw45bB1TDMccfPuD2JvabGUTfAuWcpqPSzAkq377ka9axOPhuhVLiD50bIZ6dJpyOsJMO4JZt2xWFu3iCVCJFNhSiuBMmlDXa7NhdDSzX/BOgK0E9+JcjzeJR4appONcLS8jTxZITFuEk+61DOO/znmcnTeYPYizDZVJDlpMmgbnHuSfP/Arjv+mlkdWJLUVIr06zVIvTqEdaqFvWCQSEbYT4eZXU5RDEdVONWTeOkK7anc9SbnPl3Je82NHqlAK2yjVuO0q87eK5Dr2LQKRt0qzb1ok1pVaeZ16lkdLzKxEyOeiFlYcf90PtN2REHcTVeDQx+3LKUJpcbljKLs36Qy6HBxSDEobRNU+Og5Wen4VduLeZ69BYoQk401GgXAqymIzTKUfK5KN/Hpnkac8imLdpli/yqRXk1qLSTDZSSDzu6si/Rb9zVJ8Add1JyvxRQfeg1HbxmBLdkUSuYNMsm7bJBq2hQzwYUzM2/BwpDjFr80ydCvr0f9lt+3myGebNl83rT5MoLc7Ye4nIok3VO+zq7rl/JIwdBTpdcIcIQHce9a+DbCelkiNn5OzxZmFbtU8k7lLI29YJFKWupnpNyv58zmYsZareHjbAqWbKU21M59vY1UErJZSLUio4a6wWbTsWiVjTpVk3cfEiVLDtdzei08gEGtZBydDkpYylZLqjJHeGnltVVVv26TbMcYWXFYTERYXZesrU460+0FlOQnZYkRLdTz1RZStm+8TVQQvpqwzUnJtCx2WyaeA2L9bq4ekj1nBjDqPE+JCGBvQX+DE8vcpaVeEYBAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 06 29 22 56 45&quot;
        title=&quot;&quot;
        src=&quot;/static/7dd677b64b1f7fc2b6163611e8fd230d/01bf6/2023-06-29-22-56-45.png&quot;
        srcset=&quot;/static/7dd677b64b1f7fc2b6163611e8fd230d/772e8/2023-06-29-22-56-45.png 200w,
/static/7dd677b64b1f7fc2b6163611e8fd230d/01bf6/2023-06-29-22-56-45.png 270w&quot;
        sizes=&quot;(max-width: 270px) 100vw, 270px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;ぶっちゃけクソコードだと思ってます（おい&lt;br&gt;
名前付きタプルとか使えばいいんだろうな〜&lt;br&gt;
とか思いながらめんどくさがって配列地獄になってしまった...&lt;br&gt;
というか！一番驚いたのが、groupBy関数が標準になってない事！&lt;br&gt;
厳密には、最近ようやく標準化されたけど、現状まだSafariしか対応してなさそう！&lt;br&gt;
&lt;br/&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 118.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAYAAAD6S912AAAACXBIWXMAAAsTAAALEwEAmpwYAAACtElEQVR42p2Va1ObQBSG/dHt+Entv2jV6VT7a/rBmV60moTlvoTALncWSAi8nV2IRlvTxA9ngF324VzeczjqKhfS1sKFTx/g03tUqamsySz04760vh6sk9fKHfcc9LWHYHaJ+eQcR4/A0kESEvBAg0gtFJmDLHXRlBRVYWFZuuo5z1zUhYsyt9Dk1vghD4vpBfzJxydgV9hYBlNE/gQ8fAALNHBmoOD34GyGLDaRxDZE7mIpJNTGsrAePeT6Bcyb4y2gDEU4aNkE+eI78phgWdhoC/NZyGgo+npj3rg+Bzcu4P14twVUUIpOHkgttExDxnXETEeV2RCpiTwxUCSmupfWpFO0pYUqp/Bnn+D9fP8CuAXuS1tB4/k9mH+HKJiC+ibmvo4wfEAUGwiDGQxK4C4cBLNz0FeBGxMuWjZFSb+BL26QRNJbC1UyUQURqY2IG6pYsXEJ//b4P0BpjYcuH7ytEwOVvBcUfUPR1bIgDvrGQ+ldISWnewA3BSsdrLmGZD5BuJgiZTpYQOD5OiJmInevkOpnewIfq0zRcoLIvgV1fiFY3CHw78FCc/DwUOCQAopOCj24Rcl+Yz3qsPSukWinbwCOKVAaZAQVI0giE4n1GSk5eyuQostNrLgGwQkSZiB3rt7goQTJbooIVjHBqnDQCheo5xDz6wNzKMPMTFWUghOshKOKJHu5qz0I73rPkOUh2TVcG/LFNBSJsTXWtoC7PaTDWEsMlauVHBRinInP3huB869IyYcdvVxYSsh5OENT2Koz+n9++MnD5K+QVdJdrGOCJtSQhgQp19Xa65HsClklXUMrJSGeumN3ngdg+RLYSzmkhhqqw/DcV05bwGfDQbhqaCrgQUIfgXQU9nqEFbGBONTQls6BnTMACwU8wdFKakw46jcqr4e34gb4BfHsBH8AuK4Mrn7kjSUAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 06 29 22 54 25&quot;
        title=&quot;&quot;
        src=&quot;/static/bf1ffe96e3d612e58fc7cc3c656dc826/5a190/2023-06-29-22-54-25.png&quot;
        srcset=&quot;/static/bf1ffe96e3d612e58fc7cc3c656dc826/772e8/2023-06-29-22-54-25.png 200w,
/static/bf1ffe96e3d612e58fc7cc3c656dc826/e17e5/2023-06-29-22-54-25.png 400w,
/static/bf1ffe96e3d612e58fc7cc3c656dc826/5a190/2023-06-29-22-54-25.png 800w,
/static/bf1ffe96e3d612e58fc7cc3c656dc826/6a6e9/2023-06-29-22-54-25.png 826w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;
↑きれいな &lt;code class=&quot;language-text&quot;&gt;&gt;&lt;/code&gt; の字。アスキーアートを感じた&lt;br&gt;
では(&lt;em&gt;^^&lt;/em&gt;)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[GatsbyブログにDisqusでコメント欄導入]]></title><description><![CDATA[Gatsbyは静的サイトなわけで、 当然コメントなどの動的コンテンツを扱えない。 今回はDisqusというサービスを導入して、ブログにコメント欄をお手軽に導入する話。 Disqus…]]></description><link>https://yukimakura.cc/GatsbyブログにDisqusでコメント欄導入/</link><guid isPermaLink="false">https://yukimakura.cc/GatsbyブログにDisqusでコメント欄導入/</guid><pubDate>Tue, 27 Jun 2023 21:30:00 GMT</pubDate><content:encoded>&lt;p&gt;Gatsbyは静的サイトなわけで、&lt;br&gt;
当然コメントなどの動的コンテンツを扱えない。&lt;br&gt;
今回はDisqusというサービスを導入して、ブログにコメント欄をお手軽に導入する話。&lt;/p&gt;
&lt;h2 id=&quot;disqusに登録する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#disqus%E3%81%AB%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B&quot; aria-label=&quot;disqusに登録する permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Disqusに登録する&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&quot;https://disqus.com/profile/login/?next=/profile/signup/intent/&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener noreferrer&quot;&gt;この画面でアカウント登録する&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;コメントを追加するブログの情報を入力する&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 487px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 108%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAWCAYAAADAQbwGAAAACXBIWXMAAAsTAAALEwEAmpwYAAACPUlEQVR42q1US27UQBCdG7HjNLBhzR24AELiCKzYsuYQLEBiQUKiTIZ4PNO2u93/T/VD3faEZBJmhoiSnspWl5+rXlX1ou97MMbAOUfXdWBdhxgjnmqL5eoXrq5XaDeb6pv1GimlpxMmIsREmHwCEQHIyAc+ygewuA3K+Q+QQZmmZyLQ3bPbmCOEXIzYsB7KWqx+XoLdNPDBQysFwTmUVBBCwHt/uOR7peSp0EFIsGGEUBaD1BDaQBkDXWFhnT+NcGc2ZQifMNiIQXsMJsCFSd+UaNb5AGEJGpWC0gbOe8TgYbR6UrdvCQcxggsJ4xy6geNyuQIbBLTzGLWBsQ7GWljrjme4by5lSJ/AXYSwEdIFECWkFKvfaf1XQufDLLiBDwFSe7SsNMag4xZcRigHKDtB2gxpMsYCTRgNQWiCdTQRls71XNSyCykbNH5ctDi/2uBiyXDVCLSDR8MMGmarb3tfwURELwndSNCW9sZm9qXErbRgZWy0q/PonIVWEkbr6st7wX7jHmxKsUAZnjJCyoiUkTIqaMZRDStJCFhvO4hRQhiHjkvEPJHfhbAeLv5jl1PJaka5OPZBp2RY1qktGUpZNdsyBq31g4ujTMFJc0hFtxiryCHGurvlJyGmed1yRYzptAz/ly1y7dqEkkGxho04u95gue5wdr0Fl2aq4t6diEdxL8OdNq/ffsLzV+/x4s0HPHv5Dh8/f5mbRcczLBrt4EOqXby86fHtvMH3ixZfzxtsB1nJyvnd+MfwG+fzuvwX4Sp9AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 06 27 21 38 08&quot;
        title=&quot;&quot;
        src=&quot;/static/a0aa3077f4b9594cbb80d573e77768f5/7b439/2023-06-27-21-38-08.png&quot;
        srcset=&quot;/static/a0aa3077f4b9594cbb80d573e77768f5/772e8/2023-06-27-21-38-08.png 200w,
/static/a0aa3077f4b9594cbb80d573e77768f5/e17e5/2023-06-27-21-38-08.png 400w,
/static/a0aa3077f4b9594cbb80d573e77768f5/7b439/2023-06-27-21-38-08.png 487w&quot;
        sizes=&quot;(max-width: 487px) 100vw, 487px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;自分のサイトにコーディングしていく&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%87%AA%E5%88%86%E3%81%AE%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AB%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E3%81%97%E3%81%A6%E3%81%84%E3%81%8F&quot; aria-label=&quot;自分のサイトにコーディングしていく permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;自分のサイトにコーディングしていく&lt;/h2&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;disqusのプラグインを導入する&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;shell&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;shell&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-shell line-numbers&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--save&lt;/span&gt; gatsby-plugin-disqus&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;ol start=&quot;4&quot;&gt;
&lt;li&gt;様々なフレームワークから選択を迫られるので、&lt;code class=&quot;language-text&quot;&gt;Gatsby&lt;/code&gt;を選択し、&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;下図の赤枠で囲った領域を&lt;code class=&quot;language-text&quot;&gt;gatsby-config.js&lt;/code&gt;に追記しとく&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 691px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 70%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAACBklEQVR42q2PX2/SYBSH+Q4uM3qzTUAKkwQppTKLfxbWFrZsaqLGT+O1n8R7r6fRzIvtymSOPy0tpTLHxuaECehixmMojS5Rplk8yZPfyXnf98l5A4ef2+w0m+zutWjutfi42+LgsM15K9Dtf+OwfUS702H/qM9O+yufusfnFzI4hsF3/lcFTjqv6R2sU3NbmHaNiuVg2HWqtTq241JzXKxaHcdtYDeao3Rc7Lo7Oncb1D9se73luASG1vflKtdzjxAXHpOYf+ilpD1BVEc5nEWVZWLZFWLKitePI8CgT6/XpmjYlMzTWF4WTZstw2KrUvUoGhaVqkPZo+bnrz5w0nlDd3+DktmgWK5QNi2KlSqbJdMTWKZN1bAo+Ri2g7u9Mxbvy5slg1BmmYhyD0FZITS3RDCtE5N0bkoasqRzVdIJSzqCpBOUdKYlnZk/MBIWDablZeLzD5Dv3mc2lScuqsRFDSWpMjdEVEmJKuGUxkxKY3oM/oYmU+IC0eGDjEZIKTCr6Ii3NCRFI5nVCKY1BFEdK/pdmNIQkirBG3nCdxaZur3I05TKi2SO52KOZ8mct/U/C6/IBRKZJa5lloik80TkAmI6T8ZHlPMk5DxBuXAmnvDdVpmJaJaLgsJlQeHSkIjCpKAw4TPpzy/8BU949KXLq7UNVtfWWX278ZOXa6fwZ8N7Z/EDgBMLZfhAxL8AAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 06 27 21 42 24&quot;
        title=&quot;&quot;
        src=&quot;/static/2e37c896809f001167f25e46aa2da5c3/e185b/2023-06-27-21-42-24.png&quot;
        srcset=&quot;/static/2e37c896809f001167f25e46aa2da5c3/772e8/2023-06-27-21-42-24.png 200w,
/static/2e37c896809f001167f25e46aa2da5c3/e17e5/2023-06-27-21-42-24.png 400w,
/static/2e37c896809f001167f25e46aa2da5c3/e185b/2023-06-27-21-42-24.png 691w&quot;
        sizes=&quot;(max-width: 691px) 100vw, 691px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;br&gt;
5. 自分のサイトの埋め込みたい箇所にDisqusを埋め込む&lt;/p&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;example.js&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;jsx&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-jsx line-numbers&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; graphql&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; useStaticQuery &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;gatsby&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react&apos;&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; Disqus &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;gatsby-plugin-disqus&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;Hoge&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token literal-property property&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; previous&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; next&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; site&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token literal-property property&quot;&gt;markdownRemark&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; post &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  location&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; disqusConfig &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        &lt;span class=&quot;token literal-property property&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token interpolation&quot;&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;encodeURI&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;site&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;siteMetadata&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;siteUrl &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fields&lt;span class=&quot;token operator&quot;&gt;?.&lt;/span&gt;slug&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token interpolation-punctuation punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        &lt;span class=&quot;token literal-property property&quot;&gt;identifier&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; post&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;        &lt;span class=&quot;token literal-property property&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; siteTitle&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token plain-text&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Disqus&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;config&lt;/span&gt;&lt;span class=&quot;token script language-javascript&quot;&gt;&lt;span class=&quot;token script-punctuation punctuation&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;disqusConfig&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; pageQuery &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; graphql&lt;span class=&quot;token template-string&quot;&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;  query BlogPostBySlug(&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;    $id: String!&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;    $previousPostId: String&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;    $nextPostId: String&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;  ) {&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;    site {&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      siteMetadata {&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;        title&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;        siteUrl&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;    }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;    markdownRemark(id: { eq: $id }) {&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      id&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      excerpt(pruneLength: 160)&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      html&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      frontmatter {&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;        title&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;        date(formatString: &quot;MMMM DD, YYYY&quot;)&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;        description&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      fields{&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;        slug&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      tableOfContents&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      timeToRead&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;    }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;    previous: markdownRemark(id: { eq: $previousPostId }) {&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      fields {&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;        slug&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      frontmatter {&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;        title&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;    }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;    next: markdownRemark(id: { eq: $nextPostId }) {&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      fields {&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;        slug&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      frontmatter {&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;        title&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;      }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;    }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;  }&lt;/span&gt;
&lt;span class=&quot;token string&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token template-punctuation string&quot;&gt;`&lt;/span&gt;&lt;/span&gt;

&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;オプションアクションボタンを消す&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E6%B6%88%E3%81%99&quot; aria-label=&quot;オプションアクションボタンを消す permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;(オプション)アクションボタンを消す&lt;/h2&gt;
&lt;p&gt;デフォルトだと、以下のようなアクションボタンが付いてくる&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 720px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 35%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA7UlEQVR42o2QTUvDQBRF8///g7hRXLgurtz4sRGsuhCUKjRpEttUpzGd0mQmb45kJkiL1XrhzTyGN/fyTsSvchhjiJMJeZ6TTlJms8K/42RjzIXqFbFHSine1ILph0Iv9b7xYNjlWZ1hytcuH1uX6KdDbBMMVpenrO8vfG+qmGp0jEiLOFjFZzSLl++tou7oTMr8AZXc+L7WJcnVEc06GKa35xTPQ99X8zHZ3Qmmqb3hdHTNUmU/V7bifIUcaF24PTIE6bm1ItjW4Xpu3R/ZzdD1tQEboQWKxwP0eNAHyPbcLoZ/yeN4z9Gfc/6jLyqRIi0TzkzOAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 06 27 22 18 45&quot;
        title=&quot;&quot;
        src=&quot;/static/405a684bca8fe0276ae4185c310ffca4/37523/2023-06-27-22-18-45.png&quot;
        srcset=&quot;/static/405a684bca8fe0276ae4185c310ffca4/772e8/2023-06-27-22-18-45.png 200w,
/static/405a684bca8fe0276ae4185c310ffca4/e17e5/2023-06-27-22-18-45.png 400w,
/static/405a684bca8fe0276ae4185c310ffca4/37523/2023-06-27-22-18-45.png 720w&quot;
        sizes=&quot;(max-width: 720px) 100vw, 720px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;br&gt;
自分は不要と感じたので無効化する。&lt;br&gt;
&lt;br/&gt;
6. disqusの管理サイトに飛び、対象のサイトを選択し、&lt;code class=&quot;language-text&quot;&gt;Settings&lt;/code&gt;タブ→&lt;code class=&quot;language-text&quot;&gt;Reactions&lt;/code&gt;→&lt;code class=&quot;language-text&quot;&gt;Turn Reactions off&lt;/code&gt;をクリックする&lt;br&gt;
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 800px; &quot;
    &gt;
      &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 56.49999999999999%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABIElEQVR42qWRTUvDQBRF8/9/kUsXQhFE0IWbbsSFRJsmaTOZefN5ZCY1Nq1SihcOvHkkd+57U7FQwnlfSCT+VEonx+k8ak01dSIpEy19s6HbfJY6RU8MwiWdGdqxQcYO070hbY1sa3T/iqgGs3tfpooRrIMQJso0LA3LDYcfRDdYVc8rSMuNgPMgAlqDtcV0YRhjJORmnNox5DHdicuRSqopWUmb0hy+GLbdjo+mZT8ofP6oTJVmrHVzf6Fs5tz5DrdtT79XaCNY54jlxh/yBJlf9b3DY8Ncj9owKIWIEGLgKhlDGtTB0FBZ5zE243Ah4PyViMUZIT/BoEYqHyIz/qi+hA/4BL7bYe4fMTe3tA/PVFos/0Jp9MuazeqJu9WaL1/ZYKIxpYrZAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;2023 06 27 22 23 37&quot;
        title=&quot;&quot;
        src=&quot;/static/382c19b057552844a417cfd204f2d783/5a190/2023-06-27-22-23-37.png&quot;
        srcset=&quot;/static/382c19b057552844a417cfd204f2d783/772e8/2023-06-27-22-23-37.png 200w,
/static/382c19b057552844a417cfd204f2d783/e17e5/2023-06-27-22-23-37.png 400w,
/static/382c19b057552844a417cfd204f2d783/5a190/2023-06-27-22-23-37.png 800w,
/static/382c19b057552844a417cfd204f2d783/c1b63/2023-06-27-22-23-37.png 1200w,
/static/382c19b057552844a417cfd204f2d783/c8ad9/2023-06-27-22-23-37.png 1564w&quot;
        sizes=&quot;(max-width: 800px) 100vw, 800px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
        decoding=&quot;async&quot;
      /&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;すると、サイトの方でリアクションが消える&lt;/p&gt;
&lt;p&gt;以上。&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;当初は勉強がてらにコメントシステムも実装してみようかな〜とか思ったんです。&lt;br&gt;
(1インスタンスだけへちょいConohaのVPSを契約してるのでそいつを使おうかと)&lt;br&gt;
けど、スパム対策とか、セキュリティとかいろいろ考えるとめんどくさくなってきた（おい）ので、&lt;br&gt;
既存のサービスをマッシュアップしようとしたわけです。&lt;br&gt;
&lt;br/&gt;
どうやら、広告もついてきてしまうようですが、&lt;br&gt;
まぁサービスの運営維持費を考えれば当然のことですよね...&lt;br&gt;
なので、自分的には受け入れようと思います。&lt;br&gt;
では。(^^)ノシ&lt;/p&gt;</content:encoded></item><item><title><![CDATA[ブログ新設しました！]]></title><description><![CDATA[挨拶 みなさんこんにちは！ いやーとうとう作っちゃいましたよ！新ブログ！ 以前のブログはBloggerにお世話になっていましたが、 カスタムが大変 記事の編集のためのテキストエディタがなかなか使いにくい MarkDownで書けるようにカスタムしても、テキストエディタはHTML…]]></description><link>https://yukimakura.cc/ブログ新設しました/</link><guid isPermaLink="false">https://yukimakura.cc/ブログ新設しました/</guid><pubDate>Mon, 26 Jun 2023 21:15:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;挨拶&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%8C%A8%E6%8B%B6&quot; aria-label=&quot;挨拶 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;挨拶&lt;/h2&gt;
&lt;p&gt;みなさんこんにちは！&lt;br&gt;
いやーとうとう作っちゃいましたよ！新ブログ！&lt;br&gt;
以前のブログはBloggerにお世話になっていましたが、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;カスタムが大変&lt;/li&gt;
&lt;li&gt;記事の編集のためのテキストエディタがなかなか使いにくい
&lt;ul&gt;
&lt;li&gt;MarkDownで書けるようにカスタムしても、テキストエディタはHTMLしか基本受け付けないので変な補完が入る&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;...まぁそんなこんなな悩みを抱えていた矢先、&lt;br&gt;
&lt;strong&gt;Gatsbyというフレームワークを知る。&lt;/strong&gt;&lt;br&gt;
Web界隈では結構有名なフレームワークらしくって、&lt;br&gt;
何よりも&lt;strong&gt;Github Pagesにデプロイできる&lt;/strong&gt;と聞き居ても立ってもおられず...&lt;/p&gt;
&lt;h2 id=&quot;具体的に乗り換えて感動した話&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AB%E4%B9%97%E3%82%8A%E6%8F%9B%E3%81%88%E3%81%A6%E6%84%9F%E5%8B%95%E3%81%97%E3%81%9F%E8%A9%B1&quot; aria-label=&quot;具体的に乗り換えて感動した話 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;具体的に乗り換えて感動した話&lt;/h2&gt;
&lt;h3 id=&quot;reactベースなのでコンポーネントごとに要素を管理できる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#react%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AA%E3%81%AE%E3%81%A7%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E3%81%94%E3%81%A8%E3%81%AB%E8%A6%81%E7%B4%A0%E3%82%92%E7%AE%A1%E7%90%86%E3%81%A7%E3%81%8D%E3%82%8B&quot; aria-label=&quot;reactベースなのでコンポーネントごとに要素を管理できる permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;reactベースなのでコンポーネントごとに要素を管理できる&lt;/h3&gt;
&lt;p&gt;BloggerではクソデカモノリスCSSをいじらなければ行けなかったので&lt;/p&gt;
&lt;h3 id=&quot;gitにてお手軽にバージョン管理できる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#git%E3%81%AB%E3%81%A6%E3%81%8A%E6%89%8B%E8%BB%BD%E3%81%AB%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86%E3%81%A7%E3%81%8D%E3%82%8B&quot; aria-label=&quot;gitにてお手軽にバージョン管理できる permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Gitにてお手軽にバージョン管理できる&lt;/h3&gt;
&lt;p&gt;事故ったときに死に戻りできるのは良きかな良きかな&lt;/p&gt;
&lt;h3 id=&quot;プラグインが豊富でお手軽にカスタマイズできる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%8C%E8%B1%8A%E5%AF%8C%E3%81%A7%E3%81%8A%E6%89%8B%E8%BB%BD%E3%81%AB%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%A7%E3%81%8D%E3%82%8B&quot; aria-label=&quot;プラグインが豊富でお手軽にカスタマイズできる permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;プラグインが豊富でお手軽にカスタマイズできる&lt;/h3&gt;
&lt;p&gt;自分的には、ソースコードをペタペタすることが多いので、&lt;br&gt;
お手軽にソースコードのシンタックスハイライトや、行表示、コピーボタンなどが実現できるのが&lt;br&gt;
衝撃的でしたね...&lt;/p&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;胸キュン.sh&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;shell&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-shell line-numbers&quot;&gt;&lt;code class=&quot;language-shell&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token builtin class-name&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;こんな感じのやつができるのがトキメイた♥&quot;&lt;/span&gt;&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;デプロイ前に手元で動作確認できる&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4%E5%89%8D%E3%81%AB%E6%89%8B%E5%85%83%E3%81%A7%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D%E3%81%A7%E3%81%8D%E3%82%8B&quot; aria-label=&quot;デプロイ前に手元で動作確認できる permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;デプロイ前に手元で動作確認できる&lt;/h3&gt;
&lt;p&gt;Bloggerでは、記事単体ではできたのですが、サイトレイアウトの変更では出来なかった事なので...&lt;/p&gt;
&lt;h2 id=&quot;今後拡張していきたいこと2023-06-26現在&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E4%BB%8A%E5%BE%8C%E6%8B%A1%E5%BC%B5%E3%81%97%E3%81%A6%E3%81%84%E3%81%8D%E3%81%9F%E3%81%84%E3%81%93%E3%81%A82023-06-26%E7%8F%BE%E5%9C%A8&quot; aria-label=&quot;今後拡張していきたいこと2023 06 26現在 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;今後拡張していきたいこと(2023-06-26現在)&lt;/h2&gt;
&lt;h3 id=&quot;月別アーカイブ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%9C%88%E5%88%A5%E3%82%A2%E3%83%BC%E3%82%AB%E3%82%A4%E3%83%96&quot; aria-label=&quot;月別アーカイブ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;月別アーカイブ&lt;/h3&gt;
&lt;p&gt;前のブログであった機能なので...&lt;/p&gt;
&lt;h3 id=&quot;tocの自動追従機能&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#toc%E3%81%AE%E8%87%AA%E5%8B%95%E8%BF%BD%E5%BE%93%E6%A9%9F%E8%83%BD&quot; aria-label=&quot;tocの自動追従機能 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;ToCの自動追従機能&lt;/h3&gt;
&lt;p&gt;カッチョイイから。&lt;/p&gt;
&lt;h3 id=&quot;頭出しボタン&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E9%A0%AD%E5%87%BA%E3%81%97%E3%83%9C%E3%82%BF%E3%83%B3&quot; aria-label=&quot;頭出しボタン permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;頭出しボタン&lt;/h3&gt;
&lt;p&gt;あったらおしゃれ？（謎観念&lt;/p&gt;
&lt;h3 id=&quot;コメント&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88&quot; aria-label=&quot;コメント permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;コメント&lt;/h3&gt;
&lt;p&gt;意見を聞けたら良いがな&lt;/p&gt;
&lt;h3 id=&quot;タグ機能&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%82%BF%E3%82%B0%E6%A9%9F%E8%83%BD&quot; aria-label=&quot;タグ機能 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;タグ機能&lt;/h3&gt;
&lt;p&gt;関連付けたい&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;p&gt;Web界隈はあんまりやらないので結構いい勉強になりました。&lt;br&gt;
Gatsbyの環境をDockerで構築したのですが、&lt;br&gt;
ThinkPad X1C6ちゃんのRAMが制作開始当時は８GBしかなく結構カツカツでした(^&lt;em&gt;^;)&lt;br&gt;
中華から怪しい基盤を入手することによりCPUもRAMも性能アップを果たし、なんとか使えるように...&lt;br&gt;
それでもぶっちゃけGatsbyってビルド遅い気がするんですよね。&lt;br&gt;
聞いた話によると、Gatsbyよりもビルドが早かったりするものがあるようなので気にはなりますが、&lt;br&gt;
ひとまずこれで継続したいと思います。&lt;br&gt;
そんなこんなで！&lt;br&gt;
今後とも、「ゆきふるまくらの。」をよろしくお願いします。m(&lt;/em&gt; _)m&lt;/p&gt;</content:encoded></item><item><title><![CDATA[react-device-detectでお手軽にスマホ対応する]]></title><description><![CDATA[手順 npmかyarnでreact-device-detectをインストール 実装する 3行めでインポートして、 PCブラウザのみで表示したいコンテンツは でくくる。 スマホブラウザのみで表示したいコンテンツは でくくる。 以上。 補足 iPad AirではChrome…]]></description><link>https://yukimakura.cc/react-device-detectでお手軽にスマホ対応する/</link><guid isPermaLink="false">https://yukimakura.cc/react-device-detectでお手軽にスマホ対応する/</guid><pubDate>Mon, 26 Jun 2023 21:00:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;手順&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E6%89%8B%E9%A0%86&quot; aria-label=&quot;手順 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;手順&lt;/h2&gt;
&lt;h3 id=&quot;npmかyarnでreact-device-detectをインストール&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#npm%E3%81%8Byarn%E3%81%A7react-device-detect%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&quot; aria-label=&quot;npmかyarnでreact device detectをインストール permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;npmかyarnでreact-device-detectをインストール&lt;/h3&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;shell&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;bash&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-bash line-numbers&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;command-line-prompt&quot;&gt;&lt;span data-user=yukimakura data-host=ThinkPadX1C6.local&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; react-device-detect&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;実装する&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B&quot; aria-label=&quot;実装する permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;実装する&lt;/h3&gt;
&lt;div class=&quot;gatsby-code-title&quot;&gt;Hoge.js&lt;/div&gt;

          &lt;div class=&quot;gatsby-remark-prismjs-copy-button-container&quot;&gt;
            &lt;div class=&quot;gatsby-remark-prismjs-copy-button&quot; tabindex=&quot;0&quot; role=&quot;button&quot; aria-pressed=&quot;false&quot; onclick=&quot;gatsbyRemarkCopyToClipboard(this, this.parentNode.nextElementSibling)&quot;&gt;
              Copy
            &lt;/div&gt;
          &lt;/div&gt;
          
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;jsx&quot;&gt;&lt;pre style=&quot;counter-reset: linenumber NaN&quot; class=&quot;language-jsx line-numbers&quot;&gt;&lt;code class=&quot;language-jsx&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; graphql&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; useStaticQuery &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;gatsby&quot;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; React &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&apos;react&apos;&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; BrowserView&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; MobileView &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;react-device-detect&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;Hoge&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;


  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token plain-text&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;BrowserView&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token plain-text&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;ブラウザだけだよ！！！&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token plain-text&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;BrowserView&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token plain-text&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;MobileView&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token plain-text&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;スマホだけだよ！！&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token plain-text&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;MobileView&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token plain-text&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;span aria-hidden=&quot;true&quot; class=&quot;line-numbers-rows&quot; style=&quot;white-space: normal; width: auto; left: 0;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;3行めでインポートして、&lt;br&gt;
PCブラウザのみで表示したいコンテンツは&lt;br&gt;
&lt;code class=&quot;language-text&quot;&gt;&amp;lt;BrowserView&gt;&lt;/code&gt;でくくる。&lt;br&gt;
スマホブラウザのみで表示したいコンテンツは&lt;br&gt;
&lt;code class=&quot;language-text&quot;&gt;&amp;lt;MoblieView&gt;&lt;/code&gt;でくくる。&lt;br&gt;
以上。&lt;/p&gt;
&lt;h3 id=&quot;補足&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E8%A3%9C%E8%B6%B3&quot; aria-label=&quot;補足 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;補足&lt;/h3&gt;
&lt;p&gt;iPad AirではChromeでもSafariでもモバイル扱いになる様子。&lt;br&gt;
当方のiPad AirでのChromeでは、PC版をリクエストしても、モバイルのままの様子。&lt;/p&gt;
&lt;h2 id=&quot;〆&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%E3%80%86&quot; aria-label=&quot;〆 permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; height=&quot;20&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;20&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;〆&lt;/h2&gt;
&lt;h2&gt;簡単杉&lt;/h2&gt;    
こんなにお手軽に切り替え実装ができるだなんて夢にも思わんかったわ...    &lt;br/&gt;
ホント進歩してますな...   </content:encoded></item></channel></rss>