どうも皆さん、こんにちは!「zenncast」のマイクです。今日は2024年6月10日、月曜日です。みなさん、いかがお過ごしでしょうか?さて、今日はZennでトレンドの記事をいくつかご紹介したいと思います。

前回紹介した記事、少し振り返ってみましょう。まず「PPRはアイランドアーキテクチャなのか」。それから「LINE Botの開発でCloudflareとHonoを使う理由」。最後に「DuckDBで『由比ヶ浜結衣』を探す」。どれも興味深い内容でしたね。

さて、今日はトレンドの記事を5本ご紹介します。まずは1本目の記事から。

。。。。

最初の記事は「初学者があのNASAのOSSにコントリビュートした話」です。

こちらは大学二年生でWEBエンジニアを目指している筆者が、NASAのOSSであるAdvanced Multi-Mission Operations System (AMMOS) にコントリビュートした経験について語っています。AMMOSはNASAのJet Propulsion Laboratoryが管理する宇宙船運用用のサービスとツールのセットで、筆者が貢献したのはその中のJavaScriptライブラリ3DTilesRendererJSです。

筆者は、日本全国の3D都市モデルのオープンデータ化プロジェクト「PLATEAU」に興味を持ち、そのチュートリアルを進める中で3DTilesRendererJSにエラーが発生しました。そのエラーの原因は`for`文の変数宣言で、`const`ではなく`let`を使うべき箇所でした。この単純なエラーを修正するため、筆者は以下の手順でコントリビュートしました:

1. 3DTilesRendererJSのソースコードを読んでエラーの原因を特定。
2. ローカルで修正。
3. GitHubで同様のissueやpull requestがないか確認。
4. 自明な修正だったためPRを直接作成。
5. 数時間でPRがマージ。

この経験を通じて、筆者はOSSへの貢献方法やエラー解決の流れを学び、自信を深めました。エラー自体は単純でしたが、NASAのプロジェクトに貢献できたことに大きな喜びを感じています。今後も自走できるエンジニアを目指し、OSSへの貢献を続けて行く意欲を示しています。

。。。。

続いて2本目の記事、タイトルは「lintnet - General purpose linter powered by Jsonnet」です。

lintnetはJSONやYAMLなどの汎用的なファイルを対象とした新しいOSSのlinterで、Goで実装されています。シングルバイナリとして提供されるため、インストールが簡単です。ユーザーが定義したlintルールに従って、様々な設定ファイルのlintを実行できます。

主要な特徴として、lintルールや設定、テストをJsonnetで記述できる点があります。JsonnetはJSONを拡張した言語で、動的な設定生成が可能であり、学習コストが低いのが特徴です。lintnetはこのJsonnetを利用して、柔軟かつセキュアにlintを実行します。また、JsonnetのGo実装であるgo-jsonnetのNative functionを使用して独自関数を追加することで、標準機能以上のlintルールも実現可能です。

lintnetはModuleという仕組みを用いて、簡単にlintルールを配布・再利用できます。Moduleの更新もRenovateで自動化が可能です。GitHub Actionsのactionのようなエコシステムの構築を目指しています。lintnetはまだ開発初期のOSSであり、これからの発展が期待されます。興味がある方はぜひ使用してフィードバックを提供してください。

。。。。

次に3本目の記事です。「Chrome内蔵LLM Gemini Nanoを使ってみた」についてご紹介します。

Chrome 126から、ローカルで使用できる大規模言語モデル (LLM)「Gemini Nano」が導入されました。この記事では、その設定方法と使用方法が紹介されています。まず、ChromeのDev channel版をインストールし、特定の機能を有効にします。さらに、`chrome://components/`にアクセスし、「Optimization Guide On Device Model」のアップデート状況を確認し、必要に応じてダウンロードします。

使用環境はmacOS、Apple M3 Max、メモリ128GB、Chrome 127.0.6523.4です。Chromeを再起動し、デベロッパーツールを開いてコードを実行することでGemini Nanoを試すことができます。セッションの作成可能性を確認し、プロンプトに対する応答を取得する手順が紹介されています。

実際に試してみたところ、応答速度は非常に速いとのこと。ローカルでの大規模言語モデルの使用が可能なChromeの新機能「Gemini Nano」を紹介しています。GA(一般提供)までには時間がかかりそうですが、将来的にはローカルLLMを使用するChrome拡張機能が増えることが期待されます。

。。。。

さて、4本目の記事です。「【30days自作OS開発記録】1日目:OSは案外楽に出来るもんだぜ。」です。

タクーシュさんはOSの仕組みを学ぶために「30日でできる! OS自作入門」を使用し、自作OS開発に挑戦を始めました。初日はPCの基本的な動作とアセンブラの基礎からスタートし、開発環境の整備を行いました。Windows環境でWSL(Windows Subsystem for Linux)を使い、Linuxコマンドを実行できるように設定。必要なツールとしてQEMUとNASMをインストールしました。

アセンブラの基本的なプログラムを作成し、フロッピーディスクのブートセクタに書き込む内容を理解しながら、「hello, world」を表示する簡単なOSを作成しました。この成果により、シンプルな「hello, world」プログラムを実行するOSを作成することができましたが、これはまだ初歩的な段階であり、完全なOSを作成するには約1か月の時間がかかる見込みです。今後の進展に期待してほしいとのことです。

。。。。

最後に5本目の記事です。「様々な画面サイズやテキストサイズなどでUIが崩れていないか一覧で確認できるパッケージを作った話」です。

FlutterでUIを実装する際、画面サイズやテキストサイズ、キーボードの表示、ダークモードなど多岐にわたる条件で表示を確認する必要があります。これを手動で行うのは大変であり、テストの充実も難しいため、著者はこれらの条件を一覧で確認できるパッケージを作成しました。このパッケージは、類似の「device_preview」からインスパイアされています。

パッケージは各Widgetの上流にある`MediaQuery`のプロパティを変更して並べることで、異なる条件下での表示を簡単にプレビュー可能にしています。また、`two_dimensional_scrollables`パッケージを使用してスクロール可能な一覧を実現しています。状態管理には「riverpod」を利用しており、全てのプレビューで状態を共有することが可能です。

既存のアプリに導入する際の参考例として、グローバル変数で管理している`GlobalKey`や複数存在する`AdWidget`のエラー修正などが紹介されています。将来的には、Apple Vision Proを使用して多数のプレビューを一度に確認できる可能性があり、未来感が増すと期待されています。このパッケージは実用性についてはまだ未知数ですが、今後の開発での利用が期待されます。

。。。。

さて、今日はここまで。紹介した記事を簡単におさらいしますと、「初学者があのNASAのOSSにコントリビュートした話」、「lintnet - General purpose linter powered by Jsonnet」、「Chrome内蔵LLM Gemini Nanoを使ってみた」、「【30days自作OS開発記録】1日目:OSは案外楽に出来るもんだぜ。」そして「様々な画面サイズやテキストサイズなどでUIが崩れていないか一覧で確認できるパッケージを作った話」でした。次回も楽しみにしていてくださいね!詳しい内容はショーノートに書いてありますので、ぜひチェックしてみてください。番組の感想もお待ちしています。それでは、またお会いしましょう!

Related episodes

内容の近いエピソードを推薦しています