ちなみに

火曜日の空は僕を押しつぶした。

VSCodeでGoの文字列内のSQLをシンタックスハイライトしたい

TL;DR

適当な Grammer 拡張を入れて以下の設定を書いておきましょう。

"gopls": {
  "ui.semanticTokens": true,

  // you can optionally turn on these features for more colors
  // see https://go.dev/issue/45753 and https://go.dev/issue/45792
  "ui.noSemanticString": true,  // delegates string syntax highlighting to vscode
  "ui.noSemanticNumber": true,  // delegates number syntax highlighting to vscode
}

本文

仕事では主に Go を書いていて、DBへのクエリは生のSQLを文字列で Go のファイル内に書いている。 このSQLはただの文字列なので当然シンタックスハイライトはされない。

Goland を使っている同僚は、JetBrains のテクノロジーによってシンタックスハイライトされるらしい。ずるい。 VSCode でもこれをやりたい。

実は VSCode でも特定の言語内に埋め込まれた別の言語をあつかう方法は用意されていて Injection grammars というやつを使うと実現できる。

難点は Grammer の設定は拡張にしか書けないので、手元でシュッとやることができない。 なんか適当なやつを入れるか、自分で拡張を書く必要がある。 自分は Inline SQL というやつを入れているが、シンタックスハイライトしたいだけには過剰なのでもっとシンプルなやつでいいと思います。

ところで VSCode で Go を書いている人はほぼ間違いなく Go拡張 を使っていると思います。

この拡張経由で gopls を使うと Semantic Highlighting によって、より正確なシンタックスハイライトが出来るわけですが、これを使うと Injection grammars を使うことができません。「文字列」としてトークナイズされて処理されるので文字列の色にしかなりません。

よって、以下のような設定で Semantic Tokens を無効にするような手段が提示されています。SQLシンタックスハイライトのために失うものが大きすぎる。

{
    "gopls.ui.semanticTokens": false
}

僕はこれをなんとかするために自前でテーマ拡張を書くことで文字列だけ Semantic Highlighting の対象外にする力業をやっていました。

しかし、実は ui.noSemanticString 使うことで回避できるらしい。そしてよくみると Features に しっかり書いて あった。 2022年の8月ごろ に実装された設定らしく、拡張側のドキュメントに記載されたのが 2023年2月 ごろなので、気付くのに一年以上かかってしまった。

HUAWEI FreeClipはいいぞ

consumer.huawei.com

まとめ

  • 着け心地最強クラス
  • ふつうに音楽が聴ける音質
  • まじで買った方がよい

経緯

しばらく有線のヘッドホンやイヤホンばかりを使っていたのですが、去年買った FreeBuds 5 がめちゃくちゃ良かったのと、前評判がかなり良かったので予約して購入しました。 イヤーカフ型が使ったことがなかったので、お試しくらいの気持ちでしたが、大正解で、今や仕事用のメインイヤホンです。

外耳炎になってしまって耳に押し込むカナル型は使えず、耳にかけるやつも肌が弱くて最近はかぶれてしまうようになったので、そういう意味でも試してみたかったやつです。

着け心地

まずはなんといっても着け心地。さすがに何も付けてない感じとは言えませんが、快適度はこれまで使ってきたものの中で最高です。 Shokzやオーテクの骨伝導や、Oladanceなどと比べても圧倒的に快適。これなら一日中付けていても苦になりません。バッテリーが切れて外す感じになっています。

どうやら同時期に発売された Bose Ultra Open Earbuds の方が快適度は上という噂もあるのですが高価すぎる。 この値段を出すのならそれなりの有線イヤホンが買えてしまいそうです。 よって着け心地と価格のバランスを考えると現行最強と言いたいです。

音質

低音が弱そうなイメージだったのですが音楽も全然聴けました。もちろん有線のいいやつと比べると比較にならないのですが、ながら聴きをするくらいならこれで十分。 コーデックとしてLDAP対応してないので困る人はいそうですが、僕にはAACと聴き比べても違いが分からなかったので誤差だと思っています。

そして人の声を聞くにはまったく不満がなくて、ミーティング用はこれで間違いないと思います。着け心地も考えると仕事用としても最強クラス。 耳を塞がないタイプなので遮音性もなく、ノイズキャンセリングもないので、五月蠅いところだと使いにくいですが、在宅ワークだとなんとでもできそうです。

逆に音漏れについて心配な人もいそうですが、逆位相の音を外向けに出す仕組みでかなり抑えられています。 自分の用途ではちょっと五月蠅いくらいにしても漏れてなさそうでした。

操作性

いちばんすごいのが左右の違いがないという点。デザイン上差異がないだけじゃなくて、どちらをつけてもちゃんと正しい方向で再生される謎技術。これはすごい。めっちゃ快適。

操作もどこをタップしても反応するので狙ってタップする必要がなくてストレスなく扱えます。ダブルタップと、トリプルタップを左右それぞれに操作割り当てができる。 自分は再生と停止、曲送りを設定している。逆にそれ以外はそんな使わなさそう。オーディオアシスタントとかは外で使う人には便利かもしれない。

2台までのマルチポイント接続にも対応しているので、PCとスマフォをシームレスに切り替えられるのは嬉しい。 接続が不安定になることもなく、狙ったデバイスからちゃんと音を出せている。よくできてる。 FreeBuds 5 ではできなかったのでメインで使えていなかった。

残念なのは音量調整ができないことで、これはPCやスマフォを操作しないといけない。

(追記) ファームウェアアップデートでジェスチャーによる音量調整が実装された。ちょっと使いにくいけどこれで出来ないことはなくなった。

合わせて買いたい

blog.nishimu.land

そう言えばネガティブなことを書かなくなった

最近ちょっと焦りと不安で生活リズムが狂ってしまっている。眠いのに眠れず、かと言って朝も起きてしまう。食欲もあるし元気なんだけれど精神的にちょっときている。深呼吸。

タイトルと内容の落差よって感じだけれど、昔はだいたいネガティブなことしか書いてなくて、ずっと体調が悪いかイラついてるって書いてた気がする。今回ちょっと弱ったタイミングで最近はめっちゃ穏やかなことを書いているなあと急に思ったのであった。多分寝不足で弱ってる。

いつものペースでやっていれば良いはずなので焦らずに穏やかに、ゆかいにやっていこう。

眠れない夜と起きられない朝

めちゃくちゃ眠いのに、なんだか脳が働き続けていて眠れない。朝は間違いなく起きられないので、逆になって欲しい。夜は脳が働かなくて良い。

ところでこれを読んだのですが Copilot に懐疑的で使ってない人ほど読んだ方が良いです。僕はめちゃくちゃ便利に使ってます。

詳しくはこちら

Gitの設定を見なおした

先日ホットエントリーに上がっていた以下の記事を読んでやる気を出して整理した。

jvns.ca

記事からは以下を取り入れて、あとは不要なものを消したりして回った。

  • branch.sort -committerdate
    • ブランチをコミット時刻で並べる
  • diff.algorithm histogram
  • rebase.autosquash = true
    • rebase するときに --autosquash って書かなくてよくなるやつ

最終的には見せていいところだけ残して以下のようになった。

[ghq]
    root = ~/local/src
[alias]
    c = commit
    b = branch
    d = diff
    di = diff --cached
    st-pull = !git stash && git pull && git stash pop
    tags = tag -l
    remotes = remote -v
    open = !gh browse -b $(git symbolic-ref --short HEAD)
    ls-conflict = !git ls-files -u | cut -f2 | uniq
    bang = !git clean -df && git reset --hard
    # `com` from: https://motemen.hatenablog.com/entry/2022/04/git-aliases
    com = "!f() { remote_head=$(git symbolic-ref --quiet refs/remotes/origin/HEAD); remote_head=${remote_head#refs/remotes/origin/}; git switch ${remote_head:-$(git rev-parse --symbolic --verify --quiet main || git rev-parse --symbolic --verify --quiet master)}; }; f"
    xom = com
[rerere]
    enabled = true
[commit]
    gpgsign = true
[core]
    fsmonitor = true
    untrackedCache = true
    ignorecase = false
[rebase]
    autosquash = true
[diff]
    algorithm = histogram
    submodule = log
[status]
    submoduleSummary = true
[branch]
    sort = -committerdate

この設定なんだっけとなったら GitHub Copilot に聞けばよいので設定ファイルの整理がめちゃくちゃ捗るようになった。

ちなみに仕事用の設定は includeIf を使って別のファイルを読み込んでいる。この辺りは ghq handbook の説明が分かりやすいです。

複数の人と話すのが難しい

元同僚と二人で飲みに行く。こっちが地元ということで戻ってきているみたい。こっちで知り合いと飲むのなんか不思議な気分になる。みんなもっと来たらいいよ。

二人で話すと楽しく話せるのだけれど、たとえば懇親会のような複数の人がいる環境だとうまく話せない。 基本的に人見知りで親しくない人と話すが怖いのと、失敗したらどうしようという気持ちがあるので親しい人でもなかなか声をかけられない。 よって、だいたい最初の場所から動かずに、話しかけてもらえたら話すという感じになってしまう。

まあずるい感じだと思う。自分はリスクを取らずに相手に頼っている。

ずっと気にしていて毎回なんとかして元の場所から動こうとするのだけれど、だいたい失敗している。 なんか入っていこうと外から眺めるのだけれど、うまく輪に入っていけなくて失敗する。 偶然同じような一人の人を見つけると話せるのだけれど、輪が出来ていると入っていけない。

なんか適当に話しかけるにはどうしたらいいんだ。