[[📒Articles]] > [[📒2024 Articles]] ![[2024-12-31.webp|cover-picture]] 2024年、今年1年間を振り返ってみました。過去のノートをピックアップしながらラフに書いていきます。 ## Twitter(X) -> Bluesky 15年間利用していた[[𝕏|Twitter]](X)とお別れし、[[Bluesky]]に移住しました。 <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"> 📘さらばツイートの日々よ ~15年の時を経てBlueskyへ往く~ </div> <div class="link-card-v2-content">15年間利用したTwitter(X)からBlueskyへ移行した理由や経緯、Blueskyのメリット・デメリット、SNSの使い方の変化を詳しく解説しています。TwitterやX、Bluesky、SNS移行、Obsidian、カスタムフィード、API、AT Protocolなどに興味がある方はぜひご覧ください。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2024-03-01.webp" /> <a data-href="📘さらばツイートの日々よ ~15年の時を経てBlueskyへ往く~" class="internal-link"></a> </div> %%[[📘さらばツイートの日々よ ~15年の時を経てBlueskyへ往く~]]%% 途中で[[mixi2]]が誕生したりもしましたが、今も[[Bluesky]]をメインで続けられています。[[𝕏|Twitter]]の投稿は1度もしていません。たまに見るとしても、DMが来ていないことの確認くらいです。 ## Neovimの進化とプラグイン開発デビュー 昨年末に[[Neovim]]へ環境移行した影響もあり、今年1年における[[Neovim]]環境の進化は目まぐるしかったです。詳細は以下の記事にまとめておりますので、そちらをご覧ください。 <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"> 📘2024年 Neovim成長日記 </div> <div class="link-card-v2-content">2024年のNeovim活用・設定・プラグイン導入の成長記録を時系列でまとめました。LSP、Lua、クイックフィックス、AutoHotkey連携、Markdown、データベースクライアント、起動速度高速化、プラグイン開発やカスタマイズなど、Neovim初心者から中級者・上級者まで役立つ情報が満載です。詳しくは記事をご覧ください。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2024-12-23.webp" /> <a data-href="📘2024年 Neovim成長日記" class="internal-link"></a> </div> %%[[📘2024年 Neovim成長日記]]%% ## アウトプットを数値でふりかえる ### Articles 年間12本 2024年は12本の[[📒Articles]]を書きました。1ヶ月1本ペースでした。 - [[📘2024年から始める3つの習慣]] - [[📘3ヶ月使ったHHKB StudioからHHKB Professional HYBRID Type-Sへ戻すことを本気で検討してみた]] - [[📘さらばツイートの日々よ ~15年の時を経てBlueskyへ往く~]] - [[📘5年ぶりのムービング・モチベーターズで見つめなおしたモチベーションの源泉]] - [[📘あまり紹介されていないけど かけがえのないNeovimプラグインたち]] - [[📘AutoHotkeyが織りなすNeovimの魅力]] - [[📘完全武装をしてNeovimでも安全で快適なNuxt3の開発をするのだ]] - [[📘Slackに進捗状況を共有できるNeovimプラグインをつくってみた]] - [[📘HHKB Studio 雪 を購入]] - [[📘ターミナルで複雑なコミットグラフを確認してみたいときのgitgraph nvim]] - [[📘Lazyなエンジニアに贈る SQLクライアントツール『Lazysql』]] - [[📘2024年 Neovim成長日記]] <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"> 📒2024 Articles </div> <div class="link-card-v2-content">2024年に書いた📒Articles。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/articles-cover.jpg" /> <a data-href="📒2024 Articles" class="internal-link"></a> </div> %%[[📒2024 Articles]]%% ### Slides 6本 2024年は6本の[[📒Slides]]を作成しました。11月作成し始めましたので、実質週1ペースでした。 <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"> 📒Slides </div> <div class="link-card-v2-content">Minervaで配信しているコンテンツのうちプレゼンのスライド資料にあたるもの。実際に外部登壇したわけではない。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/hub.webp" /> <a data-href="📒Slides" class="internal-link"></a> </div> %%[[📒Slides]]%% ### Starstuck x3 [[🦉Various Complements]]のスター数が512を超えたので、`Starstuck` の称号が `x3` に達しました。 ![[Pasted image 20241231221738.png]] 直近の目標として、2024年4月までに512超えを目指していたのもあり、ギリギリで到達できたときは何とも言えない達成感がありました。 ### リリース 139回 大小あわせて139回のリリースをしました。週3回弱のペースでした。 | リポジトリ | リリース回数 | 初リリース年 | | ---------------------------------- | -------------- | ------ | | [[🦉OwlMixin]] | 5 `(0/1/4)` | 2016 | | [[🦉Jumeaux]] | 6 `(1/0/5)` | 2017 | | [[🦉Owlelia]] | 1 `(0/0/1)` | 2020 | | [[🦉Various Complements]] | 8 `(1/3/4)` | 2021 | | [[🦉Another Quick Switcher]] | 15 `(2/7/6)` | 2021 | | [[🦉Mobile First Daily Interface]] | 13 `(0/7/6)` | 2023 | | [[🦉Shukuchi]] | 2 `(0/1/1)` | 2023 | | [[🦉Silhouette]] | 9 `(0/8/1)` | 2023 | | [[🦉ghostwriter.nvim]] | 15 `(0/11/4)` | 2024 | | [[🦉Silhouette.nvim]] | 8 `(0/7/1)` | 2024 | | [[🦉Silhouette Core]] | 9 `(1/5/3)` | 2024 | | [[🦉Fenice]] | 48 `(0/37/11)` | 2024 | リリース回数のカッコ内は `(メジャーリリース数/マイナーリリース数/パッチリリース数)` を指しています。 ### コミット数 1842 1年間で1842回のコミットをしました。仕事の繁忙期やゲームをプレイしていた期間は芝が薄めです。 ![[Pasted image 20241231222424.png]] 2023年は1549回なので数は上がっていますが、そこに深い意味合いはないと思っています。 ## 新しく開発・リリースしたOSSプロダクト 2024年は3つの新規プロダクトを作成しました。 ### Fenice [[🦉Fenice]]は、[[Slack]]のAPIを使って色々な便利機能を提供する[[Chrome Extension]]です。[[Slack]]クライアントとして利用しています。 <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 - tadashi-aikawa/fenice </div> <div class="link-card-v2-content"> Contribute to tadashi-aikawa/fenice development by creating an account on GitHub. </div> <img class="link-card-v2-image" src="https://repository-images.githubusercontent.com/779667180/aa415221-0233-4236-95f7-b1b8e634c768" /> <a href="https://github.com/tadashi-aikawa/fenice"></a> </div> [[Chrome Extension]]作成フレームワークとしては[[WXT]]を利用しており、[[Nuxt]]と変わらぬ開発体験を得ることができました。 ### ghostwriter.nvim [[🦉ghostwriter.nvim]]は[[Slack]]と連携して[[Neovim]]から必要な情報をポストする[[Neovimプラグイン]]です。[[🦉ghostwriter.nvim]]のおかげで[[Slack]]をわざわざ開く機会が激減しました。 <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 - tadashi-aikawa/ghostwriter.nvim: A Neovim plugin to share Markdown task lists as Slack posts. </div> <div class="link-card-v2-content"> A Neovim plugin to share Markdown task lists as Slack posts. - tadashi-aikawa/ghostwriter.nvim </div> <img class="link-card-v2-image" src="https://repository-images.githubusercontent.com/835714070/376aa551-35b7-46e6-b8b8-ba72fb208d9b" /> <a href="https://github.com/tadashi-aikawa/ghostwriter.nvim"></a> </div> ### Silhouette.nvim [[🦉Silhouette.nvim]]は[[Obsidianプラグイン]]の[[🦉Silhouette]]を[[Neovim]]用につくりなおした[[Neovimプラグイン]]です。[[Denops]]と[[DDD]]おかげで数日というスピーディーな移植を実現できました。 <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 - tadashi-aikawa/silhouette.nvim: Remake of the Obsidian plugin 'Silhouette' for Neovim. </div> <div class="link-card-v2-content"> Remake of the Obsidian plugin 'Silhouette' for Neovim. - tadashi-aikawa/silhouette.nvim </div> <img class="link-card-v2-image" src="https://repository-images.githubusercontent.com/844008458/704744d1-a920-48ce-a659-2ea2a256b446" /> <a href="https://github.com/tadashi-aikawa/silhouette.nvim"></a> </div> あわせて[[JSR]]で提供しているライブラリ [[🦉Silhouette Core]] もリリースしました。[[🦉Silhouette]]と[[🦉Silhouette.nvim]]は共に[[🦉Silhouette Core]]に依存しています。 ## OSSプロダクトの主なリリース 各プロダクトの目玉機能リリースについて簡潔にふりかえります。 ### Various Complements [v10](https://github.com/tadashi-aikawa/obsidian-various-complements-plugin/releases/tag/10.0.0) で[[Fallback linkify]]に対応しました。 ![frame](https://tadashi-aikawa.github.io/docs-obsidian-various-complements-plugin/resources/Pasted%20image%2020240504172436.png) ### Another Quick Switcher - [v11](https://github.com/tadashi-aikawa/obsidian-another-quick-switcher/releases/tag/11.0.0) で `target` プロパティに対応しました - [v11.6](https://github.com/tadashi-aikawa/obsidian-another-quick-switcher/releases/tag/11.6.0) と [v12.1](https://github.com/tadashi-aikawa/obsidian-another-quick-switcher/releases/tag/12.1.0) で[[ノート]]への[[エイリアス (Obsidian)|エイリアス]]挿入に対応しました ### Mobile First Daily Interface - [v1.7](https://github.com/tadashi-aikawa/mobile-first-daily-interface/releases/tag/1.7.0) で[[Bluesky]]への画像URL投稿プレビューに対応しました - [v1.10](https://github.com/tadashi-aikawa/mobile-first-daily-interface/releases/tag/1.10.0) でコードブロック以外の投稿形式(見出し)にも対応しました ### Silhouette 繰り返しファイルの以下表現に対応しました。 - `|` による複数繰り返しパターン指定 - 日付指定 (正確には毎年繰り返しパターン) また、不正パターンのバリデーションも強化し、繰り返しファイルのどこが間違っているのかを即座に判断できるようになりました。 > [!info] > 上記対応は [[🦉Silhouette.nvim]] や [[🦉Silhouette Core]] にも含まれます。 ## 開発環境の進化 ### miseの導入 [[asdf]]から[[mise]]に移行して、パフォーマンスが劇的に向上しました。ターミナルでコマンドを実行したときの速度が、場合によっては `100ms以上` -> `10ms以下` と10倍以上高速化しています。 ### ObsidianプラグインのパッケージマネージャーをBunに [[Svelte]]や[[Vue]]に依存しない[[Obsidianプラグイン]]で、ベースの[[npm]]を[[Bun]]に変更しました。具体的には以下2つのリポジトリを[[Bun]]ベースに移行しました。 - [[🦉Another Quick Switcher]] - [[🦉Mobile First Daily Interface]] はじめて移行したときのワーキングログは以下となっています。 <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"> 📜2024-04-14 Node.jsのObsidianプラグインプロジェクトをBunに移行してみた </div> <div class="link-card-v2-content">Obsidian Sample PluginはNode.jsを前提とした構成になっている。最近はBunで開発することが多くなり、🦉CarnelianもBunで開発しているため、Bunに移行できるかチャレンジしてみる。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2024-04-14 Node.jsのObsidianプラグインプロジェクトをBunに移行してみた" class="internal-link"></a> </div> %%[[📜2024-04-14 Node.jsのObsidianプラグインプロジェクトをBunに移行してみた]]%% ただ、最新情報として参照するのであれば [[📕ObsidianのNode.jsプロジェクトをBunに移行する方法]] がオススメです。 ### AutoHotkeyのプロジェクト設定見直し 5種類のモードに対するキーマップを、より少ないコード量で表現できるように設計を見直しました。以下は見直し後の設定例です。docsの書き方、`modes(...)` の追加が変更点です。 ```autohotkey ;[N] rキー ;[EMR] SPECIALモードに切り替え ;[S] EDITモードに切り替え $r:: if (modes("N")) { send r } else if (modes("EMR")) { setMode(_MODE.SPECIAL) } else if (modes("S")) { setMode(_MODE.EDIT) } return ``` ### スライド作成環境をMarpに変更 プレゼンテーションスライドの作成に[[Marp]]を使うようになりました。これは[[Neovim]]をメインに使うことになった影響、その[[Markdown]]環境が整ってきたことによるものが大きいです。 [[Marp]]の導入により、6週間で6つとかなりのスピードでスライドを作成できるようになりました。各スライドは以下 [[📒Slides]] から閲覧できます。 <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"> 📒Slides </div> <div class="link-card-v2-content">Minervaで配信しているコンテンツのうちプレゼンのスライド資料にあたるもの。実際に外部登壇したわけではない。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/hub.webp" /> <a data-href="📒Slides" class="internal-link"></a> </div> %%[[📒Slides]]%% ### Nuxt開発環境を堅牢に [[Neovim]]で[[Nuxt]] x [[TypeScript]]の開発をするにあたり、暗黙的で便利な機能を使うよりも、明示的で型安全な書き方の方がトラブルに遭遇しにくくてよいと感じたので、そのような設定を目指してみました。 <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でも安全で快適なNuxt3の開発をするのだ </div> <div class="link-card-v2-content">NeovimでNuxt3とTypeScriptを型安全かつ快適に開発するための設定方法を解説します。Auto-importsの無効化や未使用importの自動削除、未定義タグの検知、フォールスルー属性対応など、VSCodeやWebStormでは得られないNeovim特有の課題とその解決策を詳しく紹介しています。詳しい手順や設定例は記事でご確認ください。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2024-07-26.webp" /> <a data-href="📘完全武装をしてNeovimでも安全で快適なNuxt3の開発をするのだ" class="internal-link"></a> </div> %%[[📘完全武装をしてNeovimでも安全で快適なNuxt3の開発をするのだ]]%% ミスをした時に静的型解析でフォローできるという利点はありつつも、[[Auto-imports (Nuxt)|Auto-imports]]が使えないなど、人によってはデメリットの方が大きいケースもあります。万人にはオススメできませんが、個人的にはこの設定の方が気に入っています。 ### Conventional Commitsの導入 [[Conventional Commits]]の概念を導入し、ルールを選定しました。 <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"> 📕Conventional Commitsベースのコミットルール </div> <div class="link-card-v2-content">📕tadashi-aikawaの個人的なConventional Commitsベースのルールを決める。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/prime.webp" /> <a data-href="📕Conventional Commitsベースのコミットルール" class="internal-link"></a> </div> %%[[📕Conventional Commitsベースのコミットルール]]%% きっかけは[[lazy.nvim]]の更新内容を把握しやすくするため、[[Conventional Commits]]について調べたことですが、この後に続く[[semantic-release]]の導入など更なる改善にもつながりました。 ### semantic-releaseによるリリース自動化 [[Conventional Commits]]の導入が一段落ついたころに[[semantic-release]]を導入し、リリースを自動化しました。 <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"> 📜2024-09-16 semantic-releaseでGitHub管理のパッケージリリースを自動化してみる </div> <div class="link-card-v2-content">Conventional Commitsを採用したので、どこまで自動化できるのかを試してみたい。一番有名そうなsemantic-releaseを試してみる。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2024-09-16 semantic-releaseでGitHub管理のパッケージリリースを自動化してみる" class="internal-link"></a> </div> %%[[📜2024-09-16 semantic-releaseでGitHub管理のパッケージリリースを自動化してみる]]%% 以前からリリース作業が面倒だったのと、せっかく導入した[[Conventional Commits]]を使って何かいい感じのことをやりたい... と思っていたところにハマった感じです。仕事でもプライベートでも、普段リリースしているプロダクトには軒並み導入しました。[[Obsidianプラグイン]]開発でも対応済です。 <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"> 📜2024-10-06 semantic-releaseをObsidianプラグインに適応してみる </div> <div class="link-card-v2-content">📜2024-09-16 semantic-releaseでGitHub管理のパッケージリリースを自動化してみる の知見を活かしたうえで、Obsidianプラグインのリリースにも適応してみる。対象プラグインはAnother Quick Switcher。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2024-10-06 semantic-releaseをObsidianプラグインに適応してみる" class="internal-link"></a> </div> %%[[📜2024-10-06 semantic-releaseをObsidianプラグインに適応してみる]]%% ## Minervaの進化 [[Minerva]]は主に[[Obsidian Publish]]で公開されているノートのことですが、ここでは[[Vault]]のことを指します。そのため、ローカルの[[Obsidian]]のみで恩恵を受けた出来事もピックアップしました。 ### 一次情報URLをプロパティに 一次情報の[[URL]]を[[プロパティ (Obsidian)|プロパティ]]に持たせるよう変更しました。[[Minerva]]では `一次情報あり` のリンクが表示されるようになっています。 <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"> 💿MIN-0032 一次情報のURLはプロパティで管理する </div> <div class="link-card-v2-content">メタデータとなるためFileIOなしで高速アクセス可能になることから、今後の可能性面での期待が大きい。既存ノートからの移行は大変だが、気づきベースの移行なら現実的。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/minerva-adr3.webp" /> <a data-href="💿MIN-0032 一次情報のURLはプロパティで管理する" class="internal-link"></a> </div> %%[[💿MIN-0032 一次情報のURLはプロパティで管理する]]%% ### 用語ノートにdescriptionプロパティをつけた [[Glossary note]]に `description` の[[プロパティ (Obsidian)|プロパティ]]をつけるようにしました。この対応によって、[[🦉Another Quick Switcher]] (v11以上)で `description` プロパティを検索対象に加えることができ、検索が捗ります。 <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"> 💿MIN-0033 Glossary noteにはdescriptionプロパティをつける </div> <div class="link-card-v2-content">ノート数が増えたときの影響が気にはなるが、プロパティには将来性もあり、現時点では利便性が確実に上がるため。入力の手間もCarnelianで最小化できる上、不要と判断したときの削除は比較的簡単なので。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/minerva-adr3.webp" /> <a data-href="💿MIN-0033 Glossary noteにはdescriptionプロパティをつける" class="internal-link"></a> </div> %%[[💿MIN-0033 Glossary noteにはdescriptionプロパティをつける]]%% ## 仕事 ### Tailwind CSSを使ったデザイントークン主体の開発 [[Nuxt]]と[[shadcn-vue]]といったフレームワークを使って、[[デザイントークン]]が主体のWeb開発をはじめて経験しました。 今までは、[[Vuetify]]などの[[UIフレームワーク]]を利用して限定されたデザインから自分でUIを考えて実装する... ということばかりやってきました。しかし今回は、デザイナーが[[Figma]]を使ってデザインしたモノをベースに、[[デザイントークン]]を橋渡しにして、[[Tailwind CSS]]や[[shadcn-vue]]に繋ぎこむという流れを作りました。 今までなんとなくしか知らなかった[[Figma]]が、[[デザイントークン]]という共通言語をベースに設計され利用されるものであり、それをシームレスにWebへ適応できる... という発見は非常に価値がありました。 同時に、[[Flexbox]]や[[Grid Layout (CSS)|Grid Layout]]といった今までノリでやってきた仕様への理解も深まり、[[Marp]]のデザインテンプレートやスライド作成といったクリエイティブな作業を通じて、脇の実戦経験も積めたと思います。 <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"> 📜2024-08-10 FlexboxをTailwindCSSで雑に学ぶ </div> <div class="link-card-v2-content">Web開発でCSSやTailwind CSS、特にFlexboxやGrid Layoutが苦手なので体系的かつ乱雑に学習してスキルアップしたい。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2024-08-10 FlexboxをTailwindCSSで雑に学ぶ" class="internal-link"></a> </div> %%[[📜2024-08-10 FlexboxをTailwindCSSで雑に学ぶ]]%% この作業を通じて、デザイナーが何を考えてスライドをデザインしているかといったことも分かるようになってきました。仕組みを作成したことによって、スライド作成スピードが上がり、アウトプットの量も数倍になりました。([[#スライド作成環境をMarpに変更]] を参照) ### Go x Echo のAPI開発 [[Go]]で[[Echo]]を使った本格的なAPI開発の経験を積むことができました。特に[[golangci-lint]]やその中でも[[exhaustive]]の導入はゲームチェンジャーだったと今でも思えます。 <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"> 📜2024-06-01 golangci-lintを使ってみる </div> <div class="link-card-v2-content">golangci-lintを使ってみる。目的はgo-exhaustructをNeovimで使うこと。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2024-06-01 golangci-lintを使ってみる" class="internal-link"></a> </div> %%[[📜2024-06-01 golangci-lintを使ってみる]]%% 単にAPI開発を行うだけでなく、昨年~今年にかけて取り入れた技術を使って、チーム開発にも耐えられるような基盤も構築しました。 - [[Mockoon]]を使って外部APIをモック化する - [[Bruno]]を使ってAPIの[[E2Eテスト]]をCIで回しつつ、開発認識をあわせる - データベース や S3([[MinIO]]) の中身、外部APIへのリクエスト([[Mockoon]]のログより)も含めてassertできるライブラリ(jsファイル)も作成 - [[Conventional Commits]]によるコミットルールの統一 - [[semantic-release]]によるリリーススピード高速化 ### VeeValidateとZodを使ったform実装 [[SPA]]で複雑な登録画面をつくる機会があったので、[[VeeValidate]]と[[Zod]]を使って簡潔でバグになりにくいformを実装しました。 <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"> 📜2024-10-30 VeeValidateとZodでよくあるformの少し複雑なものを試してみる </div> <div class="link-card-v2-content">VeeValidateをshadcn-vueと一緒に使っていて、独自のUIを実装しようとしたら少しハマってしまったのでいくつかの実験をして挙動を把握しておく。基本的な使い方も含め。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2024-10-30 VeeValidateとZodでよくあるformの少し複雑なものを試してみる" class="internal-link"></a> </div> %%[[📜2024-10-30 VeeValidateとZodでよくあるformの少し複雑なものを試してみる]]%% [[Zod]]が高度な推論を行う分、補完のパフォーマンスは劣化しましたが、可読性と堅牢性は大幅にアップしたので満足しています。 ### npm -> pnpm [[npm]]を使っていたプロジェクトを軒並み[[pnpm]]に移行しました。仕事で移行する前に[[🦉Various Complements]]で実験し、手ごたえがあったので。 <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"> 📜2024-07-28 Various Complementsをnpmからpnpmに移行する </div> <div class="link-card-v2-content">久々にpnpmを試してみたらいい感じだったので、Bunを使えないプロジェクトで実際に試してみたくなった。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2024-07-28 Various Complementsをnpmからpnpmに移行する" class="internal-link"></a> </div> %%[[📜2024-07-28 Various Complementsをnpmからpnpmに移行する]]%% [[Windows]]を使っていた時は[[シンボリックリンク]]周りのトラブルに遭遇しましたが、[[Neovim]]だけを使うようになった今では[[Ubuntu]]で動かせますし、周りは皆[[macOS]]なのでためらわずに導入できました。 [[Vue]]([[Nuxt]])を使っているというのもありますが、仕事で[[Bun]]を取り入れるのはやや冒険的な気がしていますので、[[pnpm]]が落としどころしては最適かなと思っています。 ### 開発以外のツールもNeovimを主軸に 開発以外の用途でも、ツールを[[Neovim]]へと統一しました。 | 用途 | 以前利用していたツール | 現在利用しているツール | | ---------- | ---------------------------- | ------------------------------------ | | タスク管理 | [[Todoist]] ([[🧊Togowl]]) | [[Neovim]] + [[🦉Silhouette.nvim]] | | 時間管理 | [[Toggl]] ([[🧊Togowl]]) | [[Neovim]] + [[🦉Silhouette.nvim]] | | [[PKM]] | [[Confluence]] (個人ページ) | [[Neovim]] + [[obsidian.nvim]] | プライベートでは[[Obsidian]]と[[🦉Silhouette]]を使って上記を構成していたので、それをすべて[[Neovim]]でも使えるようにカスタマイズした結果となります。 仕事で[[🦉Silhouette.nvim]]を使うようになってからは、プライベートの[[🦉Silhouette]]と切り替えるのが億劫になり、今ではすべて[[🦉Silhouette.nvim]]に統一しています。そのため、[[Obsidian]]はプライベートの[[PKM]]用途([[Minerva]]専用)になりました。 ## ガジェット ### Pixel 8a ネガティブな理由ではあったものの、スマホを[[Google Pixel 8a|Pixel 8a]]にしました。[[Google Pixel 5|Pixel 5]]からの移行。 <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"> 📜2024-06-27 Google Pixel 8aをセットアップする </div> <div class="link-card-v2-content">Google Pixel 8aが届いたのでセットアップする。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2024-06-27 Google Pixel 8aをセットアップする" class="internal-link"></a> </div> %%[[📜2024-06-27 Google Pixel 8aをセットアップする]]%% 半年くらい使っていますが、リファレンス機の名に恥じない安定感です。今後もこのシリーズを使っていきたいですね。 ### MB16ACV [[USB Type-A]]で接続可能なモバイルモニタの[[MB16ACV]]を仕事用に購入しました。 <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"> 📜2024-07-25 MB16ACVをUSB Type-Aで動かしてみる </div> <div class="link-card-v2-content">MB16ACVが届いたのでUSB Type-Aで動くか確かめてみる。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/activity.webp" /> <a data-href="📜2024-07-25 MB16ACVをUSB Type-Aで動かしてみる" class="internal-link"></a> </div> %%[[📜2024-07-25 MB16ACVをUSB Type-Aで動かしてみる]]%% 電力不足や反応が遅くなることもなく、今日まで使えています。MTGでふとモニタが欲しくなったとき、[[USB Type-C]]の場合は電力や相性で利用できないことが多かったのですが、[[MB16ACV]]は期待を裏切らずに使えるので非常に満足しています。 ### HHKB Studio 雪 [[HHKB Studio]]の新しいカラーリングである **雪** を購入しました。 <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"> 📘HHKB Studio 雪 を購入 </div> <div class="link-card-v2-content">HHKB Studio新色「雪」のレビューです。無刻印キートップや持ち運び、打鍵感の違いなど、HHKB Studio 墨との比較や使い心地を詳しく紹介しています。白色キーボードや静電容量方式、無刻印キーボードに興味がある方はぜひご覧ください。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2024-10-06.webp" /> <a data-href="📘HHKB Studio 雪 を購入" class="internal-link"></a> </div> %%[[📘HHKB Studio 雪 を購入]]%% 職場と自宅での往復持ち運びが不要になったのが一番実感した効果でした。使い勝手は[[HHKB Studio]]の墨と一緒です。 ## サブスクリプション ### YouTube Premium [[YouTube Premium]]に加入しました。 | サービス名 | 月額課金額 | | ------------------- | ----- | | [[YouTube Premium]] | 1280 | この判断は正解だったと思っています。作業用音楽を聴いたり、動画を見る機会は結構あるので[[Spotify]]に比べて費用対効果では大満足ですね。 ### 解約 以下のサービスは必要なくなったので解約しました。 | サービス名 | 月額課金額 | 理由 | | --------------------- | ----- | -------------------------- | | [[Spotify]] | 980 | [[YouTube Premium]]へ移行 | | [[Grammarly Premium]] | 1584 | [[ChatGPT Plus]]で十分 | | [[JetBrains]] | 1115 | 利用しなくなったから( -> [[Neovim]]) | | [[Twitter]] Premium | 980 | やめたから ( -> [[Bluesky]]) | ## ゲーム ### 界の軌跡 発売日から1週間弱休暇をとり一気に終わらせました。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://www.falcom.co.jp/page/wp-content/themes/falcom/assets/icon_16.png" /> <span class="link-card-v2-site-name">英雄伝説 界の軌跡 -Farewell, O Zemuria- | 日本ファルコム - Falcom</span> </div> <div class="link-card-v2-title"> 英雄伝説 界の軌跡 -Farewell, O Zemuria- | 日本ファルコム - Falcom </div> <div class="link-card-v2-content"> 遥かなる天を目指す一筋の軌跡はゼムリアの未来となるのだろうか……。軌跡シリーズ20周年記念タイトル「英雄伝説 界の軌跡 -Farewell, O Zemuria-」2024年9月26日(木)発売予定! ... </div> <img class="link-card-v2-image" src="https://www.falcom.co.jp/kai/assets/og.jpg" /> <a href="https://www.falcom.co.jp/kai/"></a> </div> 早く続編発売して...🙏 ### ドラゴンクエスト3HD-2D 12月の休日にプレイをして、裏ダンジョンの最後以外はクリアしました。 <div class="link-card-v2"> <div class="link-card-v2-site"> <img class="link-card-v2-site-icon" src="https://www.dragonquest.jp/favicon.ico" /> <span class="link-card-v2-site-name">ドラゴンクエストIII そして伝説へ… | SQUARE ENIX</span> </div> <div class="link-card-v2-title"> ドラゴンクエストIII そして伝説へ… | SQUARE ENIX </div> <div class="link-card-v2-content"> ここから始まる、ロトの物語。「ドラゴンクエストIII そして伝説へ…」の公式サイトです。 </div> <img class="link-card-v2-image" src="https://www.dragonquest.jp/roto-trilogy/dq3/_common/img/sns_dq3.png?241115" /> <a href="https://www.dragonquest.jp/roto-trilogy/dq3/"></a> </div> オリジナル版(リメイク)とは良い意味で変わった点も多かったので結構楽しめたと思います。 ## Weekly Report 通算200回突破 [[📰2021年0週 Weekly Report]]から始めた[[📰Weekly Report]]ですが、遂に通算200回を突破しました。 <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"> 📰Weekly Report </div> <div class="link-card-v2-content">📕tadashi-aikawaが1週間に1度公開するレポート。</div> <img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%B0Weekly%20Report/attachments/cover.jpg" /> <a data-href="📰Weekly Report" class="internal-link"></a> </div> %%[[📰Weekly Report]]%% 回数を目標にしていたわけではありませんが、丸4年間、1回も欠かさず継続できたことは誇りに思います。 ## 年始に立てた目標はどうなったか? [[📰2024年1週 Weekly Report]]に立てた3つの習慣目標がありました。 > - お風呂にはスマホを持ち込まず、25分以内に出る > - 予定のない休日はスケジュールを固定化する > - Obsidianに関する記事を毎日1記事シェアする 結論から言うと、これらはすべて達成していません。3つ目は早々に破棄しましたし、1つ目と2つ目はほぼ実行できていません。まあ、年始という外的要因に釣られて立てた目標なんてそんなものです。**目標は目的をもって内発的動機によって立てられなければ意味がない**というのが持論であり、それは1年間のどこで立ててもいい... **むしろそうでなくてはならないと思っています**。 ## まとめ 2024年の1年間を振り返ってみました。 12月30日の夜と31日の夜で一気に書き上げたのと、時間もなかったのでダラダラした内容になってしまっているかもしれません... が時間ギリギリになってしまうほどには、色々とインプット・アウトプットできた1年だったなと思っています。 私をとりまくメインのツールは[[Obsidian]]から[[Neovim]]に移行しつつありますが、[[PKM]]や[[Minerva]]では引き続き[[Obsidian]]で運用していきます。[[Minerva]]を見てくださっている皆さん、[[Obsidian]]愛好者の皆さん、[[Neovim]]愛好者の皆さん、来年も引き続きよろしくお願いいたします!