タグ

rustに関するtezu35のブックマーク (42)

  • 会計システムのアーキテクチャとモデリング ~会計というドメインを Rust で表現している話~ - CADDi Tech Blog

    はじめに こんにちは。 バックエンドエンジニアの松です。今回は、会計システムの開発を通じて、 CADDi におけるプロダクト開発の様子を紹介します。 2024年3月現在、CADDiでは2つのサービスを提供しています。1つは図面データ活用クラウド「CADDi Drawer」で、もう1つは加工品製造サービス「CADDi Manufacturing」です。 今回、後者の加工品製造サービス「CADDi Manufacturing」向けに、 会計システムを構築しました。これは、生産管理システムや拠点管理システムから取得した各種情報を基にして、会計仕訳データを生成し、経理部門に公開する役割を持ちます。 はじめに 会計システムのアーキテクチャとその狙い 計算処理を少しずつ進める 会計数値の妥当性をダッシュボードに表示する 会計システムのモデリングと最初の開発 仕訳の流れを整理して、ドメインモデル、デー

    会計システムのアーキテクチャとモデリング ~会計というドメインを Rust で表現している話~ - CADDi Tech Blog
    tezu35
    tezu35 2024/03/20
  • Rustのエコシステム等で発音が難しい単語を収集して読み方をつけていく

    筆者はイギリス英語の発音に親しみがあるので、若干アメリカ英語とは発音が違うケースがあるかも。が、まあおおよそ通じるでしょうと思って書きます。なお、筆者が普段英語仕事をしている中で「周りはみんなこう読むかなあ」というレベルの話であって、「こう読まなければならない」ではないのでご注意ください。参考程度にどうぞ。

    Rustのエコシステム等で発音が難しい単語を収集して読み方をつけていく
    tezu35
    tezu35 2023/11/20
  • serdeを理解する –– 基本編 - paild tech blog

    お手伝いの yuki です。 今日は serde の話です。最近仕事で serde を使っていて「これはバグでは??」と思った挙動がありました。具体的には untagged というものなのですが、同僚に「これはバグではなく仕様」というコメントをもらいました。たしかにドキュメントを見てみると注意書き等書いてあり、そういえば serde をなんとなく使っていたなと思いました。というわけで今日は記事を書くことで serde の理解を深めるということをしたいと思います。 なお、この記事はドキュメント以上のことはあまり書かれないと思います。実務的にどう利用しているかという観点から、このドキュメントをもとに記事として再編集することを目指しているためです。serde のドキュメントは下記にあります。 serde.rs 目次 目次 まず、読み方 serde とは何か? 基的な使い方 まとめ まず、

    serdeを理解する –– 基本編 - paild tech blog
    tezu35
    tezu35 2023/10/04
  • Learning Async Rust With Entirely Too Many Web Servers

    I've found that one of the best ways to understand a new concept is to start from the very beginning. Start from a place where it doesn't exist yet and recreate it yourself, learning in the process not just how it works, but why it was designed the way it was. This isn't a practical guide to async, but hopefully some of the background knowledge it covers will help you think about asynchronous prob

    Learning Async Rust With Entirely Too Many Web Servers
    tezu35
    tezu35 2023/08/21
  • Go vs. Rust: A Comparative Analysis of Two Powerful Systems Programming Languages

    tezu35
    tezu35 2023/05/22
  • 新サービス構築にRustを選んで良かったこと、そしてちょっと苦労したこと

    言語を指定せずに求人を出したら、応募が殺到 森氏はまず、「技術選定」という言葉の意味を再確認した。プロジェクトで効率よく、そして効果的に開発実装を進めるために、適切な技術(言語、データベース、クラウド・サービスなど)を選ぶことといった意味になる。しかし森氏は現実には別の条件も付くと言う。 「社内で作った既存のライブラリを使用すること」「社内事情のため、OSはWindows Serverにすること」「開発ベンダーを代えることはできないので、工数を確保できる言語を選ぶこと」など、過去のしがらみや技術的負債に引っ張られてしまうのが現実だ。そして、開発後の保守などを考えれば、それは仕方のないことだともいう。 現実の技術選定はどうしても過去のしがらみや技術的負債に引っ張られてしまう ペイルドは4年前に、新事業で提供するWebサービスのサーバー・サイドの開発言語としてRustを選んだ。Rustを選んだ

    新サービス構築にRustを選んで良かったこと、そしてちょっと苦労したこと
    tezu35
    tezu35 2023/05/15
  • [Rust] Optionのメソッド早見表

    Rust#optiontech Method Some(5) None 動作 is_some() true false Some か? unwrap() 5 ! Some なら値 unwrap_unchecked() 5 ! Some なら値。unsafe が必要 expect("失敗") 5 ! Some なら値。エラー文言必須 unwrap_or(999) 5 999 Some なら値で None なら補完 unwrap_or_else(|| 999) 5 999 〃 unwrap_or_default() 5 0 〃 map_or(999, |e| e * 2) 10 999 Some なら {} で None なら指定値 map_or_else(|| 999, |e| e * 2) 10 999 Some なら {} で None なら {} map(|e| e * 2) Some

    [Rust] Optionのメソッド早見表
    tezu35
    tezu35 2023/04/12
  • tower/guides/building-a-middleware-from-scratch.md at master · tower-rs/tower

    tezu35
    tezu35 2023/04/09
  • axum の State という新しい概念について

    こんにちは,なっふぃです. 凍てつくような厳しい寒さが続く中,個人的にもっとも心躍った発見を共有します. いつも axum という Rust 製のライブラリにお世話になっているのですが,今までは v0.4.8 を使っていました. それで現在(2022-12-19)の最新バージョン v0.6 のドキュメントを眺めていたところ,State という新しい概念を見つけました. 詳しく読んでみると,今までの v0.4.8 で悩まされていたアレヤコレヤが華麗に解決できそうだったので,興奮冷めやらぬままにこの記事を書くことにしました. axum とは axum は Rust で Web サーバを書くためのライブラリで,Tower 系統のライブラリとの互換性が特徴です. また型システムに優れていて,他の Web フレームワークよりも安心してコーディングできます. ここで紹介する State も,axum

    axum の State という新しい概念について
    tezu35
    tezu35 2023/04/07
  • Rustの便利クレート - Qiita

    RustにはCargoという優れたパッケージマネージャーがあるので細かい多数の依存パッケージが問題になることはあまりありません。というより同一のアプリケーションでもパッケージを細かく分割することが推奨されています。ちょっとしたボイラープレートを取り除くような小さなライブラリも大量にあります。これらは積極的に使うべきです。 問題があるとすれば悪意のあるようなパッケージの存在ですが、これらに対処するcargo-auditやcargo-crevというツールもあります。 Rustの依存関係の信頼性を検証する (crev) - Qiita cargo crev でコードレビューをしてみたらバグを見付けた話など - 何とは言わない天然水飲みたさ 記事では 誰かがTwitterやブログで紹介するか誰かが使っているのを見る、あるいは何かのtrendingに載っているのを見るなどしない限り出会わない 日

    Rustの便利クレート - Qiita
    tezu35
    tezu35 2023/04/07
  • GoとRustの言語比較記事を書くのが流行ってるらしい

    コンテキスト 私もGoRustの比較記事書いてバズるやつやりたい — みょん (@myuon_myon) February 27, 2020 仕事GoRustを書いています。いずれもWebのサーバーサイドです。パフォーマンスとかほとほどって感じなので極限までチューニングしたりしません。という前提で読んでください。 Rust/Goはいずれも習得してから2年くらい書いています。書いてる量も多分そんなに変わりません。 Go なんと言っても習得難度が低いので人を選ばず書けるようになります。現状だと仕事で書くなら一番無難な選択肢だなと思っています。一方言語もエコシステムも何もかもかなりクセが強いので、Go Wayにちゃんと従うことが大事だなと思ったりします。 ジェネリクスがないことは高速なコンパイルなど利点もありますがmap,filter等を型ごとにfor文書きまくることになるのでとても手が疲

    tezu35
    tezu35 2023/04/07
  • cargo でインストールしたパッケージを高速にアップデートする - 約束の地

    前提 2020/04/19 時点での話です。 背景 $ cargo install HOGEHOGE を実行しても、一度インストールされたパッケージはアップデートされません。 したがって $ cargo install --force HOGEHOGE のように --force オプションを付けて毎回上書きでインストールする必要がありますが、それはつまり毎回コンパイルするということで、とてつもなく時間がかかります。 結論 cargo-update というパッケージを cargo でインストールして、それ以降は $ cargo install-update --all を実行します。 手順 1. cargo-update のインストール $ cargo install cargo-update Updating crates.io index Downloaded cargo-update

    cargo でインストールしたパッケージを高速にアップデートする - 約束の地
    tezu35
    tezu35 2023/04/04
  • web.crev.dev cargo-crev

    Crev VisionCrev is a scalable, social, distributed Code REView and recommendation system that we desperately need for establishing trust in Open Source code. At its core Crev defines a simple, human-readable data format to communicate trust in code (results of code review) and people (reputation). Fundamental beliefs of Crev design: Trust is about people and community, not automatic scans, arbitra

    tezu35
    tezu35 2023/04/04
  • Rustで強めに型をつけるPart 1: New Type Pattern | κeenのHappy Hacκing Blog

    このエントリはRustその2 Advent Calendar 2018 6日目の記事を時空を遡って書いています。 κeenです。頭痛い。寝れない。寝れないので空いてる日の分を埋めに行きます。 「Rustで強めに型をつける」シリーズではある程度有名なテクニックを紹介しようかと思います。 みんな当たり前のように書くと知らない人はいつまで経っても知る機会が無いですからね。まずはNew Type Patternから。 基 例えばcrates.ioを作るとしましょう。エンティティがいくつかありますね。クレートやユーザなど。 struct Crate { id: u64, authors: Vec<User>, // ... } struct Release { id: u64, crate_id: u64, } struct User { id: u64, // ... }

    Rustで強めに型をつけるPart 1: New Type Pattern | κeenのHappy Hacκing Blog
    tezu35
    tezu35 2023/04/03
  • proc_macro_workshopでRustの手続き的マクロに入門する 前編 - CADDi Tech Blog

    はじめに Rust のマクロ 宣言的マクロ 手続き的マクロ proc_macro_workshop proc_macro_workshop について proc_macro_workshop の進め方 derive(Builder) マクロを作る マクロの処理の流れ マクロを開発する上での Tips dbg!マクロの使用 cargo-expand 01-parse 目標 実装方針 実装 02-create-builder 目標 実装方針 実装 空のbuilder関数をCommand構造体に実装する CommandBuilderを返すようにbuilder関数の実装を変更する 構造体名、フィールド名に応じた Builder 構造体を生成する 03-call-setters 目標 実装方針 実装 04-call-build 目標 実装方針 実装 05-method-chaining 目標 実装方針

    proc_macro_workshopでRustの手続き的マクロに入門する 前編 - CADDi Tech Blog
    tezu35
    tezu35 2023/04/03
  • DDDのパターンをRustで表現する ~ Value Object編 ~ - CADDi Tech Blog

    はじめに こんにちは、キャディでバックエンドエンジニアとして働いているkuwana-kbです。 キャディではバックエンドで Rust を採用しています。また、設計手法としてドメイン駆動設計(以下 DDD)を取り入れています。Rust と DDD 、それぞれの解説記事は今では珍しくありませんが、 Rust と DDD をかけ合わせた記事はまだあまり目にしません。 今回は、 Rust で DDD の実装パターンをどう表現するかをまとめたいと思います。DDD に登場する概念は色々とありますが、今回はそのうちの1つである Value Object に焦点をあてたいと思います。 ※ 記事は、2020/04/28 に開催された「下町.rs」にて kuwana-kb が発表した内容を記事にしたものです。 目次 はじめに 目次 DDD とは DDD の実装パターンを Rust で書いてみた 実装パターン

    DDDのパターンをRustで表現する ~ Value Object編 ~ - CADDi Tech Blog
    tezu35
    tezu35 2023/04/02
  • Rustのmodule完全に理解した。

    あれれ~? おっかしいぞ~? おじちゃんこの記事読んで「モジュール完全に理解した」って言ってなかったっけー? ホンマすいません。また忘れました。 外してはいけないところ ルートファイル Rustにはルートファイルという考え方があります。以下のどちらかがrootになります。 src/main.rs src/lib.rs Cargo.tomlで明示的に設定して変更することも可能ですが、ほとんどの場合上記のデフォルトが使用されることでしょう。 ルートファイルからのmod宣言が必要 ここが一番重要です。Rustでは自分が定義したモジュールはルートファイルからmodキーワードを使って宣言が必要です。 さもないとそのファイルは無いも同然として扱われ、コンパイルすらされません。

    Rustのmodule完全に理解した。
    tezu35
    tezu35 2023/04/01
  • [Rust] モジュールのベストプラクティス

    Rust のモジュールシステムは私の知る中でもトップクラスによくできた仕組みだと思います。特にリファクタリングによってモジュールを再構成するときのやりやすさは他の言語では経験できないものです。例えばそれなりの規模の Python プロジェクトを回帰バグを導入せずにモジュール構造のリファクタリングするのは不可能に近いですが、 Rust ではそのような不安を覚えたためしがありません。 Rust のモジュールシステムがどういうものかは、 The book にも書かれていますし、すでに大量のガイドが書かれていると思います。しかし、どのように使うべきかについては意外なほど情報が少なく感じます。 ベストプラクティスというのもおこがましいですが、数年使ってきて Rust のモジュールシステムを使う上でスムーズに感じる方法をまとめておきたいと思います。 Rust のモジュールシステム 稿の主題はモジュー

    [Rust] モジュールのベストプラクティス
    tezu35
    tezu35 2023/04/01
  • PGOでRustで書かれた広告サーバを早くする

    これはRust Advent Calendar 2022の15日目の記事です。 TL;DR Mapboxの広告サーバにPGOを適用したらスループットが最大8%向上した cargo-pgoすごい便利 BOLTは試したみたけど失敗した PGOとは? PGO(Profile Guided Optimization)は、プログラムを実行してプロファイラが収集した情報を基にインライン化、コードレイアウト、レジスタ割り当てを行う最適化手法です。 英語WikipediaにしかPGOのページ[1]がなかったので意訳してみます。 つまり、PGOはコンパイラがコンパイル・リンクを終えた後のバイナリを動かしてプロファイリングし、最適化、再ビルドによって性能UPしたバイナリを作ることができます。Mozillaは自社のclangバイナリに対してPGOを使ったところ、Firefoxのコンパイル速度が9%とまで向上す

    PGOでRustで書かれた広告サーバを早くする
    tezu35
    tezu35 2023/03/16
  • Rust/AnyhowのTips

    Rust初学者が苦戦するのことの一つにエラー処理があると思います。自分もそうでした。例外のあるプログラミング言語(C++, C#, Java)から来ると、RustのResult、Optionはとっつきにくさ感じますが、使いこなせば超強力な武器になります。 anyhowは2019頃に出てきたライブラリで、筆者の観測範囲[1]では2021年10月時点におけるデファクトのエラー管理crateと言って良いと思う。ちなみにanyhowのコア開発者のDavid Tolnay氏はRust界では著名な開発者で、serde-rsがよく知られています。記事では、anyhowを使いこなすためのTipsを紹介してみます。 なぜanyhowを使うのか なぜanyhowを使うべきなのかは他の記事[2][3]によくまとまっているのでここでは詳細に書きませんが、以下のような理由があります。 他のエラー型からanyhow

    Rust/AnyhowのTips
    tezu35
    tezu35 2023/03/16