サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
買ってよかったもの
techblog.paild.co.jp
お手伝いの@helloyukiです。今日はRust 2024エディションの話についてまとめておきたいと思います。ちなみに注意点ですが、Rust 2024エディションはまだリリースされていません。したがって、この記事の情報(2024年4月ごろ執筆開始)はリリース時点で変更されている可能性があります。 エディションとは Rustには「エディション」(あえて日本語にするなら「版」?)という概念があります。エディションは、後方互換性を保ちながらも、新しいキーワードの追加をはじめとする言語全体に影響を与えるような変更を加えるものです。3年に一度エディションは改定されることになっており、前回は2021年に改定がありました。これまでのエディションとしては、2015、2018、2021の3つが現状あります。 エディションの仕組みは2018年に導入されたものでした。2018年当時、Rustは非同期関連の言語
こんにちは、ペイルドの森です。ペイルドでは創業以来バックエンドの開発言語にRustを採用してきたため、Rustという言語そのものが持つ課題とその解消、クレートの流行り廃りなどの歴史を共に歩んできました。その中でも最も苦しんだものの一つに遅延初期化があります。 その遅延初期化のための機能が、2024年7月リリース予定のRust 1.80.0で安定化されるということで、本機能について、その歴史とともに見ていきます。 目次 遅延初期化とは何か、何のためにするのか パフォーマンス向上のため リソースの効率的な管理のため 循環依存の回避のため Rustと遅延初期化の歴史 lazy_static クレートの登場と、抱えていた課題 マクロ依存性 スレッドセーフでない初期化のリスク 型の制約 初期化のタイミング制御 once_cell クレートの登場によって何が解決されたのか? マクロを使わないシンプルな
お手伝いの@helloyukiです。最近tokioの提供するtracingに関していろいろ調べごとをしました。こうしたクレートを十分に使いこなすにはどうすればいいかを考える上で、自分なりに考えがまとまってきたので記事にしたいと思います。 なお、筆者はRust以外のプログラミング言語でのオブザーバビリティ関連の事項についてはまったくわかりません。Rust以外の事情は考慮しない記事となっている点にご注意ください。 目次 tracingとは オブザーバビリティ、テレメトリ、構造化ログ オブザーバビリティ テレメトリ 構造化ログ tracingを使う 核となる概念を掴む スパン、イベント、サブスクライバを使ってみる 実際のWebアプリケーションで使用する Tips フィールドの設定 構造化ログと非構造化ログの切り替え まとめ 参考 tracingとは tracing is a framework
お手伝いの@helloyukiです。パラメータ化テストをする際使えるrstestというクレートがあるのですが、このクレートが意外にいろいろなことができて感動したので記事にします。実務でどう使っているかもあわせて説明します。 rstestとは rstestがどのような課題を解決するであろうクレートであるかと、もっとも簡単なユースケースを紹介します。 問題意識 テストを書いていると、ある関数に対して与える値をわずかに変えながら、似たようなテストを書くことがあると思います。たとえば閏年を判定するためのテストを素のRustで書こうとすると次のようになるかもしれません。このテストでは、年号と閏年か平年かのペアを持つベクターを定義し、それをforループで回すことで記述量を減らしています。 #[derive(Debug, Eq, PartialEq)] enum Year { // 平年 Common,
こんにちは、お手伝いの大櫛です。 今回はRust + testcontainersのテスト環境、非同期にテストを行う際の注意点や工夫ポイントなどについて紹介していきます。 testcontainersとは testcontainersとは、PostgreSQLのようなDBや、Nginxのようなweb serverなどの環境をコンテナ形式でお手軽に用意してくれるフレームワークです。 testcontainers.com 主にテスト環境をお手軽に作成したいときに有用で、ローカルやCIなどの環境に併せてコンテナ・Dockerセットアップを細かく変える必要がない点が一つメリットに挙げられそうです。 Rustの他にJavaやGo、RubyやNode.jsなど、メジャーなプログラミング言語・実行環境向けのライブラリも用意されているので、コンテナの立ち上げからテスト実施までを開発言語内で完結させることが
Rocketの特徴 Rocketにはこれまで何が起きていたのか v0.5を使う 今回作るアプリケーションのお題 使用するクレートの追加 Routing JSON Fairings: データベース接続 1. コネクションプールを保持するための構造体を用意する 2. 設定ファイルに情報を書く 3. 1で作った構造体をサーバーにattachし、アプリケーションを起動する。 Todoを作成するRoutingを用意する Responder: エラーハンドリング 注意したいこと まとめ 参考サイト お手伝いの @helloyuki です。 最近、asyncに完全対応したRocketがついにリリースされ、v0.5から使えるようになったというニュースが舞い込んできました。RocketはRustのエコシステムをかなり前から支えてきたクレートではあったものの、いくつかの事情によりしばらくなかなか技術選定されな
お手伝いの yuki です。 今日は serde の話です。最近仕事で serde を使っていて「これはバグでは??」と思った挙動がありました。具体的には untagged というものなのですが、同僚に「これはバグではなく仕様」というコメントをもらいました。たしかにドキュメントを見てみると注意書き等書いてあり、そういえば serde をなんとなく使っていたなと思いました。というわけで今日は記事を書くことで serde の理解を深めるということをしたいと思います。 なお、この記事はドキュメント以上のことはあまり書かれないと思います。実務的にどう利用しているかという観点から、このドキュメントをもとに記事として再編集することを目指しているためです。serde のドキュメントは下記にあります。 serde.rs 目次 目次 まず、読み方 serde とは何か? 基本 基本的な使い方 まとめ まず、
こんにちは、ペイルドの大竹です。 今回は外部サーバーと通信を行っているEC2インスタンスをECS on Fargateに移行した話をしたいと思います。 移行する前は以下のような構成となっていました。 背景 EC2インスタンスの運用にて以下の課題がありました。 弊社ではPCI DSS準拠等の理由により、EC2インスタンスへのログインできる人・場所を制限し、ログインには申請が必要となっている パッケージ・カーネルの脆弱性対応等の定期運用が属人化している 制限された場所からのみアクセスが可能なため、急に手動対応が必要になった場合、迅速に対応できない可能性がある PCI DSSの要件でユーザーの管理・パスワードを定期更新などが必要 上記課題を解決するため以下の対応をすることにしました。 ECS on Fargateの採用 脆弱性対応はコンテナイメージを修正するだけなので誰でも対応が可能になる ログ
paild 社でお手伝いをしている yuki です。前回に引き続き Dependency Injection 略して DI の話題を書いていきたいと思います。今回は Rust における DI についていろいろと考えてみました。今回紹介する実装はかなり単純な例を用いたもので、この記事からさらにみなさんのアプリケーションの実装状況に合わせていくつか工夫は必要になるかもしれません。ただ、とっかかりとしては十分なものになっていると思うので、DI でお困りの方はぜひ参考にしてみてください。 今回実装したいアプリケーションのお題について 今回紹介する技法の種別について コンストラクタインジェクション 静的ディスパッチを用いたもの 動的ディスパッチを用いたもの 静的ディスパッチと動的ディスパッチの利点・欠点 shaku (DI コンテナ)を用いたインジェクション shaku の利点・欠点 余談: DI
お手伝いの @helloyuki_ です。今回はポエムです。 今回は、Rust を始めた当時、プログラミング言語は Java しかまともに触ったことがない新米若手 Java エンジニアだった私[*1]が「見たことがなく、使いどころがわからなく理解が難しい」と感じたポイントについて紹介します。対象とするソフトウェアのレイヤーが低いか高いかを問わず、とにかく Rust をやってみて理解するまでに時間がかかり、難しいと感じたポイントについて紹介します。 Rust の「メモリ安全」って、結局何 所有権とライフタイム 参照 スマートポインタ 代数的データ型 関数が第一級である モジュールシステム self 型クラスという側面でのトレイト まとめ 私が Rust をある程度使いこなせるようになるまでの話 「難しい」って何?、の話 Rust の「メモリ安全」って、結局何 そもそも論ですが、Rust が取
こんにちは大櫛です。Travis CIがオープンソースプロジェクトで使いづらくなったり、Azure PipelinesからGitHub Actionsになった途端*1爆発的な流行が生まれたりと、CIサービスにおいてもここ数年で色々な動きがありました。 特に技術記事・ブログのトレンドや企業のリクルート向け資料を見ていると、GitHub Actionsの利用が進んでいるような印象を受けます。 今回はそんなGitHub Actionsについて、Rust projectで使う際に知っておいた方がいいことやactionを紹介していきます。 以下の情報は執筆時点(2023-02-19)のものに基づいています。閲覧時には無効・誤ったものになっている可能性がありますので、必ず最新の情報・状態を確認するようにしてください。 actions-rs(非推奨) まずはじめに、執筆時点では使用を控えた方がいいact
paild 社でお手伝いをしている yuki です。みなさんは Rust で DI をしようと思った際に困ったことはありませんか?この連載では、他のプログラミング言語で利用される DI パターンを参照しながら、Rust でそれを実装するためにはどのような工夫が必要かまでを検討します。中には Rust での実装が難しいパターンも出てくるかもしれません。その際は、なぜ難しいのかまでを検証します。 そこそこの規模のソフトウェアを実装するにあたって、ソフトウェアエンジニアが共通して利用する手法がいくつかあると思います。その中でも DI (Dependency Injection; 依存オブジェクト注入) は最もポピュラーな手法の一つであり、保守運用まできちんと耐えうるソフトウェアの設計をしたいとなったときに、まず真っ先に候補に上がる手法でしょう。 Rust ではこの DI をどのように行えばよいの
このページを最初にブックマークしてみませんか?
『paild tech blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く