SvelteKit with Sentry

こんにちは、こんばんは、久保田です。

この記事ではSvelteKitにSentryを導入する方法を紹介します。

Sentryってなに?

詳細は割愛します。ざっくりいうとアプリケーションのエラーを集約するSaaSです。
詳しくはサイトなり別途解説された記事を参照ください。

Application Performance Monitoring & Error Tracking Software | Sentry

SvelteKitにSentryを導入する

まず、SvelteKitでSentryを導入する際に気をつける点があります。
それは、「SSR時のエラーか、CSR時のエラーか」ということです。
SvelteKitはSSR(サーバーサイドレンダリング)できるフレームワークですので、サーバーでNode.jsによって実行されるランタイムがあります。
また、SSRされた後配信されたHTMLとJSによってブラウザで実行されるCSR(クライアントサイドレンダリング)のランタイムがあります。
ですので以下の状況のエラーを捕捉する必要があります。

  • サーバーでエラーが発生した場合
  • クライアントブラウザでエラーが発生した場合

それではそれぞれのエラーをSentryで捕捉できるようにしていきます。

導入

まずはSentryのライブラリを導入します。 導入するのは次の6つです

  • @sentry/browser
  • @sentry/integrations
  • @sentry/node
  • @sentry/svelte
  • @sentry/tracing
  • vite-plugin-sentry

npmの場合は以下のようにインストールしてください。

npm install -S @sentry/browser @sentry/integrations @sentry/node @sentry/svelte @sentry/tracing vite-plugin-sentry

ビルド時にSentryへmapファイルを送るためのViteプラグインが用意されているので設定します。

vite.config.(js|ts)

import viteSentry from 'vite-plugin-sentry'

// 略

plugins: [
    sveltekit(),
    viteSentry({
      url: 'https://sentry.io',
      authToken: process.env.SENTRY_AUTH_TOKEN,
      org: 'ma-cloud',
      project: 'yell-front',
      release: process.env.VITE_SENTRY_RELEASE,
      deploy: {
        env: env.mode
      },
      setCommits: {
        auto: true
      },
      sourceMaps: {
        include: ['./build/client/', './build/server/'],
        ignore: ['node_modules']
      }
    }),
],
// 略

サーバーエラーの捕捉

SvelteKitはサーバーで処理される際のミドルウェアのようにリクエスト処理とレスポンス処理を挟み込んだ処理を書くことができます。 それがhooksです。

Hooks • Docs • SvelteKit

hooks.server.(js|ts)を作成し、エラーハンドラでSentryのライブラリが起動されるように設定します。

import type { HandleServerError } from '@sveltejs/kit'
import * as Sentry from '@sentry/node'
import { RewriteFrames } from '@sentry/integrations'

if (import.meta.env.VITE_SENTRY_DSN) {
  Sentry.init({
    dsn: import.meta.env.VITE_SENTRY_DSN,
    tracesSampleRate: 0.01,
    environment: import.meta.env.VITE_ENVIRONMENT,
    release: import.meta.env.VITE_SENTRY_RELEASE,
    integrations: [new RewriteFrames({ root: '/var/www/yell-front/build/server/' })]
  })
}

export const handleError: HandleServerError = ({ error, event }) => {
  if (!(error instanceof Error)) {
    return
  }
  Sentry.captureException(error, {
    extra: { event: event },
    tags: { ssr: true, ip: event.getClientAddress(), errorId }
  })
  return {
    message: 'Whoops!' // 適宜変えてください
  }
}

クライアントエラーの捕捉

こちらもhooksが利用できます。 hooks.client.(js|ts)を利用することでクライアントブラウザでのエラーハンドラを利用することができます。

import type { HandleClientError } from '@sveltejs/kit'
import * as Sentry from '@sentry/svelte'
import { BrowserTracing } from '@sentry/tracing'

if (import.meta.env.VITE_SENTRY_DSN) {
  Sentry.init({
    dsn: import.meta.env.VITE_SENTRY_DSN,
    tracesSampleRate: 0.01,
    environment: import.meta.env.VITE_ENVIRONMENT,
    release: import.meta.env.VITE_SENTRY_RELEASE,
    integrations: [new BrowserTracing()]
  })
}

export const handleError: HandleClientError = ({ error, event }) => {
  Sentry.captureException(error, {
    extra: { event: event }
  })
  return {
    message: 'Whoops!' // 適宜変えてください
  }
}

サーバーもクライアントも共通してhandleErrorでエラーを捕捉することができるので同じような記述で対応することができます。
SvelteKitではどちらのエラーもhooksに集約できるので見通しよく管理ができて良いですね。

【入社エントリ】中途入社しました

みなさん。初めまして! 先月からM&Aクラウドにジョインしました。栄山です。(えいやまと読みます)

ツイッターこちら です。よろしくお願いします

入社まで

前職はIT技術者派遣会社でWEBエンジニアをしていました。

認証系アプリの開発、ゴルフ関連アプリの開発、ポイントサイトの開発保守と様々な案件に携わりました。 業務にあたる中で、ユーザーのフィードバックを受けてプロダクトを改善するの楽しいということに気づきました。

そんなある日、ひょんなことからM&Aクラウドのカジュアル面談を受けることになりました。 その中スクラム開発について議論する機会があり、自分が理想としている考え方に近いことを話していたので面白そうと思い、入社に至ります。

入社してみて感じたこと

入社して1ヶ月ほど経ちましたが、スクラム開発がきちんと機能しておりとても働きやすいです。下記の点が個人的に良いなと思います。

ソースコードが適切な粒度で書かれていて読みやすい

アーキテクチャに沿って意味のある粒度でソースコードが書かれているので、入社して間もない私でも意外に読めてしまいます。 エンジニアはソースコード書く時間より読む時間の方が長いと言われているので、読むのが楽しいソースコードなのがとても良いです。

リリースサイクルがはやい

Feature toggleという機能を使うことで、リリースサイクルを高速化しています。 リリースサイクルが高速化されると、バグにすぐ気づけますし、余計な手戻りも防げるのでとても良いです。

業務改善しやすい

弊社はスクラム開発手法を取り入れており、1週間に1度必ず振り返りの機会があります。良いところやうまくいかなかったところを振り返りチーム内で認識を合わせられます。 仕事中に効率化できるかもと思ったアイデアを相談でき、場合によっては業務改善につながるのでやる気がでます。

これから

前職ではバックエンド中心だったのですが、M&Aクラウドではフロントエンドも触れる機会があるので技術の幅を広げていきたいです。 ユーザーファーストなアプリケーション開発を心がけたいと思います。

Amazon Pollyを使ってAIに音声を読み上げしてもらおう!

こんにちは、こんばんは、エンジニアの久保田(@kubotak_public)です。

先日から弊社では社内勉強会の技術書籍感想会をポッドキャストとして配信をはじめました。 まずはLeanとDevOpsの科学の感想会をしていますので興味ある方ぜひご聴取ください。

open.spotify.com

さて、このポッドキャストのオープニングでナレーションを努めていただいたのはなんとAWSのAIでした。 それが「Amazon Polly」です。

コンソールにアクセスすると以下のような画面からテキストを読み上げてくれます。

話者は「ミズキ(女性)」と「タクミ(男性)」の2種類が用意されていますが、残念ながらニューラル(可能な限り自然で人間に似た音声を生成します。)が利用できるのは「タクミ(男性)」のみでした。 ※2023年1月現在

テキストの入力はSSML(Speech Synthesis Markup Language)に対応していて、例えばポッドキャストのオープニングは以下のようなSSMLを書いています。

<speak>
<p>このポッドキャストは<phoneme alphabet="x-amazon-pron-kana" ph="エムアンドエークラウ'ド">エムアンドエークラウド</phoneme>の<phoneme alphabet="x-amazon-pron-kana" ph="ウェブ">Web</phoneme>エンジニアが、<phoneme alphabet="x-amazon-pron-kana" ph="ウェブ">Web</phoneme>系の技術書籍の感想を語り合うプログラムです。</p>
<p>お題の書籍を各章毎に事前に読んで、その章毎の感想を語り合います。</p>
<p><phoneme alphabet="x-amazon-pron-kana" ph="ツンドク">積ん読</phoneme>している本が紹介されていたら、これを機会に読んでいただいたり、すでに読んだことのある本であれば、思い出していただく機会になれば幸いです。</p>
<p>それでは、本日の感想会が始まります</p>
</speak>

ここだとエムアンドエークラウドはそのままだとエムアンドークラウド↑みたいに読まれてしまうので<phoneme alphabet="x-amazon-pron-kana" ph="エムアンドエークラウ'ド">エムアンドエークラウド</phoneme>とすることでエムアンドークラウド↓と読ませることができます。

読み上げデータはMP3でダウンロードできるので、それを利用してポッドキャストに組み込んでいます。

昨今読み上げAIのソフトウェアやサイトが数多くありますが、権利関係が大変で気軽に使いたいなーと困っていたところAWSに読み上げAIがあり驚きました。 気軽に使えて、なおかつ自然に発声してくれるので興味のある方は使ってみてください!

【入社エントリ】M&Aクラウドにジョインしました。

こんにちは(おはようございます、こんばんは)、この度、M&Aクラウドに1.5人目データエンジニア(これまでは工数的に0.5人分津崎さんが進めてくれていました)としてジョインしたhomura99と申します。よろしくお願いします。入社したのは11月中旬なのですが、文を書くのが得意ではなく、執筆し終えるのに、一ヶ月以上かかってしまいました。

これまでの経歴

一社目

大学院卒業後、それまで、化学畑を歩んできたこともあり、ゴム会社のタイヤ用ゴム材料の開発者として働き始めました。選考自体は化学工学といって化学のようで化学でない学問なのですが、研究者や開発者というものに憧れがあったこと、toC向けの製品の方が実際に使われているところが見えてモチベーションになるかなと思い進みました。研究室の同期も大手消費財やエンジニアリング会社等、いわゆる一流企業と呼ばれる会社に就職していきました。そんな会社で2年近く働いていたのですが、開発者という仕事が私にあっていないことが徐々にわかってきました。仕事内容自体もそうなのですが、特に大きかったのが、1年目の途中で怪我をしてしまったことです。完全に自分の不注意なのですが、私にこの職業は難しいと悟り、再度やらかしてしまわないうちに(ために)転職しました。

二社目

キャリアチェンジということでデータ分析系の仕事を受託をしているベンチャー企業に完全業界未経験ながら、データアナリストとして入社しました。ここでは、研修一ヶ月と自習期間一ヶ月を過ごした後で、前任者が少し燃やしていた後のPJにほぼ一人の状態で客先常駐しました。最初の三ヶ月ぐらいはお客さんと関係を築くのに苦労しましたが、その後は順調にPJを大きくしていくことができ、最終的に4人ほどがその会社からジョインしたPJにまで成長することができました。テーマは自然言語処理とそれまで、全く関わりのなかったものだったのですが、なんとかキャッチアップしながら食らいついていくことができました。

三社目

二社目の会社も1年半ほど勤めた後に転職することにしました。理由は明確で、給料が安かったんです。キャリアチェンジということで一社目から転職するときに下がってしまったので、それを取り戻すプラスアルファぐらいの気持ちで転職活動をしていたら、石油元売り大手の会社さんのDX関連部室にお誘いいただき、データサイエンティストという肩書きで転職しました。入社半年ぐらいは大きくすることもなく、過ごしていましたが、半年すぎたあたりからデータ基盤を構築するPJを主導しました。これまた、ほぼほぼ経験のない分野ではあったのですが、ある程度、順調にPJを進めることができたかなと思います。PJの予算はかなり潤沢にあり、普通ならとても検討の対象に入らないような高額なソフトウェアを使うことも出来ましたし、外部の人的なリソースを追加してもらうのも、難しくなかったため、仕事自体は忙しいといったこともなく、そこそこに楽しかったです。ただ、自分のカバーする範囲がすごいピンポイントになっていることに気づき、ないものねだりで転職することに決めました。

M&Aクラウドに入社した理由

これまでの経歴を見てもらえればわかると思うのですが、M&Aや金融については明るいわけではなく、特にそちらを希望していたわけでもありませんでした。もっと自分の手を動かして進めていきたいと思ったこと、データを主軸にキャリアを築いていきたいと考えていたため、あまり規模の大きくなく、データエンジニアやデータサイエンティストといった職業を募集している会社さんを中心に見ておりました。(スタートアップだと、シリーズB~Cぐらいの会社さんでそのような応募が増える印象あります。)決め手となったのは、CTOの荒井さんの人柄やしっかり考えた上で最新の技術を取り入れていく会社としての姿勢に共感したこと、M&Aという馴染みのない領域だからこそ、面白い発見がデータを使ってできるのではないかと考えたことがあります。

M&Aクラウドでやっていきたいこと

これに関しては、オリジナリティはありませんが、「データを活用して」、弊社のミッションである「M&A流通革命を」起こせたらと思っています。そのためにまずは、まだ生まれたばかりのデータ基盤をもっともっと価値のあるものにしていく必要があると思っています。一口にデータ基盤といっても機械学習や深層学習といった昨今、華々しい成果を挙げている領域から、データ収集やDWH、BIといったわかりやすい領域だけでなく、メタデータやデータの品質管理といった領域、果てはそのデータが生み出される部分までデータエンジニア(データ何でも屋)として広く携わっていければと思っています。

M&Aクラウドのデータへの取り組みを振り返る【2022年】

こんにちは。エンジニアリングチームのつざきです。月日が経つのは早いもので今年もアドベントカレンダーの季節がやってまいりました。 私は3年前に3人目Webアプリケーションエンジニアとして入社し、これまでM&Aクラウドプラットフォームの開発に主に関わってきました。今年からデータエンジニアリングの世界に入門しております。

この記事はM&Aクラウド2022年のアドベンドカレンダーの2022/12/3の記事です。今年のアドベントカレンダーのテーマは「2022年の振り返り」です。M&Aクラウドでは今年、データ基盤の構築を行なった他、データ利活用のためにSalesforceのデータ整理などを行なってきました。本記事では、2022年のM&Aクラウドにおけるデータへの取り組みについてざっくりと振り返っていこうと思います。

データドリブンを目指したRedash時代 (2020年~)

image.png (12.8 kB)

M&Aクラウドではデータドリブンな意思決定をしていこうという方針の元、Redashが導入されました。 Redashが導入されてからGoogleAnalyticsやプラットフォームのデータベースにあるデータが、KPIの計測、プロダクト開発のファクトや効果検証に使われ始めました。

データ利用の浸透(2022年)

ここからが2022年の話になります。 データ利用を全社レベルで浸透させる試みとして、2022年4月に「データソン」を開催しました。聞きなじみのない言葉かもしれませんが、簡単に言えばハッカソンのデータ分析版です。学習コンテンツを提供し、後半は、チームごとにデータ分析をしてプレゼンしてもらう。という内容で実施しました。

image.png (289.6 kB)

(図:データソンのスライドの一例)

(データソンについての詳細はこちらの記事の「2022年 データソン実施」をご参照ください。https://tech.macloud.jp/entry/2022/09/06/144901 )

データ利用の課題

Redashは素晴らしいツールですが、データ利用を進める中で以下のような課題が発生していました。

  • 複数のデータソースを横断的にクエリするのが難しい
  • データが信頼できない
    • クエリの再利用性が悪く、各自が自由にクエリを書いている
    • データ取得・加工の流れに透明性がない(どこからどのようにデータ取得して加工しているのか追うのが難しい(複合クエリ)

また、Redashの課題とデータ蓄積の課題から次のようなビジネス面での課題が発生していました。

  • M&Aのマッチング支援がスケールしない
    • マッチング支援をデータによってサポートする仕組みがないため
  • 全社に関わるKPIツリー構築が属人的
    • 各自RedashでSQLを書いてるため
  • M&A成約までがブラックボックスになっている
    • データ蓄積できてないため

データに関するビジネス視点で課題については、EMの鈴木さんが詳細を書いてくれていますので気になる方はご参照ください。この記事ではデータ周りの具体的な話を中心に進めていきます。 https://tech.macloud.jp/entry/2022/09/06/144901

データプロセス・リエンジニアリング プロジェクト (2022年6月~)

データプロセス・リエンジニアリング(造語、以下DPR)プロジェクトとは「データに関するプロセスを全社的に見直し、現状の局所最適された状態から全体最適を目指す」プロジェクトです。このプロジェクトでは、「テクノロジーを駆使したフローの構築」のために、「信頼できるデータの構築」と「データにアクセスする手段の構築」の2つのサブプロジェクトに分かれて並行的に走り出しました。

スクリーンショット 2022-12-01 19.37.35.png (263.1 kB)

社内での利用状況のヒアリング

各部署とミーティングを行い、部署ごとに業務プロセスとデータの関係を図で整理しました。

(図:ある部署の業務プロセスとデータの関係)

信頼できるデータの構築

弊社でSFAとして利用しているSalesforceには、記事掲載の営業業務、記事のライティング業務、M&Aアドバイザーのアドバイザリー業務などさまざまな利用者がおり、全体像を把握できていない状況でした。また、各部署で自由にオブジェクトや項目のカスタマイズを行なっていたため、弊社にとって重要な情報である、M&Aや資金調達のニーズの情報が散らばって保存されていたり、企業が重複して登録されてしまっているなど、「信頼できるデータ」になっていませんでした。

なお、このプロジェクトでは「信頼できるデータ」を以下のように定義しました。

  • 一意性:唯一つだけ存在していること
  • 正確性:正しく入力がされていること
  • 網羅性:全てが入っていること

スクリーンショット 2022-12-01 23.03.07.png (244.4 kB) (図:信頼できないデータ(基盤)の例、DPRプロジェクトのキックオフ資料より引用)

Salesforceの見直しについては、3つのフェーズに分けて取り組んでいくこととしました。 スクリーンショット 2022-12-01 23.29.54.png (289.1 kB) (図:3つのフェーズ、DPRプロジェクトのキックオフ資料より引用)

変更のルール整備や不要な項目の削除といった地道な地慣らしから始まり、現在は、フェーズ1の顧客データの整備を終え、フェーズ2のOperationデータの整備に着手したところです。フェーズ2では「誰が、いつ、どのように何を紹介(営業)したか」といった情報を「信頼できるデータ」として蓄積する準備を進めています。

データにアクセスする手段の構築

上記の信頼できるデータの構築(主にSalesforce)と並行して、データにアクセスする手段の構築を進めました。前述の通り、Redashではデータ分析できる状況ではありましたが、今後のデータ活用のため、きちんとしたデータ基盤を構築することとなりました。次の章で詳細を記載します。

データ基盤の構築プロジェクト(2022年9月~)

データ基盤の構築プロジェクトでは、データエンジニアの山﨑さんに業務委託で参画していただき、知見をお借りしながら、CTO荒井、山﨑さん、私の3名で進めました。技術調査・技術選定においては山﨑さんがメインで進めてくださいました。

image.png (279.3 kB)

DWH(BigQuery)の導入

DHWはBigQueryを選定しました。他の候補としてRedShift, RedShift Serverless, Snowflakeがありました。 技術選定では、インフラのメンテコストが少ないこと、利用事例が多いこと、情報収集がしやすいこと、がポイントになりました。(専属データエンジニアが1名もいないスタートアップだったので)

進化的データモデリングのためのDWHのアーキテクチャ設計の採用

データ基盤では、データの加工・整理レベルに応じて3層構造でデータを分けるのがベストプラクティスとされています。通常ではこれらの層を別のサービスで実現しますが、ゆずたそさんの記事を参考に、これらの加工処理を一元管理するため、BigQuery内の3つの層を持つ設計を採用しました。

スクリーンショット 2022-12-01 20.30.52.png (290.5 kB)

(図:ゆずたそさんの記事より引用)

BigqQueryでの個人情報の取り扱い方針を決定

基本的に「BigQueryには個人情報をいれない」という方針で進めました。しかし、顧客情報と連結してリストを作りたいというビジネス側の要望があり、「個人情報を入れないBigQueryプロジェクト」と「個人方法を含むBigQueryプロジェクト」を分離し、プロジェクト単位でアクセス制御を行うことにしました。 BigQueryにはカラムベースやテーブルベースでのアクセス制御ができるので、将来的にはそういった形になる未来もあるかもしれませんが、初期としては細かい制御は行わずガッツリ分けるという判断にしました。

dbtの導入

スクリーンショット 2022-12-01 23.07.28.png (31.4 kB)

https://www.getdbt.com/

進化的データモデリングのための内部3層構造を実現するためのデータ加工ツールとしてdbtを採用しました。 この界隈ではdbt一強という感じだったので採用したという形です。また、dbtはOSSCLIツールなのですが、有料でSaaS版があります。弊社ではdbt導入にかかる時間的コストを下げるためにSaaS版を利用することにしました。なお、1開発者につき50USD/月で結構高いので、そのうちSaaS版からは離れるかもしれません。 ちなみに、3層構造の話をしましたが、dbtのベストプラクティスに従って実は4層構造になっています。 スクリーンショット 2022-12-01 22.36.37.png (111.8 kB)

ETL(Trocco)の導入

https://trocco.io/lp/index.html

様々なデータソースからデータをBigQueryに転送するためのツールとしてTroccoを採用しました。 技術選定のポイントは、インフラ・転送設定のメンテナンスコストが低いこと、国内での事例が多くサポートが手厚いことでした。めっちゃ最高なのでこちらも別途記事にしたいと思ってます。 他の選択肢としては、appflow、Aws workflow for airflow、Cloud Compose・Data Transfer Serviceがありました。

BIツール(Looker Studio)の導入

スクリーンショット 2022-12-01 23.08.23.png (13.3 kB)

https://cloud.google.com/looker-studio?hl=ja

BIツールとしてLooker Studioを採用しました。採用した当時はData Studioでしたが、名前が変わりましたね。 技術選定のポイントは、BigQueryとの相性の良さと、値段(無料)なことでした。現状まだガツガツ使っているわけではないですが、今のところは機能不足といった問題は起こっていないです。

社内展開

各種ツールの導入が終わり、一旦データベースのほぼ全てのテーブルと、一部Salesforceのオブジェクトについて利用可能になりました。一部の社内ユーザーは早速BigQueryを使って分析するように移行を始めてくれています。今のところRedashでできていたことと変わらないので(むしろBigQueryの方がデータが少ない)、データソースの追加、便利なデータウェアハウステーブルの提供などを進めていきたいと考えてます。

1人目データエンジニア入社(2022年11月)

11月中旬に、1人目データエンジニアの尾村さんが入社されました。元々データエンジニアの経験のある方で、早速データチームを牽引してくれています。まもなく「入社記事」が出ると思いますのでお楽しみに!

データへの取り組みのこれから

BigQueryの社内利用が開始され、新しいデータ基盤としてようやく動き始めました。しかし、ビジネス価値の創出するためには、やらなければいけないことはたくさんあります。ひとつは、社内のデータ利活用を便利にしてくこと。まだ利用できるデータソースが少ないですし、staging層の提供や、ビジネスデータカタログの提供、分析ニーズごとにデータマートの提供していくことを考えています。次に、現状のデータ分析(KPIの確認)などをデータマートから提供できるようにリプレイスすること。それから、まだデータ化されていない部分のデータ化です。現状ではM&Aのマッチングに関する情報、成約に関する情報などの重要な情報が「信頼できるデータ」として整備されてない状況です。業務オペレーションにも大きく関わってくる部分なので、各部署と力を合わせて実現できたらなと思っております。 個人的には、「データの力でM&A流通革命を起こす」ためにやっていくぞ!という気持ちです。

おわりに

最後まで読んでいただきありがとうございます。各種ツールの選定理由や設計、導入してみた結果などの詳細については、別途記事にしていこうと思っております。 「これ気になるよ〜」というのがあればTwitterでツイートいただけたら嬉しいです😁

2022年M&Aクラウドアドベントカレンダーが始まりました!

この記事は2022年M&Aクラウドアドベントカレンダーの1日目の記事です。
M&Aクラウド Advent Calendar 2022 - Adventar

こんにちは、こんばんは、M&AクラウドでWebアプリケーションを作っている久保田です。
業務内容としてはM&Aクラウドや資金調達クラウドシステム開発・保守を行っています。
Twitterやってるのでぜひフォローしてください。@kubotak_public

さて、2022年もついに最後の月となりました。
昨年に引き続き、今年も旗振り役兼トップバッターとして記事を書かせていただいております。

今年のテーマは「今年の振り返り・来年の抱負」

・・・


(;゚д゚)(つд⊂)ゴシゴシ(;゚Д゚)…?!


はい、「今年の振り返り・来年の抱負」です。
ちなみに昨年のテーマは「テック」でした。今年は随分と・・・なんというか・・・ありきたり?
しかしこのテーマにも選んだ理由があります。
それはズバリ

全社一丸のアドベントカレンダーは採用候補者がチェックしている

ということです。もう少しちゃんと説明します。
昨年M&Aクラウドでは初めてアドベントカレンダーを開催しました。それも職種問わず全社横断で記事を書きました。
これにはもともと意図があり、ITの力でイノベーションを起こすスタートアップ企業のメンバーなら職種問わずに「テック」な記事を書こう!というモチベーションです。
アドベントカレンダーといえば近年ではとりわけWebエンジニア界隈がQiita等で記事を書くのが一種のムーブメントですが、それに馴染みのない人も巻き込んだ全社一丸のプロジェクトです。
社員一同テックであれ、というようなメッセージがあるとかないとか。

そんな内向きな理由がそもそものスタートでした。
しかし意外にも2022年の中途採用者からアドベントカレンダー見てました」という声があり、「これは採用広報になるのでは?」ということでM&Aクラウドで働く中の人のリアルな振り返りをお届けしたほうが価値があるのではないか・・・というのが今年の趣旨です。
未来のメンバーに対して、「M&Aクラウドではこんな仕事しているんだ」「こんな人が働いているんだ」と認知してもらえる良い機会だと思いました。

そして今年のテーマ「今年の振り返り・来年の抱負」となったわけです。おそらく来年以降も同じテーマで開催できるので実にサスティナブル。
SDGsもニッコリです。

前置きが長くなってしまいましたがここから私の「今年の振り返り・来年の抱負」を書いていこうと思います!

2022年の振り返り

業務的な振り返りをすると上半期はAWS CDKを利用してElasticBeanstalkからECSへの移行、下半期は資金調達クラウドの新規開発が大きなトピックでした。
ECS移行に関してはこちらの記事で詳細をお伝えしています。

tech.macloud.jp

また資金調達クラウドではSvelteKitというまだメジャーバージョンがリリースされていないフレームワークを採用しています。
それについての記事はこちらです。

tech.macloud.jp

なんだかんだスタートアップらしく毎年新しいことにチャレンジしていると思います。
とはいえやはり日々成長するアプリケーションですので負債、いわゆるイケてないところも目についてきてしまいます。
新しいことにチャレンジしつつ泥臭くイケてないところも直していく、そんな両立が必要だと思いますので弊社に興味のあるWebエンジニアの方は参考にどうぞ。詳しく知りたい場合はTwitterDMとかで私を捕まえてください!

個人的な振り返りをすると今年はプライベートで特に進捗なかったなーと思います。
共同執筆で技術書を出版させていただきましたが、執筆していたのは実際には昨年だったりするので今年は勉強会登壇とかに時間を割いた時間が多いかも知れません。
ちなみに書籍はこちらです。興味のある方はどうぞ〜 books.mdn.co.jp

2023年の抱負

業務については引き続きイケてないところの改善が必要かなと思います。
あとは今年11月にリリースした資金調達クラウドの評判が良いみたいなので引き続きこちらも開発をモリモリやっていくと思われます。

個人的には何らかのアプリケーションを作ろうかなーと考えてますがモチベーションの上がるアイデアがないので来年中になにか手を動かしたいなーと思ってます。

ではでは明日のアドベントカレンダーは弊社エンジニアリングマネージャの鈴木さんです。お楽しみに!!!

株式会社M&AクラウドはVueFes Japan Online 2022のブロンズスポンサーです

株式会社M&AクラウドはVueFes Japan Online 2022のブロンズスポンサーです。
Vue Fes Japan は JavaScriptのUIライブラリであるVue.jsを扱った日本最大級のカンファレンスです。
2019年、2020年は災害や感染症リスクにより開催が延期されていましたが今年2022年10月16日(日)ついに開催となります。

vuefes.jp

弊社でもVue.jsを利用したフレームワークであるNuxt.jsを採用しております。

tech.macloud.jp

また、Nuxt.jsを扱ったオンライン勉強会「Nuxt道場」なども実施しています。

tech.macloud.jp

VueFes Japan Online 2022は無料でオンライン参加可能です。

全員インフルエンサー活動が3年経過してどうなっているかお伝えします

こんにちは、こんばんは、kubotak(@kubotak_public)です。

突然私事ですが、M&Aクラウドにジョインして丸三年が経ちます。(実際には11月ですが誤差)

tech.macloud.jp

私の入社後から弊社では社外発信を強めていこうという活動が始まりました。
これをエンジニアチームでは「全員インフルエンサー」というバリューで呼んでいます。

全員インフルエンサーについては以下を参照

tech.macloud.jp

簡単にどういう活動か説明しますと、エンジニア向けの投稿サイトで記事を書いたり、イベントに登壇していこうぜ!!!というアウトプットを推奨する活動です。
他社には見かけないなかなか尖ったバリューではないかと思います。
一応勘違いを避けるために、このバリューは強制しているわけではなく基本的には自発を促しています

まずは結果を振り返ってみる。

2020年から始めた活動ですがどのような結果を残せたのかを紹介したいと思います。

2020

イベント 登壇 LT
PHPerKaigi2020 - 1
PHP Conference 2020 1 3

エンジニア人数: 5人
計: 5回

2021

イベント 登壇 LT
PHPerKaigi2021 3 2
PHP Conference 2021 3 2

エンジニア人数: 6人
計: 10回

2022

イベント 登壇 LT
PHPerKaigi2022 1 5
スクラムフェス大阪2022 1 -
PHPカンファレンス沖縄2022 2 -
PHP Conference 2022 1 3

エンジニア人数: 8人
計: 13回

いかがでしょうか?人数とともに登壇数も伸びていて、まさに「全員インフルエンサー」を体現できていると思います。
ちなみに、ほんとうの意味でメンバー全員が登壇しているので文字通りの全員インフルエンサーでもあります。
そして、入社後に初登壇を果たしたメンバーは8人中5人も居ます!

なぜ全員インフルエンサーが可能なのか

正直なところ全員インフルエンサーはエンジニア人数が増えれば増えるほど難しくなり、今後は達成することは難しいことだという認識は持っています。
しかし、現時点でなぜここまでできたのかと言うと、以下のような取り組みのおかげだと思っています。

まだ人数が少ないうちに全員登壇経験をさせる

これは強制ではないので「させる」という言い回しは適切ではないと思いますが登壇できるようにサポートすることが大事だと思います。
周りを見渡せば全員が登壇経験がある。ということは登壇に対しての相談もできるし、登壇前にどんなプロポーザルを出すべきか、どんな資料を用意しておけばよいかなどのお手本が、「誰を見ても」持っているという状態になります。
登壇することに対しての心理的ハードルを下げることに役立っていると思います(逆にプレッシャーになっていたら申し訳ない)

イベントのスポンサーをやる

所属している企業が技術系イベントのスポンサーをしていることでそのイベント自体に興味関心を持ってもらいます。
そもそも知らないというメンバーもいると思います。しかし、「こんなイベントあるよ〜行ってみなよ〜登壇してみようよ〜」と言われても関心持てないですよね。
なのでスポンサーをすることで弊社はイベントに関心を持っている。というアピールをしていくのは大事だと思います。

勉強会チャンネルを用意する

弊社ではSlackに勉強会用のチャンネルがあります。そこでは次に開催されるイベントやスポンサーをするイベントを告知したり、そのイベントのプロポーザルが開始した際の告知をします。
さらにプロポーザルの開始時には特定のメンバーにメンションを送って「○○さんのあのときの実装の話できるんじゃない?」などの明確にどんな内容を喋ってもらいたいかまで伝えます。
個人的にはこれが一番効果があると思っていて、私自身も「最近やってることで喋れる内容無くない・・・?」と思いがちですが、他のメンバーから「あの話良さそう!」と提案をもらえるとありがたいです。

まとめ

「全員インフルエンサー」活動が3年経過したのでまとめてみました。
いかがだったでしょうか?他社でも真似できる取り組みがあればぜひ真似してみてほしいです。
また、「全員インフルエンサー」いいな、と思ったらぜひ弊社のカジュアル面談でもどうぞ!!!!

www.wantedly.com

M&AクラウドはPHPカンファレンス2022のゴールドスポンサーです

弊社M&Aクラウドは2022年9月24・25日に開催されるPHPカンファレンス2022のゴールドスポンサーです。
phpcon.php.gr.jp PHPカンファレンスプログラミング言語PHP」を扱う日本最大の技術カンファレンスです。
弊社から4人のメンバーが登壇予定です。

fortee.jp

fortee.jp

fortee.jp

fortee.jp

今年はオンライン・オフラインのハイブリッド開催となり、2019年以来の大田区産業プラザPiOにて開催されます。
弊社メンバーも数人は会場にて参加予定ですので見かけた際にはぜひ声をかけてください!

【スタートアップ】会社フェーズ毎のデータ活用とデータ基盤の「これから」

こんにちは。エンジニアの鈴木(@yamotuki)です。
データの活用とデータ基盤の構築に関する考えを整理したいと思い、この記事を書いています。

M&Aマッチングプラットフォームとしての「M&Aクラウド」が立ち上がった4年ほど前から、現在に至るまでデータをどう活用してきたのかというのをざっくりまとめた後に、今のデータ基盤構想とその背景にある考えを書こうと思います。

弊社におけるこれまでのデータ活用に関わる意識の変化

2018年~ M&Aクラウドリリースからしばらく

M&Aクラウドプラットフォームのリリースは2018年4月です。データ分析に対して深い知見のある人は社内にもちろんゼロ。しかし、google analytics は入れてあり、mouseflow などユーザ行動が見れるサービスも入っていました。mouseflow は登録フォームのファネルでの離脱点がどこかといった分析もできます。これらを活用して、PdMとエンジニアは以下のような分析をしてサービス改善をしようとしていました。

  • アクセスの多いページはどこだろう。全てのページが最低限の機能しかない。analyticsを見てユーザ数が多いところから改善していこう。
  • 登録フォームの離脱が多い項目はどこだろう。mouseflowを見てフォームの項目を整理したりステップ分離したりしよう。
  • 迷いを生む機能はどこだろう。mouseflowのレコーディングを見て、特にユーザがストレスを抱えているところはどこだろう。

弊社の主な顧客は経営者であり、母数としては多くないのでデータ量としてはあまり多くありません。多くの改善は定性的な情報に基づき「えいや!」で改善をしていました。また、KPIなど指標に関わるデータはエンジニアが依頼を受けて都度出力する運用になっていました。

2020年~ Redashの導入

Redash を導入しました。Redash はデータソースとなるAmazon RDSやSalesforceスプレッドシートなどに直接繋がっている状態でした。プラットフォームにおける主要な指標を、まずはPdM(マーケ担当兼任)が中心となって測定して改善に繋げようという目的です。
会員登録数やアクション数などがオンデマンドで情報が取れて、ダッシュボードで一覧として見れるようになりました。これにより、重要な指標になる数値がチーム朝会などで確認できるようになり、エンジニア側でもプラットフォームの数値への関心が高まってきました。

その後、Redashは顧客サポートをするメンバーをはじめ、社内全体にも解放されました。このRedash解放により、非エンジニアでも当たり前のようにSQLを使ってデータベースを参照する人が現れました。目的は、顧客サポートのための情報整理や、データ分析をしてサービスの改善提案をすることです。

2022年 データソン実施

弊社では定期的に(本当に定期なのか怪しいですが半年または1年ごとに)全社員が参加するハッカソンが開催されています。第3回ハッカソンは「データの活用」をテーマにしたいわゆる「データソン」です。

データソンを行う背景には以下のような意図がありました。(当時の資料から引用)

データソン。空・雨・傘で表現すると

- 空: データ活用の度合いが人によって偏っている
    - e.g. Redash のクエリ作成者が社内の特定のメンバーに偏っている
    - e.g. 部署に少なくとも1人ずつ詳しいメンバーが理想的だが、(多分)そうなってない
- 雨: 社内にどのようなデータが存在するのか、データをどのように扱えば良いのか、分析すると何が分かるのかイメージできてないのでは(仮説)
    - e.g. データの構造やフラグ値の意味などをエンジニアしか知らない
- 傘: ハッカソンで実際にデータ活用の流れを体験してもらう

全社にデータ活用の意識を持ってもらい、データドリブンの意思決定をすることで会社成長を加速させていこう、ということですね。今回は「データに親しむ」を重視して分析対象は絞り、対象データはプラットフォームのデータベースにあるもののみとしました。  

データソンは前半と後半の二部構成でした。

  • 前半: 学習の時間です。全社員がそれぞれ何人かのチームに別れて「神父」と呼ばれるSQLが既に書ける人に導かれてSQLを学んで書きました。なぜ「神父」かについては、以下の実際に出された問題のスクショを見てもらうとピンと来る人も多いのではないでしょうか。
  • 後半: 応用の時間です。「与えられた仮説からデータベースから事実を集め、何かの提案をする」というお題でした。仮説はたとえば「承諾されやすい打診には何か特徴や条件があるのではないか?」のようなものです。

データソンの問題例

各チーム奮闘し、結果の発表ではそのまま実務に使えそうな分析もありました。データソンにより、データとSQLに対する苦手意識はかなり減り、(おそらくCTOの筋書き通りに)会社としてデータ活用をしていくぞ!という機運が高まりました

これからのデータ利活用

このセクションはとても”文字文字しい"です。ちょっと読むのが大変かもしれませんがお付き合いください。

解決したい課題の全体観

さて、データソンで全社のデータ活用の機運は高まったのですが、まだまだ課題は残っています。大まかな課題は以下のものだと思っています。

  • ①プラットフォームのみのデータだけを見ていては、会社を効率よく成長させられない
    • プラットフォームには、会員登録をしてくれて、その上でマッチングした企業の情報しか載っていません。弊社はプラットフォーム外でのマッチングサポートも一部していますので、プラットフォームDBのような一つのデータソースをもとに分析した結果は、会社全体の成長という面だと片手落ちです。(※「プラットフォーム外」というのは、売り手や買い手またはその両方がプラットフォームに情報を登録していないケース。メールや電話での連絡など。)
  • ② 全社員がバラバラに似たようなクエリを書いていては、効率よく正確な意思決定ができない
    • エンジニアでもちょっとした情報が無いだけで集計を間違ってしまいます。たとえば deleted_at がついているものが論理削除されており「全数を count() で取得するときには deleted_at が null のものを外しましょう」という情報を全社員が持てるでしょうか(ここまでは分かっても、もっと複雑な条件は沢山あります)。部署ごとにちょっとした理解の違いで似たようなクエリを書いています。これでは信じられる結果にならず、全社の目線を合わせてコミュニケーションできません。

これらの課題の解決方法の一つの答えは、データ基盤を構築して、よく使う指標の元になるデータをデータウェアハウス(以下DWH)やデータレイクに整理して格納しておくことだと考えています。①については、データレイクにはそれぞれ格納した後に、DWHで集約し、プラットフォーム情報もそれ以外の情報も同列な情報として触れるようにすればよさそうです。②についてはデータ取得元としてデータウェアハウスに集約して、例えばdeleted_at問題であれば削除済みユーザはそこに居ないなど整理すればある程度解決しそうです。

データにまつわる具体的な課題

マッチング支援がスケールしない

主に①の課題に関わる部分です。
売り手と買い手のマッチングは弊社社員が頭を捻って紹介するのですが、人間の頭の中の情報だと限界があります。また、レコメンドとして推奨するマッチング先をシステムとして提供する場合も、参照できるデータがなければいけません。M&Aのマッチングは転職のマッチングとある程度類似性があるのでそれで想像してもらえると分かりやすいかもしれません。いくら「いい人」(M&Aだと「いい会社」)であっても、それにマッチする会社(M&Aだと買い手)に会えなければ良い転職はできません。転職エージェントは、転職希望者には沢山のマッチする会社を教えてあげる必要があります。

このマッチング問題に対しての解決策は、データとして「現状の買収戦略や予算」「M&A経験があるか」など各種データがリストで見ることができて、簡単に検索できるようになることが一つ考えられます。そこには世間に一般に公開されている情報以外にも、弊社のメンバーが力を使って集めた鮮度と確度の高い情報が載っているべきです。M&Aの業界だといわゆる"ロングリスト"と呼ばれるものですが、これが簡単に精度高く作れれば、マッチングの質が一定改善されるのではないかということです。
現時点では、そういった集められた情報は社内のスプレッドシートや各部署が管理しているSalesforce, プラットフォームのDBなどに散らばっており、全社横断で見れる形になっていません。

これの解決策としてデータ基盤として情報がデータレイクに集められ、クレンジングされた上でDWH・データマートに乗っかってすぐ取り出せる形が良さそうです。初期的にはSalesforceに情報を集約して暫定のロングリストとして提供することになりそうですが、その次のステップとしてSalesforceを一つのデータソースとしてその他のソースの統合をしていく可能性は高そうです(※構想段階なので2022/09/05時点では社内でも諸説ありです)。

全社に関わるKPIツリー構築が属人的

主に②の課題に関わる部分です。
弊社ではKPIツリーを作ることで、KGIとそれにたどり着くためのKPIの関係を明らかにして、事業のモニタリングと戦略決定に役立てています。KPI個別については戦略に関わるのでここには詳しくは書けないのですが、このKPIツリー作りが属人的になってしまっている問題があります。KPIツリー作りは社内の各所から人力とエクセル力により収集されて実現されています。人力だと転記ミスなども起こり得ますし、部署ごとにKPIの数値集計基準が揃っていないと信頼に足るデータではなくなってしまいます。例えば(※弊社KPIがどうであるかはぼかしつつ、あくまで例えば)プラットフォームの登録数ひとつとっても、「登録延べ人数」をとるのか「削除など考慮した月末時点での登録数」を取るのかで情報が変わってきます。こういった情報が「どのデータソースから」「どういう基準で整形して取られているのか」がコードレビューするようにレビューして整理できたら、より強固な情報をもとに意思決定をすることができるようになります。技術的な大枠の話だと、データレイクからDWHとデータマートを構築するときのSQLがレビューされて、運用開始後もいつでも集計基準を参照して間違いがあれば修正できるようになっているとよさそうです。

成約までがブラックボックスになっている

これは直近で全てを明らかにするというより、特に長期で取り組んでいきたい課題になります。
マッチング後のM&Aの成約までは、関係者の情報の非対称性や思惑が交差することにより定式化するのが難しい「ブラックボックス」になっている部分です。
マッチング後から成約までのフェーズには以下のようなものがあります。

  • 初回面談
  • 2回目面談
  • 買い手による「買収意向表明」
  • 見えている情報を前提とした買い手と売り手の「大筋合意」
  • 買い手による売り手の「実態詳細調査」
  • 成約

ここのデータの問題としては、どのような登録経路や、どのようなサポートをした顧客が、最終的にどのような成約につながっているかというのがデータとして"繋がっていない"という認識です。登録数もある、マッチング数、意向表明数もある程度取れている、成約数も取れている、となっているのですが、それがそれぞれ独立した集計値になってしまっているのです。
理想状態としては、成約に関わる情報が一元管理されており、その成約はどこから入ってきた売り手買い手のマッチングで、間のフェーズで何が起こったから成約したのだろう、というのが分かる形です。各フェーズでうまく行ったケースとうまくいかなかったケースの情報が、流入経路や途中でのサポートアクションを含めて整理されていれば、分析によってさらに適切なサポートを行えそうです。

データ基盤の技術選定に関する考え方

さて、データ基盤を作ろうという気持ちが高まって、目的もある程度見えてきたとします。技術チームがどのような意図で技術選定を進めているか、整理してみたいと思います。
構想段階での構成図は以下のような形です。

データ基盤の構成図

弊社は、昨年大型の資金調達を完了し、売上が伸びてきている状態です。一定のデータは集まってきており、データにより意思決定をできるフェーズになっています。ロングリストがしっかり運用できれば大きなリターンも見込めます。一方で、「データエンジニアリング」の専門家は正社員にはまだおらず、業務委託と顧問の方の知見を借りてアプリケーションエンジニアが構築を進めております。そういう背景ですので、技術選定は以下の前提でやっています。

  • 技術的なハマりどころを減らしたい。はまっても技術情報が豊富にあるツールが良い
    • データエンジニア専門としている人がメインで手を動かすわけでは無いので、ETL特有の辛さをある程度吸収してくれるツールが良い。クラスタ管理など自分たちでしたくない。
  • 使えるようになるまでの立ち上がりを速くしたい。種々のデータソースの対応は可能な限り楽にしたい
  • 長期に渡ってデータ活用したいので、作りっぱなしではなく改善サイクルを回しやすい方が良い
  • 価値があるデータが整理できるなら、ある程度お金を払うのはOK

その前提を受けて、今使用しようと検討している技術要素は以下のものです(本職データエンジニアの方、ツッコミ歓迎です!)。

  • DWH
    • インスタンス管理の必要なRedshiftではなくて、SnowflakeやBigQueryが良い(今のところBigQueryが有力)。Redshift Serverlessもよさそうだが、一般で使えるようになったばかりでハマると辛い可能性。
  • ETL
    • trocco
      • 種々のデータソースに対応(少なくともMySQL, スプレッドシート, Salesforceなど今見えている対象に対応) => ETLの辛さの低減
      • 日本でのユースケースが多い。サポート厚そう。slackベースで聴ける。 => 専門家リソースが少なくてもカバー
  • その他ツール
    • dbt cloud
      • BigQueryでデータレイク, データウェアハウス, データマートを構築したとして、その間の更新をできるだけ楽にしたい。使われ続けるための更新大事。

最後に

前述した通り、専門性を持って正社員でデータエンジニアをやっている人はまだいません。正社員でデータエンジニアをやってくださる方を募集してます。方向性に共感してくださった方がいらっしゃればお話ししましょう!
「こいつわかっていないからいっちょ教えてやるわ」という方も歓迎です。お話ししましょう。 twitter@yamotuki の方までDMを下さってもいいですし、実際にデータ活用を旗を振っているCTO荒井とのmeetyもあります。 よろしくお願いします!