<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Mac on namaraii.com</title><link>https://namaraii.com/tags/mac/</link><description>Recent content in Mac on namaraii.com</description><generator>Hugo -- gohugo.io</generator><language>ja</language><managingEditor>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</managingEditor><webMaster>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</webMaster><copyright>© 2026 TAKEUCHI Hitoshi, All Rights Reserved.</copyright><lastBuildDate>Thu, 18 Jun 2026 14:08:49 +0900</lastBuildDate><atom:link href="https://namaraii.com/tags/mac/index.xml" rel="self" type="application/rss+xml"/><item><title>Macの内部音声をwhisper.cppで文字起こしする</title><link>https://namaraii.com/posts/20260618-whisper-mac/</link><pubDate>Thu, 18 Jun 2026 14:08:49 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/20260618-whisper-mac/</guid><description>&lt;p&gt;whisper.cppとBlackHoleを使って､Macで流れている音声を文字起こしする環境を作る。&lt;/p&gt;

&lt;h2 class="relative group"&gt;whisper.cppのインストール
 &lt;div id="whispercppのインストール" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#whispercpp%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-zsh" data-lang="zsh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/ggml-org/whisper.cpp.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; whisper.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./models/download-ggml-model.sh large-v3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install cmake sdl2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cmake -B build -DWHISPER_SDL2&lt;span class="o"&gt;=&lt;/span&gt;ON
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cmake --build build --config Release
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# サンプルのwavファイルでテスト&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./build/bin/whisper-cli -m models/ggml-large-v3.bin -f samples/jfk.wav&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;仮想キャプチャデバイス BlackHoleのインストール
 &lt;div id="仮想キャプチャデバイス-blackholeのインストール" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bb%ae%e6%83%b3%e3%82%ad%e3%83%a3%e3%83%97%e3%83%81%e3%83%a3%e3%83%87%e3%83%90%e3%82%a4%e3%82%b9-blackhole%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-zsh" data-lang="zsh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install blackhole-64ch&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Macで再生されている音声を文字起こしするために必要な､仮想キャプチャデバイスBlackHoleをインストールする。&lt;/p&gt;
&lt;p&gt;インストール後､Macを再起動して､&lt;code&gt;Audio MIDI設定&lt;/code&gt;アプリを起動する。&lt;/p&gt;
&lt;p&gt;複数出力装置を作成し､M4とBlackHole 64chをチェックする。&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt="Audio MIDI設定"
 width="848"
 height="539"
 src="https://namaraii.com/images/20260618-whisper-mac-001_hu_dec7fbb3e5658bf3.webp"
 srcset="https://namaraii.com/images/20260618-whisper-mac-001_hu_dec7fbb3e5658bf3.webp 800w, https://namaraii.com/images/20260618-whisper-mac-001.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://namaraii.com/images/20260618-whisper-mac-001.webp"&gt;&lt;/figure&gt;
&lt;p&gt;私の環境ではスピーカーを接続しているオーディオインタフェース&lt;code&gt;M4&lt;/code&gt;と&lt;code&gt;BlackHole 64ch&lt;/code&gt;を指定している。&lt;/p&gt;
&lt;p&gt;その後､Macの音声出力先を&lt;code&gt;複数出力装置&lt;/code&gt;に設定する。これで､スピーカーで音声を再生しながら､BlackHoleへも音声を流すことができる。&lt;/p&gt;

&lt;h2 class="relative group"&gt;Macのサウンド設定
 &lt;div id="macのサウンド設定" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mac%e3%81%ae%e3%82%b5%e3%82%a6%e3%83%b3%e3%83%89%e8%a8%ad%e5%ae%9a" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;設定&lt;/code&gt; &amp;gt; &lt;code&gt;サウンド&lt;/code&gt; &amp;gt; &lt;code&gt;出力&lt;/code&gt;にさきほど作成した&lt;code&gt;複数出力装置&lt;/code&gt;を指定し､&lt;code&gt;入力&lt;/code&gt;は&lt;code&gt;BlackHole 64ch&lt;/code&gt;を設定する。&lt;/p&gt;

&lt;h2 class="relative group"&gt;whisper-streamで文字起こし
 &lt;div id="whisper-streamで文字起こし" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#whisper-stream%e3%81%a7%e6%96%87%e5%ad%97%e8%b5%b7%e3%81%93%e3%81%97" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;あとは､ターミナルから以下のコマンドでMacで再生されている音声を文字起こしできる。&lt;/p&gt;</description></item><item><title>LAUNCHPAD Pro MK3</title><link>https://namaraii.com/posts/launchpad_pro_mk3/</link><pubDate>Sun, 31 May 2026 18:09:27 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/launchpad_pro_mk3/</guid><description>&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="677"
 height="677"
 src="https://namaraii.com/images/LAUNCHPAD_Pro_MK3-001.png"
 srcset="https://namaraii.com/images/LAUNCHPAD_Pro_MK3-001.png 800w, https://namaraii.com/images/LAUNCHPAD_Pro_MK3-001.png 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://namaraii.com/images/LAUNCHPAD_Pro_MK3-001.png"&gt;&lt;/figure&gt;
&lt;p&gt;Launchpad Pro MK3は、Ableton LiveやLogic ProなどのDAWとシームレスに連携する、Novation社製のMIDIパッドコントローラー。64個のRGB感圧パッドを搭載し、トラックメイクからライブパフォーマンスまで幅広い用途に対応する。&lt;/p&gt;

&lt;h1 class="relative group"&gt;主な特徴・機能
 &lt;div id="主な特徴機能" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%bb%e3%81%aa%e7%89%b9%e5%be%b4%e6%a9%9f%e8%83%bd" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;強力なスタンドアロンシーケンサー&lt;/strong&gt;&lt;br&gt;
PCなしで外部のMIDI対応シンセサイザーやドラムマシンを直接コントロールできる、4トラック・32ステップシーケンサーを内蔵。
設定したキーに合わせてパッドの音階が配置されるため、楽器の演奏スキルがなくても音を外さずに美しいメロディやベースラインを弾くことができる。８２８２&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ableton Liveとの深い統合&lt;/strong&gt;&lt;br&gt;
クリップやシーンの再生、ミキサー、デバイス、トランスポートの操作がマウスを使わず本体から行える。「Capture MIDI」機能を使えば、思いつきで弾いたフレーズを逃さずクリップに記録できる。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自由なカスタマイズ性&lt;/strong&gt;&lt;br&gt;
専用ソフト「Novation Components」を使用することで、自分だけのカスタムモードを作成し、あらゆるMIDI機器やソフトウェアを自在に操作できる。&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 class="relative group"&gt;使い方のメモ
 &lt;div id="使い方のメモ" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bd%bf%e3%81%84%e6%96%b9%e3%81%ae%e3%83%a1%e3%83%a2" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;ノートモード
 &lt;div id="ノートモード" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%83%8e%e3%83%bc%e3%83%88%e3%83%a2%e3%83%bc%e3%83%89" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ノートモードの設定: &lt;code&gt;Shift&lt;/code&gt; +&lt;code&gt; Note&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;クロマチック・スケールモード切り替え: &lt;code&gt;Chro/Schale&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="640"
 height="630"
 src="https://namaraii.com/images/LAUNCHPAD_Pro_MK3-002.png"
 srcset="https://namaraii.com/images/LAUNCHPAD_Pro_MK3-002.png 800w, https://namaraii.com/images/LAUNCHPAD_Pro_MK3-002.png 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://namaraii.com/images/LAUNCHPAD_Pro_MK3-002.png"&gt;&lt;/figure&gt;

&lt;h1 class="relative group"&gt;作成したプリセット・スクリプト
 &lt;div id="作成したプリセットスクリプト" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9f%e3%83%97%e3%83%aa%e3%82%bb%e3%83%83%e3%83%88%e3%82%b9%e3%82%af%e3%83%aa%e3%83%97%e3%83%88" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;&lt;a href="https://namaraii.com/posts/yamaha_seqtrak/" &gt;YAMAHA SEQTRAK&lt;/a&gt;用のカスタムモード
 &lt;div id="yamaha-seqtrak用のカスタムモード" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#yamaha-seqtrak%e7%94%a8%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%a2%e3%83%bc%e3%83%89" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="560"
 height="556"
 src="https://namaraii.com/images/LAUNCHPAD_Pro_MK3-003.png"
 srcset="https://namaraii.com/images/LAUNCHPAD_Pro_MK3-003.png 800w, https://namaraii.com/images/LAUNCHPAD_Pro_MK3-003.png 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://namaraii.com/images/LAUNCHPAD_Pro_MK3-003.png"&gt;&lt;/figure&gt;
&lt;ul&gt;
&lt;li&gt;作成したSEQTRAK用カスタムモード(自分の環境ではカスタムモード5にアサイン)&lt;/li&gt;
&lt;li&gt;カスタムモードの切り替えは&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;パッドの割り当て
 &lt;div id="パッドの割り当て" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%83%91%e3%83%83%e3%83%89%e3%81%ae%e5%89%b2%e3%82%8a%e5%bd%93%e3%81%a6" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;No.&lt;/th&gt;
 &lt;th&gt;トラック名&lt;/th&gt;
 &lt;th&gt;トラックグループ&lt;/th&gt;
 &lt;th&gt;MIDIチャンネル&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;KICK&lt;/td&gt;
 &lt;td&gt;Drum&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;SNARE&lt;/td&gt;
 &lt;td&gt;Drum&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;CLAP&lt;/td&gt;
 &lt;td&gt;Drum&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;HAT1&lt;/td&gt;
 &lt;td&gt;Drum&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;HAT2&lt;/td&gt;
 &lt;td&gt;Drum&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;PERC1&lt;/td&gt;
 &lt;td&gt;Drum&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;PERC2&lt;/td&gt;
 &lt;td&gt;Drum&lt;/td&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;SYNTH1&lt;/td&gt;
 &lt;td&gt;Synth&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;SYNTH2&lt;/td&gt;
 &lt;td&gt;Synth&lt;/td&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;DX&lt;/td&gt;
 &lt;td&gt;DX&lt;/td&gt;
 &lt;td&gt;10&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;11-16&lt;/td&gt;
 &lt;td&gt;SAMPLER&lt;/td&gt;
 &lt;td&gt;SAMPLER&lt;/td&gt;
 &lt;td&gt;11&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;SYNTH1, SYNTH2, DXを鳴らす場合は&lt;code&gt;Shift&lt;/code&gt; +&lt;code&gt; Note&lt;/code&gt;を押しMIDIチャンネルを8〜10に変更してから使う&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://namaraii.com/LAUNCHPAD_Pro_MK3-004.syx" &gt;SEQTRAK Mode.syx&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Codexでサンプル音源を管理するMacアプリWaveCrateをつくった</title><link>https://namaraii.com/posts/20260512-wavecrate/</link><pubDate>Tue, 12 May 2026 19:31:45 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/20260512-wavecrate/</guid><description>&lt;p&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt="image"
 width="1232"
 height="864"
 src="https://namaraii.com/images/20260512-WaveCrate-001_hu_700fe7d01b728b54.png"
 srcset="https://namaraii.com/images/20260512-WaveCrate-001_hu_700fe7d01b728b54.png 800w, https://namaraii.com/images/20260512-WaveCrate-001.png 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://namaraii.com/images/20260512-WaveCrate-001.png"&gt;&lt;/figure&gt;

サンプル音源を管理するアプリはいくつか持っていたはずだが、なぜか見当たらない。しかたがないので、Codexを使ってMacでサンプル音源管理アプリを開発した。&lt;/p&gt;
&lt;p&gt;以下の基本機能は数時間でできた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ディレクトリを指定すると、配下のサンプル音源を再帰的に検索して登録する&lt;/li&gt;
&lt;li&gt;ファイル名からジャンル、楽器、BPM、キーなどを検出して自動タグ付け。手動でのタグ追加にも対応&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;/ul&gt;
&lt;br /&gt;
&lt;p&gt;目立ったバグもないため、さっそく実践投入するかと、Native InstrumentsのExpansionsのサンプル約9万ファイルを登録したところ、動きがもっさりして使い物にならない。&lt;/p&gt;
&lt;p&gt;Codexと一緒に原因を調べたところ、リスト件数ぶんのSQLを無駄に発行していたり（つまり9万回!!）、その場面では不要なデータを取得していたりと、いろいろな問題が見つかった。&lt;/p&gt;
&lt;p&gt;このようなAIと一緒に原因を調べて方針を決定する過程では、（現時点では）ソフトウェアの知見があったほうが、よりよい対応ができそうだ。&lt;/p&gt;
&lt;p&gt;今回の開発での反省点としては、設計時に機能要件の定義にのみ注力し、性能要件を詰めなかったこと。大量のデータを扱うことを事前に伝えて、そのために性能をどう作り込むかを、実装の前に詰めておくべきだった。&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;ただ、きっとこれも「現時点」での反省になるんだろうな。&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;将来的には、実装に入る前に非機能要件をヒアリングしてきたり、勝手に性能要件を類推してコスパの良い設計をしてきたりするはず。&lt;/p&gt;
&lt;p&gt;現在、自分がCodexで使っているのはGPT-5.5だが、そのコード生成能力はPoCを速攻で回すような用途においては、もはや人間の出番はなさそうなレベルに達している印象がある。&lt;/p&gt;
&lt;br /&gt;
このアプリの開発をしながら、少し前に読んだ以下のポストを思い出した。生成AIの出現による「ソフトウェアエンジニアリングという仕事の変化」を認識・予測し将来に備えて準備しておかないと、途方に暮れることになりそうだよね、というお話。
&lt;p&gt;&lt;a href="https://www.seangoedecke.com/software-engineering-may-no-longer-be-a-lifetime-career/" target="_blank" rel="noreferrer"&gt;Software engineering may no longer be a lifetime career&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;よく見られる悲劇的なケースは、スポーツ選手が「自分のキャリアは永遠に続く」と思い込み、引退後の生活に備えないことです。もしかすると、ソフトウェアエンジニアの世界でも、今がまさにその世代に当たるのかもしれません。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Ghostty</title><link>https://namaraii.com/posts/ghostty/</link><pubDate>Tue, 30 Dec 2025 10:05:39 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/ghostty/</guid><description>&lt;p&gt;&lt;a href="https://ghostty.org/" target="_blank" rel="noreferrer"&gt;Ghostty&lt;/a&gt;はクロスプラットフォームのターミナルエミュレーター。動作が軽くカスタマイズ性が高い。&lt;/p&gt;

&lt;h2 class="relative group"&gt;Macへのインストールと設定
 &lt;div id="macへのインストールと設定" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mac%e3%81%b8%e3%81%ae%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%a8%e8%a8%ad%e5%ae%9a" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;brewでインストールした。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install --cask ghostty&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;各種の設定はGUIではなくconfigファイルで行う。
&lt;code&gt;~/Library/Application Support/com.mitchellh.ghostty/config&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;設定ファイルをターミナル内から再読み込みするのは&lt;code&gt;cmd+shift+,&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;ターミナルから以下のコマンドを入力すると、使用できる（インストールされている）フォントファミリのリストが表示される。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ghostty +list-fonts&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;以下のコマンドでインストールされているテーマのリストが表示される。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ghostty +list-themes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;このようにプレビューを表示しながらテーマを選ぶことができる。&lt;/p&gt;
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt="image"
 width="1178"
 height="844"
 src="https://namaraii.com/images/ghostty-001_hu_3f6f7557d4ec26b2.png"
 srcset="https://namaraii.com/images/ghostty-001_hu_3f6f7557d4ec26b2.png 800w, https://namaraii.com/images/ghostty-001.png 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://namaraii.com/images/ghostty-001.png"&gt;&lt;/figure&gt;
&lt;p&gt;現時点での設定ファイルは以下の通り。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Dracula&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;font-family &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;UDEV Gothic&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;font-thicken
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;font-size &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mouse-hide-while-typing
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;window-theme &lt;span class="o"&gt;=&lt;/span&gt; dark
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;background-opacity &lt;span class="o"&gt;=&lt;/span&gt; 0.8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;background-blur &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;macos-titlebar-style &lt;span class="o"&gt;=&lt;/span&gt; transparent
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;window-inherit-working-directory &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;window-save-state &lt;span class="o"&gt;=&lt;/span&gt; always&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;設定可能な項目の説明は&lt;a href="https://ghostty.org/docs/config" target="_blank" rel="noreferrer"&gt;Configuration&lt;/a&gt;にある。かなりの数があるが、自分は必要最低限のものに絞った。&lt;/p&gt;

&lt;h2 class="relative group"&gt;Alfred関連の設定
 &lt;div id="alfred関連の設定" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#alfred%e9%96%a2%e9%80%a3%e3%81%ae%e8%a8%ad%e5%ae%9a" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;デフォルトで使用するターミナルをGhosttyに変更するため、Alfredの設定変更とワークフローの修正を行った。&lt;/p&gt;

&lt;h3 class="relative group"&gt;Teminalの設定変更
 &lt;div id="teminalの設定変更" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#teminal%e3%81%ae%e8%a8%ad%e5%ae%9a%e5%a4%89%e6%9b%b4" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;以下のGhosttyとの連携スクリプトを手順に従って設定する。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/zeitlings/alfred-ghostty-script" target="_blank" rel="noreferrer"&gt;zeitlings/alfred-ghostty-script: AppleScript for Ghostty Alfred integration&lt;/a&gt;&lt;/p&gt;

&lt;h3 class="relative group"&gt;terminalfinderワークフローの修正
 &lt;div id="terminalfinderワークフローの修正" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#terminalfinder%e3%83%af%e3%83%bc%e3%82%af%e3%83%95%e3%83%ad%e3%83%bc%e3%81%ae%e4%bf%ae%e6%ad%a3" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;ファインダとターミナルを行き来するのに使っているAlfredのtermmialfinderワークフローにGhostty用のトリガーとスクリプトを追加した。&lt;/p&gt;</description></item><item><title>ObsidianのVimモードでNORMALモードに移行したらIMEをOFFにする(Mac)</title><link>https://namaraii.com/posts/obsidian-vimmode-imeoff/</link><pubDate>Sat, 27 Dec 2025 10:02:07 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/obsidian-vimmode-imeoff/</guid><description>&lt;p&gt;ObsidianのVimモードでNORMALモードに移行した際、デフォルの動作ではIMEのON/OFFが変わらないため、日本語のテキストを書いているときに不便なので、im-select + Karabiner-Elementsを使って&lt;code&gt;Esc&lt;/code&gt;押下でIME OFFにする設定を追加した。&lt;/p&gt;
&lt;p&gt;自分の環境では既にターミナルや&lt;a href="https://namaraii.com/posts/ghostty/" &gt;Ghostty&lt;/a&gt;用にその設定を入れているので、対象とするアプリとしてObisidianを追加するだけだった。&lt;/p&gt;
&lt;p&gt;具体的には&lt;code&gt;bundle_identifiers&lt;/code&gt;に&lt;code&gt;&amp;quot;^md\\.obsidian$&amp;quot;&lt;/code&gt;を追加した。&lt;/p&gt;
&lt;p&gt;Obsidianのbundle_identifierは以下のようにして調べた。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;osascript -e &lt;span class="s1"&gt;&amp;#39;id of app &amp;#34;Obsidian&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;md.obsidian&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;以下はKarabiner-Elementsに表示で入っている「TerminalまたはMacVimでESCあるいは^[を押したときに日本語入力を英数に切り替える」にGhosttyとObsidianを追加したもの。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;指定したアプリでESCあるいは^[を押したときに日本語入力を英数に切り替える。&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;manipulators&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;conditions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;bundle_identifiers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;^com\\.apple\\.Terminal$&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;^org\\.vim\\.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;^com\\.mitchellh\\.ghostty$&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;^md\\.obsidian$&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;frontmost_application_if&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;from&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;key_code&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;escape&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;modifiers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;optional&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;any&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;to&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;key_code&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;japanese_eisuu&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;key_code&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;escape&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;conditions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;bundle_identifiers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;^com\\.apple\\.Terminal$&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;^org\\.vim\\.&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;frontmost_application_if&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;from&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;key_code&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;open_bracket&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;modifiers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;mandatory&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;left_control&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;to&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;key_code&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;japanese_eisuu&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;key_code&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;escape&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;basic&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>日付キーワードからフォーマットされた日付テキストを生成するAlfred Workflow</title><link>https://namaraii.com/posts/20251107-alfred-dateconverter/</link><pubDate>Fri, 07 Nov 2025 09:25:15 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/20251107-alfred-dateconverter/</guid><description>&lt;p&gt;&lt;a href="https://azookey.com/" target="_blank" rel="noreferrer"&gt;azooKey&lt;/a&gt;という高精度なニューラルかな漢字変換エンジンをサポートしたiOS用キーボードアプリの&lt;a href="https://github.com/azooKey/azooKey-Desktop" target="_blank" rel="noreferrer"&gt;macOS版&lt;/a&gt;を試している。&lt;/p&gt;
&lt;p&gt;ライブ変換もサポートしていて、標準のIMEより変換精度が高くて素晴らしい。問題なく常用できそうな感じ。&lt;/p&gt;
&lt;p&gt;ただ、いくつかのIMEでサポートしている「きょう」で本日の日付に変換する機能がないんですよね。これはＸでも話題になっていて、以下のような改善策も見つけました。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://scrapbox.io/terfno/azooKey-Desktop_%E3%81%A7%E6%97%A5%E4%BB%98%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%99%E3%82%8B" target="_blank" rel="noreferrer"&gt;azooKey-Desktop で日付を入力する - terfnoのScrapbox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;しかし、個人的には「昨日」や「明日」「先週の金曜日」などの日付を得たいケースが多く、ChatGPTで&lt;a href="https://namaraii.com/posts/alfred/" &gt;Alfred&lt;/a&gt;用のワークフローを作成した。&lt;/p&gt;

&lt;h2 class="relative group"&gt;動作イメージ
 &lt;div id="動作イメージ" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8b%95%e4%bd%9c%e3%82%a4%e3%83%a1%e3%83%bc%e3%82%b8" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;ワークフローを起動して、キーワードを入力すると対応するものがサジェストされる。
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="554"
 height="220"
 src="https://namaraii.com/images/20251107-alfred-dateconverter-001.png"
 srcset="https://namaraii.com/images/20251107-alfred-dateconverter-001.png 800w, https://namaraii.com/images/20251107-alfred-dateconverter-001.png 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://namaraii.com/images/20251107-alfred-dateconverter-001.png"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;キーワードを決定すると､複数の日付フォーマットを選択できる。
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="558"
 height="261"
 src="https://namaraii.com/images/20251107-alfred-dateconverter-002.png"
 srcset="https://namaraii.com/images/20251107-alfred-dateconverter-002.png 800w, https://namaraii.com/images/20251107-alfred-dateconverter-002.png 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://namaraii.com/images/20251107-alfred-dateconverter-002.png"&gt;&lt;/figure&gt;
&lt;/p&gt;

&lt;h2 class="relative group"&gt;対応キーワード
 &lt;div id="対応キーワード" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%af%be%e5%bf%9c%e3%82%ad%e3%83%bc%e3%83%af%e3%83%bc%e3%83%89" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;today&lt;/code&gt;：今日&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yesterday&lt;/code&gt;：昨日&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tomorrow&lt;/code&gt;：明日&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dayaftertomorrow&lt;/code&gt;（略：&lt;code&gt;dat&lt;/code&gt;）：明後日&lt;/li&gt;
&lt;li&gt;&lt;code&gt;daybeforeyesterday&lt;/code&gt;（略：&lt;code&gt;dby&lt;/code&gt;）：一昨日&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mon&lt;/code&gt; / &lt;code&gt;tue&lt;/code&gt; / &lt;code&gt;wed&lt;/code&gt; / &lt;code&gt;thu&lt;/code&gt; / &lt;code&gt;fri&lt;/code&gt; / &lt;code&gt;sat&lt;/code&gt; / &lt;code&gt;sun&lt;/code&gt;：各曜日
&lt;ul&gt;
&lt;li&gt;曜日を入力した場合は 「直近の過去の同曜日」「次に来る同曜日」を候補に表示&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;出力フォーマット
 &lt;div id="出力フォーマット" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%87%ba%e5%8a%9b%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%83%e3%83%88" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;ISO形式&lt;/strong&gt;：&lt;code&gt;YYYY-MM-DD&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ISO + 曜日&lt;/strong&gt;：&lt;code&gt;YYYY-MM-DD(Fri)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;日本語形式&lt;/strong&gt;：&lt;code&gt;YYYY年M月D日(金)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;和暦形式（令和）&lt;/strong&gt;：&lt;code&gt;令和X年M月D日(金)&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 class="relative group"&gt;ダウンロード
 &lt;div id="ダウンロード" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%83%80%e3%82%a6%e3%83%b3%e3%83%ad%e3%83%bc%e3%83%89" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;作成したワークフローを置いておきます。Alfred 5.7で動作確認しました。&lt;/p&gt;</description></item><item><title>XREAL One</title><link>https://namaraii.com/posts/xrealone/</link><pubDate>Thu, 06 Nov 2025 09:51:03 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/xrealone/</guid><description>&lt;p&gt;2025/02/08購入
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt="image"
 width="800"
 height="587"
 src="https://namaraii.com/images/xrealone-001.webp"
 srcset="https://namaraii.com/images/xrealone-001.webp 800w, https://namaraii.com/images/xrealone-001.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://namaraii.com/images/xrealone-001.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;

&lt;h1 class="relative group"&gt;概要
 &lt;div id="概要" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%a6%82%e8%a6%81" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;公式サイト &lt;a href="https://www.xreal.com/jp/one/" target="_blank" rel="noreferrer"&gt;XREAL One&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;XREAL Oneは、XREAL社が開発したAR（拡張現実）グラス。USB-Cに接続したスマートフォン、ノートパソコン、ゲームコンソールの映像を仮想的な大画面へ投影できる。&lt;/p&gt;
&lt;p&gt;USB-Cビデオ出力を備えたすべてのデバイスに接続可能。iPhone 16/15、iPad、一部のAndroidスマートフォン（DP出力対応）、Steam Deck、ROG Ally、MacBook、Windows PCなど&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;項目&lt;/th&gt;
 &lt;th&gt;詳細&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;チップ&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;XREAL X1 チップ&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;視野角&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;50°&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;スクリーン&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;SONY製 0.68 インチ Micro-OLED&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;解像度&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;400万ピクセル / 1920×1080&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;リフレッシュレート&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;120 Hz&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;M2P遅延&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;3 ミリ秒&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;高水準の明るさ&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;600 ニト&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;3 DoF&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;3 DoF 対応&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;グラスによる制御&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;調整可能な調光機能 / 3 つのモード&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;エレクトロミック調光&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;対応&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;IPDの調整&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;瞳孔間距離 (IPD) 調整の対応&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;ソフトによるIPD調整&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;瞳孔間距離 (IPD) ソフト調整対応&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;音声&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Sound by Bose&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;重さ&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;82 g&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

&lt;h1 class="relative group"&gt;iPhoneを接続
 &lt;div id="iphoneを接続" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#iphone%e3%82%92%e6%8e%a5%e7%b6%9a" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;iPhoneはミラーリングのみ。エンタメ系コンテンツを大画面で観るのには使えそうだが､一部のアプリは再生できず。&lt;/p&gt;</description></item><item><title>⌚ Garmin Forerunner 255 Music</title><link>https://namaraii.com/posts/20230827/</link><pubDate>Thu, 04 Sep 2025 14:58:14 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/20230827/</guid><description>&lt;p&gt;使っているApple WatchがヘタってきたのでGarminのForerunner 255 Musicを買った。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.co.jp/exec/obidos/ASIN/B0B18VSVW3/namaraiicom-22/" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt="|100"
 width="679"
 height="872"
 src="https://namaraii.com/images/20230827-remote-001.jpg"
 srcset="https://namaraii.com/images/20230827-remote-001.jpg 800w, https://namaraii.com/images/20230827-remote-001.jpg 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://namaraii.com/images/20230827-remote-001.jpg"&gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amazon.co.jp/exec/obidos/ASIN/B0B18VSVW3/namaraiicom-22/" target="_blank" rel="noreferrer"&gt;GARMIN(ガーミン)Forerunner 255 Music対応モデル/Music非対応モデル ランニングウォッチ【日本正規品】&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;このForerunner 255 Musicは単体で音楽を聴けてSuicaも使えるので、家の鍵だけ持ってウオーキングやジョギングへ行ける気軽さは継続できる。&lt;/p&gt;
&lt;p&gt;初期設定のため以下のアプリをインストールしたが、2点ハマりどころがあった。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Garmin Connect Mobile (iPhone)
&lt;ul&gt;
&lt;li&gt;Garmin Connectは、Garminデバイスで記録した健康とフィットネスのアクティビティをモバイルアプリまたは&lt;a href="https://connect.garmin.com/ja-JP/" target="_blank" rel="noreferrer"&gt;Web&lt;/a&gt;で管理、分析、共有するためのツールです。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Garmin Connect IQ Store (iPhone)
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://apps.garmin.com/ja-JP/" target="_blank" rel="noreferrer"&gt;Connect IQストア&lt;/a&gt;は、お好きなアプリやウィジェット、ウォッチフェイス、データ項目、音楽ストリーミングサービスをGarminデバイスに無料でダウンロードできるオールインワンソースです。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Garmin Express (Mac)
&lt;ul&gt;
&lt;li&gt;Garmin Expressを使用して、地図とソフトウェアの更新、Garmin Connectとの同期、デバイスの登録を行います。このデスクトップソフトウェアは、更新が利用可能になると通知し、インストールをサポートします。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;Spotify連携ができない
 &lt;div id="spotify連携ができない" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#spotify%e9%80%a3%e6%90%ba%e3%81%8c%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%84" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Garmin Connect MobileとGarmin Connect IQ Storeでいろいろ試したものの、Spotify連携がうまく行かず&lt;a href="https://unagish.com/review/shopping/spotify-garmin-watch/67/" target="_blank" rel="noreferrer"&gt;SpotifyとGarminのスマートウォッチvenu sq musicの連携を頑張った話 – うなぎっしゅ日記&lt;/a&gt;を参考にしてなんとか設定できた。&lt;/p&gt;

&lt;h3 class="relative group"&gt;Wi-Fi接続に失敗する
 &lt;div id="wi-fi接続に失敗する" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#wi-fi%e6%8e%a5%e7%b6%9a%e3%81%ab%e5%a4%b1%e6%95%97%e3%81%99%e3%82%8b" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;SSIDとパスワードを入力して接続を試みたがうまくいかなかった。ルーターをAny接続許可に設定変更し、SSIDを一覧から選びパスワードだけ入力してみたら接続できた。&lt;/p&gt;
&lt;p&gt;Suicaは設定したもののまだ使っていない。Apple Watchもそうだったけど、新しいデバイスで最初にSuicaなどの電子マネーを使うとき、少し緊張するよね。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://namaraii.com/Forerunner255_OM_JA.pdf" &gt;Forerunner255_OM_JA.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://gyazo.com/b9cd194eb65ed7e40efac0b282e30600" target="_blank" rel="noreferrer"&gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt="Image from Gyazo"
 width="1200"
 height="8362"
 src="https://namaraii.com/images/20230827-remote-002_hu_496de6febd3e1512.webp"
 srcset="https://namaraii.com/images/20230827-remote-002_hu_496de6febd3e1512.webp 800w, https://namaraii.com/images/20230827-remote-002.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://namaraii.com/images/20230827-remote-002.webp"&gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Kindleの蔵書一覧を生成するRubyスクリプト</title><link>https://namaraii.com/posts/booklist_kindle/</link><pubDate>Thu, 08 May 2025 14:00:51 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/booklist_kindle/</guid><description>&lt;p&gt;MacにインストールされているKindleアプリのデータから蔵書一覧を生成&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="codeblock-title"&gt;kindle_books_mac.rb&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rexml/document&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;csv&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Kindle for Mac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;KINDLE_XML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;HOME&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/Library/Containers/com.amazon.Kindle/Data/Library/Application Support/Kindle/Cache/KindleSyncMetadataCache.xml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;REXML&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;KINDLE_XML&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;csv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;CSV&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;force_quotes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;//response/add_update_list/meta_data&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;csv&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ASIN&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;authors&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;publishers&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;publication_date&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;purchase_date&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>PopClip for Macのエクステンション・スニペット</title><link>https://namaraii.com/posts/popclip-snippet/</link><pubDate>Sat, 22 Mar 2025 21:03:54 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/popclip-snippet/</guid><description>&lt;h1 class="relative group"&gt;スニペット
 &lt;div id="スニペット" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%82%b9%e3%83%8b%e3%83%9a%e3%83%83%e3%83%88" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;Mac用のツール&lt;a href="https://www.popclip.app/" target="_blank" rel="noreferrer"&gt;PopClip for Mac&lt;/a&gt;の自作スニペット。スニペット全体を選択すればPopClipのメニューからインストールできる。&lt;/p&gt;
&lt;p&gt;アイコンの指定方法は&lt;a href="https://www.popclip.app/dev/icons#icons" target="_blank" rel="noreferrer"&gt;Icons — PopClip Developer&lt;/a&gt;にある。&lt;/p&gt;

&lt;h2 class="relative group"&gt;物書堂の辞書を検索する
 &lt;div id="物書堂の辞書を検索する" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%89%a9%e6%9b%b8%e5%a0%82%e3%81%ae%e8%be%9e%e6%9b%b8%e3%82%92%e6%a4%9c%e7%b4%a2%e3%81%99%e3%82%8b" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#popclip&lt;/span&gt; &lt;span class="err"&gt;extension&lt;/span&gt; &lt;span class="err"&gt;to&lt;/span&gt; &lt;span class="err"&gt;search&lt;/span&gt; &lt;span class="err"&gt;MkDictionaries&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;name:&lt;/span&gt; &lt;span class="err"&gt;MkDictionaries&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;icon:&lt;/span&gt; &lt;span class="err"&gt;square&lt;/span&gt; &lt;span class="err"&gt;filled&lt;/span&gt; &lt;span class="err"&gt;物&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;url:&lt;/span&gt; &lt;span class="err"&gt;mkdictionaries:///?text=***&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;Googleのカスタム検索
 &lt;div id="googleのカスタム検索" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#google%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e6%a4%9c%e7%b4%a2" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;検索エンジンID&lt;/code&gt;は定義したカスタム検索のIDを指定する
&lt;a href="https://programmablesearchengine.google.com/controlpanel/all" target="_blank" rel="noreferrer"&gt;Programmable Search - すべての検索エンジン&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;#popclip&lt;/span&gt; &lt;span class="err"&gt;extension&lt;/span&gt; &lt;span class="err"&gt;to&lt;/span&gt; &lt;span class="err"&gt;Googleカスタム検索&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;name:&lt;/span&gt; &lt;span class="err"&gt;Googleカスタム検索&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;icon:&lt;/span&gt; &lt;span class="err"&gt;circle&lt;/span&gt; &lt;span class="err"&gt;filled&lt;/span&gt; &lt;span class="err"&gt;G&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;url:&lt;/span&gt; &lt;span class="err"&gt;https://cse.google.com/cse?cx=検索エンジンID#gsc.tab=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="err"&gt;&amp;amp;gsc.q=***&amp;amp;gsc.sort=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h1 class="relative group"&gt;エクステンション
 &lt;div id="エクステンション" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%82%a8%e3%82%af%e3%82%b9%e3%83%86%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%b3" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;全角→半角変換
 &lt;div id="全角半角変換" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%85%a8%e8%a7%92%e5%8d%8a%e8%a7%92%e5%a4%89%e6%8f%9b" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;選択文字列中の全角英数字・記号・カナを半角に変換する。たまにある半角文字しか受け付けないサイトなどで使う。&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/htakeuchi/PopClip-Extensions/tree/main/ZenHan.popclipext" target="_blank" rel="noreferrer"&gt;PopClip-Extensions/ZenHan.popclipext at main · htakeuchi/PopClip-Extensions&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;半角→全角変換
 &lt;div id="半角全角変換" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8d%8a%e8%a7%92%e5%85%a8%e8%a7%92%e5%a4%89%e6%8f%9b" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;選択文字列中の半角英数字・記号・カナを全角に変換する。ついでなので逆変換もつくった。&lt;/p&gt;</description></item></channel></rss>