#
42
皆さん、おはようございます!今日は2024年6月12日、水曜日です。zenncastのお時間です。私はMCのマイクです。今日もZennでトレンドの記事をご紹介していきますよ。

さて、前回紹介した記事を簡単におさらいしますと、「Modal」、「Dialog」、「Drawer」の違いについての記事や、タブUIのアクセシビリティについての記事、そして「Writing an OS in 1,000 Lines」をRustでやってみたという記事でした。皆さん、覚えていますか?

今日は特におたよりが届いていないようなので、早速今日のトレンド記事を紹介していきますね。今日は全部で5つの記事をご紹介します。

まず1つ目の記事は、「TypeScriptの型と値とバリデーション」です。

TypeScriptはJavaScriptの上に成り立つ静的型付け言語で、型アノテーションはコンパイル時に消去され、実行時には影響を与えません。型と値は別々の名前空間に存在し、型は静的解析時にのみ参照されます。たとえば、`typeof`演算子も型スコープと値スコープで異なる動作をします。

TypeScriptの特徴として、`class`や`enum`は型と値を同時に生成します。特に`class`はインスタンスの生成方法によって挙動が異なるため注意が必要です。ビルドサイズに影響を与える`enum`は慎重に使用する必要があります。

バリデーションについては、TypeScriptの型アノテーションだけでは実際の値の検証が行われません。ランタイムでのバリデーションが必要な場合、代表的なライブラリとしてzodやjsonschemaが挙げられます。これらを使用して実行時に値が期待される型を満たしているかを検証できます。

また、OpenAPIを使用してAPIのエンドポイントとそのパスに対応するスキーマを定義し、TypeScriptの型定義を生成する方法も紹介されています。これにより、HTTPクライアントの型チェックが可能となります。

TypeScriptを使用する理由は型による自動検査が可能なドキュメントとして利用できる点です。豊富な表現力を持ちながらも安全性を犠牲にすることがありますが、これはJavaScriptのエコシステムに対応するための設計上の妥協だとされています。

.

次に紹介するのは、「Rust製JavaScriptエンジン『Boa JS』を試してみた」という記事です。

Rustで実装されたJavaScriptエンジン「Boa JS」はまだ正式リリース前の実験的なエンジンですが、現バージョン0.18.0でも大手エンジンに引けを取らない性能を見せています。Rustプロジェクトに簡単に組み込める点がBoaの最大の特徴です。

記事では、Boaの基本的な使い方として`eval`メソッドを使ったJavaScriptコードの評価、独自APIの導入、独自クラスの導入、非同期処理を実現するためのジョブキューの作成、モジュールのサポートなどが具体的に紹介されています。特にRustアプリケーションの機能をJavaScriptから呼び出す方法や、`tokio`を使ったジョブキューの実装は興味深いです。

Boaの使い方を理解するためのリソースとして、公式サイトやドキュメント、GitHubリポジトリのExamplesも挙げられています。この記事を通じてBoaに興味を持つエンジニアが増えることを期待しています。

.

次に3つ目の記事、「RustでAPIサーバーを書くのが思ったより良い」についてです。

Rustはシステムプログラミング向けの言語ですが、APIサーバーの開発にも適しています。Rustのライフタイムや所有権の概念は、リクエスト・レスポンスモデルがシンプルなため、それほど問題になりません。RustのEnumはモデリングに非常に便利です。

Rustのエコシステムも充実しており、rustup、cargo、rust-analyzer、clippyなどのツールが開発を支援します。高速な実行性能はAWS Lambdaなどのサービスにおいてコスト削減にも寄与します。

マクロ機能やライブラリを活用することで、JSONのハンドリングやコマンドラインパーサの実装が楽になります。APIサーバーの開発には、Actix WebやAxum、SeaORM、sqlxなどのライブラリが対応可能です。

ただし、Rustにはビルドの遅さや学習コストの高さなどのデメリットもありますが、用途に応じて慎重に調査し使用することが重要です。RustでのAPIサーバー開発は多くのメリットがあり、特にライフタイムや所有権の問題に悩まされない点が大きな利点です。

.

次に4つ目の記事、「マイクロサービス作らなくても .NET Aspire って便利」です。

.NET Aspireは、マイクロサービス開発だけでなく、単一プロジェクトのWebアプリケーションでも便利に利用できるツールです。ローカル開発時にデバッグ実行で関連するプロジェクトやコンテナ、exeを自動起動し、接続文字列なども環境変数に設定してくれます。

具体的な利用例として、ASP.NET Core Minimal APIsを使ったシンプルなWebアプリの作成や、SQL ServerやRedisの活用ケースが紹介されています。yamlファイルを手動で書く必要がなく、C#でタイプセーフに設定を行うことができます。

アプリケーションのDB初期化にはワーカーサービスを利用し、マイグレーションを実行してテストデータを追加する方法も示されています。Azure Container Appsへのデプロイ時には、RedisやSQL ServerをAzureサービスに置き換える方法や、Azure Monitorを利用してログを収集する方法も解説されています。

このように、.NET Aspireは開発セットアップの自動化や効率化に非常に有用です。実際のコードはGitHubに公開されており、簡単に動作を確認できます。

.

最後に5つ目の記事、「数十万ダウンロードのアプリをExpo + Next.js + Tamaguiでコード共通化しつつリニューアルした話」です。

「Cloveフリマ」という鑑定品トレカに特化したフリマサービスをリニューアルし、短期間でWeb、iOS、Androidアプリを開発した事例が紹介されています。技術スタックとしてTypeScriptで統一されたReact NativeベースのExpo、Webアプリ用のNext.js、マルチプラットフォーム対応のスタイルライブラリTamaguiが採用されました。

TamaguiはReactを使ってWeb、Android、iOSのUIを共通化できるスタイルフレームワークで、パフォーマンスにも優れています。プロジェクトでは、Webとネイティブアプリを1つのリポジトリで管理し、90%のコードを共通化しました。共通化できなかった部分はファイル名の拡張子を変更することで容易に分岐させています。

Expoの利用により、クラウド上でのビルドや社内配布が簡単に行え、短期間での開発が可能となりました。今回のリニューアルは少人数で短期間に達成され、過去のマルチプラットフォーム開発の課題を克服した成功事例として紹介されています。

以上、今日は5つの記事を紹介しました。次回もお楽しみに!詳しい内容はショーノートに書いてありますので、ぜひチェックしてくださいね。また、番組の感想もお待ちしています。では、次回お会いしましょう。マイクでした!

Related episodes

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