はい、では早速カンペを作成しますね!

---

皆さん、おはようございます!今日の日付は2024年11月7日、木曜日です。今日も「zenncast」をお聞きいただきありがとうございます!今日はZennでトレンドの記事をいくつかご紹介します。

さて、前回紹介した記事ですが、「下書き」「一時保存」「Google コードレビュー・ガイドライン」など、興味深い内容でしたね。これらの記事から、開発の現場での重要なポイントを学ぶことができました。

では、今日のおたよりは残念ながら届いていないようですので、さっそく今日紹介する内容に移りましょう。

今日ご紹介する記事は、全部で5本です!それでは、最初の記事からいってみましょう!

1つ目の記事は「実践: await using でリソース開放」です。この中では、TypeScriptの新機能「await using」を使って、リソースを適切に開放する方法を解説しています。特に、Deno環境でのPuppeteerの使用例を通じて、非同期処理におけるリソース管理の重要性が強調されています。

DenoでPuppeteerを使う場合、ブラウザのインスタンスを閉じることを忘れると、プロセスが終了しない問題が発生します。従来は手動で`browser.close()`を呼び出していましたが、非同期処理の中で例外が発生すると、リソースが解放されない可能性があるんですね。そこで、`await using`を活用して、リソース解放を自動で予約する方法が提案されました。

具体的には、`useBrowserContext`関数を定義し、ブラウザを起動すると同時にスコープを抜ける際に`browser.close()`を設定します。これにより、リソース解放の漏れを防ぐことができるんです。著者は新機能を早めに試すことの重要性を述べており、エンジニアにとって有益な情報源となることでしょう。

。.

2つ目の記事は「5分で覚えるトランザクション分離レベル」です。トランザクション分離レベルは、データベースにおけるトランザクションの相互作用の度合いを示す指標で、4つのレベルに分類されます。

まず、**Read Uncommitted**では、他のトランザクションがコミット前のデータを読み取れ、これにより「ダーティリード」が発生します。次に、**Read Committed**では、コミット後のデータのみが読み取られ、これによって「ファジーリード」が発生する可能性があります。

**Repeatable Read**では、同一トランザクション内で同じデータを再度読み込んでも同じ結果が返る一方、INSERTやDELETEの影響が見えるため「ファントムリード」が発生することがあります。そして、**Serializable**では、トランザクションが直列に実行され、他のトランザクションの影響を完全に受けない状態になります。

これらの分離レベルを理解することで、適切なトランザクション管理が可能になります。MySQLのInnoDBはデフォルトで「Repeatable Read」を採用しているので、ぜひ参考にしてみてくださいね。

。.

3つ目の記事は「安全に倒し切るリリースをするために:15年来のレガシーシステムのフルリプレイス挑戦記」です。こちらの記事では、15年来のレガシーシステムのフルリプレイスに成功した経験を基に、安全なリリース手法が紹介されています。

システムの根幹機能となるため、リプレイスに伴うリスクを最小限に抑える必要があります。特に「見落としのないテスト」が難しく、著者はペンギンテストという新しい手法を導入しました。ペンギンテストは、本番環境で実際のユーザーデータを使用して新旧ロジックを比較し、テストの網羅性を高める方法です。

この手法を使うことで、ユーザー影響を避けつつ、潜在的なバグを早期に発見することができました。また、リリースプロセスはペンギンテストから始まり、手検証、テストユーザーへの先行公開、カナリアリリースを経て、最終的に全ユーザーへのUIリリースに至るまで段階的に進められました。

この成功体験は、他のプロダクトのリプレイスに応用できるので、同様の課題に直面しているエンジニアにはとても有益な情報です。

。.

4つ目の記事は「実務で使えるTypescriptの型8選」です。この記事では、実務に役立つTypescriptの型を8つ紹介し、特にReactを前提にした実装例が紹介されています。

まず、**テンプレートリテラル型**では型安全な文字列操作が可能になりますし、**ジェネリック**を使えば、型を汎用化して再利用可能なコンポーネントを作成できます。また、**ユニオン型と交差型**は複数の型を組み合わせて条件に応じた型の分岐が行えます。

さらに、**Mapped Types**や**条件付き型**は既存の型を柔軟に変換したり、条件に応じて振る舞いを変えることができます。これらの型を利用することで、より堅牢なアプリケーションの開発が期待できますね。

。.

5つ目の記事は「動画の無音部分を自動でカットする 〜 MLと波形解析のハイブリッド音声処理 〜」です。こちらでは、iOSアプリ「Chopper」における動画の無音部分を自動でカットする手法が解説されています。

無音部分をカットする目的は、発話区間以外を除去する「ジェットカット」を実現することです。動画の処理フローは、音声抽出、発話区間の検出、無音部分のカット、出力の4つのステップで構成されています。

発話区間を検出するには、機械学習を用いて音声を識別します。iOS 13で導入されたSound Analysisフレームワークを活用し、MLモデルを使った音声分類を行います。

さらに、iOS 15からは新たにビルトインの音声分類器が追加され、識別精度が向上しました。無音カットを実現するために、しきい値や最小持続時間、カット開始・終了の余裕時間などの設定も行うことで、効率的に無音部分をカットする技術が実現されています。



さて、今日は以上の5本の記事をご紹介しました!今日お話しした内容を振り返りますと、リソース管理の重要性からトランザクション管理、システムリプレイスの成功事例、実務に役立つ型、そして無音カット技術まで、幅広いトピックをお届けしましたね。

次回もお会いできるのを楽しみにしています!詳しい内容はショーノートに書いてありますので、ぜひチェックしてください。番組の感想もお待ちしております!それでは、またお会いしましょう!

---

以上がカンペになります。楽しんでいただけたら嬉しいです!

Related episodes

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