<feed xmlns="http://www.w3.org/2005/Atom" xmlns:cc="http://web.resource.org/cc/">
	<title>リリース情報 [text.Baldanders.info]</title>
	<link rel="alternate" type="text/html" href="https://text.baldanders.info/release/" />
	<link rel="self" type="application/atom+xml" href="https://text.baldanders.info/release/index.xml" />
	<id>tag:text.Baldanders.info,2026-05-29:/release</id>
	<updated>2026-05-29T18:13:56+09:00</updated>
	<subtitle>自作パッケージ・ツールと気になるツール・サービスのリリース情報について。</subtitle>
	<icon>https://text.baldanders.info/images/avatar.jpg</icon>
	<logo>https://text.baldanders.info/images/avatar.jpg</logo>

	<entry>
		<title>Struct2pflag v0.2.0 をリリースした</title>
		<category term="release" label="release" scheme="https://text.baldanders.info/release/" />
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/release/2026/05/struct2pflag-v0_2_0-is-released/" />
		<id>tag:text.Baldanders.info,2026-05-29:/release/2026/05/struct2pflag-v0_2_0-is-released/</id>
		<published>2026-05-29T18:13:56+09:00</published>
		<updated>2026-05-29T09:23:53+00:00</updated>
		<summary>最近ようやくこれを使う機会があったが，いくつか機能が足りなかったので，それらを追加して v0.2.0 としてリリースした。</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;昨年 &lt;a href=&#34;https://github.com/goark/struct2pflag&#34; target=&#34;_blank&#34; title=&#34;goark/struct2pflag: automatically registers struct fields as flags for your Go command-line tools.&#34;&gt;&lt;code&gt;goark/struct2pflag&lt;/code&gt;&lt;/a&gt; の&lt;a href=&#34;https://text.baldanders.info/release/2025/11/struct2pflag-is-released/&#34; target=&#34;_blank&#34; title=&#34;hymkor/struct2flag から fork した goark/struct2pflag をリリースした&#34;&gt;最初のリリース&lt;/a&gt;を行ったが，その後，骨折やら何やらでずうっと止まっていた。
最近ようやくこれを使う機会があったが，いくつか機能が足りなかったので，それらを追加して v0.2.0 としてリリースした。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/goark/struct2pflag/releases/tag/v0.2.0&#34; target=&#34;_blank&#34;&gt;Release v0.2.0 · goark/struct2pflag&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;追加機能のひとつは環境変数をバインドする &lt;code&gt;BindEnv()&lt;/code&gt; 関数である。
こんな感じに使う。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Env&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;struct&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TopN&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;           &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;`env:&amp;#34;TOP_N&amp;#34; pflag:&amp;#34;top-n,n,number of top tags&amp;#34;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Wait&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Duration&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;`env:&amp;#34;WAIT&amp;#34;  pflag:&amp;#34;wait,w,wait duration&amp;#34;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TopN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Wait&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Second&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;struct2pflag&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;BindEnv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Fprintln&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Stderr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;struct2pflag&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;BindDefault&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pflag&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;本当は &lt;a href=&#34;https://github.com/hymkor/struct2env&#34; target=&#34;_blank&#34; title=&#34;hymkor/struct2env: `struct2env` binds environment variables to struct fields according to their env tags.&#34;&gt;&lt;code&gt;hymkor/struct2env&lt;/code&gt;&lt;/a&gt; を使いたかったのだが， &lt;code&gt;string&lt;/code&gt; 型しかサポートしてないため泣く泣く自作した。
コードを書いたのは AI だけど（笑）&lt;/p&gt;
&lt;p&gt;もうひとつは &lt;code&gt;Bind()&lt;/code&gt; および &lt;code&gt;BindEnv()&lt;/code&gt; 関数で対応する型を増やしたこと。
今のところ，対応状況は以下のようになっている。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Type&lt;/th&gt;
					&lt;th style=&#34;text-align: center&#34;&gt;&lt;code&gt;Bind&lt;/code&gt;&lt;/th&gt;
					&lt;th style=&#34;text-align: center&#34;&gt;&lt;code&gt;BindEnv&lt;/code&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;bool&lt;/code&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;int8&lt;/code&gt; / &lt;code&gt;int16&lt;/code&gt; / &lt;code&gt;int32&lt;/code&gt; / &lt;code&gt;int64&lt;/code&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;uint&lt;/code&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;uint8&lt;/code&gt; / &lt;code&gt;uint16&lt;/code&gt; / &lt;code&gt;uint32&lt;/code&gt; / &lt;code&gt;uint64&lt;/code&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;float32&lt;/code&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;time.Duration&lt;/code&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
					&lt;td style=&#34;text-align: center&#34;&gt;✓&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;本当は &lt;code&gt;[]string&lt;/code&gt; もサポートしたかったが，キリがないので見送った。
必要にかられれば対応する。
&lt;a href=&#34;https://github.com/spf13/pflag&#34; target=&#34;_blank&#34; title=&#34;spf13/pflag: Drop-in replacement for Go&amp;#39;s flag package, implementing POSIX/GNU-style --flags.&#34;&gt;&lt;code&gt;spf13/pflag&lt;/code&gt;&lt;/a&gt; がサポートしている型って物凄くあるので，全部カバーするのは面倒なのだ。
いや，どうせコードを書くのは AI なんだけど。&lt;/p&gt;
&lt;h2&gt;参考図書&lt;/h2&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/4814401191?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/41X10&amp;#43;elsuL._SL160_.jpg&#34; width=&#34;125&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/4814401191?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;初めてのGo言語 第2版 ―他言語プログラマーのためのイディオマティックGo実践ガイド&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Jon Bodner (著), 武舎 広幸 (翻訳)&lt;/dd&gt;
    &lt;dd&gt;オライリー・ジャパン 2025-08-05 (Release 2025-08-05)&lt;/dd&gt;
    &lt;dd&gt;単行本（ソフトカバー）&lt;/dd&gt;
    &lt;dd&gt;4814401191 (ASIN), 9784814401192 (EAN), 4814401191 (ISBN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;第2版。 Generics の説明が大幅に改訂されたらしい。練習問題も追加されている。&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2025-11-02&#34;&gt;2025-11-02&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- 初めてのGo言語 第2版 --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/B0CFL1DK8Q?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/51BmDUG6D0L._SL160_.jpg&#34; width=&#34;125&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/B0CFL1DK8Q?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;Go言語 100Tips ありがちなミスを把握し、実装を最適化する impress top gearシリーズ&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Teiva Harsanyi (著), 柴田 芳樹 (著)&lt;/dd&gt;
    &lt;dd&gt;インプレス 2023-08-18 (Release 2023-08-18)&lt;/dd&gt;
    &lt;dd&gt;Kindle版&lt;/dd&gt;
    &lt;dd&gt;B0CFL1DK8Q (ASIN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;&lt;a href=&#34;https://book.impress.co.jp/books/1122101133&#34;&gt;版元&lt;/a&gt;で PDF 版を購入可能。事実上の Effective Go とも言える充実の内容。オリジナルは敢えてタイトルに “tips” という単語を入れるのを避けたのに邦題が「100 Tips」とかなっていて，原作者がお怒りとの噂（あくまで噂）&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2023-08-18&#34;&gt;2023-08-18&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- Go言語 100Tips --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/4621300253?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/41meaSLNFfL._SL160_.jpg&#34; width=&#34;122&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/4621300253?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)&lt;/dd&gt;
    &lt;dd&gt;丸善出版 2016-06-20&lt;/dd&gt;
    &lt;dd&gt;単行本（ソフトカバー）&lt;/dd&gt;
    &lt;dd&gt;4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;5&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;著者のひとりは（あの「バイブル」とも呼ばれる）通称 “K&amp;amp;R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。と思ったら絶版状態らしい（2025-01 現在）。復刊を望む！&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2016-07-13&#34;&gt;2016-07-13&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- プログラミング言語Go --&gt;
</content>
	</entry><entry>
		<title>Hugo v0.162.0 がリリースされた【Security fix あり】</title>
		<category term="release" label="release" scheme="https://text.baldanders.info/release/" />
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/release/2026/05/hugo-v0_162_0-is-released/" />
		<id>tag:text.Baldanders.info,2026-05-27:/release/2026/05/hugo-v0_162_0-is-released/</id>
		<published>2026-05-27T16:01:18+09:00</published>
		<updated>2026-05-27T07:15:01+00:00</updated>
		<summary>このバージョンから既定で HTML フォーマットの入力ファイルを拒否するようになった。</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;&lt;a href=&#34;https://gohugo.io/&#34; target=&#34;_blank&#34; title=&#34;The world&amp;#39;s fastest framework for building websites&#34;&gt;Hugo&lt;/a&gt; v0.162.0 がリリースされた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/gohugoio/hugo/releases/tag/v0.162.0&#34; target=&#34;_blank&#34;&gt;Release v0.162.0 · gohugoio/hugo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://go.dev/&#34; target=&#34;_blank&#34;&gt;Go&lt;/a&gt; コンパイラおよび関連パッケージのセキュリティ・アップデートがあるのはいつものことなのだが，今回は注意すべき修正がある。&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote cite=&#34;https://github.com/gohugoio/hugo/releases/tag/v0.162.0&#34;&gt;&lt;p&gt;&lt;strong&gt;Security fixes and hardening in Hugo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The following changes either fix a concrete issue or reduce the default attack surface of &lt;code&gt;hugo&lt;/code&gt; builds.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disallow &lt;code&gt;text/html&lt;/code&gt; content files by default (&lt;a href=&#34;https://github.com/gohugoio/hugo/commit/e41a06447d&#34; target=&#34;_blank&#34;&gt;e41a064&lt;/a&gt;). A new &lt;code&gt;security.allowContent&lt;/code&gt; policy gates which content media types may be used for pages under &lt;code&gt;/content&lt;/code&gt;. &lt;code&gt;text/html&lt;/code&gt; is denied by default; sites that rely on hand-authored or adapter-emitted HTML content can opt back in with &lt;code&gt;security.allowContent = [&#39;.*&#39;]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Re-check &lt;code&gt;security.http.urls&lt;/code&gt; on every redirect hop in &lt;code&gt;resources.GetRemote&lt;/code&gt; (&lt;a href=&#34;https://github.com/gohugoio/hugo/commit/86fbb0f7a8&#34; target=&#34;_blank&#34;&gt;86fbb0f&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Reject symlinked entries in &lt;code&gt;resources.Get&lt;/code&gt; (&lt;a href=&#34;https://github.com/gohugoio/hugo/commit/f8b5fa09a6&#34; target=&#34;_blank&#34;&gt;f8b5fa0&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;https://github.com/gohugoio/hugo/releases/tag/v0.162.0&#34;&gt;Release v0.162.0 · gohugoio/hugo&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;このうち，最初の項目にまんまと引っかかった。
こんな感じ：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ERROR error building site: assemble: failed to create page from pageMetaSource 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/remark/2015/gnupg-2-1-8: &amp;#34;/path/to/content/remark/2015/gnupg-2-1-8.html:1:1&amp;#34;: 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;access denied: &amp;#34;text/html&amp;#34; is not whitelisted in policy &amp;#34;security.allowContent&amp;#34;; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;the current security configuration is:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[security]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  allowContent = [&amp;#39;! ^text/html$&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  enableInlineShortcodes = false
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;どうも既定では HTML ファイルを拒否する設定になったらしい。
それならば HTML を許可すればいいだろうと， “&lt;code&gt;!&lt;/code&gt;” を取って&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;allowContent&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;^text/html$&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;と &lt;code&gt;hugo.toml&lt;/code&gt; に書いたら markdown ファイルが全拒否になってしまった（笑）。HTML と markdown のみを許可するには&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;security&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;allowContent&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;^text/markdown$&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;^text/html$&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;などとする必要がある。
ちなみに &lt;a href=&#34;https://gohugo.io/&#34; target=&#34;_blank&#34; title=&#34;The world&amp;#39;s fastest framework for building websites&#34;&gt;Hugo&lt;/a&gt; では&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote cite=&#34;https://gohugo.io/content-management/formats/&#34;&gt;Create your content using Markdown, HTML, Emacs Org Mode, AsciiDoc, Pandoc, or reStructuredText.&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;https://gohugo.io/content-management/formats/&#34;&gt;Content formats&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;と多様なフォーマットに対応している。
この中で HTML 形式を受け入れるのは（malware を埋め込まれたりとか）リスクが高いと判断して安全側に倒したものと思われる。
実運用では &lt;code&gt;security.allowContent&lt;/code&gt; に，実際に使用するドキュメントフォーマットのみを列挙するのが正しいのだろう。&lt;/p&gt;
&lt;p&gt;エラーの出た &lt;code&gt;gnupg-2-1-8.html&lt;/code&gt; はこのブログにおける&lt;a href=&#34;https://text.baldanders.info/remark/2015/gnupg-2-1-8/&#34; target=&#34;_blank&#34; title=&#34;GnuPG 2.1.8 released&#34;&gt;最初の記事&lt;/a&gt;で，元々は Movable Type 用に書いた記事で「そのまま読み込ませてコンパイルできるかなぁ」と試してみた記事だった。
記事本文の HTML 記述はともかく front matter を整えるのが面倒くさそうなので旧ブログからの移行は諦めたが。
今なら変換ツールを AI に書かせたんだろうなぁ（笑）&lt;/p&gt;
&lt;p&gt;最近は GitHub Copilot に &lt;a href=&#34;https://gohugo.io/&#34; target=&#34;_blank&#34; title=&#34;The world&amp;#39;s fastest framework for building websites&#34;&gt;Hugo&lt;/a&gt; のアップデートと redeploy をさせているのだが，今回の障害の分析と対処はすべてお任せで作業を完遂できた。
「Hugo のマイナーバージョンアップは問題が出やすいから気をつけて」と指示に添えたのが功を奏したようだ。
自力でやったら悩みまくって，&lt;a href=&#34;https://gohugo.io/documentation/&#34; target=&#34;_blank&#34; title=&#34;Hugo Documentation&#34;&gt;ドキュメント&lt;/a&gt;を調べまくって30分くらい時間を無駄にしてただろう。
いい時代になったものである。&lt;/p&gt;
</content>
	</entry><entry>
		<title>Ubuntu 26.04 LTS へのアップグレード</title>
		<category term="release" label="release" scheme="https://text.baldanders.info/release/" />
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/release/2026/05/upgrade-ubuntu-26_04-lts/" />
		<id>tag:text.Baldanders.info,2026-05-19:/release/2026/05/upgrade-ubuntu-26_04-lts/</id>
		<published>2026-05-19T12:40:42+09:00</published>
		<updated>2026-05-19T04:05:30+00:00</updated>
		<summary>システムがなにか言ってくるまで様子見を決め込んでいたのだが，今朝ようやく通知が来た。</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;先月の4月に &lt;a href=&#34;https://www.ubuntu.com/&#34; target=&#34;_blank&#34; title=&#34;The leading operating system for PCs, IoT devices, servers and the cloud | Ubuntu&#34;&gt;Ubuntu&lt;/a&gt; 26.04 LTS がリリースされた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://lists.ubuntu.com/archives/ubuntu-announce/2026-April/000323.html&#34; target=&#34;_blank&#34;&gt;Ubuntu 26.04 (&amp;ldquo;Resolute Raccoon&amp;rdquo;) LTS released&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://documentation.ubuntu.com/release-notes/26.04/&#34; target=&#34;_blank&#34;&gt;Ubuntu 26.04 LTS release notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;急ぐ必要はないし，システムがなにか言ってくるまで様子見を決め込んでいたのだが，今朝ようやく通知が来た。&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./01-upgrade-ubuntu-26-04-lts.png&#34;&gt;&lt;img src=&#34;./01-upgrade-ubuntu-26-04-lts.png&#34; srcset=&#34;./01-upgrade-ubuntu-26-04-lts.png 733w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;とりあえずパッケージを最新状態にしてから&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./02-upgrade-ubuntu-26-04-lts.png&#34;&gt;&lt;img src=&#34;./02-upgrade-ubuntu-26-04-lts.png&#34; srcset=&#34;./02-upgrade-ubuntu-26-04-lts.png 582w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;アップグレード開始。&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./03-releasenote.png&#34;&gt;&lt;img src=&#34;./03-releasenote.png&#34; srcset=&#34;./03-releasenote.png 613w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;このウィンドウが出たときに脳内 BGM があの&lt;a href=&#34;https://www.youtube.com/watch?v=aZ6wQG9Rhdk&#34; target=&#34;_blank&#34; title=&#34;ロックリバーへ｜『あらいぐまラスカル』オープニングテーマ - YouTube&#34;&gt;名曲&lt;/a&gt;になった（笑）&lt;/p&gt;
&lt;p&gt;サードパーティのパッケージについてのアラート。&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./04-foreign-packages.png&#34;&gt;&lt;img src=&#34;./04-foreign-packages.png&#34; srcset=&#34;./04-foreign-packages.png 609w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;今はスクショ撮って AI に「何書いてあんの？」って聞けば教えてくれるので，ホンマ助かる。
ここは大人しく「はい」を選択して続行する。
サードパーティ・パッケージのリポジトリは一旦無効化されるが，アップグレード後に手動で回復させる。&lt;/p&gt;
&lt;p&gt;アップグレード自体は特にトラブルなく完了した。&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./05-reboot.png&#34;&gt;&lt;img src=&#34;./05-reboot.png&#34; srcset=&#34;./05-reboot.png 675w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;再起動も問題ないかな。&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./06-reboot.png&#34;&gt;&lt;img src=&#34;./06-reboot.png&#34; srcset=&#34;./06-reboot.png 1031w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;このウィンドウが出たときに脳内 BGM が（以下略）&lt;/p&gt;
&lt;p&gt;このあと簡単な設定を行う。&lt;/p&gt;
&lt;p&gt;&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./07-setting.png&#34;&gt;&lt;img src=&#34;./07-setting.png&#34; srcset=&#34;./07-setting.png 1031w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./08-setting.png&#34;&gt;&lt;img src=&#34;./08-setting.png&#34; srcset=&#34;./08-setting.png 1031w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./09-setting.png&#34;&gt;&lt;img src=&#34;./09-setting.png&#34; srcset=&#34;./09-setting.png 1031w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./10-setting.png&#34;&gt;&lt;img src=&#34;./10-setting.png&#34; srcset=&#34;./10-setting.png 1031w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/p&gt;
&lt;p&gt;んー。
こんな感じかな。
バージョン等を確認しておく。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cat /etc/os-release
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PRETTY_NAME=&amp;#34;Ubuntu 26.04 LTS&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAME=&amp;#34;Ubuntu&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;VERSION_ID=&amp;#34;26.04&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;VERSION=&amp;#34;26.04 LTS (Resolute Raccoon)&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;VERSION_CODENAME=resolute
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ID=ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ID_LIKE=debian
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;HOME_URL=&amp;#34;https://www.ubuntu.com/&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SUPPORT_URL=&amp;#34;https://help.ubuntu.com/&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;BUG_REPORT_URL=&amp;#34;https://bugs.launchpad.net/ubuntu/&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PRIVACY_POLICY_URL=&amp;#34;https://www.ubuntu.com/legal/terms-and-policies/privacy-policy&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UBUNTU_CODENAME=resolute
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LOGO=ubuntu-logo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;セキュリティ関連ツールもチェックしておくか。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ gpg --version
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpg (GnuPG) 2.4.8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;libgcrypt 1.12.0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Copyright (C) 2025 g10 Code GmbH
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;License GNU GPL-3.0-or-later &amp;lt;https://gnu.org/licenses/gpl.html&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This is free software: you are free to change and redistribute it.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;There is NO WARRANTY, to the extent permitted by law.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Home: /home/username/.gnupg
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;サポートしているアルゴリズム:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;圧縮: 無圧縮, ZIP, ZLIB, BZIP2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;うーん。
&lt;a href=&#34;https://gnupg.org/&#34; target=&#34;_blank&#34; title=&#34;The GNU Privacy Guard&#34;&gt;GnuPG&lt;/a&gt; を 2.5 系に上げる気はなさそうだな。
今ちょっと&lt;a href=&#34;https://kris.fail/posts/opgpvslpgp/&#34; target=&#34;_blank&#34; title=&#34;OpenPGPとLibrePGP―GnuPGとそれ以外の実装での対立&#34;&gt;面倒くさい&lt;/a&gt;ことになってるし，しょうがないか。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ssh -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenSSH_10.2p1 Ubuntu-2ubuntu3.2, OpenSSL 3.5.5 27 Jan 2026
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://www.openssh.com/&#34; target=&#34;_blank&#34;&gt;OpenSSH&lt;/a&gt; も &lt;a href=&#34;https://www.openssl.org/&#34; target=&#34;_blank&#34;&gt;OpenSSL&lt;/a&gt; も微妙にバージョンが古い気がするが&amp;hellip; まぁいいか。&lt;/p&gt;
&lt;p&gt;動作確認で Snap 版 &lt;a href=&#34;https://www.remmina.org/&#34; target=&#34;_blank&#34; title=&#34;Remmina remote desktop client - Remmina&#34;&gt;Remmina&lt;/a&gt; を起動したら，こんなのが表示される。&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./remmina-snap.png&#34;&gt;&lt;img src=&#34;./remmina-snap.png&#34; srcset=&#34;./remmina-snap.png 643w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;あれ？ これ設定がリセットされてる？ 念のためもう一度設定しておこう。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo snap connect remmina:audio-record :audio-record
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo snap connect remmina:avahi-observe :avahi-observe
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo snap connect remmina:cups-control :cups-control
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo snap connect remmina:mount-observe :mount-observe
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo snap connect remmina:password-manager-service :password-manager-service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo snap connect remmina:ssh-keys :ssh-keys
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo snap connect remmina:ssh-public-keys :ssh-public-keys
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;サードパーティのパッケージを作業の覚え書きとして挙げておく。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;a href=&#34;https://launchpad.net/ubuntu/&amp;#43;ppas&#34; target=&#34;_blank&#34; title=&#34;Personal Package Archives : Ubuntu&#34;&gt;PPA&lt;/a&gt; 版 &lt;a href=&#34;https://git-scm.com/&#34; target=&#34;_blank&#34;&gt;Git&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://launchpad.net/~git-core/&amp;#43;archive/ubuntu/ppa&#34; target=&#34;_blank&#34;&gt;Git stable releases : “Ubuntu Git Maintainers” team&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;a href=&#34;https://cli.github.com/&#34; target=&#34;_blank&#34; title=&#34;GitHub CLI&#34;&gt;GitHub CLI&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/cli/cli/blob/trunk/docs/install_linux.md&#34; target=&#34;_blank&#34;&gt;Installing gh on Linux and BSD&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;a href=&#34;https://github.com/nodesource&#34; target=&#34;_blank&#34;&gt;NodeSource&lt;/a&gt; 版 &lt;a href=&#34;https://nodejs.org/&#34; target=&#34;_blank&#34;&gt;Node.js&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://nodesource.com/products/distributions&#34; target=&#34;_blank&#34;&gt;Node.js Distributions&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://text.baldanders.info/release/2025/05/nodejs-v24-is-released/&#34; target=&#34;_blank&#34; title=&#34;Node.js v24 がリリースされた&#34;&gt;v24&lt;/a&gt; LTS 版を選択&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;a href=&#34;https://www.pgadmin.org/&#34; target=&#34;_blank&#34; title=&#34;pgAdmin - PostgreSQL Tools&#34;&gt;pgAdmin 4&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.pgadmin.org/download/pgadmin-4-apt/&#34; target=&#34;_blank&#34;&gt;Download&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;a href=&#34;https://code.visualstudio.com/&#34; target=&#34;_blank&#34; title=&#34;Visual Studio Code - Code Editing. Redefined&#34;&gt;VS Code&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://code.visualstudio.com/docs/setup/linux&#34; target=&#34;_blank&#34;&gt;Running Visual Studio Code on Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;input checked=&#34;&#34; disabled=&#34;&#34; type=&#34;checkbox&#34;&gt; &lt;a href=&#34;https://launchpad.net/~xtradeb/&amp;#43;archive/ubuntu/apps&#34; target=&#34;_blank&#34; title=&#34;xtradeb applications : “xtradeb packaging” team&#34;&gt;xtradeb applications&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ungoogled-software/ungoogled-chromium&#34; target=&#34;_blank&#34; title=&#34;ungoogled-software/ungoogled-chromium: Google Chromium, sans integration with Google&#34;&gt;Ungoogled Chromium&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://keepassxc.org/&#34; target=&#34;_blank&#34; title=&#34;KeePassXC Password Manager&#34;&gt;KeePassXC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;おー。
全部 &lt;code&gt;resolute&lt;/code&gt; バージョンに対応してるな。
待ってた甲斐があったな（笑）&lt;/p&gt;
&lt;h2&gt;「ソフトウェアとアップデート」をインストールする&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.ubuntu.com/&#34; target=&#34;_blank&#34; title=&#34;The leading operating system for PCs, IoT devices, servers and the cloud | Ubuntu&#34;&gt;Ubuntu&lt;/a&gt; 26.04 LTS から APT リポジトリを GUI で管理できる「ソフトウェアとアップデート」がなくなってしまった。
ただ，リポジトリにはあるらしいのでインストール可能。&lt;/p&gt;
&lt;p&gt;「ソフトウェアとアップデート」のパッケージ名って何だっけ？ よく分からないのでアプリセンターで検索したらあったよ。&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./app-center.png&#34;&gt;&lt;img src=&#34;./app-center.png&#34; srcset=&#34;./app-center.png 1342w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;ここからインストールして事なきを得た。&lt;/p&gt;
&lt;p&gt;多分 &lt;a href=&#34;https://www.ubuntu.com/&#34; target=&#34;_blank&#34; title=&#34;The leading operating system for PCs, IoT devices, servers and the cloud | Ubuntu&#34;&gt;Ubuntu&lt;/a&gt; 側はアプリセンターに統一したいんだろうけど APT リポジトリ管理が隠蔽されてるのは困るのよ。
サードパーティのリポジトリ設定が正しいか確認するのに GUI の「ソフトウェアとアップデート」を使ってるし OS アップグレード設定もこれで行っている。&lt;/p&gt;
&lt;p&gt;もうちょっと考えてほしい。
少なくとも LTS 版でやることじゃないよなぁ。&lt;/p&gt;
&lt;h2&gt;ブックマーク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gihyo.jp/admin/clip/01/ubuntu-topics/202604/24&#34; target=&#34;_blank&#34;&gt;Ubuntu 26.04 LTS “Resolute Raccoon”のリリース | gihyo.jp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gihyo.jp/admin/serial/01/ubuntu-recipe/0908&#34; target=&#34;_blank&#34;&gt;第908回　Ubuntu 26.04 LTSの変更点 ［25.10→26.04 LTS編］ | gihyo.jp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gihyo.jp/admin/serial/01/ubuntu-recipe/0909&#34; target=&#34;_blank&#34;&gt;第909回　Ubuntu 26.04 LTSの変更点 ［24.04→26.04 LTS編］ | gihyo.jp&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考&lt;/h2&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/4295013498?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/51Z5QFGJTFL._SL160_.jpg&#34; width=&#34;125&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/4295013498?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;スーパーユーザーなら知っておくべきLinuxシステムの仕組み&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Brian Ward (著), 柴田 芳樹 (翻訳)&lt;/dd&gt;
    &lt;dd&gt;インプレス 2022-03-08 (Release 2022-03-08)&lt;/dd&gt;
    &lt;dd&gt;単行本（ソフトカバー）&lt;/dd&gt;
    &lt;dd&gt;4295013498 (ASIN), 9784295013495 (EAN), 4295013498 (ISBN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;&lt;a href=&#34;https://book.impress.co.jp/books/1121101019&#34;&gt;版元で PDF 版が買える&lt;/a&gt;。セキュリティ・エリアにも持ち込めるよう紙の本を買ったのだが，&lt;a href=&#34;https://technical-book-reading-2.connpass.com/event/272189/&#34;&gt;オンライン読書会&lt;/a&gt;が始まったので PDF 版も購入。Linux システムの扱い方に関するリファレンス本として優れている。最初に軽く流し読みして，必要に応じて該当項目を拾い読みしていけばいいだろう。&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2023-02-11&#34;&gt;2023-02-11&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- Linuxシステムの仕組み --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/B01MS6RPN2?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/317EiafRmTL._SL160_.jpg&#34; width=&#34;160&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/B01MS6RPN2?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;SP Silicon Power シリコンパワー USBメモリ 8GB USB3.1 / USB3.0 亜鉛合金ボディ 防水 防塵 耐衝撃 Jewel J80 SP008GBUF3J80V1TJA&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;シリコンパワー (Release 2017-02-01)&lt;/dd&gt;
    &lt;dd&gt;Personal Computers&lt;/dd&gt;
    &lt;dd&gt;B01MS6RPN2 (ASIN), 4712702655278 (EAN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;ブータブル USB 作成用に購入。ひたすらデザインで決めた（笑） 以前に同じデザインの &lt;a href=&#34;https://www.amazon.co.jp/dp/B01NBU1OS5?tag=baldandersinf-22&amp;linkCode=ogi&amp;th=1&amp;psc=1&#34;&gt;32GB 版&lt;/a&gt;を買ったが，最小サイズで買い直した。現在は在庫切れ？ 状態。&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2022-07-17&#34;&gt;2022-07-17&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- シリコンパワー USBメモリ 8GB USB3.1 --&gt;
</content>
	</entry><entry>
		<title>Amazon PA-API 改め Creators API v0.16.0 をリリース</title>
		<category term="release" label="release" scheme="https://text.baldanders.info/release/" />
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/release/2026/05/pa-api-v0-16-0-is-released/" />
		<id>tag:text.Baldanders.info,2026-05-06:/release/2026/05/pa-api-v0-16-0-is-released/</id>
		<published>2026-05-06T12:39:52+09:00</published>
		<updated>2026-05-06T03:53:26+00:00</updated>
		<summary>PA-APIv5 から Amazon Creators API への移行，型変更，バリデーション強化について。</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;現行の Amazon Product Advertising API (PA-API) v5 が 2026-05-15 で廃止になるのに伴い &lt;a href=&#34;https://affiliate-program.amazon.com/creatorsapi/docs/en-us/introduction&#34; target=&#34;_blank&#34; title=&#34;Creators API&#34;&gt;Creators API&lt;/a&gt; への移行が必要なのだが，拙作の &lt;a href=&#34;https://github.com/goark/pa-api&#34; target=&#34;_blank&#34; title=&#34;goark/pa-api: Go client for the Amazon Creators API&#34;&gt;&lt;code&gt;goark/pa-api&lt;/code&gt;&lt;/a&gt; パッケージのユーザの方に素晴らしい &lt;a href=&#34;https://github.com/goark/pa-api/pull/47&#34; target=&#34;_blank&#34; title=&#34;Migrate PAAPI v5 to Amazon Creators API by Oakes6 · Pull Request #47 · goark/pa-api&#34;&gt;pull request&lt;/a&gt; をいただいた。
これをマージして v0.16.0 としてリリースした。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/goark/pa-api/releases/tag/v0.16.0&#34; target=&#34;_blank&#34;&gt;Release v0.16.0 · goark/pa-api · GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;v1.x ならメジャーバージョンを上げなきゃいけないところだったけど v0 系なのでマイナーバージョンを上げるだけにした。
まだ v1 に上げる勇気がない（笑）&lt;/p&gt;
&lt;p&gt;パッケージ名がアレなのだが，パッケージ名を変えようとすると別リポジトリになってしまうので，README のサンプルコードに&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;creatorsapi&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;github.com/goark/pa-api&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;と書いてお茶を濁している。&lt;/p&gt;
&lt;p&gt;完全に言い訳なのだが，私は今 Amazon Associate の API が使えないのよ。
なんか月間で10アイテム以上売り上げないと API が使えないそうで，うちみたいにネットの端っこで細々と運営しているブログサイトじゃ無理だっての。
Amazon Associate の利用目的だって，単に書影を合法的に使いたいからという，超消極的なものだし。&lt;/p&gt;
&lt;p&gt;というわけで &lt;a href=&#34;https://affiliate-program.amazon.com/creatorsapi/docs/en-us/introduction&#34; target=&#34;_blank&#34; title=&#34;Creators API&#34;&gt;Creators API&lt;/a&gt; の対応はほとんど諦めてたんだけど，まさか PR を貰えるとは。
今回は貰った PR をそのままマージして GitHub Copilot にレビュー&amp;amp;修正を指示して&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;， README とかのドキュメントも Copilot に直させて。
私は1行もコードを書いてない。&lt;/p&gt;
&lt;p&gt;ホンマこのパッケージは，文字通り皆さんの貢献（contributions）のおかげで成り立ってると実感できる。
今後ともよろしくお願いします &lt;abbr class=&#34;emoji-chars&#34; title=&#34;ペコン&#34;&gt;🙇&lt;/abbr&gt;&lt;/p&gt;
&lt;h2&gt;利用者向けメモ&lt;/h2&gt;
&lt;p&gt;README にも書いてるけど，移行に関するメモを記しておく。&lt;/p&gt;
&lt;figure&gt;
&lt;blockquote cite=&#34;https://github.com/goark/pa-api#quick-migration-checklist&#34;&gt;&lt;p&gt;既存の PA-API v5 呼び出し箇所を移行する際は，この手順に従う:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;インポートパスは &lt;code&gt;github.com/goark/pa-api&lt;/code&gt; のままにする（必要であれば，例では &lt;code&gt;creatorsapi&lt;/code&gt; としてエイリアス可）&lt;/li&gt;
&lt;li&gt;クライアント認証情報を置き換える: AWS Access Key / Secret Key → Creators API Credential ID / Credential Secret&lt;/li&gt;
&lt;li&gt;マーケットプレイスはサーバー／クライアント側で設定する（&lt;code&gt;WithMarketplace&lt;/code&gt;）。クエリごとのマーケットプレイス引数には依存しないこと&lt;/li&gt;
&lt;li&gt;V1 の &lt;code&gt;offers&lt;/code&gt; 利用を &lt;code&gt;OffersV2&lt;/code&gt; に置き換える（&lt;code&gt;EnableOffersV2&lt;/code&gt;。&lt;code&gt;EnableOffers&lt;/code&gt; は互換エイリアスとして残している）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Merchant&lt;/code&gt;，&lt;code&gt;OfferCount&lt;/code&gt;，&lt;code&gt;PartnerType&lt;/code&gt; が効くという前提は外すこと。これらは無視される&lt;/li&gt;
&lt;li&gt;Credential Version（2.1/2.2/2.3）が呼び出すマーケットプレイスグループと一致していることを確認する&lt;/li&gt;
&lt;li&gt;429 および一時的な 5xx 応答に対して再試行とレート制御を追加する&lt;/li&gt;
&lt;li&gt;PR を作成する前に，プロジェクトの標準的なテスト／リントのワークフローでローカル検証を実行すること&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;&lt;q&gt;&lt;a href=&#34;https://github.com/goark/pa-api#quick-migration-checklist&#34;&gt;移行チェックリスト&lt;/a&gt;&lt;/q&gt;より&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2&gt;ブックマーク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://affiliate-program.amazon.com/creatorsapi/docs/en-us/introduction&#34; target=&#34;_blank&#34;&gt;Creators API&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://affiliate-program.amazon.com/creatorsapi/docs/en-us/migrating-to-creatorsapi-from-paapi&#34; target=&#34;_blank&#34;&gt;Migrating to Creators API from Product Advertising API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://affiliate-program.amazon.com/creatorsapi&#34; target=&#34;_blank&#34;&gt;Associates Central — Creators API portal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考図書&lt;/h2&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/4621300253?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/41meaSLNFfL._SL160_.jpg&#34; width=&#34;122&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/4621300253?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)&lt;/dd&gt;
    &lt;dd&gt;丸善出版 2016-06-20&lt;/dd&gt;
    &lt;dd&gt;単行本（ソフトカバー）&lt;/dd&gt;
    &lt;dd&gt;4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;5&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;著者のひとりは（あの「バイブル」とも呼ばれる）通称 “K&amp;amp;R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。と思ったら絶版状態らしい（2025-01 現在）。復刊を望む！&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2016-07-13&#34;&gt;2016-07-13&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- プログラミング言語Go --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/B0CFL1DK8Q?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/51BmDUG6D0L._SL160_.jpg&#34; width=&#34;125&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/B0CFL1DK8Q?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;Go言語 100Tips ありがちなミスを把握し、実装を最適化する impress top gearシリーズ&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Teiva Harsanyi (著), 柴田 芳樹 (著)&lt;/dd&gt;
    &lt;dd&gt;インプレス 2023-08-18 (Release 2023-08-18)&lt;/dd&gt;
    &lt;dd&gt;Kindle版&lt;/dd&gt;
    &lt;dd&gt;B0CFL1DK8Q (ASIN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;&lt;a href=&#34;https://book.impress.co.jp/books/1122101133&#34;&gt;版元&lt;/a&gt;で PDF 版を購入可能。事実上の Effective Go とも言える充実の内容。オリジナルは敢えてタイトルに “tips” という単語を入れるのを避けたのに邦題が「100 Tips」とかなっていて，原作者がお怒りとの噂（あくまで噂）&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2023-08-18&#34;&gt;2023-08-18&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- Go言語 100Tips --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/B0DNYMMBBQ?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/51wZEHUKZiL._SL160_.jpg&#34; width=&#34;125&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/B0DNYMMBBQ?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;Go言語で学ぶ並行プログラミング　他言語にも適用できる原則とベストプラクティス impress top gearシリーズ&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;James Cutajar (著), 柴田 芳樹 (著)&lt;/dd&gt;
    &lt;dd&gt;インプレス 2024-12-04 (Release 2024-12-04)&lt;/dd&gt;
    &lt;dd&gt;Kindle版&lt;/dd&gt;
    &lt;dd&gt;B0DNYMMBBQ (ASIN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;5&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;&lt;a href=&#34;https://technical-book-reading-2.connpass.com/event/337562/&#34;&gt;読書会&lt;/a&gt;のために購入。インプレス社の本は Kindle 版より版元で &lt;a href=&#34;https://book.impress.co.jp/books/1123101144&#34;&gt;PDF 版&lt;/a&gt;を買うのがオススメ。「並行処理」について原理的な解説から丁寧に書かれている。 Go で解説されているが Go 以外の言語でも応用できる。
&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2025-01-25&#34;&gt;2025-01-25&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- Go言語で学ぶ並行プログラミング --&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;ちなみに PR に対して Copilot にレビューさせてみたんだけど，どうにも「分かってない」感じがして丸無視してしまった。今後もあるから &lt;code&gt;copilot-instructions.md&lt;/code&gt; ファイルを作った。これで次回以降はもう少しまともなレビューにならないかなぁ。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
	</entry><entry>
		<title>作業支援ゲーム Gogh v3 がリリースされた</title>
		<category term="release" label="release" scheme="https://text.baldanders.info/release/" />
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/release/2026/05/gogh-v3-is-released/" />
		<id>tag:text.Baldanders.info,2026-05-03:/release/2026/05/gogh-v3-is-released/</id>
		<published>2026-05-03T15:03:51+09:00</published>
		<updated>2026-06-20T00:53:40+00:00</updated>
		<summary>Watch Party 機能およびフェイストラッキング機能の紹介。最後に VTuber ごっこもやってみた（笑）</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;日頃お世話になっている作業支援ゲーム &lt;a href=&#34;https://store.steampowered.com/app/3213850/gogh_Focus_with_Your_Avatar/&#34; target=&#34;_blank&#34; title=&#34;gogh: Focus with Your Avatar&#34;&gt;Steam 版 gogh&lt;/a&gt; が発売1周年（おめでとうございます）を機に 3.0.0 をリリースした。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://prtimes.jp/main/html/rd/p/000000072.000043299.html&#34; target=&#34;_blank&#34;&gt;gogh、Steam版の発売1周年で『ルーム投稿』『YouTube同時視聴』『コーデ保存』『フェイストラッキング』など大型アップデート！ | 株式会社 ambrのプレスリリース&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://store.steampowered.com/news/app/3213850/view/537759153440948744&#34; target=&#34;_blank&#34;&gt;gogh: Focus with Your Avatar－Major Update 3.0.0: ルーム投稿、YouTube Watch Party など新機能多数！！－Steamニュース&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;主なアップデート内容は以下の通り：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ルーム投稿&lt;/li&gt;
&lt;li&gt;YouTubeの同時視聴 &amp;ldquo;Watch Party&amp;rdquo;&lt;/li&gt;
&lt;li&gt;コーデ保存&lt;/li&gt;
&lt;li&gt;髪型左右反転&lt;/li&gt;
&lt;li&gt;フェイストラッキング機能&lt;/li&gt;
&lt;li&gt;表情変更機能&lt;/li&gt;
&lt;li&gt;回転くん&lt;/li&gt;
&lt;li&gt;新アイテム、新ポーズ&lt;/li&gt;
&lt;li&gt;新種のクロダ42「せぱたクロ」が登場&lt;/li&gt;
&lt;li&gt;Steamフレンドをマルチルームに招待できるように！&lt;/li&gt;
&lt;li&gt;ルームスロットの拡大&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;この中で今回は Watch Party 機能とフェイストラッキング機能を紹介する。&lt;/p&gt;
&lt;h2&gt;Watch Party 機能&lt;/h2&gt;
&lt;p&gt;アイテムに「Watch Party スクリーン」が追加され，マルチルーム・モードで YouTube 視聴が出来るようになった。
サイズが S/M/L/XL とあり XL だとほぼ壁一面の大きさになる。&lt;/p&gt;
&lt;p&gt;せっかくなので新しく YouTube 視聴用の部屋を作ってみた。&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote class=&#34;nobox&#34; style=&#39;margin:0 auto;text-align:center;&#39; cite=&#34;./watch-party-0.png&#34;&gt;
&lt;a href=&#34;./watch-party-0.png&#34;&gt;&lt;img src=&#34;./watch-party-0.png&#34; srcset=&#34;./watch-party-0.png 1282w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;gogh: Focus with Your Avatar&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;./watch-party-0.png&#34;&gt;gogh: Focus with Your Avatar&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;部屋つうか野外だけど。
スクリーンは XL サイズ。
&lt;a href=&#34;https://note.com/koku_sb/n/n429fef46eb04&#34; target=&#34;_blank&#34; title=&#34;続・goghで違法建築のすすめ(※合法)｜こく&#34;&gt;違法建築（合法）&lt;/a&gt;で床面を拡張している。
屋根もないようなところで YouTube 視聴とかファンタジーでいいよね。&lt;/p&gt;
&lt;p&gt;Watch Party スクリーン設定画面（マルチルーム・モード）はこんな感じ。&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote class=&#34;nobox&#34; style=&#39;margin:0 auto;text-align:center;&#39; cite=&#34;./watch-party-1.png&#34;&gt;
&lt;a href=&#34;./watch-party-1.png&#34;&gt;&lt;img src=&#34;./watch-party-1.png&#34; srcset=&#34;./watch-party-1.png 1282w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;Setting Watch Party Screen&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;./watch-party-1.png&#34;&gt;Setting Watch Party Screen&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ちなみに映ってる動画は NASA の “&lt;a href=&#34;https://www.youtube.com/watch?v=Tf_UjBMIzNo&#34; target=&#34;_blank&#34;&gt;NASA&amp;rsquo;s Artemis II Crew Launches To The Moon&lt;/a&gt;” である。
この状態で「共有開始」ボタンを押すと他プレイヤーも同じものを見ることが出来る。&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote class=&#34;nobox&#34; style=&#39;margin:0 auto;text-align:center;&#39; cite=&#34;./watch-party-2.png&#34;&gt;
&lt;a href=&#34;./watch-party-2.png&#34;&gt;&lt;img src=&#34;./watch-party-2.png&#34; srcset=&#34;./watch-party-2.png 1282w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;Watch Party Screen&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;./watch-party-2.png&#34;&gt;Watch Party Screen&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;かなり無理やり映してる感じで，色々と制限がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu/Proton 環境下では YouTube 動画が動かなかった。これは想定内&lt;/li&gt;
&lt;li&gt;サインオフ状態での視聴なので，とにかく広告がウザい。つか，無料視聴だとこんなに広告が入るんだねぇ&lt;/li&gt;
&lt;li&gt;動画の seek ができない（らしい）。基本的に流しっぱなし&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;制作側がアナウンスしている制限というか注意事項は以下の通り：&lt;/p&gt;
&lt;figure&gt;
&lt;blockquote cite=&#34;https://store.steampowered.com/news/app/3213850/view/537759153440948744&#34;&gt;&lt;p&gt;⚠️ 利用上のご注意&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;利用にはYouTube利用規約およびGoogleプライバシーポリシーが適用されます。&lt;/li&gt;
&lt;li&gt;WatchPartyは、各参加者の端末でYouTube動画を再生し、goghが再生位置を再生開始からの経過時間で合わせる独自機能です。YouTubeが提供・保証する機能ではありません。&lt;/li&gt;
&lt;li&gt;WatchPartyはマルチルームのホストのみが利用できます。他ユーザーと同期しないソロ視聴は全員が可能です。&lt;/li&gt;
&lt;li&gt;WatchParty中にホストが再生位置をシークした場合、同期はされません。&lt;/li&gt;
&lt;li&gt;技術上の制約により、再生停止・音量操作などはgoghのUIから制御できません。YouTube画面を操作してください。&lt;/li&gt;
&lt;li&gt;技術上の制約により、一部の動画は再生できません。ご了承ください。&lt;/li&gt;
&lt;li&gt;YouTube以外のURLは入力できません。&lt;/li&gt;
&lt;li&gt;複数箇所に投影する場合も、同時に流せる動画は1つです。&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;&lt;q&gt;&lt;a href=&#34;https://store.steampowered.com/news/app/3213850/view/537759153440948744&#34;&gt;gogh: Focus with Your Avatar－Major Update 3.0.0: ルーム投稿、YouTube Watch Party など新機能多数！！&lt;/a&gt;&lt;/q&gt;より&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ぶっちゃけ，機能上の制限より YouTube のポリシーによる制限のほうがキツそう。
YouTuber (VTuber 含む) の配信をマルチルームで流すのはまず無理だよね（自分で作成したコンテンツなら問題ないだろうけど）。
政府系の記者会見とか日食ライブとか公共性が高そうなものならなんとか行ける？ と思って NASA live の ”&lt;a href=&#34;https://www.youtube.com/watch?v=sWasdbDVNvc&#34; target=&#34;_blank&#34;&gt;Live Video from the International Space Station&lt;/a&gt;” を流そうとしたら，何かの制限に引っかかるらしく，できなかった。
残念。&lt;/p&gt;
&lt;p&gt;独りで見るのなら，既にある Stream 機能と OBS の仮想カメラを組み合わせたやり方のほうが融通がきく。&lt;/p&gt;
&lt;p&gt;まぁ，せっかく部屋を作ったのでミラーリング可能な配信コンテンツがあればまた試してみよう。&lt;/p&gt;
&lt;h2&gt;フェイストラッキング機能&lt;/h2&gt;
&lt;p&gt;Web カメラ映像を取り込んで顔の動きを同期できる。&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote class=&#34;nobox&#34; style=&#39;margin:0 auto;text-align:center;&#39; cite=&#34;./face-tracking-1.png&#34;&gt;
&lt;a href=&#34;./face-tracking-1.png&#34;&gt;&lt;img src=&#34;./face-tracking-1.png&#34; srcset=&#34;./face-tracking-1.png 1272w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;face tracking&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;./face-tracking-1.png&#34;&gt;face tracking&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;キャリブレーションはこんな感じ。&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote class=&#34;nobox&#34; style=&#39;margin:0 auto;text-align:center;&#39; cite=&#34;./face-tracking-2.png&#34;&gt;
&lt;a href=&#34;./face-tracking-2.png&#34;&gt;&lt;img src=&#34;./face-tracking-2.png&#34; srcset=&#34;./face-tracking-2.png 1272w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;face tracking&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;./face-tracking-2.png&#34;&gt;face tracking&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;なんで身体が斜めってるのかは不明だが，別にカメラとの同期がおかしいわけではないらしい。&lt;/p&gt;
&lt;p&gt;あれ？ これってグリーンバックとかの配信部屋を作って OBS と組み合わせれば &lt;a href=&#34;https://store.steampowered.com/app/3213850/gogh_Focus_with_Your_Avatar/&#34; target=&#34;_blank&#34; title=&#34;gogh: Focus with Your Avatar&#34;&gt;gogh&lt;/a&gt; のアバターで VTuber ごっこができる？ やってみよう。&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote class=&#34;nobox&#34; style=&#39;margin:0 auto;text-align:center;&#39; cite=&#34;./obs-studio.png&#34;&gt;
&lt;a href=&#34;./obs-studio.png&#34;&gt;&lt;img src=&#34;./obs-studio.png&#34; srcset=&#34;./obs-studio.png 1282w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;OBS Studio&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;./obs-studio.png&#34;&gt;OBS Studio&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;おー。できるぢゃん（笑） これはまたオモチャの要素が増えたねぇ。&lt;/p&gt;
&lt;h2&gt;ブックマーク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://news.denfaminicogamer.jp/news/260430w&#34; target=&#34;_blank&#34;&gt;マルチプレイ作業集中ゲーム『gogh』「YouTubeのウォッチパーティ」機能が追加&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://automaton-media.com/articles/newsjp/gogh-20260430-440674/&#34; target=&#34;_blank&#34;&gt;マルチ対応作業集中アプリ『gogh: Focus with Your Avatar』Steam版、大規模アプデで“YouTube同時視聴”ができるように。休憩もみんなで一緒に - AUTOMATON&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry><entry>
		<title>GnuPG 2.5.17 のリリース【セキュリティ・アップデート】</title>
		<category term="release" label="release" scheme="https://text.baldanders.info/release/" />
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/release/2026/01/gnupg-2_5_17-is-released/" />
		<id>tag:text.Baldanders.info,2026-01-28:/release/2026/01/gnupg-2_5_17-is-released/</id>
		<published>2026-01-28T16:02:53+09:00</published>
		<updated>2026-01-28T07:12:30+00:00</updated>
		<summary>2.5.17 では1件の重要な脆弱性の修正がある</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;セキュリティ・アップデートを含む &lt;a href=&#34;https://gnupg.org/&#34; target=&#34;_blank&#34; title=&#34;The GNU Privacy Guard&#34;&gt;GnuPG&lt;/a&gt; 2.5.17 がリリースされた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://lists.gnupg.org/pipermail/gnupg-announce/2026q1/000501.html&#34; target=&#34;_blank&#34;&gt;[Announce] GnuPG and Gpg4win Security Advisory (T8044)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote cite=&#34;https://lists.gnupg.org/pipermail/gnupg-announce/2026q1/000501.html&#34;&gt;&lt;p&gt;A crafted CMS (S/MIME) EnvelopedData message carrying an oversized
wrapped session key can cause a stack buffer overflow in gpg-agent
during the &lt;code&gt;PKDECRYPT--kem=CMS&lt;/code&gt; handling.  This can easily be used for a
DoS but, worse, the memory corruption can very likley also be used to
mount a remote code execution attack.  The bug was introduced while
changing an internal API to the FIPS required KEM API.&lt;/p&gt;
&lt;p&gt;A CVE-id has not been assigned.  We track this bug as T8044 under
&lt;a href=&#34;https://dev.gnupg.org/T8044&#34; target=&#34;_blank&#34;&gt;https://dev.gnupg.org/T8044&lt;/a&gt;.  This vulnerability was discovered by:
OpenAI Security Research.  Their report was received on 2026-01-18;
fixed versions released 2026-01-27.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;https://lists.gnupg.org/pipermail/gnupg-announce/2026q1/000501.html&#34;&gt;[Announce] GnuPG and Gpg4win Security Advisory (T8044)&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;2026-01-27 時点ではまだ CVE-ID は割り当てられていない。
脆弱性の影響を受けるバージョンは以下の通り：&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote class=&#34;nobox&#34; cite=&#34;https://lists.gnupg.org/pipermail/gnupg-announce/2026q1/000501.html&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;These versions are affected:

 - GnuPG 2.5.16          (released 2025-12-30)
 - GnuPG 2.5.15          (released 2025-12-29)
 - GnuPG 2.5.14          (released 2025-11-19)
 - GnuPG 2.5.13          (released 2025-10-22)
 - Gpg4win 5.0.0         (released 2026-01-14)
 - Gpg4win 5.0.0-beta479 (released 2026-01-02)
 - Gpg4win 5.0.0-beta476 (released 2025-12-22)
 - Gpg4win 5.0.0-beta395 (released 2025-10-22)

All other versions are not affected.
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;https://lists.gnupg.org/pipermail/gnupg-announce/2026q1/000501.html&#34;&gt;[Announce] GnuPG and Gpg4win Security Advisory (T8044)&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;2.4 系は脆弱性の影響を受けない。
なお 2.5 系は安定版に昇格している。
さらに 2.4 系は 2026-06-30 でサポートが終了する。&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote cite=&#34;https://lists.gnupg.org/pipermail/gnupg-announce/2025q4/000500.html&#34;&gt;&lt;p&gt;Note that the 2.5 series is now declared the stable version of GnuPG.
The oldstable 2.4 series will reach end-of-life in just 6 months.&lt;/p&gt;
&lt;p&gt;The main features in the 2.5 series are improvements for 64 bit Windows
and the introduction of Kyber (aka ML-KEM or FIPS-203) as PQC encryption
algorithm.  Other than PQC support the 2.6 series will not differ a lot
from 2.4 because the majority of changes are internal to make use of
newer features from the supporting libraries.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;https://lists.gnupg.org/pipermail/gnupg-announce/2025q4/000500.html&#34;&gt;[Announce] GnuPG 2.5.16 released&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;今回の脆弱性に関連して，以下のドキュメントも公開されている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://gnupg.com/20260122-39C3_reply_gpg_fail.html&#34; target=&#34;_blank&#34;&gt;Responsible Disclosure Requires Accountability: Putting Recent GnuPG Security Reports into Context&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;これは&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote cite=&#34;https://gnupg.com/20260122-39C3_reply_gpg_fail.html&#34;&gt;&lt;p&gt;A talk at the 39th Chaos Communication Congress (39C3) presented several observations related to signature verification in GnuPG. These observations are documented on the accompanying website gpg.fail.&lt;/p&gt;
&lt;p&gt;The way the findings were presented creates the impression that GnuPG is affected by serious security flaws and that we, as maintainers, are failing to meet our responsibilities.&lt;/p&gt;
&lt;p&gt;In fact, we carefully reviewed each reported observation and provided timely feedback to the security researchers involved. However, this did not result in a constructive technical exchange.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;https://gnupg.com/20260122-39C3_reply_gpg_fail.html&#34;&gt;Responsible Disclosure Requires Accountability: Putting Recent GnuPG Security Reports into Context&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;ということで gpg.fail に対する公式な応答・評価となっている&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。
詳しくはドキュメントを読んでもらうとして &lt;a href=&#34;https://kagi.com/assistant&#34; target=&#34;_blank&#34; title=&#34;The Assistant&#34;&gt;Kagi Assistant&lt;/a&gt; による要約は以下の通り。&lt;/p&gt;
&lt;figure&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;GnuPG側は、39C3での発表に基づく gpg.fail の観察を文脈付きで評価し、指摘された問題の多くは実装上の致命的な脆弱性ではなく、使用方法やソーシャルエンジニアリング、検証不足に起因すると結論付けている&lt;/li&gt;
&lt;li&gt;実際のバグは限定的で、既知の問題は過去に修正済みのものが多く、一部は互換性やUI安定性といった設計方針によるものであると説明している&lt;/li&gt;
&lt;li&gt;全体として GnuPG は安全性と安定性を維持しつつ、透明なコミュニケーションと責任ある公開（responsible disclosure）が重要であり、悪用の可能性がある領域については利用者教育と適切な使用方法の周知を重視している&lt;/li&gt;
&lt;li&gt;結論として、観察リストの大半は実装欠陥ではなく、適切な検証・運用の欠如や社会工学的リスクに起因するものとされている&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;/figure&gt;
&lt;p&gt;ドキュメントで言及されているクリアテキスト署名（Cleartext Signatures）の問題については拙文でも言及しているので参考にどうぞ。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://text.baldanders.info/openpgp/cleartext-signatures-considered-harmful/&#34; target=&#34;_blank&#34;&gt;クリアテキスト署名の危険性&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最近では &lt;a href=&#34;https://gnupg.org/&#34; target=&#34;_blank&#34; title=&#34;The GNU Privacy Guard&#34;&gt;GnuPG&lt;/a&gt; 以外にも様々な OpenPGP 実装が存在するので，それらについて調べてみてもいいかもしれない（というか調べなきゃなぁとは思っている）。&lt;/p&gt;
&lt;h2&gt;参考図書&lt;/h2&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/4314009071?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/51ZRZ62WKCL._SL160_.jpg&#34; width=&#34;108&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/4314009071?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;暗号化 プライバシーを救った反乱者たち&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;スティーブン・レビー (著), 斉藤 隆央 (翻訳)&lt;/dd&gt;
    &lt;dd&gt;紀伊國屋書店 2002-02-16&lt;/dd&gt;
    &lt;dd&gt;単行本&lt;/dd&gt;
    &lt;dd&gt;4314009071 (ASIN), 9784314009072 (EAN), 4314009071 (ISBN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;5&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;20世紀末，暗号技術の世界で何があったのか。知りたかったらこちらを読むべし！&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2015-03-09&#34;&gt;2015-03-09&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- 暗号化 プライバシーを救った反乱者たち --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/B015643CPE?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/51t6yHHVwEL._SL160_.jpg&#34; width=&#34;113&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/B015643CPE?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;暗号技術入門 第3版　秘密の国のアリス&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;結城 浩 (著)&lt;/dd&gt;
    &lt;dd&gt;SBクリエイティブ 2015-08-25 (Release 2015-09-17)&lt;/dd&gt;
    &lt;dd&gt;Kindle版&lt;/dd&gt;
    &lt;dd&gt;B015643CPE (ASIN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;5&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;SHA-3 や Bitcoin/Blockchain など新しい知見や技術要素を大幅追加。暗号技術を使うだけならこれ1冊でとりあえず無問題。&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2015-09-20&#34;&gt;2015-09-20&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- 暗号技術入門 第3版 --&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;ドメインが &lt;code&gt;gnupg.com&lt;/code&gt; となっているが，これは &lt;a href=&#34;https://gnupg.org/&#34; target=&#34;_blank&#34; title=&#34;The GNU Privacy Guard&#34;&gt;GnuPG&lt;/a&gt; を中核技術とした暗号製品の商用展開を行っている（主にドイツで）サイトである。つまり，このドキュメントは顧客へのメッセージにもなっているわけやね。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
	</entry><entry>
		<title>Web ページのメタデータを取得する goark/webinfo をリリースした</title>
		<category term="release" label="release" scheme="https://text.baldanders.info/release/" />
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/release/2025/11/webinfo-is-released/" />
		<id>tag:text.Baldanders.info,2025-11-28:/release/2025/11/webinfo-is-released/</id>
		<published>2025-11-28T19:26:26+09:00</published>
		<updated>2025-12-11T03:48:18+00:00</updated>
		<summary>完全に自分用のパッケージなので汎用性はあまり考慮していない。</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;私は自分が作ってる各プロダクトの中で特定の機能が3つ以上重複した場合は別パッケージとして切り出すことにしている。
というわけで Web ページのメタデータを取得する機能をパッケージとして切り出した。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/goark/webinfo&#34; target=&#34;_blank&#34;&gt;goark/webinfo: Extract metadata and structured information from web pages&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要するに，完全に自分用のパッケージなので汎用性はあまり考慮していない。&lt;/p&gt;
&lt;p&gt;使い方はこんな感じ。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;bytes&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;encoding/json&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;io&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;os&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;github.com/goark/webinfo&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;errorOut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Fprintf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Stderr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;%+v\n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Fetch metadata for a page&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;webinfo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Fetch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;https://text.baldanders.info/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// empty UA uses default&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;errorOut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// output metadata as pretty JSON&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;MarshalIndent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;  &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;errorOut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;io&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Copy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Stdout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;NewBuffer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;errorOut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Download main image to permanent file in current directory&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;imgPath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;DownloadImage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;errorOut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;image saved:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;imgPath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// Download thumbnail to permanent file in current directory&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;thumbPath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;info&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;DownloadThumbnail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ctx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;// 150px width&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;nil&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;errorOut&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;err&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;thumbnail saved:&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;thumbPath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://pkg.go.dev/encoding/json/v2&#34; target=&#34;_blank&#34; title=&#34;json package - encoding/json/v2 - Go Packages&#34;&gt;&lt;code&gt;encoding/json/v2&lt;/code&gt;&lt;/a&gt; パッケージを使えば &lt;code&gt;MarshalWrite()&lt;/code&gt; 関数で直接標準出力に出せるんだけど，まだ実験的実装なので，今回は従来の &lt;a href=&#34;https://pkg.go.dev/encoding/json&#34; target=&#34;_blank&#34; title=&#34;json package - encoding/json - Go Packages&#34;&gt;&lt;code&gt;encoding/json&lt;/code&gt;&lt;/a&gt; パッケージを使っている。&lt;/p&gt;
&lt;p&gt;これを実行するとこんな感じ。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ go run sample.go
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;url&amp;#34;: &amp;#34;https://text.baldanders.info/&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;location&amp;#34;: &amp;#34;https://text.baldanders.info/&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;canonical&amp;#34;: &amp;#34;https://text.baldanders.info/&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;title&amp;#34;: &amp;#34;text.Baldanders.info&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;description&amp;#34;: &amp;#34;帰ってきた「しっぽのさきっちょ」&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;image_url&amp;#34;: &amp;#34;https://text.baldanders.info/images/attention/site.jpg&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;#34;user_agent&amp;#34;: &amp;#34;Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;image saved: site.jpg
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;thumbnail saved: site-thumb.jpg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ダウンロードした &lt;code&gt;site.jpg&lt;/code&gt; がこれ。&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./site.jpg&#34;&gt;&lt;img src=&#34;./site.jpg&#34; srcset=&#34;./site.jpg 2230w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;site.jpg&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;figcaption&gt;&lt;div&gt;&lt;a href=&#34;./site.jpg&#34;&gt;site.jpg&lt;/a&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;site-thumb.jpg&lt;/code&gt; はこれ。&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./site-thumb.jpg&#34;&gt;&lt;img src=&#34;./site-thumb.jpg&#34; srcset=&#34;./site-thumb.jpg 500w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;site-thumb.jpg&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;figcaption&gt;&lt;div&gt;&lt;a href=&#34;./site-thumb.jpg&#34;&gt;site-thumb.jpg&lt;/a&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;code&gt;site-thumb.jpg&lt;/code&gt; は &lt;code&gt;site.jpg&lt;/code&gt; を幅150ピクセルに&lt;a href=&#34;https://text.baldanders.info/golang/resize-image/&#34; target=&#34;_blank&#34; title=&#34;Go 言語で画像のサイズを変更する&#34;&gt;リサイズ&lt;/a&gt;して保存している。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/goark/webinfo/blob/main/README.md&#34; target=&#34;_blank&#34;&gt;&lt;code&gt;README.md&lt;/code&gt;&lt;/a&gt; ファイルや &lt;a href=&#34;https://pkg.go.dev/github.com/goark/webinfo&#34; target=&#34;_blank&#34; title=&#34;https://pkg.go.dev/github.com/goark/webinfo&#34;&gt;godoc ページ&lt;/a&gt;を見ると分かるけど，私にしてはドキュメントが煩い（笑） 実はこれ，ほぼ &lt;a href=&#34;https://github.com/features/copilot&#34; target=&#34;_blank&#34; title=&#34;GitHub Copilot · Your AI pair programmer · GitHub&#34;&gt;GitHub Copilot&lt;/a&gt; (model: GPT-5 mini を選択) に書かせたものなのよね。
今回，新規に書いたメソッドとテストおよびドキュメントは Copilot に丸投げしてみた。&lt;/p&gt;
&lt;ruby&gt;&lt;rb&gt;閑話休題&lt;/rb&gt;&lt;rp&gt; (&lt;/rp&gt;&lt;rt&gt;それはさておき&lt;/rt&gt;&lt;rp&gt;) &lt;/rp&gt;&lt;/ruby&gt;
&lt;p&gt;&lt;a href=&#34;https://text.baldanders.info/remark/2025/11/released-the-translation-of-the-cc-doc/&#34; target=&#34;_blank&#34; title=&#34;“Pay-To-Crawl Issue Brief” の翻訳を公開した&#34;&gt;前にも書いた&lt;/a&gt;けど，プロンプトさえ上手くハマれば7割以上は使えるコードを書いてくれる。
でも結局のところ，残りの3割なり2割なり1割なりがインパクトの大きい部分だったりするのだ。
案の定 lint にかけると，特に &lt;a href=&#34;https://github.com/securego/gosec&#34; target=&#34;_blank&#34; title=&#34;securego/gosec: Go security checker&#34;&gt;&lt;code&gt;gosec&lt;/code&gt;&lt;/a&gt; あたりにがっつり怒られた。
そんでチマチマ直したりする。&lt;/p&gt;
&lt;p&gt;あとこれは感覚的なもの言いで申し訳ないんだけど，記述に一貫性がないんだよね。
なんというか，面識のない複数の他人がバラバラに書き込んだような感じ。
だからコードがちょっと読みにくいし，全体で見て合理的ではない記述もある。
でも，記述が間違ってないか確認するためにはきちんと精査しないといけないわけで，そこも微妙なんだよな。&lt;/p&gt;
&lt;p&gt;テストコードについては最初「動けばいいや」ということで，大きく間違ってない限り Copilot が書いたコードをそのまま採用していた。
Copilot に「○○のケースを追加して」って書くと，記述が面倒くさいケースでも律儀に書いてくれるんだけど（これは有り難い），書いてる様子を VSCode 上で眺めてると「あぁ，これは正しく動かんだろうな」みたいなテストコードを最初書いて，実際にテストを動かしたらやっぱりエラーになって，そんでまた修正を入れて&amp;hellip; ってのを何度か繰り返してて「ずいぶん人間臭いことするなぁ」と思ったりした。&lt;/p&gt;
&lt;p&gt;だいたい収束したところで PR を出して Copilot にレビューさせたのだが，テストコードをけちょんけちょんに貶された（笑） いや，同じ Copilot が書いたコードやろがい。
で，やっぱり人間である私が改めてテストコードを精査し指摘部分を書き直す作業をチマチマと。&lt;/p&gt;
&lt;p&gt;コメントやドキュメントについてはかなり助かった。
最初に書いたように「ここまで要るか？」ってくらい詳細に書いてくれるので，逆に Copilot が書いたコメントやドキュメントが設計書代わりになっている。
特に &lt;a href=&#34;https://github.com/goark/webinfo/blob/main/.github/copilot-instructions.md&#34; target=&#34;_blank&#34;&gt;&lt;code&gt;.github/copilot-instructions.md&lt;/code&gt;&lt;/a&gt; を Copilot が書き出してくれたのは助かった。
私はそれを見て実装の過不足を確認できるし Copilot も作業の精度を上げることができる。
仕様・設計上の変更についても，人間がコードを修正して Copilot に言えば実装に合わせてドキュメントも直してくれるので，実装とドキュメントが乖離するといった「あるある」なことは，ある程度緩和できるのだ。&lt;/p&gt;
&lt;p&gt;Copilot の使い方も少しずつ分かってきたし，今回作ったパッケージを既存のプロダクトに組み込んだら，いよいよ新しいツールの制作に入るか。&lt;/p&gt;
&lt;h2&gt;参考図書&lt;/h2&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/4814401191?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/41X10&amp;#43;elsuL._SL160_.jpg&#34; width=&#34;125&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/4814401191?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;初めてのGo言語 第2版 ―他言語プログラマーのためのイディオマティックGo実践ガイド&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Jon Bodner (著), 武舎 広幸 (翻訳)&lt;/dd&gt;
    &lt;dd&gt;オライリー・ジャパン 2025-08-05 (Release 2025-08-05)&lt;/dd&gt;
    &lt;dd&gt;単行本（ソフトカバー）&lt;/dd&gt;
    &lt;dd&gt;4814401191 (ASIN), 9784814401192 (EAN), 4814401191 (ISBN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;第2版。 Generics の説明が大幅に改訂されたらしい。練習問題も追加されている。&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2025-11-02&#34;&gt;2025-11-02&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- 初めてのGo言語 第2版 --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/B0CFL1DK8Q?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/51BmDUG6D0L._SL160_.jpg&#34; width=&#34;125&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/B0CFL1DK8Q?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;Go言語 100Tips ありがちなミスを把握し、実装を最適化する impress top gearシリーズ&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Teiva Harsanyi (著), 柴田 芳樹 (著)&lt;/dd&gt;
    &lt;dd&gt;インプレス 2023-08-18 (Release 2023-08-18)&lt;/dd&gt;
    &lt;dd&gt;Kindle版&lt;/dd&gt;
    &lt;dd&gt;B0CFL1DK8Q (ASIN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;&lt;a href=&#34;https://book.impress.co.jp/books/1122101133&#34;&gt;版元&lt;/a&gt;で PDF 版を購入可能。事実上の Effective Go とも言える充実の内容。オリジナルは敢えてタイトルに “tips” という単語を入れるのを避けたのに邦題が「100 Tips」とかなっていて，原作者がお怒りとの噂（あくまで噂）&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2023-08-18&#34;&gt;2023-08-18&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- Go言語 100Tips --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/4621300253?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/41meaSLNFfL._SL160_.jpg&#34; width=&#34;122&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/4621300253?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)&lt;/dd&gt;
    &lt;dd&gt;丸善出版 2016-06-20&lt;/dd&gt;
    &lt;dd&gt;単行本（ソフトカバー）&lt;/dd&gt;
    &lt;dd&gt;4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;5&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;著者のひとりは（あの「バイブル」とも呼ばれる）通称 “K&amp;amp;R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。と思ったら絶版状態らしい（2025-01 現在）。復刊を望む！&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2016-07-13&#34;&gt;2016-07-13&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- プログラミング言語Go --&gt;
</content>
	</entry><entry>
		<title>hymkor/struct2flag から fork した goark/struct2pflag をリリースした</title>
		<category term="release" label="release" scheme="https://text.baldanders.info/release/" />
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/release/2025/11/struct2pflag-is-released/" />
		<id>tag:text.Baldanders.info,2025-11-23:/release/2025/11/struct2pflag-is-released/</id>
		<published>2025-11-23T18:33:12+09:00</published>
		<updated>2026-05-29T09:57:38+00:00</updated>
		<summary>どうしても GNU 拡張シンタックスが使える spf13/pflag が使いたかったのよ。</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;以前 &lt;a href=&#34;https://text.baldanders.info/golang/&#34; target=&#34;_blank&#34; title=&#34;プログラミング言語 Go&#34;&gt;golang&lt;/a&gt; セクションで&lt;a href=&#34;https://text.baldanders.info/golang/parsing-command-line-flags-with-struct2flag/&#34; target=&#34;_blank&#34; title=&#34;struct2flag でコマンドライン解析【追記あり】&#34;&gt;紹介&lt;/a&gt;した &lt;a href=&#34;https://github.com/hymkor/struct2flag&#34; target=&#34;_blank&#34; title=&#34;hymkor/struct2flag: `struct2flag` automatically registers struct fields as flags for your Go command-line tools.&#34;&gt;&lt;code&gt;hymkor/struct2flag&lt;/code&gt;&lt;/a&gt; だが，これは標準の &lt;a href=&#34;https://pkg.go.dev/flag&#34; target=&#34;_blank&#34; title=&#34;flag package - flag - Go Packages&#34;&gt;&lt;code&gt;flag&lt;/code&gt;&lt;/a&gt; パッケージを使っている。
他の類似の flag パッケージついては&lt;/p&gt;
&lt;figure&gt;
&lt;blockquote cite=&#34;https://zetamatta.hatenablog.com/entry/2025/10/17/190842&#34;&gt;オプション体系が GNU っぽくなってしまったり、&lt;code&gt;&amp;quot;flag&amp;quot;&lt;/code&gt; の機能まで内包していて、そこまで要らないということで選定候補から外した&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;&lt;q&gt;&lt;a href=&#34;https://zetamatta.hatenablog.com/entry/2025/10/17/190842&#34;&gt;Goの構造体タグによるコマンドラインオプション・設定ファイル・環境変数の一元管理 - 標準愚痴出力&lt;/a&gt;&lt;/q&gt;より&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;とのことで，それはそれで妥当な選択だと思う。&lt;/p&gt;
&lt;p&gt;ただ，私は &lt;a href=&#34;https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html&#34; target=&#34;_blank&#34; title=&#34;Argument Syntax (The GNU C Library)&#34;&gt;GNU 拡張シンタックス&lt;/a&gt;に対応した &lt;a href=&#34;https://github.com/spf13/pflag&#34; target=&#34;_blank&#34; title=&#34;spf13/pflag: Drop-in replacement for Go&amp;#39;s flag package, implementing POSIX/GNU-style --flags.&#34;&gt;&lt;code&gt;spf13/pflag&lt;/code&gt;&lt;/a&gt; が使いたかったのよ。&lt;/p&gt;
&lt;p&gt;というわけで，オリジナルの &lt;a href=&#34;https://github.com/hymkor/struct2flag&#34; target=&#34;_blank&#34; title=&#34;hymkor/struct2flag: `struct2flag` automatically registers struct fields as flags for your Go command-line tools.&#34;&gt;&lt;code&gt;hymkor/struct2flag&lt;/code&gt;&lt;/a&gt; から fork して &lt;a href=&#34;https://github.com/spf13/pflag&#34; target=&#34;_blank&#34; title=&#34;spf13/pflag: Drop-in replacement for Go&amp;#39;s flag package, implementing POSIX/GNU-style --flags.&#34;&gt;&lt;code&gt;spf13/pflag&lt;/code&gt;&lt;/a&gt; を使うよう改造した &lt;a href=&#34;https://github.com/goark/struct2pflag&#34; target=&#34;_blank&#34; title=&#34;goark/struct2pflag: `struct2pflag` automatically registers struct fields as flags for your Go command-line tools.&#34;&gt;&lt;code&gt;goark/struct2pflag&lt;/code&gt;&lt;/a&gt; をリリースした&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。
使い方は &lt;a href=&#34;https://github.com/hymkor/struct2flag&#34; target=&#34;_blank&#34; title=&#34;hymkor/struct2flag: `struct2flag` automatically registers struct fields as flags for your Go command-line tools.&#34;&gt;&lt;code&gt;hymkor/struct2flag&lt;/code&gt;&lt;/a&gt; とほぼ同じ。
以前書いた「&lt;a href=&#34;https://text.baldanders.info/golang/parsing-command-line-flags-with-struct2flag/&#34; target=&#34;_blank&#34; title=&#34;struct2flag でコマンドライン解析【追記あり】&#34;&gt;struct2flag でコマンドライン解析&lt;/a&gt;」のコードを &lt;a href=&#34;https://github.com/goark/struct2pflag&#34; target=&#34;_blank&#34; title=&#34;goark/struct2pflag: `struct2pflag` automatically registers struct fields as flags for your Go command-line tools.&#34;&gt;&lt;code&gt;goark/struct2pflag&lt;/code&gt;&lt;/a&gt; を使って書き換えてみる。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;strings&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;github.com/goark/struct2pflag&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;github.com/spf13/pflag&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Flags&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;struct&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;N&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;`pflag:&amp;#34;no-newline,n,omit trailing newline&amp;#34;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Sep&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;`pflag:&amp;#34;sep,s,separator&amp;#34;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Strs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;NewFlags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Flags&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Flags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;N&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Sep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Strs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{}}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Flags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Strs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Sep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;N&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;		&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Println&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;NewFlags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;struct2pflag&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;BindDefault&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pflag&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Parse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line hl&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Strs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pflag&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://pkg.go.dev/flag&#34; target=&#34;_blank&#34; title=&#34;flag package - flag - Go Packages&#34;&gt;&lt;code&gt;flag&lt;/code&gt;&lt;/a&gt; が &lt;a href=&#34;https://github.com/spf13/pflag&#34; target=&#34;_blank&#34; title=&#34;spf13/pflag: Drop-in replacement for Go&amp;#39;s flag package, implementing POSIX/GNU-style --flags.&#34;&gt;&lt;code&gt;spf13/pflag&lt;/code&gt;&lt;/a&gt; に &lt;a href=&#34;https://github.com/hymkor/struct2flag&#34; target=&#34;_blank&#34; title=&#34;hymkor/struct2flag: `struct2flag` automatically registers struct fields as flags for your Go command-line tools.&#34;&gt;&lt;code&gt;hymkor/struct2flag&lt;/code&gt;&lt;/a&gt; が &lt;a href=&#34;https://github.com/goark/struct2pflag&#34; target=&#34;_blank&#34; title=&#34;goark/struct2pflag: `struct2pflag` automatically registers struct fields as flags for your Go command-line tools.&#34;&gt;&lt;code&gt;goark/struct2pflag&lt;/code&gt;&lt;/a&gt; に置き換わったほか，構造体タグのプレフィックスが &lt;code&gt;flag:&lt;/code&gt; から &lt;code&gt;pflag:&lt;/code&gt; に変わっている点に注目。
ヘルプを表示させると&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ go run echo4a.go -h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Usage of /tmp/go-build2259633867/b001/exe/echo4a:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -n, --no-newline   omit trailing newline
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -s, --sep string   separator (default &amp;#34; &amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;てな感じに長いオプション名と一文字の短いオプション名が併記されているのが分かる。
実際に動かしてみると&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ go run echo4a.go --sep / May the Force be with you
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May/the/Force/be/with/you
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ go run echo4a.go -s / May the Force be with you
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;May/the/Force/be/with/you
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;と長いオプション名でも短いオプション名でも同じ動作になることが分かる。
&lt;a href=&#34;https://github.com/spf13/pflag&#34; target=&#34;_blank&#34; title=&#34;spf13/pflag: Drop-in replacement for Go&amp;#39;s flag package, implementing POSIX/GNU-style --flags.&#34;&gt;&lt;code&gt;spf13/pflag&lt;/code&gt;&lt;/a&gt; の挙動については拙文「&lt;a href=&#34;https://zenn.dev/spiegel/articles/20221008-customize-flag-package&#34; target=&#34;_blank&#34;&gt;標準 flag パッケージを pflag パッケージに置き換える&lt;/a&gt;」で簡単に紹介しているので，そちらも参考にどうぞ。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/hymkor/struct2flag&#34; target=&#34;_blank&#34; title=&#34;hymkor/struct2flag: `struct2flag` automatically registers struct fields as flags for your Go command-line tools.&#34;&gt;&lt;code&gt;hymkor/struct2flag&lt;/code&gt;&lt;/a&gt; で使う構造体タグ &lt;code&gt;flag:&lt;/code&gt; も受け入れるようにした（&lt;code&gt;flag:&lt;/code&gt; と &lt;code&gt;pflag:&lt;/code&gt; は混在可能）。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Flags&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;struct&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;N&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;bool&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;`flag:&amp;#34;n,omit trailing newline&amp;#34;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Sep&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;`flag:&amp;#34;s,separator&amp;#34;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Strs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ただし，この場合は長いオプション名のみ定義されるため&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ go run echo4b.go -h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Usage of /tmp/go-build1365887832/b001/exe/echo4b:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      --n          omit trailing newline
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      --s string   separator (default &amp;#34; &amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;という感じに，あくまでも &lt;a href=&#34;https://github.com/spf13/pflag&#34; target=&#34;_blank&#34; title=&#34;spf13/pflag: Drop-in replacement for Go&amp;#39;s flag package, implementing POSIX/GNU-style --flags.&#34;&gt;&lt;code&gt;spf13/pflag&lt;/code&gt;&lt;/a&gt; のルールで構成されるのでご注意を。&lt;/p&gt;
&lt;p&gt;一応 &lt;a href=&#34;https://github.com/hymkor/struct2flag&#34; target=&#34;_blank&#34; title=&#34;hymkor/struct2flag: `struct2flag` automatically registers struct fields as flags for your Go command-line tools.&#34;&gt;&lt;code&gt;hymkor/struct2flag&lt;/code&gt;&lt;/a&gt; と同程度の機能は持たせている。
今後は浮動小数点数や時間を指定できたらいいな，と思っている。
他に &lt;a href=&#34;https://github.com/spf13/pflag&#34; target=&#34;_blank&#34; title=&#34;spf13/pflag: Drop-in replacement for Go&amp;#39;s flag package, implementing POSIX/GNU-style --flags.&#34;&gt;&lt;code&gt;spf13/pflag&lt;/code&gt;&lt;/a&gt; ではオプション値を格納する変数側を slice にすることで同じオプションを複数回指定できる機能もあるので，それもサポートしたいところ。
まぁ，あくまでも私が使う際に必要に応じて拡張するということで。
リクエスト等ありましたら PR いただけると助かります。&lt;/p&gt;
&lt;h2&gt;参考図書&lt;/h2&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/4814401191?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/41X10&amp;#43;elsuL._SL160_.jpg&#34; width=&#34;125&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/4814401191?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;初めてのGo言語 第2版 ―他言語プログラマーのためのイディオマティックGo実践ガイド&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Jon Bodner (著), 武舎 広幸 (翻訳)&lt;/dd&gt;
    &lt;dd&gt;オライリー・ジャパン 2025-08-05 (Release 2025-08-05)&lt;/dd&gt;
    &lt;dd&gt;単行本（ソフトカバー）&lt;/dd&gt;
    &lt;dd&gt;4814401191 (ASIN), 9784814401192 (EAN), 4814401191 (ISBN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;第2版。 Generics の説明が大幅に改訂されたらしい。練習問題も追加されている。&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2025-11-02&#34;&gt;2025-11-02&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- 初めてのGo言語 第2版 --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/B0CFL1DK8Q?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/51BmDUG6D0L._SL160_.jpg&#34; width=&#34;125&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/B0CFL1DK8Q?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;Go言語 100Tips ありがちなミスを把握し、実装を最適化する impress top gearシリーズ&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Teiva Harsanyi (著), 柴田 芳樹 (著)&lt;/dd&gt;
    &lt;dd&gt;インプレス 2023-08-18 (Release 2023-08-18)&lt;/dd&gt;
    &lt;dd&gt;Kindle版&lt;/dd&gt;
    &lt;dd&gt;B0CFL1DK8Q (ASIN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;&lt;a href=&#34;https://book.impress.co.jp/books/1122101133&#34;&gt;版元&lt;/a&gt;で PDF 版を購入可能。事実上の Effective Go とも言える充実の内容。オリジナルは敢えてタイトルに “tips” という単語を入れるのを避けたのに邦題が「100 Tips」とかなっていて，原作者がお怒りとの噂（あくまで噂）&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2023-08-18&#34;&gt;2023-08-18&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- Go言語 100Tips --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/4621300253?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/41meaSLNFfL._SL160_.jpg&#34; width=&#34;122&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/4621300253?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)&lt;/dd&gt;
    &lt;dd&gt;丸善出版 2016-06-20&lt;/dd&gt;
    &lt;dd&gt;単行本（ソフトカバー）&lt;/dd&gt;
    &lt;dd&gt;4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;5&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;著者のひとりは（あの「バイブル」とも呼ばれる）通称 “K&amp;amp;R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。と思ったら絶版状態らしい（2025-01 現在）。復刊を望む！&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2016-07-13&#34;&gt;2016-07-13&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- プログラミング言語Go --&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;最初は GitHub の fork 機能をそのまま使っていたが自己 pull request の際に，うっかりオリジナルの &lt;a href=&#34;https://github.com/hymkor/struct2flag&#34; target=&#34;_blank&#34; title=&#34;hymkor/struct2flag: `struct2flag` automatically registers struct fields as flags for your Go command-line tools.&#34;&gt;&lt;code&gt;hymkor/struct2flag&lt;/code&gt;&lt;/a&gt; の方に PR しそうになったため fork 関係を切り離した。やり方は「&lt;a href=&#34;https://zenn.dev/misora/articles/62f36f175e5416&#34; target=&#34;_blank&#34;&gt;GithubでForkしたリポジトリをFork元から切り離して管理する&lt;/a&gt;」を参考にした。ありがたや &lt;abbr class=&#34;emoji-chars&#34; title=&#34;ペコン&#34;&gt;🙇&lt;/abbr&gt;&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
	</entry><entry>
		<title>Typst 0.14 がリリースされた</title>
		<category term="release" label="release" scheme="https://text.baldanders.info/release/" />
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/release/2025/10/typst-0_14-is-released/" />
		<id>tag:text.Baldanders.info,2025-10-25:/release/2025/10/typst-0_14-is-released/</id>
		<published>2025-10-25T17:03:16+09:00</published>
		<updated>2025-10-25T08:03:55+00:00</updated>
		<summary>個人的に気になるのは PDF/UA-1 (ISO 14289-1) をサポートした点かな。</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;&lt;a href=&#34;https://typst.app/&#34; target=&#34;_blank&#34; title=&#34;Typst: Compose papers faster&#34;&gt;Typst&lt;/a&gt; 0.14 がリリースされた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://typst.app/blog/2025/typst-0.14/&#34; target=&#34;_blank&#34;&gt;Typst: Typst 0.14: Now accessible – Typst Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/typst/typst/releases/tag/v0.14.0&#34; target=&#34;_blank&#34;&gt;Release Version 0.14.0 (October 24, 2025) · typst/typst · GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;0.14 のハイライトは以下の通り：&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote cite=&#34;https://typst.app/blog/2025/typst-0.14/&#34;&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://typst.app/blog/2025/typst-0.14/#accessibility&#34; target=&#34;_blank&#34;&gt;Accessibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://typst.app/blog/2025/typst-0.14/#pdf-standards&#34; target=&#34;_blank&#34;&gt;PDF standards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://typst.app/blog/2025/typst-0.14/#pdfs-as-images&#34; target=&#34;_blank&#34;&gt;PDFs as images&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://typst.app/blog/2025/typst-0.14/#character-level-justification&#34; target=&#34;_blank&#34;&gt;Character-level justification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://typst.app/blog/2025/typst-0.14/#richer-html-export&#34; target=&#34;_blank&#34;&gt;Richer HTML export&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://typst.app/blog/2025/typst-0.14/#migrating&#34; target=&#34;_blank&#34;&gt;Migrating to Typst 0.14&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://typst.app/blog/2025/typst-0.14/#community-call&#34; target=&#34;_blank&#34;&gt;Community Call&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;https://typst.app/blog/2025/typst-0.14/&#34;&gt;Typst: Typst 0.14: Now accessible&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;日本語での解説は以下の記事が参考になる。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://zenn.dev/monaqa/articles/2025-10-24-typst-updates-v0-14&#34; target=&#34;_blank&#34;&gt;Typst 0.14.0 の内容を早めに深堀り&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;個人的に気になるのは PDF/UA-1 (ISO 14289-1) をサポートした点かな。&lt;/p&gt;
&lt;p&gt;タグ付き PDF の標準としては PDF/A があるけど&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;， PDF/UA はアクセシビリティを重視したもののようで，米国の議会図書館では「望ましい文書形式」として PDF/A より PDF/UA のほうが優先順位が高いらしい。
一方 PDF/A のほうは，アーカイブ用途での長期保存を目的としていてセキュリティ設定が禁止されている。
この辺は使い分けが必要かな。&lt;/p&gt;
&lt;p&gt;なお &lt;a href=&#34;https://typst.app/&#34; target=&#34;_blank&#34; title=&#34;Typst: Compose papers faster&#34;&gt;Typst&lt;/a&gt; は PDF/A もフルサポートしている。&lt;/p&gt;
&lt;p&gt;他に注意点としては関数名やシンボル名の一部が deprecated になってるので “&lt;a href=&#34;https://typst.app/blog/2025/typst-0.14/#migrating&#34; target=&#34;_blank&#34;&gt;Migrating to Typst 0.14&lt;/a&gt;” を確認したほうがいいだろう。&lt;/p&gt;
&lt;h2&gt;ブックマーク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.antenna.co.jp/PDF/reference/PDFUA-1.html&#34; target=&#34;_blank&#34;&gt;PDF/UA-1(ISO 14289-1)について | アンテナハウス PDF資料室&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://text.baldanders.info/typst/&#34; target=&#34;_blank&#34;&gt;Typst のお勉強&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考文献&lt;/h2&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/B0DPXBNTRS?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/51B7ollzNML._SL160_.jpg&#34; width=&#34;100&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/B0DPXBNTRS?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;Typst完全入門: LaTeXより簡単、Markdownより強力、美しいドキュメント作成術&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;doitsu (著)&lt;/dd&gt;
    &lt;dd&gt; 2024-12-08 (Release 2024-12-08)&lt;/dd&gt;
    &lt;dd&gt;Kindle版&lt;/dd&gt;
    &lt;dd&gt;B0DPXBNTRS (ASIN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;3&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;マークアップ言語および組版ツールである Typst についての解説。 Kindle 版のみの提供。固定レイアウトではないためレイアウトが崩れまくって読みにくい。この手の技術解説書は固定レイアウトの Kindle 版か，いっそ PDF で出してほしい。でも Typst についてまとまった解説のある日本語の本は他に見当たらなかったのでありがたい。&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2025-02-20&#34;&gt;2025-02-20&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- Typst完全入門--&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;PDF/A については，拙文「&lt;a href=&#34;https://text.baldanders.info/remark/2020/06/pdfa-with-luatex/&#34; target=&#34;_blank&#34;&gt;LuaLaTeX で PDF/A を構成する&lt;/a&gt;」を参考にどうぞ。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
	</entry><entry>
		<title>Java 25 LTS がリリースされた</title>
		<category term="release" label="release" scheme="https://text.baldanders.info/release/" />
		<link rel="alternate" type="text/html" href="https://text.baldanders.info/release/2025/09/java-25-lts-is-released/" />
		<id>tag:text.Baldanders.info,2025-09-17:/release/2025/09/java-25-lts-is-released/</id>
		<published>2025-09-17T09:55:46+09:00</published>
		<updated>2025-10-27T06:41:09+00:00</updated>
		<summary>Java 25 は LTS 版で 2030-09 までのサポートとなる。</summary>
		<author>
			<name>Spiegel</name>
			<uri>https://baldanders.info/profile/</uri>
		</author>
		
	<link rel="cc:license" type="application/rdf+xml" href="https://creativecommons.org/licenses/by-sa/4.0/rdf" />


		<content type="html" xml:lang="ja-jp" xml:base="https://text.baldanders.info/">&lt;p&gt;予定通り Java 25 LTS がリリースされた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.oracle.com/news/announcement/oracle-releases-java-25-2025-09-16/&#34; target=&#34;_blank&#34;&gt;Oracle Releases Java 25&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jdk.java.net/25/&#34; target=&#34;_blank&#34;&gt;OpenJDK JDK 25 GA Release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jdk.java.net/25/release-notes&#34; target=&#34;_blank&#34;&gt;JDK 25 Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Java のサポート期間&lt;/h2&gt;
&lt;p&gt;以下は Oracle が定めるサポート・ロードマップ&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;figure lang=&#34;en&#34;&gt;
&lt;blockquote class=&#34;nobox&#34; cite=&#34;https://www.oracle.com/java/technologies/java-se-support-roadmap.html&#34;&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Release&lt;/th&gt;
					&lt;th&gt;GA Date&lt;/th&gt;
					&lt;th&gt;Premier Support&lt;/th&gt;
					&lt;th&gt;Extended Support&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;17 (LTS)&lt;/td&gt;
					&lt;td&gt;2021-09&lt;/td&gt;
					&lt;td&gt;2026-09&lt;/td&gt;
					&lt;td&gt;2029-09&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;21 (LTS)&lt;/td&gt;
					&lt;td&gt;2023-09&lt;/td&gt;
					&lt;td&gt;2028-09&lt;/td&gt;
					&lt;td&gt;2031-09&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;24&lt;/td&gt;
					&lt;td&gt;2025-03&lt;/td&gt;
					&lt;td&gt;2025-09&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;25 (LTS)&lt;/td&gt;
					&lt;td&gt;2025-09&lt;/td&gt;
					&lt;td&gt;2030-09&lt;/td&gt;
					&lt;td&gt;2033-09&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;26&lt;/td&gt;
					&lt;td&gt;2026-03&lt;/td&gt;
					&lt;td&gt;2026-09&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;27&lt;/td&gt;
					&lt;td&gt;2026-09&lt;/td&gt;
					&lt;td&gt;2027-03&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;figcaption&gt;&lt;div&gt;via &lt;q&gt;&lt;a href=&#34;https://www.oracle.com/java/technologies/java-se-support-roadmap.html&#34;&gt;Oracle Java SE Support Roadmap&lt;/a&gt;&lt;/q&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;これによると Java 25 は 2030-09 までのサポートとなる。
なお 2025-09 時点で Premier Support が終了しているものは除いている（Java 24 は今月（2025-09）でサポートが切れるので注意）。&lt;/p&gt;
&lt;p&gt;いまだ需要のある Java 8 等については &lt;a href=&#34;https://adoptium.net/&#34; target=&#34;_blank&#34;&gt;Adoptium&lt;/a&gt; や &lt;a href=&#34;https://ubuntu.com/toolchains/java&#34; target=&#34;_blank&#34;&gt;Canonical&lt;/a&gt; などで最新バイナリを取得可能である。&lt;/p&gt;
&lt;h2&gt;OpenJDK のアップデート&lt;/h2&gt;
&lt;p&gt;ここでは &lt;a href=&#34;http://openjdk.java.net/&#34; target=&#34;_blank&#34;&gt;OpenJDK&lt;/a&gt; の実行バイナリを&lt;a href=&#34;https://jdk.java.net/25/&#34; target=&#34;_blank&#34;&gt;リリースページ&lt;/a&gt;から直接ダウンロードして配置する方法を挙げる。
以下は完全手動でインストールした場合（笑）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cd /usr/local/src
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo curl -LO &amp;#34;https://download.java.net/java/GA/jdk25.0.1/2fbf10d8c78e40bd87641c434705079d/8/GPL/openjdk-25.0.1_linux-x64_bin.tar.gz&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cd ..
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo unlink java # 以前のバージョンの Java 環境がある場合
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo tar xvf src/openjdk-25.0.1_linux-x64_bin.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo ln -s jdk-25.0.1 java
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ java -version # すでに PATH が通っている場合
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openjdk version &amp;#34;25.0.1&amp;#34; 2025-10-21
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenJDK Runtime Environment (build 25.0.1+8-27)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OpenJDK 64-Bit Server VM (build 25.0.1+8-27, mixed mode, sharing)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;私としては &lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; が動けばいいので，試しておく&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;。&lt;/p&gt;
&lt;figure style=&#39;margin:0 auto;text-align:center;&#39;&gt;&lt;a href=&#34;./factory-method-pattern.puml&#34;&gt;&lt;img src=&#34;./factory-method-pattern.png&#34; srcset=&#34;./factory-method-pattern.png 1171w&#34; sizes=&#34;(min-width:600px) 500px, 80vw&#34; alt=&#34;Factory Method Pattern&#34; loading=&#34;lazy&#34;&gt;&lt;/a&gt;&lt;figcaption&gt;&lt;div&gt;&lt;a href=&#34;./factory-method-pattern.puml&#34;&gt;Factory Method Pattern&lt;/a&gt;&lt;/div&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;よーし，うむうむ，よーし。&lt;/p&gt;
&lt;h2&gt;ブックマーク&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://openjdk.org/groups/vulnerability/advisories/2025-10-21&#34; target=&#34;_blank&#34;&gt;OpenJDK Vulnerability Advisory: 2025/10/21&lt;/a&gt; : JDK 25.0.1 がリリース&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.oracle.com/security-alerts/cpuoct2025.html&#34; target=&#34;_blank&#34;&gt;Oracle Critical Patch Update Advisory - October 2025&lt;/a&gt; : Java を含む Oracle 製品の脆弱性情報&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://canonical.com/blog/introducing-canonical-builds-of-openjdk&#34; target=&#34;_blank&#34;&gt;Introducing Canonical builds of OpenJDK&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://codezine.jp/news/detail/21857&#34; target=&#34;_blank&#34;&gt;Ubuntu Linux向けの新しいビルドセット「⁠Canonical builds of OpenJDK」が登場|CodeZine（コードジン）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.publickey1.jp/blog/25/java_252ltsjit.html&#34; target=&#34;_blank&#34;&gt;「Java 25」正式リリース、2年振りのLTS版。事前キャッシュによる高速起動、JITの即時ネイティブコード生成など新機能 － Publickey&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://gihyo.jp/article/2025/09/java25&#34; target=&#34;_blank&#34;&gt;Java 25リリース――初心者向け機能や起動時間短縮など | gihyo.jp&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://qiita.com/nowokay/items/7e05b4c42ded043a298a&#34; target=&#34;_blank&#34;&gt;Java 25新機能まとめ #OpenJDK - Qiita&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://forest.watch.impress.co.jp/docs/news/2052633.html&#34; target=&#34;_blank&#34;&gt;Microsoft、「Java 25」の「Microsoft Build of OpenJDK」ビルドをリリース - 窓の杜&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;参考図書&lt;/h2&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/B07CKHR8C1?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/4143qCJap5L._SL160_.jpg&#34; width=&#34;123&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/B07CKHR8C1?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;Spring Data JPAプログラミング入門&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;溝口賢司 (著)&lt;/dd&gt;
    &lt;dd&gt;秀和システム 2017-08-03 (Release 2018-04-23)&lt;/dd&gt;
    &lt;dd&gt;Kindle版&lt;/dd&gt;
    &lt;dd&gt;B07CKHR8C1 (ASIN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;JPA のお勉強用に購入。紙のほうはプレミアが付いてるっぽいが Kindle で買えるよ。固定レイアウトだからブラウザの Kindle Cloud Reader で読めるし。真面目に基本を押さえて書いていて分かりやすい。&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2021-08-26&#34;&gt;2021-08-26&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- Spring Data JPAプログラミング入門 --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/4621303252?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/41WZElZb9eL._SL160_.jpg&#34; width=&#34;128&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/4621303252?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;Effective Java 第3版&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;Joshua Bloch (著), 柴田 芳樹 (翻訳)&lt;/dd&gt;
    &lt;dd&gt;丸善出版 2018-10-30&lt;/dd&gt;
    &lt;dd&gt;単行本（ソフトカバー）&lt;/dd&gt;
    &lt;dd&gt;4621303252 (ASIN), 9784621303252 (EAN), 4621303252 (ISBN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;再勉強中。 Kindle 版のほうがちょっと安いが，勤務先でも使いたかったので紙の本にした。&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2021-03-17&#34;&gt;2021-03-17&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- Effective Java 第3版 --&gt;
&lt;div class=&#34;hreview&#34;&gt;
  &lt;div class=&#34;photo&#34;&gt;&lt;a href=&#34;https://www.amazon.co.jp/dp/B0893LQ5KY?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;&lt;img src=&#34;https://m.media-amazon.com/images/I/51VWsWP87dL._SL160_.jpg&#34; width=&#34;100&#34; alt=&#34;photo&#34;&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;dl&gt;
    &lt;dt class=&#34;item&#34;&gt;&lt;a class=&#34;fn url&#34; href=&#34;https://www.amazon.co.jp/dp/B0893LQ5KY?tag=baldandersinf-22&amp;amp;linkCode=ogi&amp;amp;th=1&amp;amp;psc=1&#34;&gt;Spring Boot 2 入門: 基礎から実演まで&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;原田 けいと (著), 竹田 甘地 (著), Robert Segawa (著)&lt;/dd&gt;
    &lt;dd&gt; 2020-05-22 (Release 2020-05-22)&lt;/dd&gt;
    &lt;dd&gt;Kindle版&lt;/dd&gt;
    &lt;dd&gt;B0893LQ5KY (ASIN)&lt;/dd&gt;
    &lt;dd&gt;評価&lt;abbr class=&#34;rating fa-sm&#34; title=&#34;4&#34;&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;fas fa-star&#34;&gt;&lt;/i&gt;&amp;nbsp;&lt;i class=&#34;far fa-star&#34;&gt;&lt;/i&gt;&lt;/abbr&gt;&lt;/dd&gt;
  &lt;/dl&gt;
  &lt;p class=&#34;description&#34;&gt;Spring Boot を勉強することになって急遽買った本。めっさ分かりやすかった。 PDF 版が欲しいくらい（笑） Spring Boot 3.2 対応にアップデートされていた。素敵！&lt;/p&gt;
  &lt;p class=&#34;powered-by&#34;&gt;reviewed by &lt;a href=&#39;#maker&#39; class=&#39;reviewer&#39;&gt;Spiegel&lt;/a&gt; on &lt;abbr class=&#34;dtreviewed&#34; title=&#34;2024-03-20&#34;&gt;2024-03-20&lt;/abbr&gt; (powered by &lt;a href=&#34;https://affiliate.amazon.co.jp/assoc_credentials/home&#34;&gt;PA-APIv5&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt; &lt;!-- Spring Boot 2 入門 --&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;記事で挙げたロードマップは Oracle Java によるものであり， &lt;a href=&#34;http://openjdk.java.net/&#34; target=&#34;_blank&#34;&gt;OpenJDK&lt;/a&gt; のサポート期間についてはディストリビューションによるが，大抵の場合 LTS 版であれば Oracle Java より長くサポートされることが多い。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;2025-09-09 に &lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; &lt;a href=&#34;https://github.com/plantuml/plantuml/releases/tag/v1.2025.7&#34; target=&#34;_blank&#34;&gt;v1.2025.7&lt;/a&gt; が&lt;a href=&#34;http://plantuml.com/changes&#34; target=&#34;_blank&#34;&gt;リリース&lt;/a&gt;されている。 &lt;a href=&#34;http://plantuml.com/&#34; target=&#34;_blank&#34; title=&#34;Open-source tool that uses simple textual descriptions to draw UML diagrams.&#34;&gt;PlantUML&lt;/a&gt; の使い方等については拙文「&lt;a href=&#34;https://text.baldanders.info/remark/2018/12/plantuml-1/&#34; target=&#34;_blank&#34;&gt;真面目に PlantUML&lt;/a&gt;」シリーズを参考にどうぞ。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content>
	</entry>
</feed>
