皆さん、おはようございます!マイクです!今日は2024年11月13日、火曜日ですね。今日は「zenncast」のお時間です。今日も楽しいトピックをお届けしますよ!さあ、早速ですが、Zennで今日トレンドの記事を紹介していきますね。
さて、前回紹介した記事についてですが、今回はその話題はお休みして、今日の内容に進みますね。
今日ご紹介する記事は全部で5本です!それでは、早速最初の記事からいきましょう!
1つ目の記事です。タイトルは「ウミガメのスープを1人で遊べるアプリを作りました」。著者は、1人でウミガメのスープを楽しむためのiOSアプリを開発しました。このゲームは出題者が考えたストーリーをプレイヤーが「はい」または「いいえ」の質問で推測するもので、通常は複数人でプレイされるんですが、アプリではChatGPTを出題者として利用しています。現在、15問が用意されていて、今後も問題の追加を予定しているそうですよ。
著者は元々Webアプリの開発経験しかなかったんですが、個人開発の時間を使ってアプリ制作に挑戦しました。好きなウミガメのスープをテーマに、ChatGPTを使った経験からアプリ制作を決意したんですって。技術スタックにはFlutter(Dart)を採用していて、UI構築がとてもスムーズに行えたとのこと。Riverpodを使って非同期データの管理を行い、freezedを利用してDartのデータクラスを自動生成しています。それに、Fastlaneでリリース作業の自動化も図ったそうです!
ユーザーからのフィードバックを得るために、β版リリースを行って実際の使い勝手を確認したり、マネタイズの方法を考えたりしているみたいです。特に、OpenAIのGPT4o-miniを使ってコストを抑えつつ、無料で楽しめるアプリを目指しているとのこと。開発中は色々と苦労があったようですが、友人に感動を与えた経験が大きなモチベーションになっているそうです。
さて、それでは次の記事に移りましょう!。.
2つ目の記事は「Rust 入門がてら JSON フォーマッターを書く」です。この記事では、Rustを学び始めたフロントエンドエンジニアがJSONフォーマッターを実装した経験を記録したものです。Rustの基礎文法には触れず、具体的な実装手順に焦点を当てています。
プロジェクトはCargoを利用して作成され、依存ライブラリとしてindexmapを追加しました。JSON文字列を標準入力から受け取り、字句解析、構文解析、整形を行うという流れです。字句解析では、JSONの各要素をトークンに分解し、構文解析ではそのトークンを元にJSON構造を再構築しています。
トークンにはオブジェクトや配列、文字列、数値などがあり、次のトークンを取得するメソッドも用意されています。整形機能も実装されており、インデントを付けて整形されたJSONを出力できるんです。動作確認も行い、標準入力から与えたJSONを整形して出力することができました。この記事は、Rustに興味がある方にとって良い参考になると思いますよ。
それでは、次の記事に行きましょう!。.
3つ目の記事は「RAGが「複雑な質問に弱い問題」を解決する「Plan×RAG」」です。この手法はアールト大学とMicrosoft Researchによって提案されたもので、特に複雑な質問に対して高い回答精度を実現することを目的としています。
Plan×RAGでは、ユーザーの質問を小さなサブクエリに分解し、それらの関係性を有向非巡回グラフとして整理します。これにより、計画を立ててから情報検索を行うことができるんです。従来のRAGでは、複数の知識を組み合わせる必要がある質問への回答精度が低下してしまうことがありますが、Plan×RAGでは、サブクエリを順番に処理するため、必要な情報を効率よく集めることができるんです。
具体的には、最初にユーザーの質問をDAGに変換し、サブ質問間の依存関係を整理。その後、各サブ質問を計画した順序に従って処理し、ベクトルDBから情報を検索します。最終的に、各サブ質問の回答を統合して一つの最終回答を作成することができます。この手法によって、回答精度が向上し、特に複雑なマルチホップクエリにおいて他の最新手法を上回る性能を発揮しています。
では、次の記事にいきましょう!。.
4つ目の記事です。「`go test` の33個のフラグを全て解説してみた!!!」というタイトルです。Go言語でのテスト時に用いる `go test` コマンドには、全33個のフラグが存在します。これらは主にテストの実行を制御するフラグと、テスト実行中にプロファイルを取得するフラグに分類されています。
主なフラグには、特定のベンチマークを実行する `-bench` や、テストを指定回数実行する `-count`、カバレッジ分析を有効化する `-cover`などがあります。また、プロファイリング関連のフラグもあり、例えば `-cpuprofile` はCPUプロファイルを取得し、`-memprofile` はメモリ使用状況を記録します。これによりパフォーマンスのボトルネックを特定することができます。
各フラグの詳細な使い方やサンプルコードも提供されていて、エンジニアにとって実際のテスト作業に役立つ情報が満載です。これらのフラグを適切に活用することで、テスト作業がより効率的に行えるようになりますよ。
さて、最後の記事に移りましょう!。.
5つ目の記事です。タイトルは「Rust で初めての npm package 開発」。筆者はRustを学びながら日付を表示するnpmパッケージを開発しました。このパッケージはWebAssemblyを利用していて、Vue.jsおよびViteのプロジェクトで使用可能です。
開発の流れは、RustのコードをコンパイルしてWebAssemblyやTypeScript、JavaScript、package.jsonを生成し、それをnpmに公開するというものです。日付操作には`chrono`クレートを使用し、現在の日付と曜日を取得する関数を実装しています。また、`wasm-pack`を使ってnpmパッケージとしてビルドし、公開準備を整えています。
ViteとVueプロジェクトでの使用時には、WebAssemblyの統合に関するエラーが発生しましたが、プラグインを導入することで解決したとのこと。この一連の流れを通じて、Rustでのnpmパッケージ開発やWebAssemblyの活用法を学ぶことができたそうです。
さて、今日ご紹介した記事を駆け足でおさらいしますと、ウミガメのスープアプリ、RustのJSONフォーマッター、Plan×RAG、`go test`のフラグ解説、Rustでのnpmパッケージ開発についてお話しました。次回もまたお会いできるのを楽しみにしています!詳しい内容はショーノートに書いてありますので、ぜひチェックしてくださいね。それでは、皆さんの感想もお待ちしています!今日はここまで、ありがとうございました!