ブックマーク / buildersbox.corp-sansan.com (33)

  • REST APIが主流のプロジェクトの中でGraphQLを導入してみた話(サーバーサイド編) - Sansan Tech Blog

    こんにちは。Eight事業部の古です。Eightで"企業向けプレミアム"という企業内で名刺を共有できるサービスのサーバーサイドの開発・運用を主に行っています。 その企業向けプレミアムですが、去る2020年5月にバージョンアップが行われました。 そこでEightの中では初めてGraphQLを取り入れてAPI開発を行いました。 EightではRailsを採用しているためAPIといえばREST形式で書かれています。 そんな中で方式が異なるGraphQLを採用するということは、当初思い描いていた以上に様々な課題がありました。 この記事では、そこで起きた様々な課題とそれに対するアプローチや解決策などサーバーサイドの目線から述べたいと思います。 なぜGraphQLを導入することにしたのか 細かな理由はいくつかありますが、主に解決したかった課題は以下の2つです。 これ以上エンドポイントを増やしたくなか

    REST APIが主流のプロジェクトの中でGraphQLを導入してみた話(サーバーサイド編) - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2020/07/21
  • OSSコントリビュート始めてみませんか? - Sansan Builders Blog

    こんにちは。プロダクト開発部の福山です。Sansanでは主に法人向け名刺管理サービス「Sansan」の開発をしていますが、プライベートでは月に1回程度(*1)OSSにPull RequestをあげているゆるいOSSコントリビューターです。 「なぜOSSにコントリビュートするのか?」 という問いには、 「自分のコントリビュートによって世界の誰かが、よりそのOSSを好きになってくれる可能性があるから」 と答えます。 大げさに言ってしまいましたが、世界の前線に立っているエンジニアから「Awesome!」って言ってもらえるのが単純にうれしいからというのが音です。 ということで記事ではOSSへのコントリビューションについて書きたいと思います。 何年か前に「How to Contribute to Open Source」という記事を偶然読んで、とても良いことがたくさん書いてあったのでぜひいろんな

    OSSコントリビュート始めてみませんか? - Sansan Builders Blog
    tkrtkhsh
    tkrtkhsh 2020/07/13
  • 技術力を底上げする、Sansanの社内勉強会補助制度 - Sansan Tech Blog

    Sansan事業部プロダクト開発部の基盤チームに所属する佐藤です。Sansanでは社員が自発的に開催する社内勉強会で会社からの支援を受けることができ、月に50種類以上の勉強会が開催されています*1。各勉強会は単発のものもありますが、週に1回、1~2ヶ月継続して開催されているものが多く、中には1年半以上続いている勉強会もあります。 今回は、社内勉強会を支える制度「Geek Seek Workshop」について紹介しつつ、社内で行われている勉強会から分野や目的の異なるものをピックアップして紹介し、Sansan社内の勉強会の雰囲気や参加によるメリットを参加者の立場から多面的に伝えたいと思います。人事制度に携わる人間ではありませんが、制度を用いた社内の技術力向上のアイデアの種になれれば嬉しいです。 Geek Seek Workshop 1人あたり1000円の補助が出る 申請のハードルが低いから開催

    技術力を底上げする、Sansanの社内勉強会補助制度 - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2020/01/30
  • プレゼンの苦手な僕が満足のいく発表をできるまで:Sansan Builders Box 2019 - Sansan Tech Blog

    はじめに こんにちは、DSOC でデータエンジニアをしている千葉祐大です。 いきなりですが、僕は発表が恐ろしいほど苦手です。 社会人になってからのプレゼン・発表体験を思い出してみても苦い経験ばかりです。 こんな僕ですが、先日、弊社のテックイベントである Sansan Builders Box 2019 に登壇し、自分史上一番満足度の高い発表ができたので、資料作成や練習のやり方、登壇直前の準備をまとめてみました。 万人に当てはまる上手いやり方ではないと思いますが、うまくハマれば有効なノウハウもあると思うので、ぜひご一読ください! 意味ありげに手を回してる図。 ゴールと抑えるべきポイント ポイントは2つあります。 使い慣れた表現や流れをベースに発表をつくる 発表の一番はじめの出だしフレーズを丸暗記する 特に「使い慣れた表現や流れをベースに発表をつくる」は非常に重要です。 世の中にはプレゼンで使

    プレゼンの苦手な僕が満足のいく発表をできるまで:Sansan Builders Box 2019 - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/11/26
  • ローディング画面をお洒落にする SkeletonView の使い方とハマったポイントまとめ - Sansan Tech Blog

    こんにちは! iOS アプリエンジニアの髙橋佑一朗です! 今回は Sansan アプリ内で使用している Shimmer (シマー) を簡単に表示できるようになる SkeletonView というライブラリについてまとめていきたいと思います。 導入や使い方については公式の README が充実していますし、他にも以下のような記事があるので、ここでは、実際の作業でハマったところやどう対処したかについて書いていきます! github.com Shimmer って? もう知らない方も少ないと思いますが軽く説明を。 Shimmer は Facebook や YouTube などでよく見かけるロード中であることを表す表示のことです。 一般的には表示されるコンテンツとほぼ同じ配置でグレーの View が表示され、一定間隔でキラリと光っているようなアニメーションをするものが多い印象です。 YouTube

    ローディング画面をお洒落にする SkeletonView の使い方とハマったポイントまとめ - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/10/28
  • Sansan Androidのこの1年の変化 - Sansan Tech Blog

    SansanでAndroidアプリケーションエンジニアをしている山口です。4月からリードエンジニアになりました。 私は昨年7月に入社し、先日無事勤続1周年を迎えたのでSansan Androidにおけるこの1年間の変化について書こうかなと思います。 メンバーの増加 昨年入社したときには「Androidエンジニア」はおらず、iOS/Android 両方を担当するエンジニアが一人いただけでした。 社内でモバイルの重要性が高まる中で、この体制ではスピードが出ないということで中途採用の強化、社内エンジニアのモバイルへの転向が進みました。 中途採用はすぐに結果が出るわけではないので地道な活動をしてきました。日々書類選考をしたり、カジュアル面談をしたり、採用面接をしたといった活動です。結果今年4月に1名入社していただくことができました。8月にも新たにメンバーが増える予定です。1年間活動してきて2名入社

    Sansan Androidのこの1年の変化 - Sansan Tech Blog
  • ソースコードで理解するクリーンアーキテクチャ - Sansan Tech Blog

    はじめに こんにちは。プロダクト開発部の荒川です。 これまで最年少を謳っていましたが、ついに新卒の子にその座を奪われてしまいました。とても残念です。 さて今回のテーマは、皆さんお馴染みクリーンアーキテクチャ(Clean Architecture)です。 クリーンアーキテクチャは一時期流行し、その流れに乗って私もある程度の理解はしていました。 しかし、それはあくまでも感覚的な理解であって、他人に説明や良さを語れるレベルまで自分の中で落としこめていませんでした。 そこでより具体性のあるソースコードを読み込むことで、アーキテクチャへの理解を深めたいと思います。 クリーンアーキテクチャとは? クリーンアーキテクチャの定義や解説に関しては、ネット上にいくらでも公開されているので、このエントリでは詳しく話しません。 私自身が勉強に使った書籍やサイトを記事末尾の「参照」に掲載しているので、そちらを参考に

    ソースコードで理解するクリーンアーキテクチャ - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/07/10
  • Sansan iOS アプリの CI / CD 事情 - Sansan Tech Blog

    お久しぶりです。 Sansan iOS アプリエンジニアの中川です。 前回の記事では SwiftLint × Sider と SwiftFormat を使って、 Swift らしくリファクタリングする話を書きましたが、今回は CI / CD についてお話します。 buildersbox.corp-sansan.com CI / CD って? CI / CDは Continuous Integration / Continuous Delivery の略で日語ではそれぞれ、継続的インテグレーション、継続的デリバリーと呼ばれています。 Kent Beck, Cynthia Andres による書籍 Extreme Programming Explained: Embrace Change にて発表された開発のプラクティスの一つに CI が含まれており、アジャイル開発の浸透とともに広まりました

    Sansan iOS アプリの CI / CD 事情 - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/07/09
  • Eightを例にした、やさしい二段階認証の話 - Sansan Tech Blog

    初めまして。Eight事業部のPlatform Unit エンジニアの 李です。 私が属するPlatform Unitは基盤チームとも呼ばれ、Eightをより安心して使えるサービスにするための開発を行っています。 私は主にセキュリティー周りの開発を担当しています。今回は5月末にリリースしたEightの二段階認証機能について、調査や開発をする際にあった学びや気づきを共有できればと思います。 2段階認証機能を開発するにあたって 5月末にEightに二段階認証がリリースされました! これで前より安心して使えるサービスになりましたが、これからの内容は主に調査や開発をする際にあった学びや気づきです。 私は業務上で利用しているサービスではすでに二段階認証を設定していました。と言ったものの中で実際にどんなことが起こっているのかわからず、どこから手を入れればいいのかが全く不明でした。 早速調べてみるとWi

    Eightを例にした、やさしい二段階認証の話 - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/07/09
  • 【de:code2019 参加レポート(2)】ハードコアなデバッグにシビれる - Sansan Tech Blog

    Sansan 事業部 プロダクト開発部の宮崎です。 大分日が空いてしまいましたが、de:code 2019 のレポート2つ目です。 www.microsoft.com 私のde:code 2019レポートでは「ハードコアデバッキング」をご紹介します。 何かと思われるかもしれませんが、そういうセッションのタイトルだったのです。 正直にいうと、私も名前に釣られて行ってみました。 いきなり… センションのスタートと共に、 「唯一レベルのLv500*1ということです」 「ようこそ皆さん!ヘンタイの為のセッションへ!」 という刺激的なスライドが映し出されました。 くるところやっぱり間違えたかなぁ おらワクワクしてきたぞ! さらに、 「考えるな感じろ」 やっぱり帰ろうかなぁ 早く先がみてぇぞ! そして、 *2 悪用厳禁ときました、ですよねー。 登壇者のお二人は「どちらかといえばマシン語の方が得意なので

    【de:code2019 参加レポート(2)】ハードコアなデバッグにシビれる - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/07/09
  • WebP変換 & 画像キャッシュサービスをサーバレスで構築する - Feed re:Architect vol.1 - - Sansan Tech Blog

    Eight事業部 Platform Unit / Engineering Manager の 藤井洋太郎(yotaro) です。 前回、以下のRuby on Lambdaを使った画像処理基盤の記事を書かせていただきましたが、 今回の記事では少し前に、Eightフィード機能の高速化の際に行った、「画像フォーマット変換、リサイズ、キャッシュサービスをサーバーレスで構築した話」をしたいと思います。 Eightフィード Eightのメイン機能として、「ニュースフィード」があります。 この機能は、これまでに名刺交換をした「人」や「企業」に関連するニュースや更新情報を届けるものです。例えば、 役職変更、転勤などの人事異動情報 企業のプレスリリースなどの最新ニュース ユーザや企業による最新動向 など「ビジネスに必要な情報」が各ユーザにパーソナライズされた形で届きます。 サクサク動かない。原因はOGP画像

    WebP変換 & 画像キャッシュサービスをサーバレスで構築する - Feed re:Architect vol.1 - - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/06/11
  • SwiftLint × Sider + SwiftFormat で Swift らしくリファクタする - Sansan Tech Blog

    はじめまして。 Sansan iOS アプリエンジニアの中川です。 私は 2014 年新卒として Join し、4 年間はサーバーサイドエンジニアでしたが、直近のスマホアプリ利用率の増加や新コンセプトを体現するためのプロダクトリニューアルでモバイルエンジニアの需要が高まったため、転向しました。 iOS アプリを開発するのは就職活動のために萌えキャラクター育成ゲームを作った以来なので、 6 年ぶりでした。余談ですが、Sansan での面接時にこのゲームのコンセプトを取締役の一人に熱弁していたのを思い出しました。今、思い返すと黒歴史でしかないですね… 今回の記事では、こんな自分が Sansan iOS アプリ開発の現場に飛び込んで、感じたこと、やってきたことをご紹介しようと思います。 コードベースに秩序がない Sansan の iOS アプリは 2014/01/08 にバージョン 1.0.0

    SwiftLint × Sider + SwiftFormat で Swift らしくリファクタする - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/05/28
  • 状態を扱うモナド(後編) - Sansan Tech Blog

    前回のおさらい どうも、改めましてプロダクト開発部の自称社内関数型担当の福田です。社内でのHaskellのを読む勉強会を運営しています。 前回は状態を扱う関数を状態計算と定義し、小さな状態計算を連鎖できるような構造を持たせるための定義を行いました。「これで安心安全に状態計算が行える!」と喜び勇んで数多の状態計算を実装しまくるところですが、今回は少し目線を変えた定義を行うことで一風変わった状態計算の表現になる逆状態モナドを紹介します。 前回に比べてHaskellの文法要素も増えるので遅延評価に倣って逆状態モナドが必要になったときに以下を読むことをお勧めします*1。 状態モナド 前回紹介した状態計算を繋げる方法としてApplicativeとMonadのインスタンス定義を行いました。復習も兼ねて一部抜粋します。 instance Applicative (State s) where pure

    状態を扱うモナド(後編) - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/05/22
  • 顧客データHub開発の裏側(前編) - Sansan Tech Blog

    CTO藤倉です。今年3月、法人向けクラウド名刺管理サービス「Sansan」の新機能「顧客データHub」を発表しました。 これは、Sansanがこれまで蓄積してきた技術とノウハウを応用したテクノロジーで、独自の「名寄せエンジン」を用いて社内のあらゆる顧客データを統合できる機能です。 今回は、顧客データHubの開発を牽引したエンジニアである千田智己に話を聞きました。前中後編の3回に分けて紹介します。 前編では、彼の人となりや過去に担当したプロジェクトについて聞いていきたいと思います。 インタビュイー 千田智己:Sansan事業部 プロダクト開発部 エンジニア。(SIerを経て、2013年6月にSansan株式会社に入社。以来、法人向けサービスSansanの開発に携わる。) 「0から作って世に出すことの面白さ」に気がついた 藤倉:まずは千田さん自身について聞きたいんだけど、Sansanを選んだ経

    顧客データHub開発の裏側(前編) - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/05/21
  • AFTER RubyKaigi まとめたよ! - Sansan Tech Blog

    こんにちは。Sansan Builders Box編集部の鈴木由香です。 このブログを開始した頃に書いた「鈴木対談」以来の登場です。 ブログの運営の他に、勉強会の企画や運営なども行なっています。 最近企画した勉強会のひとつに、ラクスルさんとZOZOテクノロジーズさんと合同で開催した「AFTER RubyKaigi」があります。 こちらは、その名の通り RubyKaigi での知見を共有しよう! という勉強会です。 RubyKaigi に参加した人もそうでない人も、語りたい人も聞きたい人も、みんなで集まって楽しい時間を過ごそうよ、というわけです。 記事では、来られなかった方や参加した方の振り返りになるよう、当日のLT資料をまとめました。 が、非エンジニア目線でのゆるゆるなご紹介となりますことをお許しください!🙏 登壇資料のご紹介 「RubyKaigiを振り返ってみた」/ Sansan株

    AFTER RubyKaigi まとめたよ! - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/05/20
  • 「エンジニアリング組織のつくり方」を開催しました - Sansan Tech Blog

    人事部 高橋洸 です。 5/8 に当社京都オフィス Sansan Innovation Lab (以下 SIL) で勉強会「エンジニアリング組織のつくり方」を開催しました。 sansan.connpass.com 勉強会で使う和室は普段は集中できる静かなスペースです 今回のイベントのテーマは「エンジニアリング組織のつくり方」。プロダクトが成長すると、プロダクト自体、またはその組織の複雑性から様々な課題が生まれます。今回は Sansan に加え、さくらインターネットさん、はてなさんから 1 名ずつ登壇してもらい、それぞれが向き合ってきた課題について実例を交えて話してもらいました。 鈴木康寛 / Sansan株式会社「組織の多様性と向き合う」 speakerdeck.com 1人目の登壇は Sansan 株式会社の Eight 事業部でエンジニアリングマネージャーを務める鈴木(@yasuzuk

    「エンジニアリング組織のつくり方」を開催しました - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/05/17
  • 状態を扱うモナド(前編) - Sansan Tech Blog

    はじめに どうも、プロダクト開発部の自称社内関数型担当の福田です。社内でのHaskellのを読む勉強会を運営しています。 今回は一風変わったモナド、逆状態(反転状態)モナドが面白かったのでHaskellにおける状態モナドと合わせて2部構成で紹介したいと思います。 すごいHを読んだことのある方を想定していますが知らない方にも雰囲気だけ感じ取っていただけるように紹介したつもりです。状態モナドを知っている方は後編からお読みください。 状態計算 どのようなプログラミングパラダイムにおいても、状態をどのように取り扱うかは大きなテーマです。 プログラミング言語で利用する関数の実引数や関数内で利用する一時変数なども、一種の状態として見なせるものがあります。 状態を扱う際に直面する課題は「どこで状態を持っているのかが不明」「状態の取りうる値が不明」「どこで状態が変わったか不明」などがあると思います。

    状態を扱うモナド(前編) - Sansan Tech Blog
  • レイヤードアーキテクチャを振り返る - Sansan Tech Blog

    こんにちは、Sansanプロダクト開発部の清水です。 ある程度のアプリケーションの大きさだと当たり前に使われる事が多い「レイヤードアーキテクチャ」の自分が考える設計のポイントや、実際に運用する際のポイントについて書いてみようかと思います。 基的な話なので「今更かよ」って感じがしますが、実際に設計、運用する際には様々な考慮事項のあるものだと思うので、知ってる人にとっても復習にでもお役に立てればと思います。 そもそもレイヤードアーキテクチャって何? 概要 一言でいうと、アプリケーションを作る際にそれを構成する部品を、それぞれ責務が定義された論理的なグループにまとめて整理し、それぞれのグループ間のやり取りの仕方を決めておこうという事です。 このグループ間のやりとりにおいて、一方向かつ隣接するグループとしかやりとりを行えないようにする事が多く、層状になるのでレイヤードアーキテクチャと呼ばれます。

    レイヤードアーキテクチャを振り返る - Sansan Tech Blog
  • Ruby on Lambdaで実現する、Eightの大規模画像処理基盤 - Sansan Tech Blog

    Eight事業部 Platform Unit / Engineering Manager の 藤井洋太郎(yotaro) です。 私のチームはいわゆる技術基盤を担当するチームで、パフォーマンス改善、アーキテクチャ刷新、セキュリティ対応といった課題と日々向き合っています。 今回の記事では、昨年11月に行われた AWS re:Invent にて発表された「Ruby on Lambda」を活用した、Eightの画像処理バッチ基盤の改善について紹介します。 Eightにおける画像処理 Eightサービス内では名刺画像をはじめ多くの画像を扱っていますが、UX向上のためにそれらの画像に対して様々な処理を行っています。 1つの画像に対してぼかし、サムネイル、フォーマット(jpeg/webp)変換などを行い数十ケースの画像を生成しています。 画像処理は以下の図のように画像追加・更新時にSQSにジョブを追加

    Ruby on Lambdaで実現する、Eightの大規模画像処理基盤 - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/04/17
  • Webアプリケーションにおける正しいキャッシュ戦略 - Sansan Tech Blog

    こんにちは。プロダクト開発部のサーバサイドエンジニアの荒川です。普段はSansanのスマホアプリのAPIの開発をしています。 今回扱うテーマは皆さん大好きキャッシュ(Cache) です。 Webアプリケーションを開発するエンジニアである以上、キャッシュの存在からは逃れられないでしょう。 例えばパフォーマンスを向上させる手段として、キャッシュを仕込むことは往々にしてあるかと思います。 キャッシュを使えばパフォーマンスが向上しそう、というイメージも強いため安易に選択する戦略になりがちですが、正しく扱うことは質的に難しいです。 しかしキャッシュを上手に使えば、ユーザ体験を圧倒的に向上させることができます。 そんな諸刃の剣キャッシュ💰について考慮するべきこと、その戦略を改めてまとめてみました。 今回の対象 今回の対象は、アプリケーションレベルでのキャッシュ戦略を取り扱います。 いわゆるキャッシ

    Webアプリケーションにおける正しいキャッシュ戦略 - Sansan Tech Blog
    tkrtkhsh
    tkrtkhsh 2019/03/25
    Cache-Aside Pattern と Broker Pattern の話。実装レベルでどうやって抽象化するかも悩ましい