タグ

tjmtmmnkのブックマーク (1,130)

  • The Amazon Builders' Library

    【毎月更新・日AWS エンジニアがクラウド解説】 初心者向け解説、最新のクラウドネイティブな開発手法・利用シーン別ハンズオンを学ぶ »

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

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

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

    AWSクラウドデザインパターンとは? AWSクラウドデザインパターン (AWS Cloud Design Pattern, 略してCDPと呼ぶ)とは、AWSクラウドを使ったシステムアーキテクチャ設計を行う際に発生する、典型的な問題とそれに対する解決策・設計方法を、分かりやすく分類して、ノウハウとして利用できるように整理したものである。 これまで多くのクラウドアーキテクト達が発見してきた、もしくは編み出しきた設計・運用のノウハウのうち、クラウド上で利用が可能なものをクラウドデザインのパターンという形式で一覧化し、暗黙知から形式知に変換したものであるといえる。 パターンの中には、クラウドでなくても実現できるもの、今まででも実現されていたものも含まれているが、クラウド上でも今まで通りのアーキテクチャが実現でき、かつクラウドを利用する事で、より安価にそしてより容易に実現できるものは、CDPとして収

  • The Hidden Performance Cost of NodeJS and GraphQL

    NodeJS and GraphQL are popular technologies for building web applications, but in my experience, they come with certain scaling and performance tradeoffs to be aware of. tl;dr: GraphQL's modular structure generally leads to code that instantiates excessive promises, which degrades request performance. Benchmarks show a 2-3x latency increase. Thanks for reading Software at Scale! Subscribe for free

    The Hidden Performance Cost of NodeJS and GraphQL
  • GraphQL Code Generator(graphql-codegen) おすすめ設定 for TypeScript

    GraphQL Code Generator v3 以降で標準となった Client preset では設定が大きく異なります。 この記事は Client preset を使わない前提の内容になっているため、注意が必要です。 Client preset 用の設定は別記事で紹介します。 全体 生成物をフォーマッタにかける graphql-codegen には Lifecycle Hooks という仕組みがあり、いくつかの用意された hook ポイントで任意のコマンドを実行できる。 これを使って生成されたコードを Prettier 等のフォーマッタに通しておくのがおすすめ。 基 DO NOT EDIT とはいえ、コードジャンプしてきて生成された型を読みたいケースはよくある。 そういうときのために、人間が見やすいように改行しておいてもらうといい。 typescript plugin, type

    GraphQL Code Generator(graphql-codegen) おすすめ設定 for TypeScript
  • TypeScriptとGraphQLで実現する型安全なAPI実装

    この記事はTSKaigi2024での以下の私の発表内容を書き下ろしたものです。 なぜAPIに型をつけたいのか 現代のWebのシステム開発において、クライアント・サーバーともに型のある言語で開発されることが増えてきました。静的な型検査はコードの堅牢性やよりよいメンテナンス性の向上をもたらします。 プログラミング内部だけで型検査をするだけでも十分メリットはありますが、外部I/Oに対する型付けが不十分だとそのメリットを最大限に発揮してるとは言えません。外部I/Oとは、例えばWebフロントエンドだとLocalStorageやDOMからの入力値、それからネットワーク通信(今回はこれをAPIと呼びます[1])などですね。サーバー側でいうとAPIからの入力・レスポンスやデータベースへの読み書きが該当します。 個人的な経験から言うと、Webシステムの開発におけるエラーの多くはAPIやデータベースとのやり取

    TypeScriptとGraphQLで実現する型安全なAPI実装
  • Branded Type について理解する - Qiita

    目次 背景 既存の問題 Branded Type とは ユースケース 実践 最後に 1. 背景 先日あったSansan様のセミナーでBrandedTypeについて初めて知った為です。 こちらがプレゼンに使われていた資料です。 元ネタはこちらです。 次節から元ネタの方を和訳して説明します。 2. 既存の問題 以下をご覧ください。 function print(age:number,height:number) { console.log('ageを表示:',age); console.log('heightを表示:',height); } const age = 25; const height = 175; print(height,age); 引数の順番を間違えてしまいましたが、どちらも同じstring型を受けっているのでTypescriptではエラーにはなりません。 しかし、意図した処

    Branded Type について理解する - Qiita
  • 【永久保存版レシピ】町中華のチャーハンを完全再現!習得せよ、7つの調理の鉄則!|Cooking Maniac

    中華のチャーハンって、当ーーーーーーに美味しいですよね!!! 人類料理史上、最高の発明と言っても過言ではないでしょう。 そんな最高の料理である町中華のチャーハンを、家で作れるようになったら一生モノの財産を得たも同然。 今回ご紹介するコツと理論を押さえれば、あなたも確実に町中華のチャーハンを再現できます! そして、コチラが僕が約20年間研究し続けて完成した「再現度100%町中華チャーハン」! 具材もゴロゴロで、かなりの再現度の高さだと思いませんか? このチャーハンの作り方について、理論とレシピを解説していきます! ちなみに今回の記事はアドビ社のPR企画「みんなの資料作成」に参加して書いています! 僕のとっておきの資料(レシピ)を記事の最後にPDFでご用意しましたので、ぜひダウンロードして、町中華チャーハンを自宅で完全再現してみてください! 著者プロフィール 超料理マニアな料理人。 作る・

  • 実稼働環境における Express の使用におけるパフォーマンスに関するベスト・プラクティス

    StrongLoop / IBMによって提供されるこの翻訳. 書は、英語の資料と比較すると古くなっている可能性があります。最新の更新については、英語版の資料を参照してください。 実稼働環境におけるベスト・プラクティス: パフォーマンスと信頼性 概説 この記事では、実稼働環境にデプロイされた Express アプリケーションのパフォーマンスと信頼性に関するベスト・プラクティスについて説明します。 このトピックは、従来型の開発と運用の両方にわたる「DevOps」の世界に明確に分類されます。したがって、情報は次の 2 つの部分に分かれています。 コードで実行する処理 (開発部分) gzip 圧縮を使用する 同期関数を使用しない ロギングを正確に実行する 例外を適切に処理する 環境/セットアップで実行する処理 (運用部分) Set NODE_ENV to “production” Ensure

  • なぜバックエンドTypeScriptか?技術選定背景と実践例を紹介します - KAKEHASHI Tech Blog

    カケハシの医薬品発注管理最適化領域の新規事業の開発を担当している木村です。今回は新しいサービスを構築する上で行った技術選定と実践方法の話をします。 技術選定に関しては、インフラ関連やライブラリなど選定した技術は多岐にわたるのですが、その中でも「なぜバックエンドでTypeScriptを導入したか」を中心にお話します。2つのチームでの技術選定に関わり、どちらもTypeScriptを導入するに至りました。2022/03時点では社内の5つのサービスでバックエンドTypeScriptが採用されていることを観測しています。 実践方法に関しては、技術選定の過程で明らかになったシステム特性に対するアプローチを紹介します。 全社的な技術選定方法 カケハシではビジネスドメインで開発チームを分割し、開発チームが自走化できるように組織がデザインされています。技術選定についても開発チームに裁量があります。 技術選定

    なぜバックエンドTypeScriptか?技術選定背景と実践例を紹介します - KAKEHASHI Tech Blog
  • 改めて見直すGoの特徴

    極力Goならではな特徴をいくつか挙げていく。 依存解決が必要最低限で互換性を考慮しつつ決定的 モジュール単位で依存をダウンロード。コンパイル対象はサブパッケージ単位。 依存の明示方法はコードに埋め込まれ、かつ未参照のインポートはコンパイルエラー。 つまり動作するコードのすべては正確な依存ツリーが明示されていて余計な依存は引き込まれない。 そして持ち前のコンパイルの速さを含め、相当深い依存ツリーでも依存解決にかかる時間は既知の処理系の中でも最速レベル。(唯一勝てるのはプリビルドバイナリが配布されている場合くらい) また、コンパイルやリンクに必要な処理量そのものが比較的少ないため、開発環境負荷も小さい。 かなり巨大なプロジェクトであってもメモリ8GBで困るようなことが無い。つまり、CI環境の維持にもローコストで済む。 ライブラリの提供側では後方互換性が破壊されるような変更はV1->V2というよ

    改めて見直すGoの特徴
    tjmtmmnk
    tjmtmmnk 2024/05/12
  • Pagination with Relative Cursors

    Omitted from the table are tests with the 1,000,000th offset and above since they consistently timed out. Not only do queries take a long time when a large offset is used, but there’s also a limited number of queries that can be run concurrently. If too many requests with large page numbers are made at the same time, they can pile up faster than they can be executed. This leads to unrelated, quick

    Pagination with Relative Cursors
  • TypeScript 関数型スタイルでバックエンド開発のリアル

    TSKaigi 2024 のスライドです

    TypeScript 関数型スタイルでバックエンド開発のリアル
  • モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み|ハイクラス転職・求人情報サイト AMBI(アンビ)

    モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み 大規模なソフトウェア開発においてモノリシックかマイクロサービスかというアーキテクチャの議論がありますが、近年は第3の選択肢としてモジュラモノリスが話題になっています。いったんマイクロサービス化に舵を切りながら現在はモジュラモノリスに取り組むアソビューの考え方や進め方について、VPoEの兼平大資(disc99)さんによる寄稿です。 アソビューでは、現在の事業状況にマッチしていることや過去の経緯から、モジュラモノリスを中心としたアーキテクチャを採用しています。 今回は、なぜその選択をし、どのように実現しているかを紹介します。 記事の前半では、アソビューが提供する事業や、アーキテクチャに対する考え方、開発組織の歩みなどを説明します。 中盤以降は、アソビューにおけるモジュラモノリスへの取

    モジュラモノリスに移行する理由 ─ マイクロサービスの自律性とモノリスの一貫性を両立させるアソビューの取り組み|ハイクラス転職・求人情報サイト AMBI(アンビ)
  • 【Go 言語】interface のポインタからメソッドコールできないのはなぜ? - Qiita

    結論 簡潔に言うと「interface を指すポインタは interface を実装した構造体のポインタのポインタになるから」です。 これだけではよくわからないので詳しくみていきましょう。 interface のポインタからメソッドコールができないとは? interface の Mammal とそれを実装した Human という構造体を考えましょう。 type Mammal interface { GetAge() int } type Human struct { Age int } func (h *Human) GetAge() int { return h.Age }

    【Go 言語】interface のポインタからメソッドコールできないのはなぜ? - Qiita
    tjmtmmnk
    tjmtmmnk 2024/05/06
  • Goにおけるテスト用DB分離のテクニック

    この記事は Go言語 Advent Calendar 2023 4日目の記事です。 導入 GoMySQLやPostgreSQLのようなリレーショナルデータベースをDocker上で立ち上げテストに利用する手法は一般的です。この場合、異なるパッケージからの並行テスト実行によりテストデータの追加やクリーンアップ、データベース操作が重複することがあります。これにより、テストの数が増えるにつれ操作が競合したり、他のテストケースによる影響で期待される結果が得られないことがあるためFlakyテスト(不安定なテスト)の問題が生じます。 この記事では、テスト中のデータベース操作に関連する問題に対処する方法として TestMain 関数を使用し、テスト用データベースをパッケージごとに分離するアプローチについて紹介します。この方法は、テストの信頼性を向上させると同時にデータベース操作の競合を避けるための効果的

    Goにおけるテスト用DB分離のテクニック
    tjmtmmnk
    tjmtmmnk 2024/05/04
  • GoにはなぜXという機能がないのか? 〜テスト関数ごとの暗黙的な初期化処理の実現を考察する | gihyo.jp

    つきなみGo GoにはなぜXという機能がないのか? 〜テスト関数ごとの暗黙的な初期化処理の実現を考察する はじめに 筆者はGoだけではなく、Scalaなど他言語を扱った経験もあり、しばしばGoには他の言語にあるXという機能がなぜないのだろう?と考えることがあります。 たとえば、テスト関数ごとに暗黙的に呼ばれる初期化関数の定義があります。データベースに対するDrop・Create・Insertなどの処理をテストごとに実行したい場合に定義できると便利でしょう。同じ処理を都度書いているとテストケースが増えてきた時にメンテナンス性が下がってしまったり、初期化処理を追加し忘れてしまう恐れなどもあります。 しかし、Goにはこのようなテスト関数ごとに暗黙的に実行される初期化処理を定義できません。Goが他言語に劣っているようにもみえますが、当にそうなのでしょうか? 公式のFAQにもあるように、とある機能

    GoにはなぜXという機能がないのか? 〜テスト関数ごとの暗黙的な初期化処理の実現を考察する | gihyo.jp
    tjmtmmnk
    tjmtmmnk 2024/05/04
  • Practical Persistence in Go: Organising Database Access

    A few weeks ago someone created a thread on Reddit asking: In the context of a web application what would you consider a Go best practice for accessing the database in (HTTP or other) handlers? The replies it got were a genuinely interesting mix. Some people advised using dependency injection, a few favoured the simplicity of using global variables, others suggested putting the connection pool poi

    tjmtmmnk
    tjmtmmnk 2024/05/03
  • SQSを用いたクレジットカード決済の非同期化 - ZOZO TECH BLOG

    こんにちは、カート決済部カート決済サービスブロックの林です。普段はZOZOTOWN内のカートや決済の機能開発、保守運用、リプレイスを担当しています。 弊社ではカートや決済機能のリプレイスを進めており、これまでにカート投入のキャパシティコントロールや在庫データのクラウドリフトを実現しています。 techblog.zozo.com techblog.zozo.com 記事では新たにクレジットカード決済処理を非同期化したリプレイス事例を紹介します。 はじめに 背景・課題 非同期化のシステム構成 パターン1 - 完全非同期化パターン パターン2 - 非同期・同期切り替えパターン パターン3 - ポーリングパターン システム構成の決定 メッセージングサービスの選定 効果 今後の展望 まとめ さいごに はじめに 章では、非同期化前のZOZOTOWNのクレジットカード決済を用いた注文処理の流れを説明

    SQSを用いたクレジットカード決済の非同期化 - ZOZO TECH BLOG
  • Go言語の埋め込みについて4つのポイントでまとめました - Qiita

    インターフェースに構造体は埋め込めません。インターフェースにはシグネチャを与えるものなので具象な構造体を埋め込むのはNGですね。 逆に他3つは可能です。それぞれの使い方を下記のサンプルコードで確認しました。 package main import ( "fmt" ) type Flyer interface { Fly() string } type Runner interface { Run() string } // ① インターフェースにインターフェースを埋め込む type FlyingRunner interface { Flyer Runner } // ② 構造体にインターフェースを埋め込む type ToriJin struct { // 鳥人 FlyingRunner } // ③ 構造体に構造体を埋め込む type ShinJinrui struct { // 新人類

    Go言語の埋め込みについて4つのポイントでまとめました - Qiita
    tjmtmmnk
    tjmtmmnk 2024/04/30