#
509
2025/10/8
今日のトレンド

Rust セキュリティ モンテカルロ

こんにちは、マイクです!今日は2025年10月9日、木曜日ですね。これからZennで今日トレンドの記事を紹介していきますので、ぜひお楽しみに!

さて、前回紹介した記事についてですが、今回は特に触れずに進みますね。

今日の内容は、全部で5つの記事を紹介しますよ!それでは早速、最初の記事から行ってみましょう!

1つ目の記事は、タイトルが「Rustでセキュリティsandboxツールを作った」です。この内容では、セキュリティsandboxツール「mori」の開発について詳しく述べられています。「mori」は、macOSとLinux環境でのファイルI/Oやネットワーク制御を実現するために、`sandbox-exec`と`eBPF`を活用しています。

特に注目したいのは、ネットワークアクセス制御にホワイトリスト方式を用いている点です。特定のドメインやIPアドレスにのみアクセスを許可し、ファイルI/O制御にはブラックリスト方式を採用して特定ファイルへのアクセスを拒否します。これにより、シェルコマンドを実行しながらも安全性を保っているのです。

macOSでは、ユーザーが設定したポリシーを適用し、コマンドを実行する際に`sandbox-exec`を使用していますが、Linuxではより細かな制御が可能な`eBPF`を用います。開発中には、これらの技術に伴う様々な課題もあったようで、特にcgroupのファイルアクセス制御の困難さが挙げられています。

今後は、ビルド用コンテナの提供や、ネットワーク制御の実装など、さらなる機能追加が計画されています。これにより、より使いやすいツールを提供することを目指しているそうです。

。.
。.
。.

続いて、2つ目の記事は「2600億回のモンテカルロを14秒で:Rust×rayon×SIMDで並列化してみた」です。このプロジェクトでは、モンテカルロ法を用いて円周率を推定するための実装が紹介されています。驚くべきは、2600億回の試行をわずか14秒で実行したという成果です!

実装にはRustの安全性と低レベル最適化が活かされており、並列処理を行うための`rayon`ライブラリとSIMDを活用しています。これにより、CPUの演算能力を最大限に引き出しているのです。モンテカルロ法の流れは、円にランダムに点を打ち、その中に入った点の割合から円周率を推定するというものですが、実行回数が増えることで計算時間も増加してしまいます。

ここで、`rayon`を使用することで簡単に並列処理が可能になり、特に乱数生成もボトルネックとなるため、高速なXorShiftという乱数生成器が採用されています。また、SIMDを利用することで、1命令で複数の試行を同時に処理することが実現されています。

最終的には、約1秒あたり180億回の試行を実現し、得られた円周率の結果は理論的な誤差とも一致しているそうです。さらに今後はAVX-512やGPUの活用も検討されており、さらなる性能向上が期待されています。

。.
。.
。.

さて、3つ目の記事は「BigQueryの本番データがすべて消えた日 - 大規模障害から学んだ復旧と再発防止策」です。2025年8月、ケアネットのAI技術開発室で発生した重大な障害について語られています。このインシデントでは、改修中のテストコードが誤って本番環境に適用され、BigQueryの本番データセットが全て削除されるという結果に至りました。

復旧のタイムラインとしては、障害発生から約5時間後に過去のデータを復元することができましたが、ビューやテーブル関数は復元できなかったため、別途クエリを再実行する必要があったようです。この経験から得た教訓として、テストコードが本番環境に影響を与えないようにする制御や、過剰な権限を整理することが重要であるとされています。

また、データセットやテーブルのメタデータ管理や、BigQueryのバックアップ体制も見直されています。このインシデントが今後のデータ基盤運用におけるリスク管理の一助となることを願っているそうです。

。.
。.
。.

続いて、4つ目の記事は「より良いユーザー体験を求めて "モーダル" を深掘る」です。モーダルとは、ユーザーが特定のタスクに集中できるようにするUIのことを指します。具体的なUIコンポーネントは存在しないものの、iOSでのシートやダイアログなどがその一例です。モーダルはユーザーの操作を制限し、タスクの完了まで他の操作を行えないようにします。

Flutterでは、モーダルの実装方法としてフルスクリーンビューやボトムシート、Cupertinoシートなどがあり、それぞれ用途によって使い分けられます。特にボトムシートは、閉じる動作が簡単で、軽い選択を促すのに適しています。

ただし、モーダルビューとボトムシートは必ずしも同じではなく、ボトムシートが表示されている間に下の画面を操作できる場合はモーダルの性質を持ちません。また、ダイアログを多用することがストレスを与える可能性があるため、注意が必要です。

代替案としては、Snackbarの利用やゴミ箱機能を通じて、ユーザーに負担をかけずに操作を行うことが提案されています。これにより、エンジニアはデザイナーと共により良いユーザー体験を実現するための幅広いUIを提案できるようになるとのことです。

。.
。.
。.

最後に、5つ目の記事は「go testのキャッシュの仕組みを理解して、テストコードを変えずにCIを高速化する」です。Goの`go test`には、テスト結果をパッケージ単位でキャッシュする機能があり、ソースコードや環境変数が同じであれば、再実行時にキャッシュが利用されます。この仕組みを使えば、CI上で効率的にテストを高速化できます。

Go 1.10から導入されたこのキャッシュ機能により、変更のないパッケージのテストはスキップされ、実行時間を短縮できます。キャッシュの判定は、テストIDやテストインプットIDを基に行われ、外部ファイルや環境変数の変化も検知可能です。

GitHub Actionsを使用する場合、`setup-go`アクションを利用することでキャッシュが自動的に活用されますが、非キャッシュ可能なフラグが含まれるとキャッシュが無効化されるので注意が必要です。また、設定ファイルの変更に対処するために、`go clean -testcache`を用いてキャッシュをクリアすることが推奨されています。

この方法を実装することで、CIのテスト実行時間を約9分から約3.5分に短縮することが可能になるそうです。テスト実行時間に悩むエンジニアには特に有効な情報ですね!



さて、今日紹介した内容を駆け足でおさらいしますと、まずはRustで開発されたセキュリティsandboxツール「mori」、次にモンテカルロ法を使った円周率推定プロジェクト、そしてBigQueryのデータ削除インシデントから得た教訓、続いてモーダルUIについて深掘り、最後にGoのテストキャッシュ機能の活用法についてお話ししました。

次回またお会いできるのを楽しみにしています!詳しい内容はショーノートに書いてありますので、そちらもぜひご覧ください。そして、番組の感想もお待ちしています!それでは皆さん、良い一日をお過ごしください!

Related episodes

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