2025

Obsidianで日記サイトを構築して、ついでにAIと戯れる

この日記はHugoで生成している。Hugoの書式はMarkdownなので、テキストエディタでも書くことはできるがリッチエディタっぽいツールを使うとさらに便利になる。そこでObsidianだ。Obsidianはオープンソースのメモアプリで、拡張性が魅力だが、まずは基本機能の「デイリーノート」をそのまんまHugoのフォーマットに合わせて使うこととする。 Obsidianは「保管庫」と呼ばれるフォルダを指定してその中にある .md ファイルのひとつひとつをメモとして扱う。フォルダやファイルの構成をHugoのcontentディレクトリのままにできるので、そのまま読み書きできる。 例えば以下のようなテンプレートをデイリーノートのテンプレートとして指定すると、いきなりHugoのドラフトページを書き始められる。

---
title: titleを入れる
date: {{date:YYYY-MM-DD}}T{{time:HH:mm:ss}}+09:00
url: {{date:YYYY/MM/DD/}}
tags:
  - PC
draft: true
---
本文を入れる

書き終わったらGitにあげる

拡張機能「git」を導入する。これで、書いた日記をGitHubにpushできるはずだ。 Obsidianは保管庫に指定したフォルダに隠しフォルダを作って諸々の設定を保存している。なので、.gitignore でそのディレクトリを除外しておくことにする。

.obsidian

Git Source Panelを表示すると、この日記ファイルがまだstageされていないことがわかる。ここから諸々の操作が可能なようだ。デフォルトのコミットメッセージは vault backup: {{date}} となっている。ここにも変数使えるのね。

さらにAIを導入してみる

いまナウで最先端なAIというやつを入れてみる。 近頃はコードを書くときにはGitHub Copilotをメインで使っているが、日記はコードじゃないので使わない。ちょっとしたコードを書いたり雑多な質問にはChat GPTを使っているがこれはWebベースで使っているし自分は課金していないのでAPIとして組み込むには向かない。ここでは拡張機能「copilot」を使ってGoogle Gemini APIの無料枠を導入してみることにする。 AIには日記の誤字・脱字を直してもらったり、読みやすいように校正してもらいたい。だが、日記のような砕けた文章を校正してくれるだろうか。「自分っぽい書き方」をしているところとの相性が気になる。

よーし、校正をお願いしてみるか。chatウインドウから

この記事の校正をお願いします。誤字や脱字、読みづらいところなどがあれば指摘してください

……、お願いします。

校正をご希望の記事が提供されていません。

……、はい。開いているページを「{activeNote}」と書いて指定しないといかんのね。

{activeNote}の校正をお願いします。誤字や脱字、読みづらいところなどがあれば指摘してください

……、おお。割と平たい文章になるように言い回しを提案してくれるじゃないか。ただ、なんというか、いわゆる「いかがでしたかブログ」っぽい文章にどんどん直されていく印象もあり。この校正そのまんまは受け入れ難いなぁ。

- 「いまナウで最先端なAIというやつを入れてみる。」→ 「最新のAIを導入してみます。」

これとか受け入れ難い。ナウで最先端なほうが良くないですか?ダメですか?そうですか。

というわけで、今日の日記はここまで書いたObsidianの使い方を実験するための日記でした。最後に今日の日記を要約してください、AIさん。

この日記は、Hugoで生成している日記サイトの作成に、Obsidianというメモアプリを活用する試みについて書かれています。Obsidianのデイリーノート機能をHugoのフォーマットに合わせて使用し、日記を書き終わった後はObsidianの拡張機能「git」を使ってGitHubにpushする方法を試しています。さらに、Google Gemini APIを導入してAIによる校正を試していますが、AIによる校正は文章を平坦にし、「いかがでしたかブログ」のような印象を与えるため、全面的には受け入れられないと感じています。全体として、Obsidianの様々な機能を活用して日記サイトを構築する実験的な内容となっています。

あ、あなたの文体を否定的に書いた部分をそのまま要約に採用しましたね……。最後にちくりと人間側を腐しておきたいと……。


2024

「文章のどこかに『生成AI』を入れてください」

すごいなぁ、とは思うんですよ。生成AI。文章にしても、絵にしても、音楽にしても。

自分だってAIをまったく使っていないわけではない。いろんなプログラミング支援AIを試してみて、今はGitHub Copilotに落ち着きそうだ。

プログラミング支援AIは、そのサジェストの出し方、手の差し伸べ方が非常に上手い。冗長な内容の入力途中で残りを補完してくれる、というものならこれまでもあった。最近は、変数名の付け方がちゃんとしているとその単語の意味まで理解して補完してくれる。

この間ですね、emailvalidationという名前の関数を使ったif文を書いていたら、変数messageを作ろうとしたらそこに"メールアドレスが違います"を代入してきたんですよ。へえ、AI君やるじゃない、と思うでしょ。それで、そのmessageを仮想配列に変えて"ja"というキーをつけたら、今度はAIがその次の行に"en"をキーにして"email address is incorrect."って書いてきたんですよ、これにはまぁ驚いたねぇ、頼もしいわぁAI先輩かっこいいっす。

こういうの、本当に自分たちが望んでいた未来のコンピューターな感じがして嬉しい。執事ってこういうものだよね。言わなくても察する、先回りして準備しておく、押し付けがましくない。我々はこういうものを求めていたんだ。

でもね。

「対話型の生成AIに、こういう文章で質問を投げるとこんな答えが返ってくるんですよ、すごいでしょ」

と言われたら、それは本当に「未来」なのか、納得できかねる。

「こういう文章で質問を投げる」ノウハウ自体で一喜一憂している様が「未来」じゃない。コミュニケーションが苦手な性格の人間にはAIとの対話にもハードルがある。人間の側が自分の考えていることをうまくアウトプットできないとなれば、今はまだAIのほうでもそれをうまく汲み取れない。そこは人間と変わらない。むしろAIはカメラや音声でこちらをのぞいているわけではないので文章という限られたインプットから察するしかない。「こういう文章で質問を投げる」ノウハウとは対AIコミュニケーション能力とも言い換えることができて、現段階でそれをうまくできる人はそもそも自分の考えをうまく文章化してアウトプットできる人で、おそらく実生活においても他者と円滑にコミュニケーションできるんじゃないだろうか。

前述のプログラミング支援AIが自分にとって心地よいのは、プログラムの世界ではコンピューターに対して正しいプログラムを書いてあげる能力がそもそも必要で、それはコンピューターに対してのコミュニケーション能力と言い換えることもできる。AIも同じプログラムを読むことから、プログラムを介して間接的にAIに対してのコミュニケーションが成り立つ。AIに対して直接話しているわけじゃないが同じ方向を向いて同じ言葉(プログラム)で対話が成立するから心地よいのだ。

AIを使うノウハウなんてものは一過性のブームだ。本当にAIが賢くなる未来においては、必要なのは人として極めて一般的なコミュニケーション能力であって特殊なノウハウではないはずだ。その未来はすぐ来るだろうから一喜一憂することじゃない。AIを使う、というのはすなわちコンピューターと共に生きていくライフスタイルそのもののことだと思う。それは、人間の生活を助けるように寄り添ってくれるものであって、人間がご機嫌をとりにいくようなものではない。

AIが寄り添ってくれる未来とはコンピューターの活躍する未来として、20世紀の頃からずっと我々が想像してきた未来のまんまであるはずだ。


2023

おひとりさまインスタンスでなんとかしたい

おい、2022年は一日も日記書いていないぞ。

Twitterで時折ツイートしているから生存確認できているだろうと油断していた。インターネット、とりわけSNSは不思議なもので、自宅に引きこもっているだけの零細フリーランスなのに社会に繋がっているような錯覚を与える。他人の書き込みを眺めていいねボタンを押すだけで、なにか社会の裾のところにしがみついているような感覚。ところが、昨年後半からそのTwitterの運営が迷走しだした。

考えてみれば、落書きのようなメモ書きとはいえ、一応は自分の著作物である。SNSというプラットフォームは商品を並べたり配送を依頼する場所であって、工場を貸してもらっているわけではない。ちゃんと自分のドメインで製造して管理して、並べたり配送したりするところから他者にお願いするのが「筋」なのではないか。

そこでMastodonなどでお馴染みの、ActivityPubに対応したインスタンス(サーバー)を立ち上げることにした。自分の発言を自分のドメインに置くための、いわゆる「おひとりさまインスタンス」である。

Google Cloud Platform (GCP) の無料枠でe2-microというスペックのVMインスタンス(簡単にいうとレンタルサーバー)を一つもらえる。これでPleromaという実装(ActivityPubに対応したソフトウェア)を使ってインスタンスを立ち上げた(https://social.a3size.com/@king_nomura)。これからはこちらを「自分が発言するときの」メインのSNSに出来ないかな、と考えている。PleromaはMastodonよりも軽量らしく、またビューワーとしてこのインスタンスを利用しているのは自分ひとりしかいないので、それほどの負荷にはならなそうだ。また、将来もしも別の実装に取り替えたくなっても、まあデータのインポートエクスポートでなんとかなるんじゃないかなぁ、と楽観的に考えている。

将来的にThreadsもActivityPubに対応することが発表されているので、そうなればThreads上のユーザーをフォローしやすくなるし、自分のアドレス( @king_nomura@social.a3size.com )も伝えやすくなるだろう。相手がどこのサービスのインスタンスに所属しているかをいちいち気にしないで良い、というのがスマートで美しい。自分のアドレスが自分のドメインなのも、「ちゃんとしている」感じが嬉しい。

なので、SNSならなんでもいいという人はとりあえずThreadsにしたらいいんじゃないかな、などと考えている2023年なのでありました。


2021

2006年に買ったマウスを静音マウスにする

普段、Macではトラックパッド(Magic Trackpad 2)を、主にゲーム(とかブラウザ確認とか)に使っているWindowsマシンではマウスを使っている。このWindowsのマウスは、LogitechのMX Revolutionで、2006年に買ったものだ1。しばらくWindows機を立ち上げていなかったのでブランクはありつつも、もう15年も使ってきたマウスだ。

Magic Trackpad 2のクリック音は「コツッ」という少しくぐもった音色で(わざとそういう音を鳴らしているところが凄い)、MX Revolutionのクリック音は「カチッ」といういかにもなマイクロスイッチの音色だ。この、「カチッ」という音は、いろんな音がなっている中でなら気にならないが、比較的高い音でキンキン鳴るように聞こえて、ちょっと「カチカチカチカチ」と連打するとあまり気分が良い音とは思えなくなってきた。そこで、思い切ってスイッチを換装することにした。 こちらがスイッチ換装作業の様子。元々ついていたスイッチを外して、新しいスイッチをつけたところだ。

MX Revolutionのスイッチを換装した

静音マウス改造は実に様々な方がチャレンジされていて、その多くの方が静音スイッチの部品として「Kailh ミュートマイクロスイッチ」などの名前で検索すると出てくる6mm × 6mm × 7.3mmのマイクロスイッチを使用している。なるほど、これをMX Revolutionに乗せてしまえばいいのだな?とやや乱暴に思いついて、それを実行した。写真を見て貰えばわかるが、左下側に転がっているのがもともとついていた3本足の長方形スイッチで、付け替えた静音タイプのスイッチは正方形。うっかりするとクリックする部分がうまく噛み合わなくて押せなくなってしまうのだが、あまり深く考えずに実行してしまった。

ちなみに、このKailhのマイクロスイッチ、Amazonなどでも買えるのだがmercariで出品されているものを購入すると1個あたり100円未満で買えるというので、初めてmercariを使った。次に使うのは何年後になるだろうか。

実際の換装作業だが、知識のある方なら写真から想像つくと思うが、元々あったスイッチを取るためにハンダを吸い取るのに大変手間取ってしまった。吸い取り器じゃなくて吸い取り線で頑張ったんだぜ、これ。その結果、基盤パターンがもげてしまったので仕方なくリード線で配線を繋ぎ直した(マウス左ボタンの付近の黄色いリード線がそれ)。この場所以外にも、写真には写っていないが「マウスを持ったとき手前にくる側」にも基盤と部品がハンダ付けされている部分があり、そもそも先にそこを外さないとこのスイッチ換装の作業自体ができない構造になっているが、これもなかなか取れなかった。体感では、全体の作業の合わせておよそ2/3くらいをハンダを取るのに費やした気がする。

スイッチ換装のついでに、バッテリーも交換した。写真からわかるだろうか、すでにこのバッテリー、真ん中が大きく膨らんでしまっていたのだ。15年前のマウスなので純正パーツはもう手に入らないだろう、ということで互換バッテリー台湾から送ってもらい、つい先ほど載せ替えた。

作業終了後、まだ長時間使ってみてはいないが、今のところ順調に動いている模様。クリック音は「トン」というか「ト」というくらいの本当に静かな音に変わってくれたので、このまましばらく使ってみて動作に支障が出ないようならば、この換装は成功だったといえるだろう。


2020

Bluetoothヘッドセットとの戦い

ふと、PCでオンライン会議をするのにちょうどいいマイクとヘッドホンが欲しくなって、こういう投資は惜しんではならないとおばあちゃんの知恵袋に書いてあるので、買った。

マイクはマランツのMPM2000UというUSB接続のコンデンサマイクにすることにした。これをできればアームスタンドに取り付けたかったが、生憎デスク周りの構造上アームを付けられる場所がなかったので、卓上スタンドで使っている。会議の度に手前に持ってきたり奥にしまったりするのが若干煩わしいが、この煩わしさがオンライン会議をやるぞ!という気持ちのスイッチにもなっている部分も若干ある。

( Amazonアフィリエイト: https://www.amazon.co.jp/gp/product/B01GJ9IUNY/)

最初は有線のマイクではなく、無線のヘッドセットを導入して完全ハンズフリーな会議環境にしたいと思った。だが、それは諦めて有線のマイクを買うことにした。その経緯についてここにメモしておきたい。

無線のヘッドセットを使えば、会議中にふらふらとPCの前を離れてもちゃんと会議の音声は聞こえるしこちらの声も届く。なんと夢のような。そう思ってBluetoothのヘッドセットを探した。

最近のイヤホンはカナル型のものが全盛だ。オープンイヤー型は音が漏れるので非常に嫌がられる。だが、野村にとってはカナル型イヤホンは、装着した時の遺物感と「周りの音が聞こえづらくなる」ところがとても辛い。なので、SONYのSBH82Dを買った。特殊な形状のイヤホンなので、これを選んだということは相当に悩んで選んだなと察していただきたく。

( Amazonアフィリエイト: https://www.amazon.co.jp/gp/product/B07R7B3GRC/)

で、早速使ってみたところ、確かに無線のヘッドセットとして機能した。音はちゃんと聞こえるし、マイクの一は肩甲骨あたりに来ることになって話しやすい。だが、嬉々としてオンライン会議の本番に投入しようとすると、そのタイミングに限ってイヤホンのBluetoothが切断されるという現象が発生した。何度か試すうち、このBluetooth接続が切れてしまう現象はイヤホンとマイクを同時に使用すると発生することがわかった。PCの音楽を聴いたりYouTubeを見たりしているときには全然切断されないが、オンライン会議のようにマイク機能を併用するときに非常に切れやすくなるのだ。

出力にSBH82D、入力にUSB MICROPHONE(MPM2000U)を指定

で、まず上記の有線マイクを買ってみた。そして、イヤホンにSBH82D、マイクにMPM2000Uを指定してみると、予想通りイヤホンが切断される現象は起きなくなった。なんだよ、SBH82Dはヘッドセットとしては使えないのか?……もう少し実験してみよう。

MacBookProのBluetoothのハードウェアまたはドライバに問題があるのかも、と思い試しにAppleのAirPodsを買ってみた。試しに買うっていう金額じゃねーが。

( Amazonアフィリエイト: https://www.amazon.co.jp/gp/product/B07PRWYVN4/)

さすがはApple、接続トラブルもなくすんなりと音が出た。ではマイクはどうか。……繋がる!ちゃんと繋がる!……だが、どういうわけか、圧倒的に音質が悪くなる。なぜだろう、と思いネットで調べてみると、「コーデックが切り替わる」という記述を発見する。

これ、AirPodsだけではなくSBH82Dのほうでも再現できるのだが、Bluetoothデバイス1つでイヤホンとマイクを同時に使うと、SCOコーデックになることが原因であった。

イヤホンとマイクを使用するときはSCOコーデックになっている

調べてみると、これはBluetoothのHFP(Hands-Free Profile)という仕様に基づいていることがわかった(参考: https://news.mynavi.jp/article/osxhack-264/ )。その名前から、携帯電話のハンズフリー用ヘッドセットで使う想定の規格なのだと推測される。つまりMacはヘッドセットを使う時にBluetooth機器との接続するときにプロトコルはHFPを要求する。

一方、SBH82Dをイヤホンとして使っている時、Bluetoothオーディオ機器の標準的な接続プロトコルであるA2DP(Advanced Audio Distribution Profile)でMacと接続している。それが、マイクを有効化するとA2DPからHFPに切り替わる。このことから、SBH82DはA2DPからHFPプロトコルを上手に切り替えれずに接続が切れる、またはそもそもHFPが苦手なのではないかと想像した。

Bluetoothの仕様は https://www.bluetooth.com/specifications/profiles-overview/ にある。英語を読み解く元気がないので斜め読みだが、このHFPにおける音声コーデック、SCOコーデック(内部的にはmodified version of the SBC codec)はモノラル/サンプルレート16kHzだと書いてある。モノラル!しかも16kHz!確かに携帯電話ハンズフリー級の音質で、そりゃいくらなんでも音が悪い。どれだけ便利だろうともHFPは使いたくない、無線ヘッドセットは諦めざるを得ない。

従って、イヤホンは無線、マイクは有線。これならイヤホンはSCOと比べて高音質なA2DPのままで、まあそこそこちゃんとしたマイクもあるので、そこそこ良いオンライン会議環境なのではないかと思う。

ところで、SBH82Dは音声コーデックAACが使えるのだが、これはiOSのみ対応とのこと。試してみるとやはりMacOSからはAACでは繋がらない。この間発表されたM1チップのMacならどうにかすると繋がるのだろうか、テストできる環境がないのでそれはわからない。

なので、せめて、A2DPの中でも最強セッティングで動作するようにチューニングはしておきたい。

具体的には、Apple Developerという公式の開発者サイトからBluetooth Explorerをダウンロードして設定をごにょるわけだが、上記のBluetooth仕様を読んで理解して……というのがとても大変なので、ググってみる。すると結論としてみんな「bitpool=53」にしていた、という事実だけはここに残しておく。bitpoolが53だとサンプルレート44.1KHzでビットレート328kb/s、51だとサンプルレート48kHzでビットレート345kb/sなので、48kHzで環境を揃えられるなら51の方が良いように思うんだが。

bitpoolを53にした場合

bitpoolを51にした場合