• Home
  • コーポレートブログ Geniee’s BLOG
コーポレートブログ

Geniee’s BLOG

ジーニーは最先端の広告テクノロジーで
顧客の収益を最大化します。

こんにちは、21卒エンジニアの金重です。
テクノロジー戦略室データエンジニアリンググループに所属しています。
今回は、私が1年間ジーニーのエンジニアとして働いて得た気づき「学生時代の開発・プログラミングとの違い」についてお話しさせていただきます。

金重 光典/名古屋大学大学院卒業後、2021年入社。テクノロジー戦略本部テクノロジー戦略室データエンジニアグループデータチーム所属。

改めまして、2021年4月に株式会社ジーニーのエンジニアとして新卒入社した金重といいます。大学院では化学の反応を機械学習で予測する研究をしていました。
開発経験に関して、研究では、言語は Python で PyTorch, NetworkX といったライブラリを用いてプログラムを書いていました。その他に書いていたコードで言うと、簡単なWebアプリケーションや競技プログラミングのものでした。この時はプログラムを実行して「正しく動いてそうだからヨシ!」と動作を確認しながらコードを書いていました。これでなんだか私いける気がしていました。
「正しく動いてそうだからヨシ!」という言葉の「動いてそう」という部分に疑問をもったかもしれません。ここで一見あやふやに思われる言葉を用いたのは、プログラムが完全に正しく動いていると証明することは現実的ではないためです。これは実質的に判断の問題と言えます。

ジーニーでの開発

私は最初、ちきゅう(現SFA/CRM事業部)開発部に配属されました。
そちらでは
– 不具合修正
– 新機能開発

などを行っておりました。
何をやっていたかというとプロダクト開発です(自分は一部を担当していたに過ぎませんが)。プロダクト開発は終わりのない旅です。実際には終わる時もありますが、お金のある限り続けることはできますし、願わくば終わりなき発展を遂げていくことがプロダクト開発の夢でもあります。
大事なこととして、プロダクトは進化させていく必要があるということです。システムの挙動を変えるためにはコードを付け足すことも修正することも時にはコードを消すことも厭いません。
また、プロダクトの終わりなき発展という夢は、1人では到底実現できないでしょう。チームで取り組みます。

チーム開発で考えること

チームでプロダクト開発を行うとなると、色んな人が様々な変更を加えるわけですが、そんなことをして大丈夫なのでしょうか。その判断はといえば、チーム開発でもやはり「正しく動いてそうだからヨシ!」とされるかどうかでしょう。
しかしこの判断は自分1人がするものではありません。対象のコードベースに関わるチームのみんなが「正しく動いてそうだからヨシ!」と判断できるものであることが望ましいです。それは現在チームに在籍するメンバーにとどまらずこれからチームにジョインしてコードに変更を加える人をも含みます。そしてその人は他ならぬあなたかもしれません(実際に一度退職して再度ジョインする方もいます)。
ではみんなが「正しく動いてそうだからヨシ!」と思えるためには何が必要でしょうか。

テスト

私が最も大事だと感じたのはテストです。
テストはシステムが正しく動いていることを特定の場合に限ってしか証明してくれませんが、システムの振る舞いの一端を見せてくれます。これはシステムに要求される振る舞いの具体例を示すことにもなりコードの理解にもつながります。
また、1人でコードを書いていた時に比べるとコード規模も段違いに大きくなるでしょう。CIを設定してシステムの振る舞いが壊れた/壊れていないことを自動で知るためにもテストは欠かせません。テスト・動作確認が手動になると正しく動いていることを確認するのに時間もかかり、コードベースも開発規模もスケールさせるのがしんどくなります。

レビュー

次に大事だと感じたのはレビューです。
対象のコードをレビューして承認する行為、これはまさに自分以外の誰かが「正しく動いてそうだからヨシ!」と判断することに他なりません。
「正しく動いてそうだからヨシ!」は、判断の問題と言いました。ではどうやって判断を下すのでしょうか。おそらくレビュアーはコードを読んで内容を理解し、動作させて期待した結果が得られることを確認する、などしてその判断を行うでしょう。
そうなんです、あなたが丹精込めて書いたコードは自分以外の誰かに読まれてしまうのです。そして、願わくばそのコードは自分以外の誰かも読めて理解できるものであって欲しいのです。
架空のケースを考えてみましょう。あなたが以前勤めていた職場では開発者がいなくなってしまった。しかしどうしてもシステムを改修したいという話が浮上しています。誰にお願いしようか。そこで白羽の矢が立ったのが5年前にそのシステムを開発していたあなたです。しかも成功報酬3億円。これはやらない手はありません。早速改修に取り掛かるあなた。しかし当時の記憶はほとんど残っておらずコードが何をしているのか、変更を行った際の影響範囲は点でわからず。結局のところあなたは案件を完遂することができませんでした。そして思います、あの時もっとわかりやすいコードを書いてレビューを行い今現在の自分でも読めるコードを残せていれば、と。
レビュアーもまたコードを改変します。コードレビューでは正しく動いてそうかだけでなく、自分がこの先コードを変更する際に「正しく動いてそうだからヨシ!」と言ってもらえるかという視点でもコードの良し悪しを判断することになるでしょう。「正しく動いてそうだからヨシ!」のバトンを繋いでいくのです。もはや動作だけの問題ではありません。読み手を意識して書くことが大事になります。これはコードに限らず、プルリクエストを出す際にどのような意図を持ってどんな変更を行ったかをきちんと記述することも含まれます。

おわりに

まとめるとチームでのプロダクト開発では、
・テストを書くこと(できれば自動で回す)
・レビューを行うこと
・読み手を意識して書くこと

が大事だと感じました(基本的なことですね)。
チーム開発で大事なことはまだまだたくさんありますが、書き出すと本が何冊も書けるほどトピックがあります。私は来るべき執筆依頼のためにプロダクト開発やチーム開発のことを絶賛勉強中です。
今回は、ジーニーでエンジニアとして1年働いてみた私のソフトウェア開発に対する印象のアップデートを通して「学生時代の開発・プログラミングとの違い」をお話しさせていただきました。特に就職活動をしている学生でインターン経験などがない方の参考になれば嬉しいです。
最近はチームでモブプログラミングに取り組んだりもしていますが、この話はまた誰かがしてくれると期待しています(これを読んでいるあなたかもしれません)。

P.S.
「正しく動いてそうだからヨシ!」は “LGTM” と言われています。

一緒に働く仲間募集中!
【ジーニーのリクルートサイトはこちら】
https://geniee.co.jp/recruit/

Back to top