paild tech blog

法人カードのクラウド型発行・管理サービスpaild

Rust 2024 Editionがやってくる!

お手伝いの@helloyukiです。今日はRust 2024エディションの話についてまとめておきたいと思います。ちなみに注意点ですが、Rust 2024エディションはまだリリースされていません。したがって、この記事の情報(2024年4月ごろ執筆開始)はリリース時点で変更さ…

待望のLazyCell/LazyLock安定化間近!

こんにちは、ペイルドの森です。ペイルドでは創業以来バックエンドの開発言語にRustを採用してきたため、Rustという言語そのものが持つ課題とその解消、クレートの流行り廃りなどの歴史を共に歩んできました。その中でも最も苦しんだものの一つに遅延初期化…

Rustでオブザーバビリティを実現するには

お手伝いの@helloyukiです。最近tokioの提供するtracingに関していろいろ調べごとをしました。こうしたクレートを十分に使いこなすにはどうすればいいかを考える上で、自分なりに考えがまとまってきたので記事にしたいと思います。 なお、筆者はRust以外のプ…

rstestを使いこなす

お手伝いの@helloyukiです。パラメータ化テストをする際使えるrstestというクレートがあるのですが、このクレートが意外にいろいろなことができて感動したので記事にします。実務でどう使っているかもあわせて説明します。 rstestとは rstestがどのような課…

クリアリング処理を再構築した

こんにちは。ペイルドの id:pranc1ngpegasus です。 今回は外部サービスから連携されるクリアリングファイルを仕様書に沿ってパースし、内部サービスに取り込む処理を再構築したので紹介します。 Before 図1: これまでのシステムの全体像 上記にこれまで稼動…

Rust + testcontainersでのテスト環境構築とハマりどころ

こんにちは、お手伝いの大櫛です。 今回はRust + testcontainersのテスト環境、非同期にテストを行う際の注意点や工夫ポイントなどについて紹介していきます。 testcontainersとは testcontainersとは、PostgreSQLのようなDBや、Nginxのようなweb serverなど…

async対応版Rocket、v0.5を試してみる

Rocketの特徴 Rocketにはこれまで何が起きていたのか v0.5を使う 今回作るアプリケーションのお題 使用するクレートの追加 Routing JSON Fairings: データベース接続 1. コネクションプールを保持するための構造体を用意する 2. 設定ファイルに情報を書く 3.…

OpenAPIドキュメントを基にRust API clientを自動生成できるProgenitorを試す

こんにちは、お手伝いの大櫛です。 RustにもOpenAPI関連のツールやライブラリなどが増えてきており、開発需要の高まりを感じます。 Rustに限った話ではないですが、OpenAPIとのインテグレーションパターンについては、サーバーのアプリケーションコードから…

serdeを理解する –– アトリビュート理解編

前回はserdeの基本を理解することができましたので、次はserdeに登場するアトリビュートのうち、実務上よく利用するものを紹介したいと思います。具体的にはいくつかのアトリビュートと、実務上はenumのシリアライズ・デシリアライズで毎回迷いごとが発生し…

Rustで快適にテストしたいときに読む記事

こんにちは、お手伝いの大櫛です。 今回はRustのテスト体験を快適にするテスト系ライブラリ・ユーティリティをいくつか紹介します。 記事中、例としてコード片を示す箇所があります。今回はRust 1.73.0を用いていますが、今後のリリースにより動作が変わって…

serdeを理解する –– 基本編

お手伝いの yuki です。 今日は serde の話です。最近仕事で serde を使っていて「これはバグでは??」と思った挙動がありました。具体的には untagged というものなのですが、同僚に「これはバグではなく仕様」というコメントをもらいました。たしかにドキ…

「IPホワイトリストな外部サーバー」と通信してる「EC2」を「ECS on Fargate」に移行するためにプライベートIPアドレスを固定した話

こんにちは、ペイルドの大竹です。 今回は外部サーバーと通信を行っているEC2インスタンスをECS on Fargateに移行した話をしたいと思います。 移行する前は以下のような構成となっていました。 背景 EC2インスタンスの運用にて以下の課題がありました。 弊社…

Nutype を使った、NewType パターンを用いたバリデーションチェック

お手伝いの yuki です。前回に引き続き、小ネタを紹介します。 みなさんは Rust でのバリデーションチェック時、どうしていますか? まず考えられるのは自前実装です。手でバリデーションチェックをひたすら書く方法がまず考えられると思います。あるいは、…

claim クレートを利用してテスト時のコードをスッキリさせる

お手伝いの yuki です。今日はクレートを使った小ネタです。claim という、アサーション関連の便利なマクロを提供するクレートがあります。意外と知られていない気もするので紹介しておこうと思います。 claim assert_matches! や Result の結果を判定するの…

Rust 外部crates脆弱性概説と便利ツール

こんにちは、お手伝いの大櫛です。 今回は、rustc/Cargoまわりの脆弱性紹介に引き続き、community crates関連の脆弱性を紹介していきます。 rustcと違い、ある脆弱性一つがRustユーザー全体に影響を与えるものではないため、比較的広くつかわれているcrateの…