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の…

Rust の DI を考える –– Part 2: Rust における DI の手法の整理

paild 社でお手伝いをしている yuki です。前回に引き続き Dependency Injection 略して DI の話題を書いていきたいと思います。今回は Rust における DI についていろいろと考えてみました。今回紹介する実装はかなり単純な例を用いたもので、この記事から…

rustcの脆弱性概説と最新stable追従の重要性

こんにちは、お手伝いの大櫛です。 今回はrustcや標準ライブラリ、Cargoについて発見された脆弱性のいくつかを紹介していきます。 Cargoについての補足ですが、一般的なセットアップツールの一つであるrustupを使う場合、rustcとCargoはRust toolchainとして…

Rust で Datadog にトレースとログを連携する

イントロ はじめまして。ペイルドの中川です。 弊社はサーバーサイドの開発に Rust を採用しています。 運用監視ツールには Datadog を採用しているのですが、Datadog 公式の SDK には Rust が含まれていません。なんてこった。 この記事では Rust で Datado…

Javaエンジニアだった私が当時困ったRustのコンセプト

お手伝いの @helloyuki_ です。今回はポエムです。 今回は、Rust を始めた当時、プログラミング言語は Java しかまともに触ったことがない新米若手 Java エンジニアだった私[*1]が「見たことがなく、使いどころがわからなく理解が難しい」と感じたポイントに…

RustにおけるGitHub Actionsベストプラクティス

こんにちは大櫛です。Travis CIがオープンソースプロジェクトで使いづらくなったり、Azure PipelinesからGitHub Actionsになった途端*1爆発的な流行が生まれたりと、CIサービスにおいてもここ数年で色々な動きがありました。 特に技術記事・ブログのトレンド…

Rust の DI を考える — Part 1: DI とは何だったか

paild 社でお手伝いをしている yuki です。みなさんは Rust で DI をしようと思った際に困ったことはありませんか?この連載では、他のプログラミング言語で利用される DI パターンを参照しながら、Rust でそれを実装するためにはどのような工夫が必要かまで…