ブックマーク / zenn.dev/smartshopping (13)

  • Notionでのスクラム運用の現状報告

    前書き どうも、スマートショッピングでプログラマーをやっている桑島です。 昨年末頃からスクラム運用にNotionを使い始めました。まだまだ試行錯誤中ですが、現在の利用方法などについて社内共有もかねて記事としてまとめたいと思います。 弊チームのスクラムのすすめかたについて 社内でもチームごとにスクラムの進め方がちがうので、私のいるチームが普段どうスクラム開発を行っているかまず説明します。 社内のエンジニアチームですが、いわゆるSaaSのロードマップ開発を行っているチームが3つ、ハードと組み込みソフトウェアを開発しているチームが1つ、あとSREチームが存在しています。 その中で私はマッハ(Mach)というロードマップ開発を行うチームに所属しています。 チームメンバーはエンジニアが3人、PdM、デザイナーとなっており、PdMとデザイナーは他チームとの兼任になっています。 開発の流れですが、基

    Notionでのスクラム運用の現状報告
  • 良いコメントが良い設計を導く

    要旨 コメントを適切に記述することは、特にインターフェイス(クラスやメソッド)において重要です。これにより、直感性が高まり、抽象化が十分に行われているかを確認する手助けになります。そのため、コメントはソフトウェア設計プロセスの重要な一部と位置づけられます。 2種類のコメントタイプ まず、コメントを2種類に分類します。 1️⃣ コードをより詳細化するコメント(lower-level comment) 2️⃣ コードをより抽象化するコメント(higher-level comment) どちらも必要なコメントとしつつ、書では後者のコメントをより重視しています。 1️⃣ コードを詳細化するコメント(lower-level comment) 変数名などに残すタイプのコメントで、宣言した対象の単位や境界値、null許容などの詳細を明示することで、コードの正確性を高めます。こちらのタイプのコメントも必

    良いコメントが良い設計を導く
  • マイクロサービスアーキテクチャへのIntegration Test導入のすゝめ

    こんにちは、バックエンドを中心に開発をしています、野島といいます。 ソフトウェアテスト自動化カンファレンス2023に「マイクロサービスアーキテクチャへのIntegration Test導入のすゝめ」というお題で登壇しました。 そちらで発表した内容を記事にしつつ、当日話しきれなかった内容についても書きます。 発表は下記の内容を話しました。 Integration Testの導入を決意した背景にあった課題 Integration Testの導入/運用での工夫 Integration Testを導入して得られたメリット まとめ 記事では、Integration Testを以下の定義で扱います。 マイクロサービスが依存する外部コンポーネントをモック化せずに行うAPIテスト。 外部コンポーネントとは、具体的にはデータストア、外部サービス、テスト対象が依存するマイクロサービス、などを指します。 テス

    マイクロサービスアーキテクチャへのIntegration Test導入のすゝめ
  • APIの自動テストとモックAPIを駆使してTDD風に開発する

    こんにちは、バックエンドを中心に開発をしている野島と申します。 最近下記の流れで開発をしており、とても開発しやすいと感じているので共有します。 APIの自動テストの作成 モックAPIの作成 APIの処理の実装 TDDは下記の順序で行いますが、それを拡張してAPI開発にあてはめたようなスタイルです。 レッド:動作しない、おそらく最初のうちはコンパイルも通らないテストを1つ書く。 グリーン:そのテストを迅速に動作させる。このステップでは罪を犯してもよい。 リファクタリング:テストを通すために発生した重複をすべて除去する。 テスト駆動開発 p.ⅹより引用。 それでは、内容に入っていきます。 0. 前提 Go言語でAPI開発し、テストツールにはscenarigoを利用するとします。 scenarigoYAML でテストシナリオを記述するAPIテストツールです。簡潔に記載できるので、どのような

    APIの自動テストとモックAPIを駆使してTDD風に開発する
  • 開発生産性を改善するためにやったこと

    こんにちは、株式会社スマートショッピングでエンジニアリングマネージャーを担当しているleafです 先日開催された Findy Team+ Award 2023 にて組織別部門(50人未満の組織規模)とチーム別部門(レビューリードタイムが早い)を受賞することができましたので、Findy Team+ 導入から今までに取り組んだこと、今後の取り組みについてご紹介させていただきます 初めにやったこと 初期に取り組んだことは2点で、正確な現状把握と目標設定です 運用中のリポジトリに計測を導入したため、放置されたPRなどが残っており、開発状況に関係なく数値が上下することがありました そのため、対象リポジトリの放置PRなどを全て棚卸しし、どうしても制御できないPR(自動生成されるものや隣接チームの依存が大きいもの)に関してはタグを設定し除外することでようやく現状が把握できる状態となりました 目標設定に関

    開発生産性を改善するためにやったこと
  • Slack Botによるヘルプページの情報参照:LLMを組み合わせたRAGの実装

    はじめに 株式会社スマートショッピングで SRE をしているbiosugar0です。 先日、2023 年 10 月 23 日に行われた Amazon Bedrock Prototyping Camp というイベントに参加してきました。 そこでは Bedrock の紹介から始まり、Claude のハンズオン、実際にプロダクト反映を目指したプロトタイピングを行うという内容でした。 今回はその中で検証、実装した社内用の Slack bot に弊社ヘルプページを参照させる事例を紹介します。 Retrieval Augmented Generation (RAG) Retrieval Augmented Generation (RAG)は、LLM を用いた処理において、外部のデータベースや文書と連携してより精度の高い回答を生成するためのテクニックです。 GPT-4 のような LLM は、学習に使用さ

    Slack Botによるヘルプページの情報参照:LLMを組み合わせたRAGの実装
  • Go言語による各種データ構造の扱い方(やや競プロer向け)

    こんにちは株式会社スマートショッピング ソフトウェアエンジニアの葛西伸樹です。 今年の1月ごろから競技プログラミングのコンテスト(AtCoder)にGo言語で参加し始めたのですが、使用人口も少なく情報が見つからずなかなか苦戦しましたので現在わかっている範囲でGo言語による各種データ構造の扱い方についてまとめました。 指摘やコメントがあればぜひお願いします! この記事で説明すること/しないこと この記事では競技プログラミングでよく使われるデータ構造のGo言語による扱い方とおおよその実行速度について説明していきます。 今回説明するデータ構造は以下の通りです。 配列 動的配列 キュー/スタック 優先度付きキュー HashMap/HashSet TreeMap/TreeSet また 各種データ構造自体の説明 各種データ構造を使用した具体的なアルゴリズム については説明を省略します。 早速各データ構

    Go言語による各種データ構造の扱い方(やや競プロer向け)
  • DevTools の 5つのTips

    こんにちは、株式会社スマートショッピングでエンジニアをしているrobjamです。 デベロッパーツール(DevTools)には便利な機能が盛り沢山です。今回はその中から一部の機能をご紹介したいと思います。今回は主にChromeのDevToolsを使いますが、他のbrowserでも同じような機能が提供されております。 簡単な例文をローカルで試せるようにrepoを準備しました。 こちらをcloneしてセットアップいただければと思います。 1. タブの並べ替え タブの並び替えは、キラーフィチャーではないかもしれませんが、ご存知の方が少ないかもと思って共有します。タブの並び替えができます!動画をみていただければイメージがつかめると思います。 2. xhrリクエストの再送信 たまにプログラム的にリクエストを送信したい時があります。例えば、体験のrepoにあるcounterのエンドポイントを20回送信し

    DevTools の 5つのTips
  • 【Go】Mapの内部構造とO(1)のメカニズム

    はじめに こんにちは、株式会社スマートショッピング エンジニアのhi6okuniです。 フロントエンドエンジニアとして主にReactを用いた開発に従事してきましたが、この半年間は幸運にも自社のバックエンドをGoで開発する機会に恵まれました。Goらしいコードを書く技術も日々学習中ですが、最近ではデータ構造そのものにも興味が湧いてきました。そこで今回、GoMapの内部構造がどのように作られているのかを深堀りしてみることにしました。主な焦点はruntime/map.gomapassign関数の解析になります。 ざっくり理解 始めにruntime/map.goファイルのMapのコメントを読んでみましょう。データ構造/仕組みが記載されています。 A map is just a hash table. The data is arranged into an array of buckets. E

    【Go】Mapの内部構造とO(1)のメカニズム
    kanda_k
    kanda_k 2023/09/15
  • ネガティブマージンの使いどころ

    はじめに こんにちわ、フロントエンジニアの川上です。今回は自分も初めて見た時に使い方に戸惑ったCSSのネガティブマージンについて記事を書かせていただきます。 ネガティブマージンとは、CSSのmarginにマイナス値を設定することを指します。大抵は正の数をしてしますが、負の数を設定するとどうなるのでしょうか。 特にCSSでは、この書き方でなければ問題が解決できないということは、ほとんどありません。CSSをコーディングする人によって書き方は無数に存在しますし、どの書き方でも見た目は一緒になります。しかし、CSSのプロパティの数やエレメントの数が少ないほど、見やすく理解しやいすいコードになり、それは良いコーディングのひとつであると考えます。 ネガティブマージンも良いコーディングのための書き方と捉えていただけると良いと思います。 ネガティブマージンの使いどころ ネガティブマージンの使いどころとして

    ネガティブマージンの使いどころ
  • Go/Docker/GitHub Actions環境でのDBテスト方法検討

    はじめまして2022/11に入社しましたソフトウェアエンジニアの葛西です。 主にバックエンド開発を担当しています。 社内で競プロ部を立ち上げたのでいつか機会があれば記事にしたいなと思っています! はじめに チーム内で現在のプロジェクトDB(リポジトリ層)単体テストをどういう風にやろうかという話になり、色々悩みながらやり方を検討していったのでその過程と最終的にどのように実装したかを残しておきたいと思い記事にしました。 技術スタック まずDBテスト方法を検討する際の前提条件として現在のプロジェクトで使用している技術スタックを書いておきます。 言語 Go DBマイグレーションツール sql-migrate スキーマ変更用のSQLを用意しておけばコマンドでスキーマ変更などを反映してくれるというツールです。 スキーマ変更用のSQLはこのプロジェクトのディレクトリに直接置いています。 ORMライブラ

    Go/Docker/GitHub Actions環境でのDBテスト方法検討
  • ジョブに対する自動テスト実装のアプローチ

    はじめに こんにちは、バックエンドを中心に開発をしている野島と申します。 最近は、弊社プロダクトであるSmartMat Cloudに対する自動テストの拡充を推し進めています。 SmartMat Cloudは在庫の重量を計測し、閾値を下回った際に自動で発注を行う機能を有するIoTプロダクトです。この記事ではその発注機能、特にジョブに対するテストについて共有します。 発注ジョブに対する自動テストを作成する中で、下記の課題がありました。 どのようにしてジョブを実行するか ジョブの実行結果はどう評価するか これらに対するアプローチを共有します。 どのようにしてジョブを実行するか 発注ジョブはCronで定期的に実行されており、テストをしたい任意のタイミングでどのように発注処理を実行するかが課題でした。 そこで、テスト用のWebAPIを作成し、これを呼び出すことでジョブと同じ処理を実行することにしまし

    ジョブに対する自動テスト実装のアプローチ
  • gqlgenによるGraphQL Subscription実装

    はじめに こんにちは株式会社スマートショッピング ソフトウェアエンジニアの葛西伸樹です。 現在のプロジェクトGraphQLライブラリのgqlgenを使用しているのですが、GraphQLにおけるリアルタイム通信用のコマンドであるSubscriptionに関する知識がなかったので簡単に実装してその内容をまとめました。 この記事で説明しないこと この記事ではSubscriptionの仕組みと実装方法に焦点を当てているので GraphQLの概要 gqlgenによるQuery, Mutationの実装方法 については説明を省略します。 Subscriptionとは SubscriptionはGraphQLのデータ取得操作の一つで、リクエストを投げて結果を取得するQueryとは違いコネクションを接続することでサーバー側からのプッシュ通知によるデータ取得が可能になっています。 Subscription

    gqlgenによるGraphQL Subscription実装
  • 1