0⇒1開発を任された未経験エンジニアのホンネと開発責任者のホンネ

f:id:meetaps:20200806171245j:plain

こんにちは、人事の芳賀です。
先日、実務未経験のエンジニアに社内プロジェクトのメイン開発を依頼したお話をmeetapsに掲載しました。
0⇒1開発を経験したい未経験エンジニアがいたので、入社直後に依頼してみた話

実際のところ、未経験エンジニアが0⇒1でプロダクトを開発していくとどうなるのかといったところを開発担当の山浦さんと開発責任者の阿夛さんを交えて話してみました。
プロジェクトが想定通りに
は全く進まず......といった話から、未経験エンジニアは何を学ぶべきで、今後のキャリアはどう切り開いていくのかといった話へ発展しました。

山浦 直人 Naoto Yamaura
株式会社株式会社メタップス 開発部
診療放射線技師の資格を活かし、医療系企業でMRIの専属Application specialistとして勤務。その後エンジニアへ転向し、メタップスにジョイン。社内ツールの0→1開発に従事し、現在はマーケティングプラットフォームの開発を担当。
阿夛 浩孝 Hirotaka Ata
株式会社メタップス 開発部部長
溶接工、営業職を経てエンジニア職へ転向。2012年にメタップスに参画。これまでリワード広告システムの運用、広告プラットフォームの新規開発、アプリディベロッパー向けのデータ解析ツールの立ち上げを行う。現在はフリーランス向けマッチングプラットフォーム「re:shine」の立ち上げを行い、事業側の責任者も兼任。

 

 

芳賀
実際に携わったのは開発のどんなところでしょうか?

山浦
データベースの設計からバックエンド、フロントエンドの開発までやりました。実務としてはすべて未経験だったので、すべてを一人でサクっと開発できることはなかったです。なので、設計の仕方や開発の仕方を教わりつつ、それと自分で調べつつです。

阿夛
基本的には山浦くんにやりきってもらうということを大切にしました。もちろんこちらでゴリゴリと開発したほうが早く完成はできるのだけども。それでは山浦くんの成長にならない。

芳賀
想定通りの成長プロセスを歩んでくれた印象ですか?

阿夛
いや、前提の部分でいろいろと想定外があって。

芳賀
想定外?

阿夛
そもそもこのプロジェクトは、未経験エンジニアとして山浦くん1人でキックオフする予定ではなかったんですよ。未経験エンジニア3名ほどのチームをつくり、同時期入社のジュニアミドルのエンジニアの1名がリーダーとなり4名のチームで、ディスカッションをしながら、相互にコードレビューをしながら、腕を磨いていってもらったらなと思っていました。そうしていたら、前職が放射線技師で未経験エンジニアの山浦くんが一人で来ると(笑)。

芳賀
その節はすみません(笑)。
入社タイミングの都合や調整しきれなかった部分もあり、山浦くん一人でのキックオフとなってしまいましたね。

山浦
僕も入社した直後にその話を聞きました(笑)。

阿夛
なので、実務としては山浦くん一人でやりきる編成に変えようと。だから、キックオフの際は山浦くん、デザイナー、プロダクトオーナー、開発プロジェクト管理として一旦は私という形になった。

芳賀
ただ実際は皆さん他の新規プロジェクトや急務の開発プロダクトをかかえているっていう状態ですよね。

阿夛
そうですね。OJT担当者としてサーバーサイドエンジニアも1名つけていました。とはいえ、全員バタバタする部分もあって、細かくコードレビューしきれないタイミングもでていました。

芳賀
社内プロダクト開発あるあるですね(笑)。
どこの企業でも、クライアントが社外にいるプロジェクトに押されて、内製プロダクトは遅れぎみになりますよね。

阿夛
そうですね。あるあるとはいえ、本当によくないことがいろいろ起きてしまって!理想的な形ではないので、山浦くんごめん(笑)。

山浦
いえいえ(笑)。

自分も、もう少しで完成!もう少しで完成できるはず!と思っていた部分が、実際には根本的なミスがあって......。確認不足だったことを痛感しましたね。

 

f:id:meetaps:20200806171405j:plain

 

芳賀
未経験で0⇒1で開発するときに、一番てこずったというのはどのあたり?

山浦
メタップスが開発した別のプロダクトのソースコードを参考に開発していたんですよ。ただ、そのソースコードみても正直「なんだこれ??」みたいな印象でした。特に、戸惑ったのはAPIの部分。

芳賀
少し触ったことある言語であっても、API接続をした経験がなかったからということ?

山浦
そうです。バックエンドで、成形したのものをフロントに回す。そしてAPI形式で出して、フロント側はAPIをもらって、それをフロントで表示するというのがピンと来なかったんですよ。

阿夛
おそらくデータベース・裏処理・表処理の三層とデータベースとそもそも処理したものをはきだすの二層との違いにビックリしていたんだと。

山浦
今まで触ったことがあったものはHTMLが最終アウトプットという状態だったのに、それがAPIだとHTMLがないのでイメージがつかみにくかったんです。

阿夛
実はこれRailsが流行った理由でもあるんだよね。Railsの特徴として、データをどう取り出して、どう表示して、どう見せるかが、極めてやりやすいんですよ。山浦くんがピンと来なかったというの画面がないからですよ。三層でいくと画面は別のところが担う。つまり、それはいわゆるフロントエンドエンジニアがやっていることです。Vue.jsとかReactとかAngularとか使って、見せ方をどうするのかなどと別の人が担う仕組みです。

山浦
その理解にかなり時間がかかってしまいました。ただここで触れたフロントエンドの開発はけっこう興味を持てたんです。はじめてしっかりと開発をして、自分がつくったものが成果物として表示されるというのは嬉しかったです。

芳賀
ではフロントエンド領域も最後までほぼ一人で開発できたの?

山浦
いえ、そこは最後の最後でほぼほぼ作り直してもらいました......。

阿夛
ここもいろいろあって(笑)。
そもそも納期に問題が発生していました。このプロジェクトは、利用中の社外サービスを内製開発して、代替させようっていう話でした。そのサービスの契約更新期限が迫ってきていて。そして、育成し終えた山浦くんを別チームで本格的にサーバーサイドとして活躍してもらおうとしていたんですよ。で、その別チームには、2020年の2月には山浦くんを受け渡しますよと話しちゃっていたんです。ただ、それにしては開発の進捗が芳しくなくて、二重の締め切りが迫ってきていると。このままではまずい!となってきたんです。それに加えてフロントエンドは大規模な修正が必要となったので、フロントエンドエンジニアにがっつりと修正をしてもらうことになったんです。ただサーバーサイドは、やはりやり切ってほしいと。最悪、締め切りに本当に間に合わないならば「最後の最後は俺がなんとかするから大丈夫!」みたいなことを思いつつ、開発してもらいました。

芳賀
なるほど。トラブルにも巻き込まれつつだけど、今後も0⇒1の開発はやってみたいですか?

山浦
そうですね。0⇒1の開発に対するモチベーションは変わらずあります。ただもう少し他のプロジェクトを見たり、腕を磨いてから取り組みたいですね(笑)。

阿夛
幅広くやってもらったけど、興味を持てた領域ってある?

山浦
フロントエンドです。バックエンドはまだいいんですが、インフラ部分についてはあまり触りたくないなという気持ちになりました(笑)。

阿夛
あ、それでいいと思うよ。正直な意見を聞いてみたくて。

山浦
触りたくないというか未知の技術に遭遇したので(笑)。

未知の技術は2つあって、それがDockerとTerraformです。なかなかイメージがつきづらいものを両方使ったという感想です。Terraformはこうすると動いてなどといった処理はある程度できるようになったのですが、中身で何をやっているか理解はしきれていないんです。

阿夛
フロントエンドが楽しいということに納得感はあるよ。見た目の部分が楽しいというのは、エンジニアにとっての最初のとっかかりの一つかなって思うよ。エンジニアは大別すると、フロントのように自分で作ったものが形として見えるようになるという楽しみか、誰かのために何かを作って喜んでくれたという楽しみを追っていると思っている。

山浦
それでいうとやっぱりフロントなのかなと。

阿夛
インフラはイメージしにくいって話もあったけど、それも納得できる。実は、これエンジニアの業務範囲の変遷に関係しているんだよね。Dockerってどの技術の代替かというと、インフラでしょ?昔って、WEB業界のサーバーサイドエンジニアってどこの領域までやっていたかというと、インフラまでやっていたんですよ。インフラをやって、サーバーをいじって、MySQLをインストールして、ネットワークをつないで、アプリケーションのコードを書いて、見た目もつくってとやっていた。ただデザインはできないけどね!みたいなところまでがセットだったんですよ。これが10年くらい前まで、当たり前だった。

実は、DockerやTerraformってその話を知らないと、何が便利なのかわからないのですよ(笑)。

AWSについて「もともとオンプレでやってたサーバーがAWSになりました!」という衝撃や便利さも元々オンプレの環境で仕事していた人じゃないとわからないのですよね。だって今は、AWSは当たり前に使われているものだし。

それでさらに、AWSでやっていた人たちが「Terraformでアプリケーションとかインフラ群を簡単に構築できます!」というのは、過去にAWSで苦労した人じゃないとわからなかったりするでしょ。

だから当たり前に、DockerやTerraformがある環境からスタートすると「興味ないですね......」はすごいわかる(笑)。

山浦
なるほど!すごい納得です(笑)。

 

f:id:meetaps:20200806171440j:plain

 

阿夛
今の現場でDockerは使っていないよね?

山浦
使っていないです。

阿夛
そうだよね。だから、今の山浦くんの仕事では、AWSも手でセットアップして、手で作業でしょ。それはそれで、その経験ができているのはすごくいいと思うよ!

先にDockerとか触っちゃって順番としては逆なんだけどね。そのうち「これDockerだったらよかったのにな!」って思う瞬間が、もうしばらくこの辺ゴリゴリ触っているとわかる時がくるはず!

山浦
なるほど。今ちょうどAWSの設定を手動で変更するのとTerraformで行う2種類経験できているので、いい経験になっていると思います。もっとゴリゴリに触った時ときに、どんな局面が一番楽しくて、モチベーションが上がるのか明確にイメージできるようになるのかもですね。

阿夛
Docker含めてコンテナ技術のいいところって、環境のセットアップがすごく楽なんですよね。Dockerない時だと数日かけて、開発環境セットアップすることもざらだったりするので。

Dockerって、手元で動いてる環境と同等の環境をそのまま本番環境で動かしましょう。ですよね。そこを理解した上でもうちょっとインフラ触ってるとDockerだったら良かったのに!が芽生えると思いますよ。

ちなみに今その環境がないんだとすると、僕なら、コソコソつくっていたDocker環境を「ちょっとこれ仮につくってみたんですけど、どうすかね」とチームに展開したりすると思います。そういうことするの、好きなんですよね(笑)。

こういう風に自分がなにをおもしろいと感じるかは、自分の中で分析しておいた方がいいと思うよ。

山浦
そうですね。そうじゃないと、なんだかあれもこれも手を付けて、すごく中途半端なエンジニアになりそうな気がします。

阿夛
別にしぼらなくてもいいんだけどね。しぼらなくても、せばめなくていいんだけども、自分が面白いと感じる道っていうのは、自分の中で分析できているかどうかはすごく重要だと思う。

山浦
面白いと感じる道や技術を分析していく中で、キャリアとしての方向性が見えてくる......。今、すごい重要な話してますね。なんだか楽しくなってきました(笑)。

芳賀
そこが見えてはじめて納得のいくキャリアを開けそうですよね。