# 🗞️Topics
## Lua形式のスニペット導入
[[LuaSnip]]について。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
GitHub - L3MON4D3/LuaSnip: Snippet Engine for Neovim written in Lua.
</div>
<div class="link-card-v2-content">
Snippet Engine for Neovim written in Lua. Contribute to L3MON4D3/LuaSnip development by creating an account on G ...
</div>
<img class="link-card-v2-image" src="https://opengraph.githubassets.com/52cd1aaec1d44d268a82e8ec7639b581ebe10e96eb176f84d955b89ab793edc5/L3MON4D3/LuaSnip" />
<a href="https://github.com/L3MON4D3/LuaSnip"></a>
</div>
今までは[[SnipMate]]形式のスニペットのみを使ってきましたが、[[Lua形式のスニペットを追加 (LuaSnip)|Lua形式のスニペットを追加]]してみました。[[SnipMate]]形式では現在日時を動的に挿入することができなかったからというのが理由です。ただ、Lua形式は初見だとかなり難しかったので、必要十分な設定でちゃんと動かす土台をつくるのに結構苦労しました。
## nvim-lspconfigとnvim-cmpの設定分離
今まで、[[nvim-lspconfig]]の設定に[[nvim-cmp]]や[[LspAttach (Neovim)|LspAttach]]の[[autocmd (Neovim)|autocmd]]を設定していましたが、それらを明確に分離しました。
設定は互いに素だったため切り離し自体は簡単でしたが、[[lazy.nvim]]の起動タイミングで少しハマりました。最終的に以下のeventを設定することで期待通り動くようになりました。
| プラグイン | eventの値 |
| ------------------ | ------------------------------------------------------------------------ |
| [[nvim-lspconfig]] | [[BufReadPre (Neovim)\|BufReadPre]], [[BufNewFile (Neovim)\|BufNewFile]] |
| [[nvim-cmp]] | [[InsertEnter (Neovim)\|InsertEnter]] |
私の場合は通常 `vim` で[[Neovim]]を起動し、すぐに[[telescope.nvim]]を立ち上げ、フィルタリングしてファイルを開くことが多いです。このとき、[[telescope.nvim]]の入力で必ず[[InsertEnter (Neovim)|InsertEnter]]を経由していたので、[[nvim-lspconfig]]も[[InsertEnter (Neovim)|InsertEnter]]で問題は発生しませんでした。
しかし、直接ファイルを指定して開いた場合には[[LspAttach (Neovim)|LspAttach]]が発生しなかった問題に直面し、[[nvim-lspconfig]]のeventを[[InsertEnter (Neovim)|InsertEnter]]から変更することで解決を図りました。
## クイックフィックスリストの表示位置がおかしい問題
前から気になっていた、[[Neovim]]で[[クイックフィックスリスト (Vim)|クイックフィックスリスト]]の表示位置([[ウィンドウ (Vim)|ウィンドウ]])がおかしくなる問題について対応しました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📝Neovimでウィンドウを横に分割した状態でクイックフィックスリストを開くと一番右下に表示されてしまう
</div>
<div class="link-card-v2-content">ウィンドウを横に2分割以上して、一番左のウィンドウに移動し、`copen`コマンドでクイックフィックスリストを表示すると一番右下に表示されてしまう。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/troubleshooting.webp" />
<a data-href="📝Neovimでウィンドウを横に分割した状態でクイックフィックスリストを開くと一番右下に表示されてしまう" class="internal-link"></a>
</div>
%%[[📝Neovimでウィンドウを横に分割した状態でクイックフィックスリストを開くと一番右下に表示されてしまう]]%%
正攻法では難しそうだったので、`qf` の[[ファイルタイプ (Vim)|ファイルタイプ]]に対して[[autocmd (Neovim)|autocmd]]を設定し、`wincmd J` で横幅を無理やり最大化するようにしました。
```lua
vim.api.nvim_create_autocmd("FileType", {
pattern = "qf",
callback = function()
vim.cmd("wincmd J")
end,
})
```
場合によっては[[カレントウィンドウ (Vim)|カレントウィンドウ]]の横幅と同じにしたいケースもありますが、その方法は分からなかったので全画面表示で妥協しています。ウルトラワイドで左側に結果が寄ってしまうくらいなので、実用面での問題はほぼありません。
## 今週のTDQ
先週から開始した[[📒TDQ]]ですが、今週も引き続き4本のクエストを追加しています。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📒TDQ
</div>
<div class="link-card-v2-content">TypeScriptで開発ができるようになるための知識を詰め込んだ問題集。プログラミング経験はあるけどWeb開発経験がほとんどない読者を想定しています。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%97TDQ/attachments/tdq.webp" />
<a data-href="📒TDQ" class="internal-link"></a>
</div>
%%[[📒TDQ]]%%
- [[📗TDQ-005 等価演算子と厳密等価演算子]]
- [[📗TDQ-006 分割代入]]
- [[📗TDQ-007 論理演算子とNull合体演算子]]
- [[📗TDQ-008 関数]]
説明にあたり、[[未解決リンク (Obsidian)|未解決リンク]]が発生しないようにしているのもあって、作成と共に[[Minerva]]のコンテンツが洗練されていく感じがいいですね。やはり自分にもフィードバックがないとなかなか続けられないので。
# 👀Reading
## 大企業の幹部がやっている事について - Software Transactional Memo
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://kumagi.hatenablog.com/icon/favicon" />
<span class="link-card-v2-site-name">Software Transactional Memo</span>
</div>
<div class="link-card-v2-title">
大企業の幹部がやっている事について - Software Transactional Memo
</div>
<div class="link-card-v2-content">
この記事を読むたびに学びがあるなぁと感じていたが読むたびに忘れている気がするので現時点での理解を書き留めることで今後の学びの糧にしたい。本記事は元記事の全体を和訳する事や内容の全てを解説する事を目的としておらず、僕自身の学ん ...
</div>
<img class="link-card-v2-image" src="https://cdn.image.st-hatena.com/image/scale/066c5c0808efc62ada569e9701b1f463873ccf84/backend=imagemagick;version=1;width=1300/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fk%2Fkumagi%2F20250125%2F20250125013556.png" />
<a href="https://kumagi.hatenablog.com/entry/what-executives-do"></a>
</div>
~~~
わかる。『マネジメントをしないマネージャーが理想』というのを昔は仕事してないと思ってたけど、自律的に文化と価値観に沿った判断をし、それを実行力する能力があるなら、マネージャーは何もやらなくていいんだよね。マイクロマネジメントの真逆。
~~~
## 「DeepSeek-R1は厳格なレッドチームテストと安全性評価を受けている」Microsoftが公式ブログにて言及/Azure AI FoundryとGitHubで「R1」を提供開始
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://forest.watch.impress.co.jp/favicon.ico" />
<span class="link-card-v2-site-name">窓の杜</span>
</div>
<div class="link-card-v2-title">
「DeepSeek-R1は厳格なレッドチームテストと安全性評価を受けている」Microsoftが公式ブログにて言及/Azure AI FoundryとGitHubで「R1」を提供開始
</div>
<div class="link-card-v2-content">
米Microsoftは1月29日(現地時間)、中国のAIスタートアップ DeepSeek社が公開したLLM「DeepSeek-R1」を、自社製品の「Azure AI Foundry」プラットフォームおよび「GitHub」で ...
</div>
<img class="link-card-v2-image" src="https://forest.watch.impress.co.jp/img/wf/list/1659/203/01.jpg" />
<a href="https://forest.watch.impress.co.jp/docs/news/1659203.html"></a>
</div>
~~~
本当なら利用ハードルが下がりそう。
~~~
## Accessibility essentials every front-end developer should know by Martijn Hols
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://martijnhols.nl/favicon.png" />
<span class="link-card-v2-site-name">Martijn Hols</span>
</div>
<div class="link-card-v2-title">
Accessibility essentials every front-end developer should know by Martijn Hols
</div>
<div class="link-card-v2-content">
Essential accessibility practices for front-end developers, including semantic HTML, alt texts, ARIA, and keyboa ...
</div>
<img class="link-card-v2-image" src="https://martijnhols.nl/_next/static/media/ogimage-accessibility-essentials-every-front-end-developer-should-know.bf35ca33.png" />
<a href="https://martijnhols.nl/blog/accessibility-essentials-every-front-end-developer-should-know"></a>
</div>
~~~
一通り読んでおきたい。
~~~
## aria-label is a code smell
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://ericwbailey.website/static/favicons/favicon.svg" />
<span class="link-card-v2-site-name">ericwbailey.website</span>
</div>
<div class="link-card-v2-title">
aria-label is a code smell
</div>
<div class="link-card-v2-content">
If it is important enough to need words, it is important enough to use text content..
</div>
<img class="link-card-v2-image" src="https://ericwbailey.website/img/posts/aria-label-is-a-code-smell/share-image-facebook.png" />
<a href="https://ericwbailey.website/published/aria-label-is-a-code-smell/#1.-aria-label%E2%80%99s-varied-support-when-declared-on-a-non-interactive-element"></a>
</div>
~~~
aria-labelの使い方が間違ってた。。ちゃんと学んでおきたい。
~~~
## OpenAI Platform
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://platform.openai.com/favicon-platform.svg" />
<span class="link-card-v2-site-name">platform.openai.com</span>
</div>
<div class="link-card-v2-title">
OpenAI Platform
</div>
<div class="link-card-v2-content">
Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.
</div>
<img class="link-card-v2-image" src="https://cdn.openai.com/API/images/platform-opengraph.png" />
<a href="https://platform.openai.com/docs/guides/rate-limits/usage-tiers?context=tier-five&tier=tier-four#usage-tiers"></a>
</div>
~~~
$250課金しないとo3-miniは使えなそう。
~~~
# 📚New Notes
- [[Browser (Playwright)]]
- [[BufReadPre (Neovim)]]
- [[Context (Playwright)]]
- [[Document (DOM)]]
- [[DynamicNode (LuaSnip)]]
- [[ES2018]]
- [[Element (DOM)]]
- [[Figma]]
- [[HTMLElement (HTML DOM API)]]
- [[HTMLタグ]]
- [[Lightpanda]]
- [[Locatorに含まれる複数の要素をLocatorとして取得 (Playwright)]]
- [[Locatorの文字列を取得 (Playwright)]]
- [[Locatorを属性で指定 (Playwright)]]
- [[LspAttach (Neovim)]]
- [[Lua形式のスニペットを追加 (LuaSnip)]]
- [[NaN (JavaScript)]]
- [[NaNは比較演算子で常にfalseを返す (JavaScript)]]
- [[Node (DOM)]]
- [[Number.isNaN (JavaScript)]]
- [[Page (Playwright)]]
- [[Snippet (LuaSnip)]]
- [[SnippetNode (LuaSnip)]]
- [[Tier]]
- [[WebStorm]]
- [[count (Playwright)]]
- [[divタグ]]
- [[for...of (JavaScript)]]
- [[innerText (Playwright)]]
- [[innerTextとtextContentの違い]]
- [[isNaN (JavaScript)]]
- [[nth (Playwright)]]
- [[o3-mini-high]]
- [[o3-mini]]
- [[telescope-ui-select.nvim]]
- [[textContent (Playwright)]]
- [[textContentプロパティ (JavaScript)]]
- [[vim.ui.select]]
- [[アクション間の待ち時間を変更 (Playwright)]]
- [[ウェブコンポーネント]]
- [[オペランド]]
- [[スコープ付きスロット (Vue)]]
- [[スロットアウトレット (Vue)]]
- [[スロットコンテンツ (Vue)]]
- [[デザインシステム]]
- [[デザイントークン]]
- [[ヘッドレスではなく実行 (Playwright)]]
- [[レンダースコープ (Vue)]]
- [[不可視のLocatorを除外 (Playwright)]]
- [[分割代入の既定値 (JavaScript)]]
- [[利用可能なモデル一覧を取得 (OpenAI API)]]
- [[即時関数 (JavaScript)]]
- [[新しい変数名へ分割代入 (JavaScript)]]
- [[暗黙的な型変換 (JavaScript)]]
- [[特定箇所のフォーマットを無効化 (StyLua)]]
- [[論理否定演算子 (JavaScript)]]
- [[論理和演算子 (JavaScript)]]
- [[論理積演算子 (JavaScript)]]
- [[関数式 (JavaScript)]]
- [[📗TDQ-005 等価演算子と厳密等価演算子]]
- [[📗TDQ-006 分割代入]]
- [[📗TDQ-007 論理演算子とNull合体演算子]]
- [[📗TDQ-008 関数]]
- [[📜2025-02-02 Lightpandaを使ってみる]]
- [[📜2025-02-02 Tailwind CSS v4を使ってみる]]
- [[📝Neovimでウィンドウを横に分割した状態でクイックフィックスリストを開くと一番右下に表示されてしまう]]
- [[📰2025年4週 Weekly Report]]