#
103
2024/8/22
今日のトレンド

iterパッケージとuv管理 など

みなさん、こんにちは!マイクです。今日は2024年8月23日、金曜日ですね!さて、今週も元気に「zenncast」をお届けします。今日はZennでトレンドとなっている記事をご紹介していきますので、お楽しみに!

それでは、前回ご紹介した記事について軽く触れてみましょう。「Full-Stack TypeScript」という統一名や、「GPT-4o-miniのファインチューニング」といった内容がありましたね。そして、テストのモジュールに関するお話もありましたよ。

さて、今日はおたよりはいただいていないようですね。残念ですが、気を取り直して今日の内容に進みましょう!

今日ご紹介する記事は全部で5本です。それでは、さっそく一つ目の記事から見ていきましょう。

1つ目の記事は「Go の iter パッケージを使ってみよう」です。Go 1.23で新たに導入された`iter`パッケージは、イテレータの抽象化を提供してくれます。このパッケージは、for-range構文と組み合わせて使用することで、データを効率的にイテレートできる仕組みを提供します。従来はgoroutineとchannelを使って複雑な実装を行っていましたが、`iter`を使うことでコードがシンプルになり、メンテナンスもしやすくなります。

`iter`パッケージには、`Seq`と`Seq2`の2つの型があり、`Seq`はスライス、`Seq2`はマップに対応しています。例えば、スライスの全要素を表示するための`PrintAll`関数は、`iter.Seq`を引数に取り、for-rangeでイテレートするだけで簡単に実装できます。

さらに、ファイルを行単位で読み取る`lines`関数の実装例も紹介されています。`iter`を使うことで、メモリの節約やスコープの分離が可能になり、長大な文字列を扱う際のパフォーマンス向上にも寄与します。実際のベンチマークテストでは、`strings.Split`よりも`iter.Seq`を使用した方が、実行時間やメモリ使用量で優れた結果を示しています。

このように、`iter`パッケージを利用することで、頑丈でメンテナンスしやすい実装が可能になりますので、ぜひ試してみてくださいね。

。...。

続いて2つ目の記事は「uvだけでPythonプロジェクトを管理する」です。Pythonプロジェクト管理ツール「uv」は、バージョン0.3.0のアップデートによって、pipの代替としてだけでなく、Pythonのバージョン管理やパッケージ管理も行えるようになりました。これにより、RyeやPoetryと同様の操作感でプロジェクト管理ができるようになったんです。

具体的には、uvのインストール方法やプロジェクトの初期化、パッケージの同期、仮想環境のアクティベートなどの基本操作が紹介されています。新規プロジェクトは「uv init」を使って作成し、依存パッケージは「uv sync」で同期します。仮想環境は「.venv」で作成され、Pythonのバージョン変更は「uv python pin」を利用します。

便利な機能もいくつかあり、ツールの呼び出しができる「uvx」やPyPI以外からのパッケージインストール、CUDA依存のPyTorchのインストール設定なども可能です。今後、uvがPythonプロジェクト管理の中心となることが期待されているので、公式ドキュメントをしっかり活用して新機能を探索してみてください。

。...。

3つ目の記事は「Viddy v1.0.0 リリース: Go から Rust への移行」です。この記事では、TUIツールViddyのv1.0.0リリースに際し、GoからRustへの再実装についての経験が語られています。ViddyはUnix系OSの`watch`コマンドのモダンな代替で、コマンドの実行結果をスクロールして確認できるPager機能や、過去の実行結果を遡って確認できるTime machineモードを持っています。

最初はRustでの実装を試みましたが、技術的な問題があったため、一度Goでリリースしました。そして、今回Rustでの再実装に成功したという感慨深いお話です。再実装の動機としては、Goでの実装にあった多くの改善点やバグ、機能拡張の障害に対する不満が挙げられています。

Rustの利点として、エラー管理が簡潔に行えるPropagating errorやOption型による安全な値の管理がある一方で、外部ライブラリへの依存が多いことや書き方の多様性からくるストレスも感じたとのことです。新機能としては、コマンド実行結果の履歴を保存できる「ルックバック機能」が追加され、ユーザーのニーズに応えています。

。...。

4つ目の記事は「Webフロントエンジニアが、FlutterでもSignalを使ってアプリ開発してみたら最高だった話」です。この記事では、WebフロントエンジニアがFlutterを使って初めてのアプリを開発した経験が語られています。アプリは「キャンプ」というコミュニティをテーマにしており、ユーザーがリアルタイムで目標や作業を共有しながら集中記録を行うものです。

特に注目すべきは、状態管理にSignalを採用した点です。Signalはデータの変更を監視し、依存関係にある要素のみを効率的に更新する仕組みを持っており、開発を非常に楽にしてくれます。Flutterを選んだ理由としては、Web開発の延長でアプリ開発を行いたかったことや、第二言語を学ぶ機会を持ちたかったことが挙げられます。

開発期間は約6ヶ月で、最初の2ヶ月をDartやFlutterの学習に充て、その後、企画からデザイン、開発までを行いました。Signalの導入が個人的に大正解だったとのことで、Web開発者にとっても有用な情報が詰まっています。

。...。

最後に5つ目の記事です。「機械学習の推論結果を非同期にPOSTで返す — FastAPIでの実装例」です。松尾研究所のシニアデータサイエンティストの浮田氏が、FastAPIを使った機械学習の推論APIの非同期実装方法を紹介しています。機械学習モデルの推論は時間がかかるため、非同期処理が非常に適しています。

具体的な実装方法として、クライアントから`id`と`callback_url`をサーバーに送信し、サーバーで重い処理を実行した後、結果を指定されたURLにPOSTするという流れが説明されています。サーバー側ではFastAPIの`BackgroundTasks`機能を利用し、非同期関数を呼び出して処理を行います。

クライアント側では結果を受け取るエンドポイントをFastAPIで実装し、結果をログに出力します。この実装例を通じて、機械学習の推論結果を非同期に返却する方法が理解できる内容となっていますよ。

。...。

さて、今日は5本の記事を駆け足でご紹介しました。Goの新機能からPythonのプロジェクト管理、Rustへの移行やFlutterでの開発、FastAPIを使った非同期処理の実装まで、多彩な内容でしたね!次回も楽しみにしていますので、ぜひまた遊びに来てくださいね。詳しい内容はショーノートにも書いてありますので、ぜひチェックしてみてください。それでは、皆さんの感想もお待ちしています!マイクでした!

Related episodes

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