みなさん、おはようございます!マイクです!今日は2025年2月10日、土曜日です。今日も楽しい「zenncast」をお届けしますよ!今日はZennでトレンドの記事をいくつか紹介していきますので、お楽しみに!
それでは、早速今日の内容に入っていきましょう!
まず、前回紹介した記事を振り返りますね。「React19のuseOptimisticとDnDを組みせるといい感じ」、「Next.js App Routerにおける筆者のBad Practiceを振り返る」そして「言語処理系にSIMD命令を実装することについて(主にx86向け)」の3本でした。これらの内容も気になりますが、今日は新たな記事をたっぷりご紹介しますので、そちらに移りますね。
それでは、今日紹介する記事の本数をお伝えします。今日は全部で5本の記事をお届けしますよ!
さて、まず最初の紹介です!タイトルは「1ファイルから始めるNix Flake」です。この文章では、Nixに対する興味が高まっている中、特に「始めるための情報」が不足しているという著者が、Nixを使った開発環境の構築方法を説明しています。最近のNixの新機能、Flakeについても触れられていて、Gitリポジトリの直下に配置される`flake.nix`ファイルを使って依存関係と出力を定義することで、開発環境を簡単に整えられるんです。
最小限のFlakeの例として、どのように`flake.nix`に記述するかが示されていて、`hello`コマンドを実行するシェル環境もスタートできます。開発シェルは`devShells`で定義され、ビルド成果物は`packages`で管理されます。さらに、`mkShell`や`mkDerivation`を使うことで、より自由度の高い環境構築も可能なんです。
また、複数のシステムに一括で設定する方法や、`flake-utils`や`flake parts`を活用することで、開発環境を効率的に管理する方法も紹介されています。特に`flake parts`を導入すると、システムごとの設定が簡素化され、可読性も向上します。最後には、Nixコミュニティへの参加も勧められていて、Nixの汎用性の高さについても強調されています。
。.
次に紹介する記事は「埋め込みモデルで動くアキネータライクなゲームを作ったら、難易度が高すぎた件」です。こちらでは、埋め込みモデルを使用したキーワード当てゲームの試行過程が記録されています。プレイヤーは1単語の回答をし、その単語とキーワード説明とのコサイン類似度を基に次の単語を選定します。なんと、最大で20回の試行で正解を目指すという、なかなかの難易度です。
最初は「りんご」という単語が選ばれ、類似度はあまり良くない結果に。次に「自然」や「植物」など一般的な概念を試しましたが、結果は同じように低いままでした。試行を進める中で「季節」や「時間」といった単語も試し、少し良い結果が得られましたが、具体的な季節名は反応が薄いという状況が続きました。
最終的には「暦年」が提案され、類似度はあまり良くなかったものの、全体を通じてキーワードは時間や周期に関連する抽象的な概念であることが示唆され、ゲームの難易度の高さが強調されている内容でした。
。.
次は「tsconfig.jsonについて調べてみた」です。TypeScriptの設定ファイルであるtsconfig.jsonの主要なオプションについて詳しく解説しています。特に、`target`、`lib`、`module`、`moduleResolution`の設定が出力されるJavaScriptコードや型チェックに与える影響を詳述しています。
`target`オプションは出力するJavaScriptのバージョンを指定し、デフォルトは`ES5`です。ここで最新の`ES2015`やそれ以降を選ぶと、コード量が減って実行効率も向上します。実行環境に応じた最適な設定を選ぶことが重要ですよ。
`lib`オプションでは、型チェックに必要な標準ライブラリを指定します。ブラウザAPIを利用する場合は、`lib`に`DOM`を追加する必要がありますね。次に、`module`オプションは出力されるモジュールシステムを決定します。ESMを選ぶことで、コード管理が効率的になります。
最後に、`moduleResolution`はモジュール解決の方式を指定し、特にNode.js環境では`node16`や`nodenext`が適切です。最後には設定例も示されていて、分かりやすい内容になっています。
。.
次にご紹介する記事は「Dockerでバインドマウントするのやめません?もうCompose Watchでいいでしょ?」です。こちらでは、Dockerを使ったVueやReactの開発における`node_modules`のバインドマウントの問題について触れています。特に、Windows環境で`npm install`を行うと、Linuxベースのコンテナ内で動作しないバイナリが生成されることがあるんです。
そこで、バインドマウントを避け、`node_modules`は名前付きボリュームで管理することが推奨されていますが、この方法では依存関係を更新するたびにボリュームを削除しなければならない手間がかかります。そんな中、Docker Compose Watchを利用することで、`package.json`などの変更を自動で検知し、Dockerイメージの再ビルドが行える仕組みが導入できます。
これにより、手動作業が減少し、効率的な開発環境が確保できるようになります。特に、`rebuild`アクションを設定することで、`package.json`に変更があった際に自動で再ビルドが行われるのは嬉しいポイントですね。
。.
最後に紹介する記事は「【個人開発】Cloud Vision APIで個人情報を隠すサービスを開発しました🎉」です。こちらでは、著者が参加した「AI Agent Hackathon with Google Cloud」において、Cloud Vision APIを利用して画像内の個人情報を自動で検出・マスキングするサービスを開発したという内容です。
ユーザーは個人情報を含む画像をアップロードし、「Execute Masking」ボタンを押すことで、AIが自動でマスキングした画像を生成してくれます。このサービスは、特に技術記事を執筆する開発者や、管理画面のスクリーンショットを頻繁に使用する人々に向けて開発されたものです。
開発者は、AIを活用することで作業効率化の効果を実感しており、今後はさらに進化した機能を持つサービスの開発を希望しているそうです。プロジェクトのコードはGitHubで公開されていて、実際のデモ動画も提供されていますので、興味のある方はぜひチェックしてみてくださいね。
。
以上、今日の5本の記事を駆け足でおさらいしました!Nix Flakeの開発環境構築から、アキネータライクなゲームの試行、tsconfig.jsonの設定方法、Dockerの開発効率化、そしてCloud Vision APIを使ったサービス開発まで、幅広い内容をお届けしました!
次回もまたお会いできるのを楽しみにしています!詳しい内容はショーノートに書いてありますので、ぜひそちらもご覧ください。そして、番組の感想などもお待ちしていますよ!それでは、さようなら!