技術部データ基盤チームの@yrarchiです。2022年1月に現所属に異動してから約5カ月が経過しました。
異動前はホスティング事業部でディレクターとしてサービスに関わる数値の分析をしたり、分析結果を元にした施策の推進などをしていました。そのため、クエリを書く機会はあっても、データ基盤の整備に関わるような機会はありませんでした。今回、分析だけでなくデータ基盤の整備を含めたデータに関連する業務をより幅広く行えるようになるため、データ基盤チームへ異動することになりました。
この記事では、ディレクターがデータ基盤チームに入った結果、エンジニアリング面でどのような課題にぶつかり、どのように対応しているかを記載します。
対応した案件
データ基盤チームはデータ基盤の開発・運用を行っています。異動後に対応したことを技術要素に着目して挙げると以下のようになります。
- Google CloudのワークフローエンジンであるCloud Composerを利用して、データウェアハウスであるBigQueryにデータが蓄積されるよう設定する
- BigQueryでクエリを書いて意図したデータの取得を行う
- PythonのStreamlitを利用してダッシュボードを作成する
- Google Cloudのリソースを管理しているTerraformにアカウント追加などの修正を加える
これらに対応する際、どのような課題にぶつかったかを次に挙げます。
必要になった技術と理解のためにやったこと
Git
まず早々にぶつかったのは、Gitで何らかの困った状態に陥った時に自力で抜け出せないことでした。 弊社では個人の評価資料もGitHub Enterprise Server(以下GHES)のPull Requestで管理しているため、Gitに触れる機会はありましたが、add, commit, pullのようなよく使うコマンド以外は実行したことがほぼありませんでした。 そのため、コミットを取り消したい, 他の人の作成したブランチを手元に持ってきたい、何かまずいことをしたのはわかるが何がどうなっているのかもはやわからない…など、Pull Requestの中身の前にGitの操作でつまずくことになりました。
この課題への対応として、勧められたPro Gitをまずはひととおり読みました。難しい部分もありましたが、図を書きながら読み進めた結果、頻度の高いGitの困りごとはどうにか対応できるようになりました。その後も、わからなくなったらGHESの個人リポジトリに困っている状態と同じ状態を作りGitコマンドを試してみることで、一つずつ挙動を確認するようにしています。
▲ 書いていた図の事例
Docker
開発環境をそろえるためGHESの各種リポジトリでDockerが使われており、Dockerのコンテナを動かせるようになる必要がありました。Dockerに触れるのは初めてだったので、当初はREADMEに記載されたコマンドを打ち込んでも何をやっているのかわからない…という状態でした。
この課題への対応として、入門書(仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん)を読みました。結果、Dockerの初歩の知識を得られて「完全に何もわからない」からは脱することができました。その後はリポジトリに置かれたDockerfileの不明点をドキュメントで調べることで理解を深めています。
GitHub Actions
linterやformatterによるチェックやGoogle CloudへのデプロイなどをGitHub Actionsで行っています。これらの実行過程で想定していなかったエラーが起きた際、当初はどこを確認すればよいかもわからないレベルでした。リポジトリの.github/workflows以下のYAMLファイルが実行されていることを教わり、初めてGitHub Actionsのことを知りました。
この課題への対応として、YAMLファイルとドキュメントを1行ずつ突き合わせながら読んだり、個人のGitHubリポジトリでGitHub Actionsを実際に設定してみることで、理解をしていくようにしました。
シェルスクリプト
上記GitHub Actionsの中ではシェルスクリプトが実行されています。そのため、GitHub Actionsで実行されているジョブの中身を理解するにはシェルコマンドを理解する必要がありますが、不明な箇所があることでジョブの内容が理解できない状態になっていました。
この課題への対応として、シェルのワンライナーの問題集である1日1問、半年以内に習得 シェル・ワンライナー160本ノックを勧めてもらいました。解くことで理解できる範囲が少しずつ広がっている実感があるため、最後まで解き進めていくつもりです。
Cloud Composer
Google Cloud PlatformのワークフローエンジンであるCloud Composerを使い、データのETL(データの抽出/変換/ロード)を行っています。実行したいタスクを記載したDAGファイルをPythonで書く必要がありますが、タスクの定義の仕方や実行タイミングの設定など、理解するのが難しく感じていました。
この課題への対応として、わからない箇所についてドキュメントやCloud ComposerのベースとなっているAirflowのドキュメントを読んだり、他のメンバーが作成したDAGファイルを参照したりしました。正直それでも解決できない場合も多く、わからなかったところをチームメンバーに聞くことで、理解を深めている段階です。
Terraform
Terraformはサーバーなどのリソース構成をコードで定義し、管理することができるツールです。Google CloudのリソースをTerraformで管理しているため、ユーザーのBigQueryへのアクセス権限を変更したり、クエリの実行権限を持つサービスアカウントを作成したりする際にTerraformの設定のコードを修正する必要があります。初めてTerraformを触れたため、0から理解する必要がありました。
この課題への対応として、まずは変更を加える部分に該当するTerraformのドキュメントを読みました。その後もまだふに落ちていない箇所が多いため、Google Cloud用のチュートリアルをやり始めました。
その他
挙げていくと際限なく課題は存在するのですが、その他以下のような課題への対応を行いました。
- コードを書くのに時間がかかるという課題に対し、AtCoderの過去問を解いてまずは書く量を増やす
- BigQueryのデータのチェックのためにRspecを書く必要があるがRubyの文法がわからないという課題に対し、Rubyの入門書(ゼロからわかる Ruby 超入門)を読む
- Deep Learningの原理が理解できていないという課題に対し、ゼロから作るDeep Learning ――Pythonで学ぶディープラーニングの理論と実装を読んで手を動かして理解する
終わりに
ディレクターがデータ基盤の整備に関わるようになってぶつかった技術的な課題をふり返りました。上記ではあまり触れませんでしたが、調べてもわからなかった点はチームメンバーに質問し、いつも丁寧に答えてもらったことで理解できる範囲を広げていくことができました。挙げている本やドキュメントを読むことで「何を質問すればよいかもわからない」状態を脱し、チームメンバーに質問することで「ドキュメントを読んでも理解できない」ところを一つずつ解消していくことができました。
現状、上記を読んでいただくとわかるとおり、当座の理解に留まっている要素ばかりです。学びを止めず、課題を技術で解決できる力を少しでも増していきたいと思います。