List of Scoop - text.Baldanders.info
tag:text.Baldanders.info,2023-01-08:/tags
2023-01-08T15:10:56+09:00
帰ってきた「しっぽのさきっちょ」
https://text.baldanders.info/images/avatar.jpg
https://text.baldanders.info/images/avatar.jpg
オレオレ Scoop Bucket を作ってみた
tag:text.Baldanders.info,2023-01-08:/release/2023/01/my-scoop-bucket/
2023-01-08T06:10:56+00:00
2023-01-13T07:26:28+00:00
これならボクにもできそう
Spiegel
https://baldanders.info/profile/
<p><a href="https://zenn.dev/zetamatta">hymkor</a> さんの</p>
<ul>
<li><a href="https://zenn.dev/zetamatta/books/5ac80a9ddb35fef9a146/viewer/cccccc">おれおれ scoop バケットを作ろう|scoop / nyagos で始めるコマンドライン生活</a></li>
</ul>
<p>を見て「これならボクにもできそう」と思ったので作ってみた。</p>
<p>まずは,<a href="https://github.com/ScoopInstaller/BucketTemplate" title="ScoopInstaller/BucketTemplate: Template Bucket for Scoop Installer">テンプレート・リポジトリ</a>の GitHub ページで “Use this template” → “Create a new repository” で一式を fork する。
既定ブランチが <code>master</code> なのでご注意を。</p>
<p>あとは <code>README.md</code> を適当に修正して <code>bucket/</code> フォルダにマニフェスト・ファイル(<code>*.json</code>)を入れるだけ。</p>
<p>マニフェスト・ファイルはパッケージごとに作成する。
たとえば,拙作 <a href="https://github.com/goark/gpgpdump" title="goark/gpgpdump: OpenPGP packet visualizer">gpgpdump</a> ならファイル名を <code>bucket/gpgpdump.json</code> として,こんな感じに記述する。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"version"</span><span class="p">:</span> <span class="s2">"0.15.0"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"description"</span><span class="p">:</span> <span class="s2">"OpenPGP packet visualizer"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"homepage"</span><span class="p">:</span> <span class="s2">"https://github.com/goark/gpgpdump"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"license"</span><span class="p">:</span> <span class="s2">"Apache-2.0"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"architecture"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"64bit"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"url"</span><span class="p">:</span> <span class="s2">"https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_64bit.zip"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"hash"</span><span class="p">:</span> <span class="s2">"be818119dc650f245aa8665f1af155b9d14c17c70e617517e817d81acb244151"</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"arm64"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"url"</span><span class="p">:</span> <span class="s2">"https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_ARM64.zip"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"hash"</span><span class="p">:</span> <span class="s2">"73d999250dc4a03b2298aa88271a34db2ff1cd3013428243b2e28afaed95aa5e"</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"bin"</span><span class="p">:</span> <span class="s2">"gpgpdump.exe"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"checkver"</span><span class="p">:</span> <span class="s2">"github"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"autoupdate"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"architecture"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"64bit"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"url"</span><span class="p">:</span> <span class="s2">"https://github.com/goark/gpgpdump/releases/download/v$version/gpgpdump_$version_Windows_64bit.zip"</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"arm64"</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"url"</span><span class="p">:</span> <span class="s2">"https://github.com/goark/gpgpdump/releases/download/v$version/gpgpdump_$version_Windows_ARM64.zip"</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>シングルバイナリなので簡単!</p>
<p>必要な数だけマニフェスト・ファイルができたら commit & push で GitHub に送る。
すると GitHub Actions が走り出すので,終わるまで待ってエラーが出なければ無問題である。</p>
<p>最終的にはこんな感じのリポジトリになった。</p>
<ul>
<li><a href="https://github.com/goark/scoop-bucket">goark/scoop-bucket: Scoop Bucket for goark binaries</a></li>
</ul>
<p>早速 Windows 環境で試してみよう。</p>
<p>まずは,既存の bucket に <a href="https://github.com/goark/gpgpdump" title="goark/gpgpdump: OpenPGP packet visualizer">gpgpdump</a> がないことを確認する。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ scoop search gpgpdump
</span></span><span class="line"><span class="cl">WARN No matches found.
</span></span></code></pre></div><p>次に,作成したオレオレ buket を登録する。
そのまま GitHub リポジトリのパスを指示すれば OK。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ scoop bucket add goark https://github.com/goark/scoop-bucket
</span></span><span class="line"><span class="cl">Checking repo... OK
</span></span><span class="line"><span class="cl">The goark bucket was added successfully.
</span></span></code></pre></div><p>うんうん。
ちなみに bucket 名は(名前が被らなければ)任意に指定できる<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>。</p>
<p>この状態でもう一度 <a href="https://github.com/goark/gpgpdump" title="goark/gpgpdump: OpenPGP packet visualizer">gpgpdump</a> を探してみる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ scoop search gpgpdump
</span></span><span class="line"><span class="cl">Results from local buckets...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Name Version Source Binaries
</span></span><span class="line"><span class="cl">---- ------- ------ --------
</span></span><span class="line"><span class="cl">gpgpdump 0.15.0 goark
</span></span></code></pre></div><p>おー。
あるやないかい。
では実際にインストールして動作確認してみよう。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ scoop install gpgpdump
</span></span><span class="line"><span class="cl">Installing 'gpgpdump' (0.15.0) [64bit] from goark bucket
</span></span><span class="line"><span class="cl">gpgpdump_0.15.0_Windows_64bit.zip (3.1 MB) [==================================================================] 100%
</span></span><span class="line"><span class="cl">Checking hash of gpgpdump_0.15.0_Windows_64bit.zip ... ok.
</span></span><span class="line"><span class="cl">Extracting gpgpdump_0.15.0_Windows_64bit.zip ... done.
</span></span><span class="line"><span class="cl">Linking ~\scoop\apps\gpgpdump\current => ~\scoop\apps\gpgpdump\0.15.0
</span></span><span class="line"><span class="cl">Creating shim for 'gpgpdump'.
</span></span><span class="line"><span class="cl">'gpgpdump' (0.15.0) was installed successfully!
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ gpgpdump.exe version
</span></span><span class="line"><span class="cl">gpgpdump v0.15.0
</span></span><span class="line"><span class="cl">repository: https://github.com/goark/gpgpdump
</span></span></code></pre></div><p>よーし,うむうむ,よーし。</p>
<p>今のところ以下のツールを登録している。</p>
<ul>
<li><a href="https://github.com/goark/gpgpdump" title="goark/gpgpdump: OpenPGP packet visualizer">gpgpdump</a> - OpenPGP packet visualizer</li>
<li><a href="https://github.com/goark/depm" title="goark/depm: Visualize depndency packages and modules">depm</a> - Visualize depndency packages and modules</li>
<li><a href="https://github.com/goark/gnkf" title="goark/gnkf: Network Kanji Filter by Golang">gnkf</a> - Network Kanji Filter by Golang</li>
<li><a href="https://github.com/goark/ml" title="goark/ml: Make Link with Markdown Format">ml</a> - Make Link with Markdown Format</li>
</ul>
<p>問題は登録しているツールのバージョンを上げるたびに対応するマニフェスト・ファイルも更新しないといけないところかな。
手で直すのは手間なので,何らかのバッチ処理を考えないとな。</p>
<h2>【2022-01-09 追記】make-scoop-manifest でマニフェスト・ファイルを生成する</h2>
<ul>
<li><a href="https://github.com/hymkor/make-scoop-manifest">hymkor/make-scoop-manifest: Make scoop manifest (そのまんまや!)</a></li>
<li><a href="https://zetamatta.hatenablog.com/entry/2023/01/10/111205">scoop のマニフェストファイルを作るツールを公開しました - 標準愚痴出力</a></li>
</ul>
<p>これを使えばマニフェスト・ファイルが簡単に生成できるようだ。
ありがたや <abbr class="emoji-chars" title="ペコン">🙇</abbr></p>
<p>私の場合は <a href="https://github.com/hymkor/make-scoop-manifest#usage-3">Usage-3</a> でいけそうかな<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>。</p>
<p>Windows 用のバイナリは<a href="https://github.com/hymkor/make-scoop-manifest/releases" title="Releases · hymkor/make-scoop-manifest">提供されている</a>が,他のプラットフォーム用バイナリはないので,とりあえず以下のコマンドラインで試してみた。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ go run github.com/hymkor/make-scoop-manifest@latest -D -g goark/gpgpdump
</span></span><span class="line"><span class="cl">go: downloading github.com/hymkor/make-scoop-manifest v0.2.2
</span></span><span class="line"><span class="cl">/tmp/go-build3806744147/b001/exe/make-scoop-manifest for linux/amd64 by go1.19.4
</span></span><span class="line"><span class="cl">Get: https://api.github.com/repos/goark/gpgpdump/releases
</span></span><span class="line"><span class="cl">Download: https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_64bit.zip
</span></span><span class="line"><span class="cl">Download: https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_ARM64.zip
</span></span><span class="line"><span class="cl">Get: https://api.github.com/repos/goark/gpgpdump
</span></span><span class="line"><span class="cl">{
</span></span><span class="line"><span class="cl"> "version": "0.15.0",
</span></span><span class="line"><span class="cl"> "description": "OpenPGP packet visualizer",
</span></span><span class="line"><span class="cl"> "homepage": "https://github.com/goark/gpgpdump",
</span></span><span class="line"><span class="cl"> "license": "Apache License 2.0",
</span></span><span class="line"><span class="cl"> "architecture": {
</span></span><span class="line"><span class="cl"> "64bit": {
</span></span><span class="line"><span class="cl"> "url": "https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_64bit.zip",
</span></span><span class="line"><span class="cl"> "hash": "be818119dc650f245aa8665f1af155b9d14c17c70e617517e817d81acb244151"
</span></span><span class="line"><span class="cl"> },
</span></span><span class="line"><span class="cl"> "arm64": {
</span></span><span class="line"><span class="cl"> "url": "https://github.com/goark/gpgpdump/releases/download/v0.15.0/gpgpdump_0.15.0_Windows_ARM64.zip",
</span></span><span class="line"><span class="cl"> "hash": "73d999250dc4a03b2298aa88271a34db2ff1cd3013428243b2e28afaed95aa5e"
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl"> },
</span></span><span class="line"><span class="cl"> "bin": [
</span></span><span class="line"><span class="cl"> "gpgpdump.exe"
</span></span><span class="line"><span class="cl"> ],
</span></span><span class="line"><span class="cl"> "checkver": "github",
</span></span><span class="line"><span class="cl"> "autoupdate": {
</span></span><span class="line"><span class="cl"> "architecture": {
</span></span><span class="line"><span class="cl"> "64bit": {
</span></span><span class="line"><span class="cl"> "url": "https://github.com/goark/gpgpdump/releases/download/v$version/gpgpdump_$version_Windows_64bit.zip"
</span></span><span class="line"><span class="cl"> },
</span></span><span class="line"><span class="cl"> "arm64": {
</span></span><span class="line"><span class="cl"> "url": "https://github.com/goark/gpgpdump/releases/download/v$version/gpgpdump_$version_Windows_ARM64.zip"
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl"> }
</span></span><span class="line"><span class="cl">}
</span></span></code></pre></div><p>おー。
いけるいける。</p>
<p>というわけで,早速 <a href="https://taskfile.dev/">Task</a> 用の設定ファイルを書いて一括処理できるようにする。
こんな感じ。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s1">'3'</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">tasks</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">default</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deps</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">depm, gnkf, gpgpdump, ml]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">depm</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">dir</span><span class="p">:</span><span class="w"> </span><span class="l">bucket/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deps</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">build-make-scoop-manifest]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cmds</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">make-scoop-manifest -D -g goark/depm > depm.json</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">generates</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">depm.json</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">gnkf</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">dir</span><span class="p">:</span><span class="w"> </span><span class="l">bucket/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deps</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">build-make-scoop-manifest]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cmds</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">make-scoop-manifest -D -g goark/gnkf > gnkf.json</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">generates</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">gnkf.json</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">gpgpdump</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">dir</span><span class="p">:</span><span class="w"> </span><span class="l">bucket/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deps</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">build-make-scoop-manifest]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cmds</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">make-scoop-manifest -D -g goark/gpgpdump > gpgpdump.json</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">generates</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">gpgpdump.json</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ml</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">dir</span><span class="p">:</span><span class="w"> </span><span class="l">bucket/</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deps</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">build-make-scoop-manifest]</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cmds</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">make-scoop-manifest -D -g goark/depm > ml.json</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">generates</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">ml.json</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">build-make-scoop-manifest</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">desc</span><span class="p">:</span><span class="w"> </span><span class="l">Build make-scoop-manifest command.</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l">once</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cmds</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go install github.com/hymkor/make-scoop-manifest@latest</span><span class="w">
</span></span></span></code></pre></div><p>もうちょっとスマートに書きたいが …まぁいいか。</p>
<p>これでバージョンアップの度に手書きで更新しなくてよくなった。
めでたし!</p>
<h2>ブックマーク</h2>
<ul>
<li><a href="https://zenn.dev/zetamatta/books/5ac80a9ddb35fef9a146">scoop / nyagos で始めるコマンドライン生活</a></li>
<li><a href="https://github.com/hymkor/scoop-bucket">GitHub - hymkor/scoop-bucket</a></li>
<li><a href="https://qiita.com/nimzo6689/items/5ead753169dbad72e4eb">Scoop で利用できる Bucket の解説(<code>scoop bucket known</code> 限定) - Qiita</a></li>
<li><a href="https://zenn.dev/ttani/articles/github-approval-self">GitHubで自分以外の人がmainブランチに直接PUSHするのを禁止する</a></li>
</ul>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><code>scoop bucket known</code> で表示されるリストは公式(?)の bucket 名なので,それ以外の名前を使うのがいいだろう。 Bucket を削除する場合は <code>scoop bucket rm <bucket name></code> でいける。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:2">
<p>私は <a href="https://goreleaser.com/">GoReleaser</a> + <a href="https://github.com/goreleaser/goreleaser-action" title="goreleaser/goreleaser-action: GitHub Action for GoReleaser">GitHub Actions</a> でバイナリを自動生成してしまうので,手元にバイナリはないのだ。 <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>
Scoop 版 GnuPG 2.3 系の gpg-agent が動かない?
tag:text.Baldanders.info,2021-12-07:/remark/2021/12/gpg-agent-for-windows/
2021-12-07T12:35:57+00:00
2023-01-08T06:11:00+00:00
こういう調査を Azure Virtual Desktop でしたかったんだよね。
Spiegel
https://baldanders.info/profile/
<ul>
<li><a href="https://text.baldanders.info/remark/2021/12/azure-virtual-desktop/">ようやく Azure Virtual Desktop を導入できた</a></li>
<li><a href="https://text.baldanders.info/remark/2021/12/azure-virtual-desktop-2/">Azure Virtual Desktop で遊ぶ</a></li>
<li><a href="https://text.baldanders.info/remark/2021/12/gpg-agent-for-windows/">Scoop 版 GnuPG 2.3 系の gpg-agent が動かない?</a> ← イマココ</li>
</ul>
<p>今日も <a href="https://docs.microsoft.com/ja-jp/azure/virtual-desktop/" title="Azure Virtual Desktop のドキュメント | Microsoft Docs">Azure Virtual Desktop</a> で遊んでいるのだが,どうやら <a href="https://scoop.sh/" title="Scoop">Scoop</a> でインストールした 2.3 系 <a href="https://gnupg.org/" title="The GNU Privacy Guard">GnuPG</a> で gpg-agent が上手く起動しないみたい。
厳密には <a href="https://gnupg.org/" title="The GNU Privacy Guard">GnuPG</a> v2.3.2 以降。</p>
<p>実は仕事用の Windows マシンでは随分前から気がついていたが,忙しくて碌に検証もできなかったのだ<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>。
今回の真っさら Windows で試してみて「やっぱ動かんぢゃん!」ってなった。</p>
<p>詳しく言うと</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ gpg-connect-agent /bye
</span></span><span class="line"><span class="cl">gpg-connect-agent: gpg-agentが動いていません - 開始します'C:\\Users\\username\\scoop\\apps\\gnupg\\current\\bin\\gpg-agent.exe'
</span></span><span class="line"><span class="cl">gpg-connect-agent: agent の起動のため、5秒待ちます...
</span></span><span class="line"><span class="cl">gpg-connect-agent: agent の起動のため、4秒待ちます...
</span></span><span class="line"><span class="cl">gpg-connect-agent: agent の起動のため、3秒待ちます...
</span></span><span class="line"><span class="cl">gpg-connect-agent: agent の起動のため、2秒待ちます...
</span></span><span class="line"><span class="cl">gpg-connect-agent: agent の起動のため、1秒待ちます...
</span></span><span class="line"><span class="cl">gpg-connect-agent: can't connect to the gpg-agent: IPC connect呼び出しに失敗しました
</span></span><span class="line"><span class="cl">gpg-connect-agent: 標準オプションを送信エラー: エージェントが動いていません
</span></span></code></pre></div><p>という感じに gpg-agent を起動しようとするも,5秒でタイムアウトになって失敗する。
v2.3.1 に戻すと動くので v2.3.2 で何かあったんだろう。</p>
<p><a href="https://text.baldanders.info/release/2021/08/gnupg-2_3_2-is-released/">v2.3.2 の変更点</a>を眺めると</p>
<figure lang="en">
<blockquote><ul>
<li>Under Windows use <code>LOCAL_APPDATA</code> for the socket directory. [#5537]</li>
</ul>
</blockquote>
<figcaption><div>via <q><a href="https://lists.gnupg.org/pipermail/gnupg-announce/2021q3/000462.html">GnuPG 2.3.2 released</a></q></div></figcaption>
</figure>
<p>とある。
どうもこれっぽい。
でも <code>gpgconf</code> で見ると</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ gpgconf --list-dirs | grep socket
</span></span><span class="line"><span class="cl">socketdir:C%3a\Users\username\scoop\apps\gnupg\current\gnupg
</span></span><span class="line"><span class="cl">dirmngr-socket:C%3a\Users\username\scoop\apps\gnupg\current\gnupg\S.dirmngr
</span></span><span class="line"><span class="cl">keyboxd-socket:C%3a\Users\username\scoop\apps\gnupg\current\gnupg\S.keyboxd
</span></span><span class="line"><span class="cl">agent-ssh-socket:C%3a\Users\username\scoop\apps\gnupg\current\gnupg\S.gpg-agent.ssh
</span></span><span class="line"><span class="cl">agent-extra-socket:C%3a\Users\username\scoop\apps\gnupg\current\gnupg\S.gpg-agent.extra
</span></span><span class="line"><span class="cl">agent-browser-socket:C%3a\Users\username\scoop\apps\gnupg\current\gnupg\S.gpg-agent.browser
</span></span><span class="line"><span class="cl">agent-socket:C%3a\Users\username\scoop\apps\gnupg\current\gnupg\S.gpg-agent
</span></span></code></pre></div><p>てな感じで,ちゃんと <a href="https://scoop.sh/" title="Scoop">Scoop</a> 配下で設定されてるんだけどねぇ。</p>
<h2><a href="https://github.com/microsoft/winget-cli" title="microsoft/winget-cli: Windows Package Manager CLI (aka winget)">winget</a> 版 <a href="https://gnupg.org/" title="The GNU Privacy Guard">GnuPG</a> を導入する</h2>
<p>まぁ,愚痴ってもしょうがないので,とりあえず <a href="https://scoop.sh/" title="Scoop">Scoop</a> 版は諦めることにしよう。
幸いなことに <a href="https://github.com/microsoft/winget-cli" title="microsoft/winget-cli: Windows Package Manager CLI (aka winget)">winget</a> でも <a href="https://gnupg.org/" title="The GNU Privacy Guard">GnuPG</a> をインストール可能で,こちらは標準のインストーラが動くようだ。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ winget search gnupg
</span></span><span class="line"><span class="cl">名前 ID バージョン ソース
</span></span><span class="line"><span class="cl">--------------------------------------------------
</span></span><span class="line"><span class="cl">GNU Privacy Guard GnuPG.GnuPG 2.3.3 winget
</span></span><span class="line"><span class="cl">Gpg4win GnuPG.Gpg4win 3.1.16 winget
</span></span></code></pre></div><p>というわけでインストールしてしまおう。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ winget install GnuPG.GnuPG
</span></span><span class="line"><span class="cl">見つかりました GNU Privacy Guard [GnuPG.GnuPG] バージョン 2.3.3
</span></span><span class="line"><span class="cl">このアプリケーションは所有者からライセンス供与されます。
</span></span><span class="line"><span class="cl">Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
</span></span><span class="line"><span class="cl">Downloading https://gnupg.org/ftp/gcrypt/binary/gnupg-w32-2.3.3_20211012.exe
</span></span><span class="line"><span class="cl"> ██████████████████████████████ 4.59 MB / 4.59 MB
</span></span><span class="line"><span class="cl">インストーラーハッシュが正常に検証されました
</span></span><span class="line"><span class="cl">パッケージのインストールを開始しています...
</span></span><span class="line"><span class="cl">インストールが完了しました
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ gpg --version
</span></span><span class="line"><span class="cl">gpg (GnuPG) 2.3.3
</span></span><span class="line"><span class="cl">libgcrypt 1.9.4
</span></span><span class="line"><span class="cl">Copyright (C) 2021 g10 Code GmbH
</span></span><span class="line"><span class="cl">License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
</span></span><span class="line"><span class="cl">This is free software: you are free to change and redistribute it.
</span></span><span class="line"><span class="cl">There is NO WARRANTY, to the extent permitted by law.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Home: C:\Users\username\AppData\Roaming\gnupg
</span></span><span class="line"><span class="cl">サポートしているアルゴリズム:
</span></span><span class="line"><span class="cl">公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
</span></span><span class="line"><span class="cl">暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
</span></span><span class="line"><span class="cl"> TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
</span></span><span class="line"><span class="cl">AEAD: EAX, OCB
</span></span><span class="line"><span class="cl">ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
</span></span><span class="line"><span class="cl">圧縮: 無圧縮, ZIP, ZLIB, BZIP2
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ which gpg.exe
</span></span><span class="line"><span class="cl">C:\Program Files (x86)\gnupg\bin\gpg.exe
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ gpgconf --list-dirs | grep socket
</span></span><span class="line"><span class="cl">socketdir:C%3a\Users\username\AppData\Local\gnupg
</span></span><span class="line"><span class="cl">dirmngr-socket:C%3a\Users\username\AppData\Local\gnupg\S.dirmngr
</span></span><span class="line"><span class="cl">keyboxd-socket:C%3a\Users\username\AppData\Local\gnupg\S.keyboxd
</span></span><span class="line"><span class="cl">agent-ssh-socket:C%3a\Users\username\AppData\Local\gnupg\S.gpg-agent.ssh
</span></span><span class="line"><span class="cl">agent-extra-socket:C%3a\Users\username\AppData\Local\gnupg\S.gpg-agent.extra
</span></span><span class="line"><span class="cl">agent-browser-socket:C%3a\Users\username\AppData\Local\gnupg\S.gpg-agent.browser
</span></span><span class="line"><span class="cl">agent-socket:C%3a\Users\username\AppData\Local\gnupg\S.gpg-agent
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ gpg-connect-agent /bye
</span></span><span class="line"><span class="cl">gpg-connect-agent: gpg-agentが動いていません - 開始します'C:\\Program Files (x86)\\gnupg\\bin\\gpg-agent.exe'
</span></span><span class="line"><span class="cl">gpg-connect-agent: agent の起動のため、5秒待ちます...
</span></span><span class="line"><span class="cl">gpg-connect-agent: agentへの接続が確立しました
</span></span></code></pre></div><p>よーし,うむうむ,よーし。</p>
<p>こういう調査を <a href="https://docs.microsoft.com/ja-jp/azure/virtual-desktop/" title="Azure Virtual Desktop のドキュメント | Microsoft Docs">Azure Virtual Desktop</a> でしたかったんだよね。
最悪コワしても仮想マシンを作り直せばいいんだし。</p>
<p>さて <a href="https://gnupg.org/" title="The GNU Privacy Guard">GnuPG</a> の導入で思いのほか手こずったので git 環境の整備は次回だな(笑)</p>
<h2>ブックマーク</h2>
<ul>
<li><a href="https://text.baldanders.info/openpgp/gnupg-home-in-windows/">GnuPG の HOME はどこにある?</a></li>
</ul>
<h2>参考図書</h2>
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/4314009071?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/51ZRZ62WKCL._SL160_.jpg" width="108" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/4314009071?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">暗号化 プライバシーを救った反乱者たち</a></dt>
<dd>スティーブン・レビー (著), 斉藤 隆央 (翻訳)</dd>
<dd>紀伊國屋書店 2002-02-16</dd>
<dd>単行本</dd>
<dd>4314009071 (ASIN), 9784314009072 (EAN), 4314009071 (ISBN)</dd>
<dd>評価<abbr class="rating fa-sm" title="5"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i></abbr></dd>
</dl>
<p class="description">20世紀末,暗号技術の世界で何があったのか。知りたかったらこちらを読むべし!</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2015-03-09">2015-03-09</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- 暗号化 プライバシーを救った反乱者たち -->
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/B015643CPE?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/51t6yHHVwEL._SL160_.jpg" width="113" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/B015643CPE?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">暗号技術入門 第3版 秘密の国のアリス</a></dt>
<dd>結城 浩 (著)</dd>
<dd>SBクリエイティブ 2015-08-25 (Release 2015-09-17)</dd>
<dd>Kindle版</dd>
<dd>B015643CPE (ASIN)</dd>
<dd>評価<abbr class="rating fa-sm" title="5"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i></abbr></dd>
</dl>
<p class="description">SHA-3 や Bitcoin/Blockchain など新しい知見や技術要素を大幅追加。暗号技術を使うだけならこれ1冊でとりあえず無問題。</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2015-09-20">2015-09-20</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- 暗号技術入門 第3版 -->
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>2.3系では特にセキュリティ・アップデートは発生していないので「後回しでいっか」と思っていた。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>
Windows Terminal × NYAGOS × Scoop = ♥
tag:text.Baldanders.info,2020-10-27:/remark/2020/10/windows-terminal-and-nyagos-and-scoop/
2020-10-27T13:17:46+00:00
2023-01-08T06:11:00+00:00
とりあえず ATOM エディタと NYAGOS を入れたい。
Spiegel
https://baldanders.info/profile/
<p>アルファ・ベータ・オメガの割り振りはご想像にお任せします <abbr class="emoji-chars" title=":smile:">😄</abbr> って,そういう話ではない。</p>
<p>さて,職場で Windows 10 機を支給されたので,とりあえず <a href="https://atom.io/" title="Atom">ATOM</a> エディタと <a href="https://github.com/nyaosorg/nyagos" title="nyaosorg/nyagos: NYAGOS - The hybrid Commandline Shell betweeeeeeen UNIX & DOS">NYAGOS</a> を入れたいわけですよ。</p>
<h2>Windows 10 に <a href="https://atom.io/" title="Atom">ATOM</a> を入れる</h2>
<p>まぁこちらはサラッと。</p>
<p><a href="https://atom.io/" title="Atom">公式ページ</a>からインストーラを取ってきて普通にインストールすればいいだけ。
なのだが,何故か Windows 版はコマンドラインからの起動が冷遇されているのよ。
古いバージョンにはあった <code>atom.cmd</code> がなくなっている。</p>
<p>じゃあ,どうやって起動するのかというと “System Settings” で</p>
<figure style='margin:0 auto;text-align:center;'><a href="./atom-system-settings.png"><img src="./atom-system-settings.png" srcset="./atom-system-settings.png 734w" sizes="(min-width:600px) 500px, 80vw" alt="System Settings in ATOM" loading="lazy"></a><figcaption><div><a href="./atom-system-settings.png">System Settings in ATOM</a></div></figcaption>
</figure>
<p>てな感じにエクスプローラ等のコンテキストメニューから開けるように設定できる。
また <a href="https://atom.io/" title="Atom">ATOM</a> が起動している状態でタスクバーの <a href="https://atom.io/" title="Atom">ATOM</a> アイコンをピン留めしておけば</p>
<figure style='margin:0 auto;text-align:center;'><a href="./atom-in-task-bar.png"><img src="./atom-in-task-bar.png" srcset="./atom-in-task-bar.png 525w" sizes="(min-width:600px) 500px, 80vw" alt="ATOM icon in task bar" loading="lazy"></a><figcaption><div><a href="./atom-in-task-bar.png">ATOM icon in task bar</a></div></figcaption>
</figure>
<p>みたいな感じにコンテキストメニューを展開できる。</p>
<p>困るのが <code>apm</code> コマンドなのだが,これにはパスを通さずに直接カレントまで降りて操作するしかないだろう。
v1.52.0 なら</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ cd C:\Users\username\AppData\Local\atom\app-1.52.0\resources\app\apm\bin
</span></span></code></pre></div><p>まで降りる。
この場所で apm を使ってログインできる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ apm login
</span></span><span class="line"><span class="cl">Welcome to Atom!
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Before you can publish packages, you'll need an API token.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Visit your account page on Atom.io https://atom.io/account,
</span></span><span class="line"><span class="cl">copy the token and paste it below when prompted.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Press [Enter] to open your account page on Atom.io.
</span></span></code></pre></div><p>ここで <code>[Enter]</code> キーを押すと Web ブラウザでアカウントページが開く(要 GitHub アカウント)。
開かない場合は Web ブラウザで直接 <a href="https://atom.io/account"><code>https://atom.io/account</code></a> を開く。
アカウントページに表示されたアクセス・トークンを入力すればログイン完了。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Token> ****************
</span></span><span class="line"><span class="cl">Saving token to Keychain done
</span></span></code></pre></div><p>あとは</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ apm stars --install
</span></span></code></pre></div><p>で <abbr class="emoji-chars" title=":star:">⭐</abbr> を付けたパッケージをまとめてインストールできる。
ちなみに,どのパッケージに <abbr class="emoji-chars" title=":star:">⭐</abbr> を付けたかは</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ apm stars
</span></span></code></pre></div><p>で確認できる。
その他の細々した設定は <a href="https://gist.github.com/spiegel-im-spiegel/e6e9c7340987f1607b2c" title="ATOM Editor の設定(カスタマイズ, Windows 環境用)">Gist に貼り付けておいた</a>のを流用した。
なんでも取っておくものである <abbr class="emoji-chars" title=":smile:">😄</abbr></p>
<h2>Windows Terminal のインストール</h2>
<p>これでようやく「メモ帳」から脱することができたので,本格的に環境を作っていこう。</p>
<p>かつて Windows 7 を使ってた頃はターミナル・エミュレータに ConEmu を使っていたが,本家 Microsoft からようやくまともなターミナル・エミュレータがリリースされた。</p>
<ul>
<li><a href="https://docs.microsoft.com/ja-jp/windows/terminal/">Windows ターミナルの概要 | Microsoft Docs</a></li>
</ul>
<p>Windows Terminal は Microsoft Store からインストールできる。
ひとまずこれをインストールして起動し,既定の PowerShell 上で作業する。</p>
<h2><a href="https://scoop.sh/" title="Scoop">Scoop</a> のインストール</h2>
<p><a href="https://scoop.sh/" title="Scoop">Scoop</a> は Windows 用のパッケージ・マネージャである。
Windows 用のパッケージ・マネージャといえば <a href="https://chocolatey.org/" title="Chocolatey Software | Chocolatey - The package manager for Windows">Chocolatey</a> が有名だが,今回は <a href="https://scoop.sh/" title="Scoop">Scoop</a> で。
<a href="https://scoop.sh/" title="Scoop">Scoop</a> の特徴は以下の通り。</p>
<figure>
<blockquote><ul>
<li>利用に管理者権限は不要!</li>
<li>実行ファイルは ~\scoop\shims に集約され、環境変数 PATH の肥大化が抑制される</li>
<li>インストーラのセットアップが簡単</li>
<li>nyagos が公式レポジトリにある (Chocolatey にもあるけど)</li>
</ul>
</blockquote>
<figcaption><div><q><a href="https://zenn.dev/zetamatta/books/5ac80a9ddb35fef9a146">scoop / nyagos で始めるコマンドライン生活</a></q>より</div></figcaption>
</figure>
<p>では早速。</p>
<p>まずは PowerShell でスクリプトを起動できるよう権限を取得する。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">PS > Set-ExecutionPolicy RemoteSigned -scope CurrentUser
</span></span></code></pre></div><p>既に許可を取得している場合はこの操作は不要である。
そうしておいて <a href="https://scoop.sh/" title="Scoop">Scoop</a> をインストールする。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">PS > iwr -useb get.scoop.sh | iex
</span></span></code></pre></div><p>これで OK。
簡単!</p>
<h2><a href="https://github.com/nyaosorg/nyagos" title="nyaosorg/nyagos: NYAGOS - The hybrid Commandline Shell betweeeeeeen UNIX & DOS">NYAGOS</a> のインストール</h2>
<p><a href="https://github.com/nyaosorg/nyagos" title="nyaosorg/nyagos: NYAGOS - The hybrid Commandline Shell betweeeeeeen UNIX & DOS">NYAGOS</a> のインストールは <code>scoop install</code> コマンドで一発 OK。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">PS > scoop install nyagos
</span></span></code></pre></div><p>よーし,うむうむ,よーし。</p>
<h3>Windows Terminal に <a href="https://github.com/nyaosorg/nyagos" title="nyaosorg/nyagos: NYAGOS - The hybrid Commandline Shell betweeeeeeen UNIX & DOS">NYAGOS</a> を登録する</h3>
<p>Windows Terminal では PowerShell を含む複数の shell を登録できる。</p>
<p>まずは <code>[Ctrl+,]</code> で <code>config.json</code> ファイル(のコピー)がメモ帳で表示される(コメントを端折っているので注意)。
これを編集して <a href="https://github.com/nyaosorg/nyagos" title="nyaosorg/nyagos: NYAGOS - The hybrid Commandline Shell betweeeeeeen UNIX & DOS">NYAGOS</a> を登録するのだ。
具体的には以下の部分を追記する。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"$schema"</span><span class="p">:</span> <span class="s2">"https://aka.ms/terminal-profiles-schema"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"defaultProfile"</span><span class="p">:</span> <span class="s2">"{61c54bbd-c2c6-5271-96e7-009a87ff44bf}"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"copyOnSelect"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"copyFormatting"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"profiles"</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"defaults"</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"list"</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="p">[</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"guid"</span><span class="p">:</span> <span class="s2">"{61c54bbd-c2c6-5271-96e7-009a87ff44bf}"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"name"</span><span class="p">:</span> <span class="s2">"Windows PowerShell"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"commandline"</span><span class="p">:</span> <span class="s2">"powershell.exe"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"hidden"</span><span class="p">:</span> <span class="kc">false</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"guid"</span><span class="p">:</span> <span class="s2">"{0caa0dad-35be-5f56-a8ff-afceeeaa6101}"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"name"</span><span class="p">:</span> <span class="s2">"コマンド プロンプト"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"commandline"</span><span class="p">:</span> <span class="s2">"cmd.exe"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"hidden"</span><span class="p">:</span> <span class="kc">false</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"guid"</span><span class="p">:</span> <span class="s2">"{b453ae62-4e3d-5e58-b989-0a998ec441b8}"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"hidden"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"name"</span><span class="p">:</span> <span class="s2">"Azure Cloud Shell"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"source"</span><span class="p">:</span> <span class="s2">"Windows.Terminal.Azure"</span>
</span></span><span class="line hl"><span class="cl"> <span class="p">},</span>
</span></span><span class="line hl"><span class="cl"> <span class="p">{</span>
</span></span><span class="line hl"><span class="cl"> <span class="nt">"guid"</span><span class="p">:</span> <span class="s2">"{19ddaf5e-e045-481a-bf88-37f7ebe66292}"</span><span class="p">,</span>
</span></span><span class="line hl"><span class="cl"> <span class="nt">"hidden"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line hl"><span class="cl"> <span class="nt">"name"</span><span class="p">:</span> <span class="s2">"Nihongo Yet Another GOing Shell"</span><span class="p">,</span>
</span></span><span class="line hl"><span class="cl"> <span class="nt">"commandline"</span><span class="p">:</span> <span class="s2">"%USERPROFILE%\\scoop\\apps\\nyagos\\current\\nyagos.exe"</span><span class="p">,</span>
</span></span><span class="line hl"><span class="cl"> <span class="nt">"cursorShape"</span><span class="p">:</span> <span class="s2">"vintage"</span><span class="p">,</span>
</span></span><span class="line hl"><span class="cl"> <span class="nt">"startingDirectory"</span><span class="p">:</span> <span class="s2">"%USERPROFILE%"</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">]</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"schemes"</span><span class="p">:</span> <span class="p">[],</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"actions"</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="p">[</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nt">"command"</span><span class="p">:</span> <span class="p">{</span><span class="nt">"action"</span><span class="p">:</span> <span class="s2">"copy"</span><span class="p">,</span> <span class="nt">"singleLine"</span><span class="p">:</span> <span class="kc">false</span> <span class="p">},</span> <span class="nt">"keys"</span><span class="p">:</span> <span class="s2">"ctrl+c"</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nt">"command"</span><span class="p">:</span> <span class="s2">"paste"</span><span class="p">,</span> <span class="nt">"keys"</span><span class="p">:</span> <span class="s2">"ctrl+v"</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nt">"command"</span><span class="p">:</span> <span class="s2">"find"</span><span class="p">,</span> <span class="nt">"keys"</span><span class="p">:</span> <span class="s2">"ctrl+shift+f"</span> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span> <span class="nt">"command"</span><span class="p">:</span> <span class="p">{</span> <span class="nt">"action"</span><span class="p">:</span> <span class="s2">"splitPane"</span><span class="p">,</span> <span class="nt">"split"</span><span class="p">:</span> <span class="s2">"auto"</span><span class="p">,</span> <span class="nt">"splitMode"</span><span class="p">:</span> <span class="s2">"duplicate"</span> <span class="p">},</span> <span class="nt">"keys"</span><span class="p">:</span> <span class="s2">"alt+shift+d"</span> <span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>ちなみに <code>guid</code> 項目はローカルマシン内で一意であればなんでもいいのだが(上の記述をそのままコピペしても無問題),気になるのであれば PowerShell の以下のコマンドで取得できる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">PS > New-Guid
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Guid
</span></span><span class="line"><span class="cl">----
</span></span><span class="line"><span class="cl">6c48ee13-e32b-4937-95a5-7e95a2e88613
</span></span></code></pre></div><p>更に <code>config.json</code> ファイル(のコピー)の</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"defaultProfile"</span><span class="p">:</span> <span class="s2">"{61c54bbd-c2c6-5271-96e7-009a87ff44bf}"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>の部分を <a href="https://github.com/nyaosorg/nyagos" title="nyaosorg/nyagos: NYAGOS - The hybrid Commandline Shell betweeeeeeen UNIX & DOS">NYAGOS</a> の GUID に書き換えれば</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"defaultProfile"</span><span class="p">:</span> <span class="s2">"{19ddaf5e-e045-481a-bf88-37f7ebe66292}"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>Windows Terminal の既定の shell を <a href="https://github.com/nyaosorg/nyagos" title="nyaosorg/nyagos: NYAGOS - The hybrid Commandline Shell betweeeeeeen UNIX & DOS">NYAGOS</a> にできる。</p>
<p>編集した <code>config.json</code> ファイル(のコピー)を保存すれば設定が反映される。
ふぃー,よーやくここまでたどり着いた。</p>
<p><a href="https://github.com/nyaosorg/nyagos" title="nyaosorg/nyagos: NYAGOS - The hybrid Commandline Shell betweeeeeeen UNIX & DOS">NYAGOS</a> を使った楽しいアレコレは以下の Zenn 本に書かれている。</p>
<ul>
<li><a href="https://zenn.dev/zetamatta/books/5ac80a9ddb35fef9a146">scoop / nyagos で始めるコマンドライン生活</a></li>
</ul>
<p>上述のセットアップについても,もう少し丁寧に書かれているので,是非どうぞ。</p>
<h3><a href="https://go.dev/">Go</a> で GUID を取得する</h3>
<p>そういや <a href="https://go.dev/">Go</a> の <a href="https://pkg.go.dev/github.com/google/uuid"><code>github.com/google/uuid</code></a> パッケージを使えば <a href="https://www.rfc-editor.org/rfc/rfc4122.html" title="RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace">UUID</a> を取得可能だが, UUID は実質 GUID と同じなので,これを利用して</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kn">package</span> <span class="nx">main</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s">"fmt"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="s">"github.com/google/uuid"</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nx">uuid</span><span class="p">.</span><span class="nf">New</span><span class="p">())</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>とすれば簡単に UUID/GUID が取れる。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ go run sample.go
</span></span><span class="line"><span class="cl">f6bdc505-e417-4b7d-a247-a06504cf03a9
</span></span></code></pre></div><h2><a href="https://scoop.sh/" title="Scoop">Scoop</a> を使うなら git は必須</h2>
<p>これでインストールは全て完了だが,今後のためにもう少し <a href="https://scoop.sh/" title="Scoop">Scoop</a> で遊んでみよう。</p>
<p>まず <a href="https://scoop.sh/" title="Scoop">Scoop</a> のバージョンを見ようとしたら</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ scoop -v
</span></span><span class="line"><span class="cl">Current Scoop version:
</span></span><span class="line"><span class="cl">git : 用語 'git' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
</span></span><span class="line"><span class="cl">名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください
</span></span><span class="line"><span class="cl">。
</span></span><span class="line"><span class="cl">発生場所 行:1 文字:1
</span></span><span class="line"><span class="cl">+ git --no-pager log --oneline HEAD -n 1
</span></span><span class="line"><span class="cl">+ ~~~
</span></span><span class="line"><span class="cl"> + CategoryInfo : ObjectNotFound: (git:String) [], CommandNotFoundException
</span></span><span class="line"><span class="cl"> + FullyQualifiedErrorId : CommandNotFoundException
</span></span></code></pre></div><p>って,どエラ怒られた(笑) どうやら <a href="https://scoop.sh/" title="Scoop">Scoop</a> はパッケージ管理を git ベースで行っているらしく,ちゃんと使うなら git の導入が必須のようだ。
ほんじゃあ,まぁ</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ scoop install git
</span></span><span class="line"><span class="cl">Scoop uses Git to update itself. Run 'scoop install git' and try again.
</span></span><span class="line"><span class="cl">...
</span></span></code></pre></div><p>おっ,アップデートした後にもっかいやれって言ってるな。
ならば,アップデートしよう。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ scoop update
</span></span><span class="line"><span class="cl">Updating Scoop...
</span></span><span class="line"><span class="cl">Updating 'main' bucket...
</span></span><span class="line"><span class="cl">Checking repo... ok
</span></span><span class="line"><span class="cl">The main bucket was added successfully.
</span></span><span class="line"><span class="cl">Scoop was updated successfully!
</span></span><span class="line"><span class="cl">'itcode"' は、内部コマンドまたは外部コマンド、
</span></span><span class="line"><span class="cl">操作可能なプログラムまたはバッチ ファイルとして認識されていません。
</span></span><span class="line"><span class="cl">exit status 1
</span></span></code></pre></div><p>おりょ,また変なエラーが出たよ。
<code>itcode"</code> 云々というのは PowerShell 絡みらしい。
なので,同じコマンドを PowerShell 上で走らせれば問題なく完了する。</p>
<p>うむ,次回から気をつけよう。</p>
<p>これでもっかい</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ scoop update git
</span></span></code></pre></div><p>とすれば,最新版が取れるわけだ。</p>
<h2>ついでに <a href="https://scoop.sh/" title="Scoop">Scoop</a> で <a href="https://gnupg.org/" title="The GNU Privacy Guard">GnuPG</a> もインストールする</h2>
<p>ついでに <a href="https://scoop.sh/" title="Scoop">Scoop</a> で <a href="https://gnupg.org/" title="The GNU Privacy Guard">GnuPG</a> もインストールしてみよう。
あるかな?</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ scoop search gnupg
</span></span><span class="line"><span class="cl">'main' bucket:
</span></span><span class="line"><span class="cl"> gnupg (2.2.23)
</span></span><span class="line"><span class="cl"> gnupg1 (1.4.23)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ scoop search gpg
</span></span><span class="line"><span class="cl">'main' bucket:
</span></span><span class="line"><span class="cl"> gnupg1 (1.4.23) --> includes 'gpg.exe'
</span></span><span class="line"><span class="cl"> gpg (2.2.23)
</span></span></code></pre></div><p>どっちだよ(笑)</p>
<p>実はこれ,中身は同じなのだが別々のパッケージとしてインストールされちゃうようだ。
ふむむー。</p>
<p>まぁ,いいや。
今回は <code>gnupg</code> で。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">$ scoop install gnupg
</span></span><span class="line"><span class="cl">Installing 'gnupg' (2.2.23) [64bit]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Linking ~\scoop\apps\gnupg\current => ~\scoop\apps\gnupg\2.2.23
</span></span><span class="line"><span class="cl">Persisting home
</span></span><span class="line"><span class="cl">'gnupg' (2.2.23) was installed successfully!
</span></span></code></pre></div><p><a href="https://scoop.sh/" title="Scoop">Scoop</a> で提供されるパッケージのうち,シングルバイナリのコマンドは <code>%USERPROFILE%\scoop\shims</code> フォルダに集められるのだが, <a href="https://gnupg.org/" title="The GNU Privacy Guard">GnuPG</a> のように複数のバイナリで構成されているものは専用のフォルダを作り環境変数 <code>PATH</code> にインストールしたフォルダを追加するようだ。
その際に</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Linking ~\scoop\apps\gnupg\current => ~\scoop\apps\gnupg\2.2.23
</span></span></code></pre></div><p>のように <code>current</code> フォルダをシンボリックリンクとして設置することで複数のバージョンに対応できるようにしているみたい。</p>
<p><a href="https://gnupg.org/" title="The GNU Privacy Guard">GnuPG</a> の動作確認をしておこう。</p>
<pre tabindex="0"><code>$ gpg --version
gpg (GnuPG) 2.2.23
libgcrypt 1.8.6
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: C:/Users/username/scoop/apps/gnupg/current/home
サポートしているアルゴリズム:
公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2
</code></pre><p>上述の <code>Home</code> だが,これもシンボリックリンクが切られていて,実体は <code>%USERPROFILE%\scoop\persist\gnupg\home</code> にある。</p>
<div class="box"><p><strong>【2020-11-02 追記】</strong>
<a href="https://gnupg.org/" title="The GNU Privacy Guard">GnuPG</a> については以下の記事でもう少し掘り下げて紹介している。</p>
<ul>
<li><a href="https://text.baldanders.info/openpgp/gnupg-home-in-windows/">GnuPG の HOME はどこにある?</a></li>
</ul></div>
<h2>今回はここまで</h2>
<p>おっと。
昼休憩が終わったようだ。
次回があれば,また今度。</p>
<h2>ブックマーク</h2>
<ul>
<li><a href="https://github.com/lukesampson/scoop">lukesampson/scoop: A command-line installer for Windows.</a></li>
<li><a href="https://qiita.com/iakio/items/78e7f098047ea0a47d70">Windows用のコマンドラインインストーラScoop - Qiita</a></li>
<li><a href="https://qiita.com/Dooteeen/items/12dc8fb14042888113d0">Scoopを使ったWindows環境構築のススメ - Super!! - Qiita</a></li>
<li><a href="https://hogehoge.tk/guid/">GUID生成ツール</a></li>
<li><a href="https://zenn.dev/zetamatta/books/c84cbe23093eee1b5830">/bin/shに慣れた人に贈るバッチファイルの書き方</a></li>
<li><a href="https://blog.satotaichi.info/scoop/index.html">ScoopでWindowsにおける開発環境構築を最適化しよう | さにあらず</a></li>
<li><a href="https://qiita.com/sozaiya/items/fd7ec3000939f0697939">scoopを使ったwindows環境構築の実例 - Qiita</a></li>
<li><a href="https://blog.isonishi.com/posts/scoop-git-sourcetree/">Scoop で Git と SourceTree をインストール - ありふれた備忘録</a></li>
</ul>
<h2>参考図書</h2>
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/4314009071?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/51ZRZ62WKCL._SL160_.jpg" width="108" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/4314009071?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">暗号化 プライバシーを救った反乱者たち</a></dt>
<dd>スティーブン・レビー (著), 斉藤 隆央 (翻訳)</dd>
<dd>紀伊國屋書店 2002-02-16</dd>
<dd>単行本</dd>
<dd>4314009071 (ASIN), 9784314009072 (EAN), 4314009071 (ISBN)</dd>
<dd>評価<abbr class="rating fa-sm" title="5"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i></abbr></dd>
</dl>
<p class="description">20世紀末,暗号技術の世界で何があったのか。知りたかったらこちらを読むべし!</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2015-03-09">2015-03-09</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- 暗号化 プライバシーを救った反乱者たち -->
<div class="hreview">
<div class="photo"><a href="https://www.amazon.co.jp/dp/B015643CPE?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1"><img src="https://m.media-amazon.com/images/I/51t6yHHVwEL._SL160_.jpg" width="113" alt="photo"></a></div>
<dl>
<dt class="item"><a class="fn url" href="https://www.amazon.co.jp/dp/B015643CPE?tag=baldandersinf-22&linkCode=ogi&th=1&psc=1">暗号技術入門 第3版 秘密の国のアリス</a></dt>
<dd>結城 浩 (著)</dd>
<dd>SBクリエイティブ 2015-08-25 (Release 2015-09-17)</dd>
<dd>Kindle版</dd>
<dd>B015643CPE (ASIN)</dd>
<dd>評価<abbr class="rating fa-sm" title="5"> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i> <i class="fas fa-star"></i></abbr></dd>
</dl>
<p class="description">SHA-3 や Bitcoin/Blockchain など新しい知見や技術要素を大幅追加。暗号技術を使うだけならこれ1冊でとりあえず無問題。</p>
<p class="powered-by">reviewed by <a href='#maker' class='reviewer'>Spiegel</a> on <abbr class="dtreviewed" title="2015-09-20">2015-09-20</abbr> (powered by <a href="https://affiliate.amazon.co.jp/assoc_credentials/home">PA-APIv5</a>)</p>
</div> <!-- 暗号技術入門 第3版 -->