トップへ戻る
カレーが食べたい
buildersbox.corp-sansan.com
Eightでフロントエンドエンジニアをしている青山です。 今回はEightのCI環境にtextlintという文書校正ツールを導入してみたので、その経緯や実施した内容をお伝えします。 サービスを複数抱えているなど、文書管理が煩雑になってチェックが大変、といった場合に活用できるかもしれません。 textlint.github.io ある日のフィードバック Eight(およびSansanの各プロダクト)では、社内のslackでフィードバックを受け取るチャンネルが存在しています。活発に社内外からのフィードバックが投稿されていますが、ある日の投稿で以下のようなものがありました。 今日届いたお知らせの文言に「副業」というのが使われてました。 Eightでは「副業」使わずに「複業」とする、みたいな方針だった気がしたので、気になりました。 実際このフィードバックが上がった直後には、素早く修正リリースが行わ
こんにちは。 技術本部 研究開発部の高橋寛治です。 Python でプロジェクトを始める際に、ディレクトリ構成を考えたり、パッケージ方法を考えたり、もしくは何か参考になるものを見つけてコピペしたり、と意外と時間をかけていました。 これをコマンド一つで解決する Cookiecutter および社内での活用事例を紹介します。 Cookiecutterとは Cookiecutter とは、プロジェクトテンプレートからプロジェクトを作成してくれるコマンドラインツールです。 ここでのプロジェクトとは、ディレクトリとファイルおよびそれらの命名や記述されている項目を指します。 Cookiecutter には次の2つの側面があります。一つはプロジェクトテンプレートを利用すること、もう一つはプロジェクトテンプレートを作成することです。 インストール Cookiecutter は Python で書かれたライ
こんにちは、技術本部 Bill One Engineering Unitの江川です。 2021年4月に新卒としてSansanに入社したのですが、早いものでもう1年が経ってしまいそうで驚いています。 今回は、そんな早かった1年に思いを馳せつつ、Bill Oneフロントエンドのビルド周りを高速なビルドツールであるViteに移行していった話をしたいと思います。 移行の背景 Bill OneのフロントエンドではReact + TypeScriptを採用しており、ビルド周りには Create React App(以下、CRA)をejectなしで利用していました。*1 CRAは、開発初期にwebpackなどの設定を隠蔽し簡単にセットアップを行えるという利点がある一方で、開発を進めていきコードベースが大きくなってくるといくつかの問題が発生することがあります。 具体的にはBill Oneでは以下のような問
こんにちは。Sansan Builders Blog 編集部です。 今回は、2月28日に開催した【エムスリー山崎氏とSansan西場が語る「エンジニアのチャレンジをどうマネジメントするか」】のイベントレポートをお届けしたいと思います。 本稿では、皆さんから寄せられた質問への回答を、かいつまんでお伝えします。 アーカイブ動画も公開していますので、実際の様子やアフタートークの模様は映像でもお楽しみください。 youtu.be 登壇者 エムスリー株式会社 執行役員/VPoE/PdM 山崎 聡氏(@yamamuteking) ※エムスリーエンジニアリンググループ紹介資料はこちら Sansan株式会社 VPoE/技術本部 研究開発部 部長 西場 正浩(@m_nishiba ) ※Sansanのエンジニア情報サイトはこちら エンジニアのチャレンジマネジメントとは? 現在約300名のエンジニア・研究員
こんにちは、クラウド請求書受領サービス Bill One の開発をしている加藤です。 新しくアプリケーションを開発する際は、それが日本国内をターゲットにしたものであっても、グローバル対応するときに問題が発生したり、そもそもグローバル対応できなかったりする作りにはしたくないはずです。まずは日本の顧客向けにスタートしたBill Oneを開発する際も、同じことを考えていました。 本稿ではグローバル対応の中でも、日付・時刻にフォーカスします。 次の「タイムゾーン呪いの書 3部作」にあるように、日付・時刻の扱いの難しさはよく知られています。 タイムゾーン呪いの書 (知識編) タイムゾーン呪いの書 (実装編) タイムゾーン呪いの書 (Java 編) この3部作は2021年の改訂ということもあり、Bill Oneの開発を始めたばかりの頃に直接参考にできたわけではありません。 初版やエムスリーさんの記事を
技術本部 データ戦略部 Newsグループの木田です。 最近、初めて自作キーボードに挑戦しました。ちょうど2枚目のモニターも買ったので、モニター2台と自作キーボードで快適に記事を書いています。 予めお断りしておきますが、この記事は元々、社内向けに設計方針や規約・ツールなどについて共有するために書いたものでした。最近、他チームの参考資料として役立ったこともあり、社外向けに手を加えて公開する運びとなりました。 はじめに 機構改革・人事異動情報(β) とは ⚛️ Atomic Design に従う ⚛️ Atomic Design とは ⚛️ Molecules と Organisms の分け方 ⚛️ コンポーネントの設計方法 📝 規約 📝 Component と Container を分ける 📝 データの繋ぎ込みは Organisms 以上で行う 💡 Tips 💡 Atoms はタグ本
こんにちは、Sansan 技術本部 Mobile Application Group に所属している iOS アプリエンジニアの相川です。 本記事は Sansan Advent Calendar 2021 の23日目の記事になります。 adventar.org 現在 Sansan の iOS アプリチームでは開発環境の改善を目的としたマルチモジュール化を行っています。 絶賛行っている最中のマルチモジュール化の技術的な実現方法などについては、作業が進んだらいつか記事にしたいなと思っています。 本記事では Sansan の iOS アプリチームでマルチモジュール化を推進するためにどのようなことをやってきたのかということについて焦点を当てて以下の流れで説明していきます。 過去のマルチモジュール化の失敗とそこから得た学び マルチモジュール化についての知識を持つメンバーが不足していたため、手探りで進
本記事は,Sansan Advent Calendar 2021 第18日目の記事です. こんにちは,研究開発部の内田です.いつの間にやら季節は進んで,街路樹の葉も落ちたり燻んだり,日常の風景からも寒さを感じるようになってきました.最近は,そんな日常に彩りを加えるべく,お花のサブスクリプションサービスを契約し始めました.私自身花に詳しいわけではないですが,なんとなく気分が上がるのでおすすめです. さて,本エントリでは 10/15-10/24 の日程で開催いたしました「Sansan × atmaCup #12」について,遅ればせながらのレポートをお届けしたいと思います. atma.connpass.com atmaCupとは? atmaCupとは,atma株式会社 様が主催するオンサイトデータコンペティションです.データコンペティションは,主催者から出題されるデータに対して,参加者が分析・予
こんにちは。 Eight事業部プロダクト部でデータアナリストをしている林田です。 本記事は Sansan Advent Calendar 2021 13日目の記事です。 adventar.org Eightのデータ分析チーム「データマネジメントチーム」にはデータアナリストが3人所属しており、メンバーはそれぞれが担当するサービス領域において意思決定やKPIマネジメントの支援をしています。 データ分析チームのお仕事については以前記事を書いているので、宜しければこちらもご覧ください。 Eightのデータ分析チームのお仕事 - Sansan Builders Blog 今回はそんなデータ分析チームの仕事の中でも、開発チームと伴走してデータ分析していく手法についてお話したいと思います。 なぜデータ分析が重要なのか プロダクト開発においてデータ分析が必要になる場面は2つあります。1つは機能の企画段階に
人事部 高橋 です。 本記事は Sansan Advent Calendar 2021 - Adventar の10日目の記事です。 このたび、社内で人事評価に使うシステムを内製しました。 このたびと言いつつ1年ほど前から運用が始まっていたのですが、やり残し等も落ち着いたこのタイミングで記事にしてみます。 背景 従来は Kintone に人事評価のためのシステムがあり、4年ほど運用していました。Kintone の設計、カスタマイズは外注でした。 以下の要因から、システムを内製する判断が下りました。 評価設計の定期的な見直しやデータの増加に Kintone のカスタマイズ性と性能が耐えきれなくなった。 今後も人事評価の仕組みは柔軟に(同時に、効率的に入力できるように)見直していきたいという経営陣の意志があった。そのためパッケージを導入するリスクが強かった。 人事部に所属しながらWeb開発がで
3行で アクセスに基づいた推薦のために、文書のどのような情報を使うべきか考えた。 ニュースの中の名詞、固有名詞、名詞×ジャンル、固有名詞×ジャンルの4つに分けて推薦を行い、ユーザーが興味を持ちそうなニュースを推薦できているかを定性的に確認した。 結果として、今回のデータ・手法では、下記3点が分かった。 名詞抽出による近傍探索で、ユーザー興味に沿ったニュースが推薦できる 固有名詞について、より上手な抽出方法を次の記事で検討する 推薦にジャンル情報を活用すると、うまく推薦できなかった場合でもユーザー興味を大幅には外さない推薦となりうる 目次 3行で 目次 初めに 実装 手法 文書から抽出する要素を決める 文書から要素を抽出する アクセスしたと想定するニュース 名詞、固有名詞を抽出 学習済みの分散表現がアクセスしたニュースのキーワードを含むかどうか 抽出された分散表現のt-SNEによる可視化 類
こんにちは。CSIRT の吉山です。 私は2020年の4月にセキュリティエンジニアとして新卒入社し、現在は主にログ基盤(SIEM)の構築・運用やインシデント対応などの業務に取り組んでいます。 今回はそのログ基盤構築や運用、その他検証で得た知見などについて紹介します。 まず初めにログ基盤の技術的な概要についてここで簡単に触れておきます。 ちなみに基盤構築の背景などについては、以前に同じく CSIRTの松田が記事にしているのでこちらもぜひ一読いただければと思います! buildersbox.corp-sansan.com 構成 ログの集め方 ログの取り込みスクリプト(es-loader) について ユーザーの管理と権限設定 アラーティング コスト 基盤の負荷 検証について 課題 最後に 構成 基盤は AWS 上で構築しており、Amazon OpenSearch Service (以下、Open
初めまして、プロダクト開発部 Data Hub プロダクトグループの秋田です。20卒で入社して半年が過ぎ、月日があっという間に過ぎ去る恐ろしさを肌で実感する今日この頃です。 本連載では様々なプロトコルやシステムの仕様を読み解いていくことで、それらに込められた意思と意図を考えていこうと思います。 第1回は Data Hub で使用している Azure Service Bus で採用されている Advanced Message Queuing Protocol 1.0 (AMQP 1.0) の仕様を読み解いていきたいと思います。 Advanced Message Queuing Protocol (AMQP) について 近年のマイクロサービスアーキテクチャにおいては、アプリケーションとサービスを分離し非同期に動作させるために、メッセージキューを使うことがあります。メッセージキューの一般的な説明
こんにちは、DSOC R&Dグループ インターンの笛木正雄です。大学院では離散最適化の研究室に所属しています。インターンでは、日々、知らないことだらけで、色々なことを経験させていただき、伸びしろを実感する毎日です。 現在は、SansanやEightのニュース配信に使用されている固有表現抽出(文章中から組織名を抽出するために使用)と呼ばれる自然言語処理タスクに携わっています。今回は、これまで取り組んだ固有表現抽出における精度改善の手法を紹介したいと思います。ありがたいことに、この手法は現在、プロダクトで実際に稼働しているため、思い入れのある手法です。 また、今回の手法を含め、日本語固有表現抽出については、コード公開を予定しており、pipでインストールできるように現在進行中です。ご興味ある方は、お待ちいただき、合わせてご覧いただければ幸いです。 ※弊社のニュース配信における固有表現抽出タスクの
SansanでAndroidアプリのアーキテクト・マネジメントをしている山口です。 今回は最近SansanのAndroidチームで行っている技術研鑽の取り組みについて書こうと思います。 技術研鑽は業務外でやるべきか? よくソフトウェアエンジニア界隈では議論になる話題かなと思います。 業務外で個人アプリを作ったり、OSSにコミットしたり、日々インプット・アウトプットを繰り返すことは素晴らしい取り組みであり、それに頼りたくなる気持ちはわかります。しかし実際にはそれぞれのプライベートや家庭の事情があり、みんな日々キャッチアップしているだろうからという前提に物事を進めるのは現実的ではありません。日々の業務内の開発の中で技術的に伸びていくものはもちろんありますが、新しい技術のキャッチアップやライブラリの深い理解といったものがメンバーによっては中々進まないという課題がありました。 業務内で技術力をあげ
こんにちは。 DSOC R&D グループの高橋寛治です。 最近は、MLOpsへの興味が大きく、ツールの実利用や勉強会での発表を行っています。 機械学習プロジェクトにおいて、久々の実行や引き継いだコードの実行の際に、順序や実行環境を思い出したり準備したりしながら確認するのはすごく大変です。 コンテナ化された上でパイプラインがあると、実行順序も実行環境も覚えたり記録したりする必要がなくなります。 コンテナとパイプラインを組み合わせて利用するAmazon SageMakerを利用し、学習パイプラインを構築してみました。 その概要とAmazon SageMakerを利用したパイプラインを構築する上で押さえておくべきだと思う概念を簡単に紹介します。 SageMakerによるパイプライン構築の概要 AWS Step Functions Data Science SDK for Amazon SageM
こんにちは. DSOC 研究開発部の黒木裕鷹です. なんと,思いつきで始めたランニングが続いており,最初の1ヶ月は65kmほど走っていたようです! やはり,ばっちり形から入りかっこいいシューズとウェアを用意したのが効いたようです. フルマラソン目指して頑張りたいと思います🏃 さて,先日株式会社ホクソエムの高柳さんより,監修された本をご恵贈いただきました! ありがとうございます!!! いつもはネットワークの分析手法にまつわる連載をしていましたが,せっかくですので,今回は書籍のレビュー・紹介をしたいと思います. gihyo.jp 紹介・どんな本か 1章:機械学習実践のためのフレームワーク 2章:機械学習実践のための基礎技術 3章:Explicit Feedback を用いた推薦システムの構築の実践 4章:Implicit Feedback を用いたランキングシステム構築の実践 5章:因果効果
こんにちはニューラルネット老人こと糟谷勇児です。 このようなブログをやっていてなんですが、私自身はほとんどディープラーニングを実務で使っていません。 ディープラーニングがはまるということは、学習データが豊富で、説明力はある程度弱くてもよく、GPUマシンを使っても元が取れるぐらいの価値がある案件です。このような場合、ディープラーニングを使おうが使うまいがある程度成功する案件ということになります。こういう案件なら若手に任せて、老人はみんながさじを投げた案件を頑張るのも役割分担かもしれませんね。 とはいえ基礎知識は重要ということで今回もGPGPUをしていきましょう。 今回はコンボリューショナルネットに必要不可欠な画像のフィルタをCUDAで行う方法について学んでいきます。 行列計算と同じ手は使えない。テクスチャメモリの使用 さて、前回はCUDAで行列の掛け算をやりました。 buildersbox.
こんにちは. DSOC 研究開発部の黒木裕鷹です. 夏の訪れを感じつつある最近ですが,ランニングをはじめました. 形から入ろうと思い,かっちょいいシューズとウェアを揃えたのですが,なんとか1週間は続いており気分が良いです. まだまだ2, 30分走るだけでバテバテになってしまいますが,いずれは健康大魔神になろうと思っています. さて,この連載では,自分の勉強・復習も兼ねて,ネットワークデータにまつわる(統計)解析を気の向くままに紹介しています. 前回の記事では,グラフラプラシアン・グラフフーリエ変換について簡単におさらいしました. あまり理論やモデルの紹介ばかりが続いても面白くないので,今回の記事ではビジネス応用の事例紹介をしたいと思います. 具体的には,Uber における GNN の適用事例を2つほど取り上げることにしました. 私たちの生活にもすっかり浸透した Uber や UberEat
こんにちは。 DSOC R&D グループの高橋寛治です。 社内の研究開発部勉強会にて、Texthero が便利だという話を聞きかじりました。 Texthero は、テキストの前処理から変換、可視化までを pandas 上でうまく扱える Python パッケージです。 現状では、英語のみ対応しているパッケージです。 本記事では、日本語を解析できるように追加でコードを書いて使ってみたので紹介します。 Texthero のコードを読む Texthero は GitHub 上で公開されています。 Version 1.0.9 をベースに日本語処理を実装する観点でコードを読みます。 texthero パッケージ配下には、いくつかのスクリプトが含まれています。 この中で、トークナイズや固有表現抽出は nlp.py、前処理は preprocessing.py に含まれています。 nlp.py を詳しく見て
3行で はじめに Sentencepieceとは subwordとは Sentencepieceでの取り組み SentencepieceとMeCabの比較 利用するデータセット 利用したコード 適当なTweetを分かち書きしてみる Tweet全部を分かち書きし、頻度順に並べてみる まとめ 注釈 3行で Sentencepieceの論文概要を説明した。 自身のTweetを用いて、SentencepieceとMeCabの分割点の違いを調べた。 Sentencepieceでは生文から生成された特徴的な分割が見られた。一方、今回のような少ない学習データでは上手く分割できない。 はじめに Sansan DSOC 研究開発部の齋藤です。 最近Sentencepieceの論文を読む機会があったので、論文の概要説明と、実際に使ってみようと思い立ちました。 前半で論文の説明を行い、後半でSentencepi
こんにちは。Eight でエンジニアをしている鳥山(@pvcresin)です。 最近は、デザインとエンジニアリングの距離をもっと近くにできないかということばかり考えています。 なかなか難しい課題で、すぐには答えが出そうにありません。 さて今回は、以前書いた記事「Eight、TypeScript はじめました」の続編となります。 buildersbox.corp-sansan.com 上記の記事では、TypeScript(TS)初心者だった私が Eight の Web フロントエンドに TS を導入するまでの話をしました。 本記事では、TS 導入から約 1 年が経ってみて感じた良かったこと・困ったことについてお話ししたいと思います。 TS 導入を考えている、あるいは移行中の方の参考になればと思います。 おらさい まずは、TS 導入時の Eight の Web フロントエンドについてのおさらい
こんにちは。Eight でエンジニアをしている鳥山(@pvcresin)です。 マイブームはコンビニで買える GODIVA のベルギーダークチョコレート(アイス)を食べることです。 濃厚で甘すぎず、量も多すぎないところが気に入っています。 今回は TypeScript や JavaScript の import を自動でソートする話をしたいと思います。 といっても、TypeScript でソートがうまく行けば JavaScript でも大抵うまくいくので、主に TypeScript にフォーカスした話になるかと思います。 背景 import をソートしようと思ったきっかけは、チームのメンバーが出した 1 つの PR(プルリクエスト)でした。 新規作成したファイルの import が、ライブラリからの import とその他のファイルからの import でそれぞれまとめられており、見やすい
DSOC サービス開発部 GEES/JES/COEグループの松本です。 最近はコロナの影響で巣ごもりをしており、家の庭で芝生を育てています。 色々と手抜きをしてしまったがために生え揃いがまばらで、かわいい反面、芝生の上を裸足で歩けるようになるにはまだまだ時間がかかりそうです。気長に待ってみようと思います。 今日はSansanの機能の一つである、人事異動ニュースを支えるデータ化の取り組みについてご紹介したいと思います。 JES とは Sansanの機能の中に、人事異動ニュースと呼ばれる機能があります。 sin.sansan.com これは、所有する名刺に紐づく人物の人事異動が公開されたときにそれをニュースとして配信し、交換前に所有名刺の情報を最新情報に更新できるという機能です。 ニュースとして提供するために人事異動情報のデータ化を行っていますが、そのシステムがJESと呼ばれるもので、DSOC
こんにちは、クラウド請求書受領サービス「Bill One」の開発に携わっているソフトウェアエンジニアの加藤です。Bill OneはB2BのマルチテナントSaaSであり、データベースとして Cloud SQL 上のPostgreSQLを利用しています。従来はマルチテナントのデータを分離するために、テナントごとにPostgreSQLのスキーマを分けていましたが、2020年12月にRow-Level Securty(行レベルセキュリティ。以降RLSと表記)による分離に移行しました。 本稿では、移行の背景とRLS組み込みにあたって考慮したポイントをご紹介します。 マルチテナントSaaSのテナント分離 マルチテナントSaaSにおけるテナント分離方法はいくつか知られており、大きく次の3つに分けられます。 アプリケーションの実行環境ごと完全に分離する データベースのみをインスタンスやスキーマで分離する
ヘッダ画像 こんにちは。 DSOC R&D グループの高橋寛治です。 最近は Google App Engine(App Engine) を用いて WebAPI としてアルゴリズムを提供できるよう開発中です。 App Engine を触ったのは初めてだったため、備忘録として App Engine の概要や環境構築からデプロイまで書きたいと思います。 App Engine の説明や設定の考え方が主となります。 App Engine とは Webアプリケーションの提供のためのフルマネージド型のサーバーレスプラットフォームです。 コードを用意して App Engine 上に反映すれば、GCP 上で Webアプリケーションが稼働し利用可能になっているというイメージです。 動作環境には、スタンダード環境とフレキシブル環境があります。 それぞれ利点が異なるため、公式の比較を見ながら検討すると良いと思い
こんにちは、ニューラルネット老人こと糟谷勇児です。 Sansanに入社して5年が過ぎました。そういえば前職にいたときに隣の部署のマネージャーとこんな会話をしたことがありました。 「なんで学生時代(2004年当時)にニューラルネットの研究をしていたのに、私はディープラーニングをつくれなかったんですかね」 マネージャーの方は「当時はコンピューターの性能も低くて今みたいな計算ができないのは仕方ないんじゃないかな」 と返してくれましたが、どうにも腑に落ちませんでした。 当時だってスーパーコンピューターは性能が良かったですし、最先端のデスクトップPCと今の私のノートPCは互角とまでは言わないものの、10分の1、100分の1という性能ではないはずです。 当時もスペック上はアイデアがあればできたはずなのです。 負け惜しみにすぎないのですが、これまでのブログをまとめつつ2004年当時を振り返ります。 ディ
こんにちは!関西支店勤務の大西です。 私の役割は、Bill One事業のプロダクト開発責任者という立場で、プロダクトマネジメントと開発マネージャーの役割を担っています。今回のブログでは、開発マネージャーの立場から、Bill One エンジニア組織の目指す文化を紹介させてもらいます。 Bill Oneとは Bill Oneとは「あらゆる請求書をオンラインで受け取る」をコンセプトに去年の5月にローンチしたサービスです。最近では、テレビCMを開始しており、2022年5月末までに契約件数1,000件以上に向けて爆速成長モードです。 Bill One 「解せない」篇(60秒) 目指す文化 早速本題になりますが、目指すべき文化は 事業成果を最優先に各自が主体的に行動し、成長し、一体感を強く持つ文化 です。 例えるなら、家族のような文化ではなく、プロスポーツチームのような文化です。 プロスポーツには、以
こんにちは。 DSOC R&D グループの高橋寛治です。 最近、部内で Streamlit による可視化を見かけるようになってきました。 Streamlit は、インタラクティブなデータの可視化に特化した Web アプリケーションを少ないコードで素早く提供することができる Python ライブラリです。 私自身は Web アプリケーションとしてデモ化する際に手慣れた Flask で書くことが多いです。 慣れているとはいえ時間を要するため、同じ結果を爆速で実現できるなら使わないわけにはいきません。 作業効率改善のために、固有表現抽出を題材にして使ってみることにしました。 今回 Streamlit で実現したいこと テキストエリアに入力されたテキストを解析し、解析結果を表に表示します。 入力エリアを準備する まずは、Streamlit をインストールし、ファイルを準備します。 $ pip in
次のページ
このページを最初にブックマークしてみませんか?
『Sansan Builders Blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く