ブックマーク / zenn.dev/loglass (55)

  • ログラスのTerraform構成とリファクタリングツールの紹介

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint" の 47週目の記事です! 1年間連続達成まで 残り 6 週 となりました! はじめに ログラスのクラウド基盤でエンジニアをやっているゲイン🐰です。 ログラスではAWS上でアプリケーションを動かすためにIaCとしてTerraformを採用しています。 我々のTerraformの構成を紹介するとともに、現状の課題とリファクタリングの事例を共有できれば幸いです。 ログラスのTerraform構成 ざっくりログラスのアプリケーションにまつわるTerraform構成は以下のようになっています。 基的にはterraform/usecaseディレクトリ配下にmoduleとして定義されています。 中身は比較的にベタでリソースが書かれており、それらをterraform/envディレクトリの各ディレクトリ内で呼

    ログラスのTerraform構成とリファクタリングツールの紹介
    yug1224
    yug1224 2024/07/09
  • Nested Loop/Hash/Sort Merge結合の違いとパフォーマンス比較

    これを見ると、ほとんどの主要なDBMSはこれら3つの結合アルゴリズムをサポートしており、それぞれの特徴や使用ケースに応じて選択されます。それでは、それぞれの結合アルゴリズムについて詳しく見ていきましょう。 Nested Loop Nested Loop(入れ子ループ)結合は、2つのテーブル間の結合を二重ループを使って行う結合方法です。具体的には、外側のループで一つのテーブルを走査し、内側のループでその各行に対応するもう一つのテーブルを走査します。 そのため、最悪の計算量としてはO(M * N)となります。インデックスを貼ることで計算効率が良くなりますがそちらは後ほど紹介します。 この結合方法の特徴は、テーブルのどちらを外側(駆動表)に、どちらを内側(内部表)にするかによってパフォーマンスが大きく変わる点です。外側のテーブルのサイズが小さく、内側のテーブルの結合キーにインデックスをつけること

    Nested Loop/Hash/Sort Merge結合の違いとパフォーマンス比較
    yug1224
    yug1224 2024/07/02
  • DDDにおける認可の扱いとKotlinでの実装パターン

    はじめに アドベントカレンダーで書いた認可のベストプラクティスの記事が結構反応を頂けたのですが、最終的な結論が ユースケースによる という投げやりなまとめになってしまっていたのが少し気になっていました。 そこで、ユースケース別の実装パターンをより詳しく解説しようと思い、Kotlin Fest 2024にプロポーザルを出しました。 が、力及ばずお見送りとなってしまいました。 そんな中、Kotlin Festのスポンサーとしてログラスがブースを出展することになり、採択されなかったプロポーザルを紹介する 「ボツポーザル」 が企画されました。 ブースにお越しいただいた方々にスムーズに説明できるようにプロポーザルの内容を詳しく書き起こしています。 特に、前回の記事で詳しく触れられなかったユースケース別のKotlinでの実装方法や、DDDにおける認可の扱いについて調査したので、それらについて解説してい

    DDDにおける認可の扱いとKotlinでの実装パターン
    yug1224
    yug1224 2024/06/22
  • Datadog でアラート通知の質を向上させるための取り組み

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint" 44 週目の記事です!1 年間連続達成まで残り 9 週となりました! はじめに はじめまして、2024 年 4 月にログラスにジョインしたエンジニアの石畑です。 まだまだドメインやシステムについて学んでいる最中なのですが、その中でアラート監視・運用周りをより良くできそうだったので、試行錯誤したことをまとめたいと思います。 どんな課題があったのか? ログラスではフロントエンドからバックエンド、インフラに至る全てのログ・メトリクスが Datadog に集約され、横断的に分析・監視できる仕組みが整っています。アラートも Datadog でモニタリングを作成し、「Slack に通知 → ローテションのオンコール担当が対応」という体制が作れています。 しかし、歴史的に積み重なったモニタリングが過剰にアラー

    Datadog でアラート通知の質を向上させるための取り組み
    yug1224
    yug1224 2024/06/19
  • 新機能のパフォーマンス課題を解決して安全にリリースするためにやったこと

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint"の43週目の記事です!1年間連続達成まで 残り 10 週 となりました! はじめに こんにちは、株式会社ログラスでエンジニアをしている上田(@ueda1013)です。 ログラスへの入社後、最初に担当した新機能の開発では、ユーザー体験に重大な悪影響を及ぼす可能性のあるパフォーマンス課題に直面しました。 今回の記事では、実際にどういったパフォーマンス課題に直面し、テストやチューニングを経て、どのように安全にリリースすることができたのか、その実践例をご紹介します。 また今回は、パフォーマンス課題を解決するプロセスの全体像や各プロセスの目的にフォーカスするため、開発した機能の実装、パフォーマンス劣化の原因、技術的な解決方法などの詳細は割愛しています。 その機能、安全にリリースできそう? 私がプロジェクト

    新機能のパフォーマンス課題を解決して安全にリリースするためにやったこと
    yug1224
    yug1224 2024/06/11
  • SQLクエリに対するスナップショットテストの実践例

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint"の42週目の記事です! 1年間連続達成まで 残り 11 週 となりました! はじめに こんにちは、株式会社ログラスでエンジニアをしている田中です。 以前、弊社の龍島が書いた記事でUIコンポーネント以外でのスナップショットテストの活用例として、集計や数値計算を行うエンドポイントの結合テストを紹介しました。 今回の記事では、ORMを活用した際のSQLクエリに対するスナップショットテストの実践例をご紹介します。 SQLクエリに対するスナップショットテストの実装例 SQLクエリに対するスナップショットテストの実装例を示すために、簡単なユーザー取得用の関数を取り上げて説明します。以下は、ユーザー情報を取得するためのクラスUserRepositoryの例です。この例では、ORMとしてjOOQを使用しています。

    SQLクエリに対するスナップショットテストの実践例
    yug1224
    yug1224 2024/06/05
  • ログラスの非同期処理基盤の設計と導入

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint" の 40週目の記事です! 1年間連続達成まで 残り 13 週 となりました! こんにちは、ログラスでエンジニアをしております南部です。 唐突ですが、みなさんは「非同期処理」の実装を行っていますか? 非同期処理とは、プログラムの処理を他の処理と並行して行う方法です。これにより、ユーザーの操作がブロックされることなく、バックグラウンドで時間のかかる処理を実行することができます。 Loglassではユーザーの大量のデータを取り扱うこともあり、非同期処理を多く利用しています。 今までは単一のAPIで同期処理・非同期処理どちらも行っていましたが、今回独立したインフラに処理を投げておける非同期処理基盤を導入する活動を行いました。 最近格導入に至りましたので、背景から設計・工夫したことを共有できればと思いま

    ログラスの非同期処理基盤の設計と導入
    yug1224
    yug1224 2024/05/24
  • TestLinkの一部の機能をNotionで再現して、チームでテスト分析、設計を管理する試み

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint" の 39 週目の記事です! 1 年間連続達成まで 残り 14 週 となりました! はじめに こんにちは、世界。 ログラスでQAエンジニアを担当している大平です。 現在、私はスクラムチームに所属してテスト活動をしています。 今回は、スプリント期間内で実施しているテスト分析・設計やテストケースの管理に悩んでいたところを「TestLinkの一部の機能をNotionで再現して改善しよう」と実験した話です。スクラムチームでテスト活動をどう管理するかの参考になれば幸いです。 コンテキストと悩みごと 私が所属するスクラムチームの開発やテストのプロセスはこんな感じでした。 1週間スプリントで実施 バックログはNotionのScrum Board templatesを利用して管理 バックログアイテムは価値の単位で

    TestLinkの一部の機能をNotionで再現して、チームでテスト分析、設計を管理する試み
    yug1224
    yug1224 2024/05/18
  • Yup フォーム・バリデーションの実装におけるデバッグ Tips

    この記事は毎週必ず記事が出るテックブログ "Loglass Tech Blog Sprint" の 38 週目の記事です! 1 年間連続達成まで 残り 15 週 となりました! Web アプリケーションでフォームの入力値バリデーションを実装するとき、Yup は強力で柔軟性が高いツールの一つです。 Yup を利用すると、スキーマベースのアプローチで入力値のバリデーションを簡潔かつ効率的に行うことができます。 しかし、複雑なフォームの実装になるとスキーマ定義の実装時、特に TypeScript を併用している環境では、型エラーや実装の難点に直面することがあります。 今回の記事では、具体的なフォームの実装例を用いながら「複雑なスキーマ定義の実装」で直面する類似の問題をよりスムーズに解決できる Tips を紹介していきます。 紹介する Tips これらが記事で紹介する Tips です。 フォーム

    Yup フォーム・バリデーションの実装におけるデバッグ Tips
    yug1224
    yug1224 2024/05/10
  • パフォーマンス調査時に使えるIntelliJ×Datadogプラグインのご紹介

    ログラスのよしだです。今回は少しニッチな記事を書こうと思います。 ログラスでは開発環境にIntelliJを利用しており、監視サービスではDatadogを利用しています。 Datadog公式からIntelliJのプラグインが公開ベータ版になっていましたので、そちらの紹介をしようと思います。なお、プラグイン公式ページはこちら。 記事の想定読者 IntelliJとDatadogを既に利用している開発者 特にアプリのパフォーマンスチューニングをしたい!そのためにボトルネックを調査したい方 セットアップ方法 読者の方は既にIntelliJとDatadogを利用していると思います。 今回紹介するプラグインを利用するためには公式ページに記載されている通りで Datadog Plugin をインストール プラグインをインストールしたらIDEから「Log in」を実行 これだけです。 プラグイン機能1:C

    パフォーマンス調査時に使えるIntelliJ×Datadogプラグインのご紹介
    yug1224
    yug1224 2024/04/29
  • QAエンジニアから見た、ログラスの品質文化のユニークさを言語化できた

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint" の 35 週目の記事です! 1 年間連続達成まで 残り 18 週 となりました! ログラスのQAのコタツです。今年もよろしくお願いします(2024年スタートからもう3ヶ月過ぎましたが) この前、以下のイベントに登壇させて頂きました。人生初パネルディスカッションでした...わざわざご来場いただいた方、オンラインで見守ってくれた方、設営していただいたウィングアークさん、パネラーの方々、モデレーターの大平さん、ログラスのスタッフなどなど、関係者の皆さん当にありがとうございました! ATN#20 BtoBプロダクトQA集合 Loglass×WingArc1st×テストの街「葛飾」 (2024/02/15 19:00〜) 今回登壇させていただいたイベントはBtoBプロダクトのQAの面白さを語るというテー

    QAエンジニアから見た、ログラスの品質文化のユニークさを言語化できた
    yug1224
    yug1224 2024/04/17
  • LLMエージェントのデザインパターン、Agentic Design Patternsを理解する

    「Agentic Design Patterns」と呼ばれるLLMベースのAIエージェント(以下、LLMエージェント)の4つのデザインパターンについて紹介します。 まず、「Agenticワークフロー」について説明し、続いて4つのデザインパターンを説明します (Part5の前に公開してしまったので、後追いで更新予定です) Agentic Design Patterns Part 1 Agentic Design Patterns Part 2, Reflection Agentic Design Patterns Part 3, Tool Use Agentic Design Patterns Part 4, Planning Agentic Design Patterns Part 5, Multi-Agent Collaboration 動画もあります。 LLMエージェントについての説明

    LLMエージェントのデザインパターン、Agentic Design Patternsを理解する
    yug1224
    yug1224 2024/04/15
  • 列指向、行指向データベースの特性を木構造を用いた集計クエリから理解する

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint" の 34 週目の記事です! 1 年間連続達成まで 残り 19 週 となりました! 株式会社ログラスの龍島(りゅうしま)です。最近はもっぱら新生姜をガリにしてクラフトビールのつまみにする毎日を送っています。今日はデータベースとデータ構造の話です。 この記事でやること データ集計の高速化のため、多くの場合、列指向データベースが選ばれます。列指向が大量のデータ操作を効率的に処理できるためです。行指向のデータベースを利用している状況で、データ集計のパフォーマンス向上のため列指向データベースへの移行をすることはよくある例です。しかし、行指向データベースで有効なデータ構造やクエリが列指向で同様に優れているとは限りません。この記事では、行指向のPostgreSQLと列指向のBigQueryを使って、それぞれに

    列指向、行指向データベースの特性を木構造を用いた集計クエリから理解する
    yug1224
    yug1224 2024/04/12
  • Zendesk GuideのテーマをGitHubで管理する

    株式会社ログラス CRE(Customer Reliability Engineer)の @zaki___yama です。 弊社ではユーザー向けヘルプサイトの構築に Zendesk (https://www.zendesk.co.jp/)の Guide 機能を使用しています。Guide にはテーマのカスタマイズ機能があり、たとえば全体的な色味を自社のブランドカラーと合わせたり、テンプレートをカスタマイズすることでデザインだけでなく機能を拡張することが可能です。 弊社でもこれまで Guide のテーマには何度か軽微なカスタマイズを加えてきましたが、すべて管理画面から直接行っていました。 その結果、どういった経緯で・どういうカスタマイズを加えたのか、という歴史的経緯を紐解くのが難しい状態になっていました。 幸い Guide のテーマは GitHub との連携機能を提供しており、これを機に Gi

    Zendesk GuideのテーマをGitHubで管理する
    yug1224
    yug1224 2024/04/06
  • Hono + OpenAPIでクエリパラメーターはstringにするんだぞ!

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint" の 32 週目の記事です! 1年間連続達成まで 残り 21 週 となりました! ログラスでエンジニアをしている村です。 ログラスではKotlinをメインにサーバーサイドの開発やNext.jsでのフロントエンド開発を生業としています。 今回は個人開発で最近話題のHonoを触ってみたときに、型が合わずにひたすら頭を悩ませていたことがあったので、そのエピソードをご紹介しようと思います。 Honoについて Honoについて言わずもがなかと思いますが、Edge Function向けのとてもイケてる名前をしたフレームワークです。 個人開発のサーバーサイドの環境を何にしようか考えていたときに、このHonoについて知りました。 Edge Function向けなので、軽量で起動が早いだけでなく、Node.jsで

    Hono + OpenAPIでクエリパラメーターはstringにするんだぞ!
    yug1224
    yug1224 2024/03/30
  • エンジニアが企業向けWebブラウザと向き合う: Chrome ポリシーとWebブラウジングにおける挙動の変化

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint" の 31 週目の記事です! 1年間連続達成まで 残り 22 週 となりました! はじめに こんにちは、ログラスでエンジニアをしている浅井(@mixplace)です。開発チームのいちメンバーとして開発活動を行う傍ら、フロントエンド領域、デザインシステム領域に携わっております。 以前、「ファイル選択のダイアログを開くことができない」という相談を受けたことがあり、その事象調査を進めていった際に、企業向けChromeである「Chrome Enterprise」と「Chrome ポリシー」というものが存在することを知りました。 公式ドキュメントによると、Chrome ポリシーと呼ばれる設定を行うことで、利用者のブラウザ設定を、IT管理者がきめ細かく制御できるとのことです。 記事では、企業向けWeb ブラ

    エンジニアが企業向けWebブラウザと向き合う: Chrome ポリシーとWebブラウジングにおける挙動の変化
    yug1224
    yug1224 2024/03/22
  • チーム目標を定めるときにやったワークショップの紹介と実際に定めた目標を運用してみた感想

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint" の 28週目の記事です! 1年間連続達成まで 残り25週 となりました! はじめに チーム目標を設定する際、メンバーの多様な思いや方向性を理解し、一つにまとめあげることは、思っていた以上に難しいなと感じておりました。 皆さんは、チームでの目標設定や振り返りをどのように行っていますか? 私たちはまだ完璧な方法を見つけ出せてはいませんが、チームで様々なワークショップを手探りで試行錯誤しながら、その過程で得た学びや感想を共有していきたいと思います。 前提 ログラスでは、全社的にOKR(目標設定のフレームワーク)を採用しています。このフレームワークを用いて、チームOKRや個人OKRを3ヶ月ごとに策定しています。 OKRの詳細についてはここでは深入りしませんが、大まかには以下の2つの要素から構成されていま

    チーム目標を定めるときにやったワークショップの紹介と実際に定めた目標を運用してみた感想
    yug1224
    yug1224 2024/02/27
  • ArchUnitでKotlinのdata classのcopyメソッドを禁止する

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint"の 25 週目の記事です! 1 年間連続達成まで 残り 28 週 となりました! はじめに ログラスの小林(@mako-makok)です。 ご存知の方も多いと思いますが、Kotlin で data class 宣言をすると、copy というメソッドがそのクラスに対して自動生成されます。 この data class は便利な反面、様々な問題があり、copy メソッドをどうにかして隠したいというニーズがあります。 今回は ArchUnit を使ったアプローチをご紹介します。 Kotlin の data class 宣言で自動生成されるメソッド 改めて、Kotlin には data class という機能があります。 data class で宣言するだけで自動的にequals, hashCode, to

    ArchUnitでKotlinのdata classのcopyメソッドを禁止する
    yug1224
    yug1224 2024/02/18
  • LLM APIを良い感じに呼べればOKな時に便利なlitellm

    この記事は毎週必ず記事がでるテックブログ "Loglass Tech Blog Sprint"の25週目の記事です! 1年間連続達成まで 残り28週 となりました! こんにちは。ログラスのLLMチームでソフトウェアエンジニアをしているr-kagayaです。 LLMを使ったアプリケーション・機能を作りたいとなったらいくつかのライブラリ選択肢があります。代表例はLangChainでしょう。 最近はオブザーバリティツールとしてLangSmithが登場するなど、LLMシステムを構築する上で必要・便利なモジュールの網羅が進み、LLMアプリ開発のデファクトに向かって爆進しています。 プロダクションで使うことに批判的な声もありましたが、最近はver0.1(それでも0.1ですが)に到達。 LangChain、LangChain Community、LangChain Coreに切り出され、LangSmit

    LLM APIを良い感じに呼べればOKな時に便利なlitellm
    yug1224
    yug1224 2024/02/10
  • 数年来の技術的負債を改修した話 - 2種類のORM並列状態からの脱却 -

    はじめに 勝丸と言います。ログラスのエンジニアが毎週記事を発信するLoglass Tech Blog Sprint 2周目に突入しました。前回は「心穏やかにDBバージョンアップ!ロジカルレプリケーションで安全にバージョンを切り戻せるようにした話」という記事を書きました。こちらもよろしくお願いします。普段はログラスの横串組織で活動しています。 この記事では「数年来の技術的負債を改修した話 - 2種類のORM並列状態からの脱却 -」というタイトルで、年末から年始にかけてやっていた作業について共有します。 この記事で得られること リファクタリングのやり方や考え方 リリースへの持っていき方 投資判断のタイミングや負債解消について 経緯 ログラスでは2種類のORMが存在していました。創業時にORMとしてExposedを採用したのですが、後に一部機能が足りないことが発覚し、別のORMを利用し始めました

    数年来の技術的負債を改修した話 - 2種類のORM並列状態からの脱却 -
    yug1224
    yug1224 2024/01/27