サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
おみそ汁
buildersbox.corp-sansan.com
こんにちは、Sansan Engineering Unit の渡邉です🦐 私たちのチームではTypeScriptで開発しており、テストはJestを用いて書いています。ある日からテストが結構な頻度で落ちてしまうように(FLAKY *1に)なっていました...。 そこで、テストがFLAKYになっている原因を深掘り調査したところ、Jestのメモリまわりについて解像度が高まったので、備忘録代わりに残します。 結論 Jestにおけるタイムアウトエラーとメモリエラー(Out Of Memory)を次のオプションを設定し、防止できました。 `jest.config.js` ... testTimeout: 30000, // タイムアウト時間を延長 workerIdleMemoryLimit: '1024MB', // ワーカーが使用できるメモリ上限を制限 maxWorkers: 4, // テストを
Digitization部 Bill One Entry*1グループの秋山です。 はじめに Domain Modeling Made Functionalというスゴ本 補講:Make Illegal States Unrepresentable バックエンドの処理を抽象化する 手続き型プログラミングの典型例 課題1:制約のないエラーハンドリング 課題2:低い可読性 課題3:エラーハンドリングの低い網羅性 Railway Oriented Programming TypeScriptで型安全にエラーハンドリングする ステップ1:サブ関数の出力はResult型で表現する ステップ2:サブ関数にResult型を入力できるようにする ステップ3:サブ関数を連結する ステップ4:網羅的にエラーハンドリングする おわりに 付録 TypeScriptの全文サンプル はじめに エラーハンドリングは重要な処
はじめに こんにちは! 技術本部 Bill One Engineering Unit(以下、Bill One EU)の笹島です。 IaC推進チーム(横串チームの1つ)として、CI環境でのTerraform Planの自動化に取り組んできました。 横串チームとは、Bill One EU内の各グループの垣根のない横断チームであり、Bill Oneで抱えている課題を解決するために有志で集まったメンバーによって構成されています。 IaC推進チームとは、文字通りインフラのコード化を推進するチームです。 本記事では、CI環境でセキュアなTerraform Plan自動実行を実現するにあたって直面した課題とその解決策について共有します。 特に、モノレポ環境での複数プロダクト・環境の管理における自動化の課題についても紹介します。 目次 はじめに 目次 前提 ディレクトリ構成とその役割 Workload I
こんにちは!技術本部 Mobile ApplicationグループでiOSエンジニアをしている長﨑です。 Sansanアプリでは自分たちで定義したSwift Macrosを開発に導入し始めています。Swift Macrosについての勉強会も社内で実施しており、せっかくなので勉強会のコンテンツを記事にしてみます。 この記事では、Swift Macrosを開発するに当たって必要となる基礎知識からマクロの実装方法、CocoaPodsを使ったプロジェクトへの組み込み方法について、解説していきます。 Swift Macrosについての基礎知識 Swift Macrosって何? Swift Macrosの種類 Swift Macrosには独立したモジュールが必要 Swift Macrosを開発してみる Swift Macros Packageを作る Swift Macros Packageの構成 マク
最近キーボードで文字を打つのが面倒になってきている技術本部 Eight Engineering Unitの斉藤です。 キーボードは既に100年以上使われ続けているみたいですね。そろそろ新しい入力の方法ができてもよさそうです。 例えば、頭で考えていることが文字に起こせたら、AIに任せるよりももっと便利だと思います。 前置きはさておき、Sansanではちょっと前にエンジニアの生産性と生産量の最大 化が話題になっていました。このブログをご覧の方ならご存知の方も多いのではないでしょうか。 私はこれまで何度か転職をしていますが、どの職場でも例外なくこの話題が挙がりました。 チームとして、あるいは事業としてどう最大化するかが基本前提となるのですが、私が今回話したいのは個人としての生産性の最大化についてです。 私は個人の生産性を上げることもチームの生産性を上げるのと同じくらい非常に大事なことだと考えてい
技術本部 Digitization部の湯村です。 新規アプリケーション開発で採用したバリデーションロジックの管理方法を紹介します。 1. はじめに 2023年末に以下の技術スタックでデータ化アプリケーションの開発をしました。 フロントエンド: TypeScript + Next.js バックエンド: TypeScript + Express Next.js では App Router を採用しましたが、Server Components、Route Handler は利用せず、ブラウザから Express の API を呼び出す構成にしました。 SPA + API で開発する際の課題 この構成で開発をする際の課題の1つにフロントエンドとバックエンドでのコードの重複があります。 特にバリデーションのロジックの管理方法は頭を悩ませた方も多いはずです。 バリデーションに対するアプローチ バリデー
こんにちは。技術本部 Digitization部 Bill One Entryグループでエンジニアをしている大森です。 普段の業務に加えてTech道場というイベントの運営に関わっており、本記事はそのイベントのレポートです。 Tech道場とは、最新の技術や生産性を高める技術、そしてエンジニアの技術力に触れることを目的とした全社員向けの社内イベントです。*1 今回のTech道場では、主にエンジニアをターゲットとした企画として、テックリードによる社内キャリアイベントを開催しました。 イベントの概要 テックリードとして笹川・藤原・黒澤の3人が登壇し、新卒3年目のエンジニア、江川が3人にさまざまな質問を投げかけるパネルディスカッションイベントを開催しました。 ゲストの経歴は次の通りです。さまざまなバックグラウンドを持つメンバーが集まりました。 笹川 裕人 技術本部 Sansan Engineerin
技術本部Sansan Engieering Unit Data Hubグループの藤原です。普段はプロダクトのアーキテクチャを改善したり、技術的な課題を解決したり、たまにOSSを書いたりコントリビュートしたりしています。 今年はSansan Data Hubの日々の開発や運用で突き当たっている課題をベースに、現在取り組んでいることや、これから取り組みたいことについて紹介していきたいと思います。今回は、Azure Functionsでの大量データ処理をするとき、グレースフルシャットダウン関連で遭遇した問題について、Azure Functionsの内部構造に触れつつ紹介します。一言でいうと、Event Hubトリガーを使っている場合、SDKのバージョンによってはメッセージが処理されないことがあります(後編で説明しますが、Microsoft.Azure.WebJobs.Extensions.Eve
技術本部 Mobile Applicationグループの山本です。名刺アプリEightの開発を行っています。 今回はMobile ApplicationグループのEight開発チームの生産性指標をFour Keysからベロシティを含む別の値に変更した話をします。 一般的にはベロシティは生産性指標にすべきではない、Four Keysは生産性指標として適切であるという評価だと思います。もちろんそれは理解した上でこの選択をしています。その理由について説明します。 なお組織全体がこのように考えているわけではないということに御注意ください。例えば同じMobile ApplicationグループでもSansan開発チームはFour Keysを生産性指標にしています。 生産量2倍計画 現在技術本部では中期的な課題として1年で単月の生産量を2倍にするという目標を掲げています。 ポイントとして、技術本部のレ
技術本部 Sansan Engineering Unit Nayose グループでエンジニアをしている冨田です。業務では、Ruby on Rails(以降 Rails)を使って名寄せサービスを開発しています。 今回は、Rails などの Ruby コード内のイベント計測に使われる、Active Support Instrumentation について解説します。本 API を利用することで、アプリケーション内で発生するさまざまなイベントを計測し、パフォーマンス改善やデバッグなどの調査に役立てられます。直近 Nayose グループでは、問題調査のために、特定テーブルへの SQL とその呼び出し元をロギングする用途で使いました。 次のバージョンを対象としています。 Rails 7.0.4 Active Record 7.0.4 Active Support 7.0.4 Ruby 3.1.4 以
こんにちは。 この記事は、技術本部 Mobile ApplicationグループでSansan(※プロダクトとしてのSansan)のAndroid開発を行っている、桑原、小林、鎌田、原田の共著でお届けします。 今回は、アプリで使用しているライブラリのアップデートについて、 Sansanではどのようなポリシーで行っているのか そのポリシーを守るためにしていること そこから見えてくる課題 そして今後について をお話します。 Sansanにおけるライブラリアップデートのポリシー アプリで使用しているさまざまなライブラリは日々更新されており、機能の追加や変更、脆弱性の修正などが行われています。つまりアップデートを長期間放置していると、新機能を使えないことで開発生産性が落ちるなど、重大なセキュリティリスクを抱えることにつながります。 Sansan / Eightでは、お客さまの大切なデータをお預かり
はじめに こんにちは。技術本部 Mobile Application グループで iOS アプリエンジニアをやっている多鹿です。 さて、 WWDC 2023 にて Privacy Manifests が発表されましたね。そして、2024年春にはこの対応がされていないアプリはリジェクト対象になるというではありませんか。 ある日突然リジェクトされて慌てたくはないので、事前にどのような対応が必要か調べてみました。 はじめに Privacy Manifests とは? アプリ開発者がやるべきこと 最初にお断りを、、 本記事における解釈について やるべきことの概要 1. アプリ側で Privacy Manifests の宣言をする Privacy Manifests ファイルの作成 NSPrivacyTracking NSPrivacyTrackingDomains NSPrivacyCollect
こんにちは。研究開発部 Architectグループの中村です。 本記事は Sansan Advent Calendar 2023 の16日目の記事です。 今回は、私達のチームで開発&運用している全社横断データ分析基盤のデータレイヤの再設計、及びdbtの導入を進めているという事例について紹介します。 既存のデータ基盤に対して、dbtの導入を検討されている方の参考になれば幸いです。 (本稿ではdbtとはについては触れませんので、ご了承ください) TL;DR 歴史的経緯 全社横断データ基盤が生まれる前 全社横断データ基盤 立ち上げ期 課題 立ち上げ期に作られたデータマートがカオスに・・・ 課題の解決に向けて データレイヤの再設計 Transformツールの選定 dbtへの移行戦略 その他dbt移行におけるTips チームでの開発の標準化 Cosmosの導入検証 データカタログのホスティング まと
この記事は Sansan Advent Calendar 2023 の13日目の記事です。および【R&D DevOps通信】の連載記事のひとつです。 こんにちは、研究開発部 Architectグループの藤岡です。 今回は部で運用しているCI/CDに関する取り組みについてお話しします。共通化のノウハウや、どういった種類のCI/CDを導入してコード品質を担保しているかといった話をしたいと思います。 そのまま使える実装例もあるので、是非参考にしてみてください。 目次 目次 CI/CD共通化 reviewdog による Pull Request へのコメント 導入しているCI/CD PythonのCI その他のCI CD 実装例 reusable workflows composite action reusable workflows を利用する例 release-drafter によるリリース
自己紹介 こんにちは。名刺メーカーDevグループの伊藤惇です。 私は2022年4月にSansanに新卒として入社して、現在に至るまで名刺データの作成および印刷発注をするサービスの開発に携わっています。 名刺メーカーDevグループでは、偶然タイミングが重なったこともあり、私が入社してからこれまでの間に5人が育児休暇を取得しました。 そうした中で感じた育休に対する考え方の変化を振り返りたいと思います。 なお、本記事はSansan Advent Calendar 2023の14日目の記事です。 名刺メーカー育休スケジュール 名刺メーカーDevグループの規模感 チームの人数やプロダクトのフェーズによっても育休のインパクトが変わってくるので、私が所属する名刺メーカーDevグループの規模感について補足しておきます。 チーム人数 後述するAさん、Bさん、Cさんの育休取得時は約15人ほどのチームでした。そ
研究開発部 Architect Groupの大澤秀一です。ブログ寄稿は約2年ぶりです。半年ぐらい前からランニングを始めて、先日フルマラソン完走してきました。おかげで足はボロボロです(笑)。 さて、私たちはBigQueryを中心とした、全社横断データ基盤(以下、データ基盤)の構築とデータ基盤をもとに社内のデータ利活用を推進しています。データ利活用の推進についてチームメンバーが最近登壇した資料をご参照ください。 speakerdeck.com speakerdeck.com データ基盤を拡大していくにあたって、社内の利用者から自部門のデータをアップロードしてデータ基盤上でアドホックに分析したいという要望がありました。また、利用者自身が自由にテーブルとビューを作りたいという声があがりました。 今回は、そうしたことができる環境を構築したので仕組みについてご紹介します。 なお、本記事はSansan
技術本部 Eight Engineering Unit でエンジニアをしている平石です。今回は、Eight で提供している採用サービス Eight Career Design (ECD)の候補者検索機能における、検索ヒット件数改善の取り組みについて紹介していきます。 materials.8card.net 目次 目次 ECDの候補者検索機能について 今回解決したい課題 同義語辞書の整備 検索ログにおける共起単語の抽出 word2vecを使った類似語の抽出 結果 まとめ ECDの候補者検索機能についてECD とは Eight ユーザーと、自社にマッチしそうな人材を採用したい企業をつなぐサービスです。 ECD の候補者検索画面では、採用担当者が採用候補者の数十項目以上のプロフィール情報を自由に検索し、スカウト送信やタレントプール (お気に入りリストのような機能) への追加を行うことできます。
自己紹介 こんにちは、Sansan事業部プロダクト室の乙幡です。 新卒入社後、最初に配属されたのはビジネス部門で、Bill Oneというプロダクトのインサイドセールスを担当しました。その後、入社2年目の2023年にプロダクトマネージャーへのキャリアチェンジを行い、現在は日々新しいことを学びながら活動しています。 今回は、日々の業務でうまくいったTipsについて振り返りたいと思います。 なお本記事は、Sansan Advent Calendar 2023の7日目の記事です。 ジョブ理論とは ジョブ理論(Job Theory)は、製品やサービスが市場で成功するための理論の一つで、クレイトン・クリステンセンによって提唱されました。*1この理論の核心は、「製品やサービスが消費者に採用されるのは、彼らが特定の“ジョブ”(仕事やタスク)を完了させたいというニーズがあるからである」という考え方に基づいて
こんにちは。技術本部 Bill One Engineering Unit の前田です。現在はSREチームに所属しており、アプリケーションに強いSREといった立ち位置になっています。今回は、私がSREチームに異動してから少しずつ実施した、OpenTelemetryを用いた計装について説明します。 なお、本記事はSansan Advent Calendar 2023の5日目の記事です。 はじめに OpenTelemetryとの出会い 私がSREチームに異動したのは2023年4月で、それまではWebアプリケーション開発をやっていました。当時のSREチームはAPMツールの導入に動いているタイミングであり、チームに入る際、前提知識として『オブザーバビリティ・エンジニアリング』(以降「書籍」と呼称)をお勧めされたことが出会いでした。 www.oreilly.co.jp 一言で言うなら、書籍を読んで私は
本記事は、Sansan Advent Calendar 2023の1日目の記事です。 こんにちは。 技術本部研究開発部の高橋寛治です。 毎年恒例のアドベントカレンダーの時期がやってきました。 今回は、技術ブログの執筆を技術で支援するツールを用意したため、その内容を紹介したいと思います。 なお、本記事はそのツールを用いて書かれたものです。 技術ブログを書きやすくしたい 技術に関する知見を共有することは、知見を元にした新しい技術を生むことや、類似の事象の早期解決につながることなど、様々な利点があると私は考えています。 ある知見が新しい知見を呼び、新しい知見が更なる新しい知見を呼ぶ、というように循環するものだと思います。 技術ブログを書きやすくするために、執筆支援を行うことにしました。 今回は、2種類の執筆支援に取り組みます。 一つは草稿作成に向けた技術ネタと草案の作成支援、もう一つは草稿の校正
研究開発部の堤と申します。今年9月にニューヨークで開催されたtry! Swift NYCというカンファレンスに参加してきました。 www.tryswift.co try! Swiftは2016年から東京・インド・ニューヨーク等で開催されている、Swiftのデベロッパーカンファレンスです。東京での開催時は毎回参加していますが 1、スピーカー・参加者ともに国際色豊か 2 なのが特徴です。 ニューヨーク版への参加は今回が初 3 でした。会期自体は9/5〜7の3日間あったのですが、9/3に iOSDCの登壇 があり、どうしても初日からの参加が難しかったため、2日目・3日目のワークショップからの参加となりました。 try! Swift NYCのスケジュール 午前・午後それぞれ3時間、2日間で計4つのワークショップ枠があり、各時間枠の中で参加者が希望のものを選ぶ、という形式でした。 私が選んだのは以下
こんにちは。 Eight でエンジニアをしている鳥山(@pvcresin)です。 今回は、Eight で使用している Node.js をアップデートした際の手順や、ハマったところについてお話ししたいと思います。 目次 背景 手順 ハマったところ まとめ 背景 Eight では Web フロントエンドの開発やビルドに Node.js を使っています。 使用していた Node.js 16 のサポートが 2023-09-11 に終了するということで、アップデート対応をそれまでに行う必要がありました。 当初、Node.js 16 は 来年(2024 年)の 4 月までサポートされる予定でしたが、内部の OpenSSL 1.1.1 のサポート終了日と合わせるため、後からサポート期間が 7 ヶ月短縮されたという経緯があります 😵 また、リリーススケジュールでは、その約 1 ヶ月後の 2023-10-
こんにちは、研究開発部 Data Analysisグループの笛木です。 4/26(水)〜 4/28(金)で研究開発部内の技術研修を行いました。 こちらのブログの続きでテストコードについての研修資料を一部公開します。研修では新卒2年目の私が1年間で部内のコードなどから学んだ情報を共有しました。至らない部分もあるかもしれませんが、ご参考になれば幸いです。 こちらの研修で使用したGitHubのコードリンクは以下です。適宜、ご参照ください。 github.com 目次 目次 はじめに この研修の目的 研修スコープ外 テストコードについて テストコードの便利な点 テストコードの悪い例 テストコードに関するFAQ pytestによるテストコードの書き方 ファイル名 ディレクトリ 基本編 Parametrize Fixture 異常系 Mock indirect conftest 知っておくと活用する場
こんにちは。Sansan CSIRT の松田です。 本記事では、Tines というノーコードで自動化するためのサービスを使ってみたので、その紹介と所感をお届けできればと思います。 今回はセキュリティ運用の自動化に挑戦してみました。 なぜ自動化に向き合う必要があるのか セキュリティに限った話ではないですが、この先常に自動化を意識していく必要があると考えています。 理由は言わずもがなですが、どの企業でも重要視されているセキュリティエンジニアという貴重な人材は潤沢に確保することが困難です。 少数精鋭でも日々の運用の品質を常に向上させ、長期間それらを維持していくことが CSIRT には求められています。事業の急成長に合わせて必ずしも見合う程のリソースを確保できるとは限りませんし、いつ大規模なインシデントが発生するかもわかりません。そんな危機感が今回の挑戦のきっかけでもあります。人間が実施する必要が
Sansan 技術本部 情報セキュリティ部 CSIRT グループの川口です。 2023年4月からセキュリティエンジニアで新卒として、Sansan に入社しました。 現在は ログ基盤(SIEM)のログの取り込み部分の機能修正、問い合わせ対応、インシデント対応などの業務に取り組んでいます。 今回は内定者インターンシップで開発した、自宅ルータの脆弱性検知システムについて紹介します。 目次は以下の通りとなります。 開発に至った経緯 作成したシステム 技術的な話 EDR ポートスキャン チケットシステムへの起票 SOAR まとめと今後の課題 開発に至った経緯 新型コロナウイルスの流行に伴い、リモートワークという言葉をよく耳にするようになったと思います。 弊社でも緊急事態宣言下においては、原則リモートワークとなり、現在はオンライン・オフラインを併用した働き方をしています。 ここで問題となってくるのが自
こんにちは!「Sansan Summer Internship 2023」でインターンをしていた野首侑作です(X, Facebook)。R&D Architectグループに1ヶ月強コミットしていました。今回のインターンで使った技術はこれまで全く触ったことがありませんしたが、チームメンバーのサポートもあり本番環境でも動かせるコードを書くことができました。 今回学んだことの整理と、Sansanのインターンで学べることの多さを共有したいという意味を込めて、社内ブログでアウトプットしようと思った次第です。 目次 目次 はじめに ローカルでAirbyteの立ち上げ 1. DockerによるAirbyte serverの起動 2. Sourceの登録 3. Destinationの登録 4. Connectionの登録 5. 接続確認 TerraformによるIaC IaCとは Terraformとは
Bill One Entry*1グループの秋山です。 本題に入る前にお知らせです。9/12 (火) にTypeScriptを活用した型安全なチーム開発をテーマとしたイベントを開催します。 ぜひ、お気軽にご参加ください! sansan.connpass.com 1. はじめに 1-1. スキーマ駆動開発とは 1-2. Testing Trophyとの関係性 2. 構成 2-1. 最初の構成と課題 2-2. 最終的な構成 3. バックエンド 3-1. スキーマから型ファイルを作る 3-2. APIハンドラに型を与える 3-3. バリデーターを追加する 3-4. huskyでスキーマ変更を検知する 4. フロントエンド 4-1. スキーマからAPIクライアントを作る 5. パターンマッチングを持ち込む 6. まとめ 1. はじめに 1-1. スキーマ駆動開発とは 詳しい解説は他の記事に譲り、一言
はじめに 最近、固有表現抽出(Named Entity Recognition: NER)の学習をspaCyを用いて行う機会があったため、そのやり方について簡単にまとめたいと思います。 Ref spacy.io Version python: 3.11.3 spaCy: 3.6.0 使用したNotebook github.com 全体の流れ 学習データの用意 spaCyのconfigファイルの用意 学習 評価 推論 学習データの用意 今回は、ストックマーク株式会社が公開しているWikipediaを用いた日本語の固有表現抽出データセットを利用します。 まずはデータセットを読み込みます。 with open("../ner-wikipedia-dataset/ner.json") as f: stockmark_data = json.load(f) 次にデータセットを、train, dev,
技術本部 Data Hub Engineering Unitの光川です。 先日、「技術本部総会」という技術本部に所属するメンバーが一同に集まる場でOST(オープンスペーステクノロジー)を実施しました。 本記事は、そのOSTの運営レポートです。 背景 弊社のエンジニアは336人。 そのうち210人はコロナ禍で入社した人たちです。*1 弊社ではリモートワーク率が高まったり、オフラインで集まるイベントが激減したため チームや部門を超えた横の繋がりがなかなか作れずにいました。 そんな背景で、社内交流のためのイベントをオフラインで開催することになったと聞きました。 OSTをやることになったきっかけ 自分は今年1月に開催されたRSGT2023 *2 に参加しました。 そこで初めてオフライン大規模OSTを体験しましたが、OSTの仕組みのおかげで知らない人だらけのイベントでたくさんの方々と交流ができました
次のページ
このページを最初にブックマークしてみませんか?
『Sansan Tech Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く