Webエンジニアからデータエンジニアに転職した


Webエンジニアからデータエンジニアになって1年経ち、そこで感じた印象的な部分などを色々書いていきます。
データエンジニアの紹介も兼ねて、自分の体験談としてここ1年の振り返り含めて記録しておきます！

## そもそもデータエンジニアとは
一言で表すと何かなーと考えたところ、
「データドリブンに基づいたデジタルマーケティングの自動化」を実現するエンジニアです。

なんのこっちゃ。
解説します。

データドリブン：売上データ・アクセスログ解析などのデータ分析結果に基づいてビジネスの意思決定を行うプロセスのこと。
デジタルマーケティング：インターネットに繋がるデジタル媒体を通して、主に集客を目的としたビジネス活動のこと。具体例として、その中の1つの主流であるWebマーケティングではWeb広告、メール配信、SNS配信、SEOなどがある。

マーケティング戦略を考える中で、データを分析した上でマーケティングの施策を行いますが、AIの登場によりそのプロセスを自動化していく昨今の流れがあります。

それを支えるのがデータエンジニアです。
データサイエンティストが提供するモデルやデータを、データアナリストや企画職に向けてプラットフォームの構築、整備などを主に行っています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/39328fe7-433d-ba5f-7ab4-4c5cbbd6b6fb.png" width=20%> → <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/8bb635aa-dbfe-0083-6215-4b309b1758ed.png" width=30%> → <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/140953/4578a608-2f63-c5ba-101c-a7862e9a39c3.png" width=33%>

## データ量の違い

まずビッグデータの名の通り、取り扱うデータ量が圧倒的にでかい！
データの用途によって非構造化・構造化など様々な形態で保存されています。
また、それらを取り扱うために至るところで分散処理が行われています。

Hadoopを代表とした分散されたビッグデータの格納と処理を可能にする各プラットフォームや、生データを保存しているデータレイクからETLによって加工・格納されたデータウェアハウスなど、先人たちが知恵を絞って取り扱うための技術基盤を作ってきてくれました。（ありがたや）

また、データを取り出すためのクエリエンジンも特徴的です。
Presto、Trino、HIVEなどエンジニアが扱いやすいようSQLライクな文法で大きなデータを素早く取り出すことができます。

自分の業務では既にある基盤を用いて開発を行うので普段そこまで意識することはないのですが、
この辺りの技術もどんどん進化してて深掘ると奥が深いので興味があれば調べてみてください！

それらを活用するプロダクト上では、毎日生成されるデータのアーカイブ化やローテート処理をはじめ、メモリやディスク容量上限、各通信間の同時接続数やタイムアウトなど、思わぬところで負荷が掛かりダウンしないようビジネス要件とランニングコストを勘案しつつ設定に気を配る必要があります。
負荷検証など、扱うデータが大きいことに由来する障害の予防は特に大切だなと感じます。

## データの中身の違い
マーケティングという特性上、取り扱うデータは基本的にユーザーに基づいています。
そして会社のプライバシーポリシーに定められている通り、個人情報として非常に慎重に取り扱っています。

基本的に仮名化・暗号化されており、BIツールなどでは統計データとして個人を識別できないようになっています。
新規機能開発や施策を行う上でも、プライバシーポリシーに抵触する部分がないかなど法務専門と相談しながら進めていきます。
また、漏れた場合の被害も甚大なため、セキュリティ専門と相談しつつ、かつ攻撃手法は日々アップデートされていくため継続的に対策していく必要があります。

Webでも同じ部分はありますが、それらを厳密に管理するための仕組みがあることと、法務やセキュリティの専門部署と近い関係にあるのが印象的した。
専門のレビュワーはいるものの、基本的にはエンジニア個人も理解しておくべきだなと感じます。
規約めっちゃ長いので読むだけでハゲそうでした。(え)

## 構成

プロダクトはコンポーネント毎に分かれるマイクロサービス化や、コンテナオーケストレーションツールのkubernetesなど可用性を高められるような設計になっています。
疎結合のコンポーネント同士の通信はメッセンジキューで管理されます。
k8sはローリングアップデートやオートスケーリングが便利ですね。

規模の大きいWebでも同じだとは思いますが、今までちゃんとは触ってこなかったので色々と慣れない部分がありました。

データエンジニアリング分野における特色としては、データパイプラインなどの用途で使われるワークフローエンジンがあります。
代表的なものはAirflow、Digdag、Argoなど。
大規模なデータ処理に対応でき、高機能なスケジューリング機能があるのでいわゆるバッチ処理みたいなのも出来るし、タスク毎にジョブ管理されるため各再実行も容易だし、タスク同士の依存関係の整合性も担保できます。

自分が携わってきたWeb開発では簡易なもので事足りることが多かったので興味深かったです。

## 必要な業務知識

データエンジニアでは、直接的なユーザーは他職種の社員になります。
そのためやり取りする際に相手の業務知識が必要になってきます。
このあたりはBtoBのWeb開発の場合でも同じですね。

マーケターとやり取りする際は広告・メールなどの配信を始めとしたデジタルマーケティングの業務知識、
データサイエンティストとやり取りする際は統計・機械学習の知識などを頭に入れる必要があります。
あと自分のチームが担当しているプロダクトの特性上、他チームと連携する部分が多く、同じデータエンジニアでも取り扱うドメイン知識が違うので他プロダクトの知識も必要に応じて調べてます。

あくまで同じ会社の社員なので、教えてください！と言いやすいのが救いどころではあるけど、最低限の知識は身につけておきたい・・・。
人数が多いMTGだと話の腰を折りづらくて後からめっちゃ調べてました。笑

## 余談

### 1年振り返って
初めてだったり久々に触る技術も多く(PHPer→Java)、最初は結構キャッチアップ多くて苦労しました・・・(というか今も雰囲気でやってる)
あとプライベートクラウドで社内独自の技術・用語が多くて、その度に「あー、AWSでいうあれね」みたいに脳内変換してました。
チームの裁量やプロダクト運用範囲も広くてしんどい・・・。

今回含め2回転職してるのですが、会社が変わると価値観やそれに応じて優先軸・評価軸も変わってくるので、最初は戸惑いつつも今何を優先するべきか？どう動くか？をよく考えてました。
マルチな能力を求められるのと、周りには出来る人ばっかりなので必死についていってました。

一社目はめちゃお堅い会社、二社目はめちゃアットホームな会社、今回はその中間といった感じで社風もかなり会社によって異なるので、そこは違いを楽しみつつもやってます。

### 今後
今まで逃げ回っていた(?)PMに最近なったのであたふたしてます。
だけどせっかくなので進め方を色々試してみたいなーと思い、
スクラムやモブプロを参考にしながらチーム文化に沿うようにちょっとずつ取り入れていってる最中です。
これもまた振り返って記事書きたいなーと思います！

あとはチームメンバーが優秀なので周りに頼りまくってます。笑
今までを振り返ってみても、まとめ役になるとアワアワして（こいつ大丈夫か？)と思われて周りの優しさと協力でなんとなく纏まることが多かったなぁ・・・。
リーダーシップって色々あるみたいで、もうちょっとスマートに周りの協力を引き出す能力を磨いていきたいなーと思います。

## 見てくれた方へ
あまり知られていないけどデータエンジニアならではの面白さがあるので、この投稿を見て興味を持った方はぜひ検討のひとつに入れてみてください！笑

おしまい