エンジニア対談|20卒エンジニアがリリースした、自社プロダクト『Sango』開発の裏側
エンジニアの阿部です!
自宅のリモート環境がどんどん整いつつあり、Webカメラで最近バーチャル背景を採用しなくても恥ずかしく無くなってきました。
さて、先日『Sango(サンゴ)』というナレッジ共有アプリケーションが社内リリースされました。
実はこちらのアプリケーションは、新卒入社メンバーがプロジェクト参画前に受講する”チーム開発研修”がもととなって開発されました。
今回は、アプリケーション開発に携わった20卒入社のエンジニアメンバーにお話をお聞きしました。
「プロダクト開発の難しさは?」「ぶっちゃけ喧嘩しましたか?」など、開発についてのリアルな声をお伝えしていきます!
▍対談メンバー紹介
- Gizumoに入社したきっかけは?
- 現在の業務内容
- 今後どんなエンジニアを目指したいですか?
木原 凌
- もともとPCを触ることが好きで、大学生の頃にWebサイトやWebアプリケーションを作るような仕事に就きたいと思うようになりました。ベンチャーで一気通貫した開発ができそうな企業を探していてGizumoを見つけました。
- 教育部でメンターを担当しています。研修生の方たちにプログラミングを教えたり、受託案件の開発業務も行っています。
- フロントエンド・バックエンド関係なくいろいろな技術に触れて、多くの技術を人に教えられるようなエンジニアを目指したいです。
中嶋 悠斗
- 普段使っているようなアプリケーションを自分で作れるようになったら面白いだろうなと思ってWebエンジニアを目指すようになりました。開発経験はほとんどなかったので、実務経験がなくてもエンジニアになれるところに惹かれてGizumoに入社しました。
- お客様先に常駐して、CMSとMAがセットになったようなツールの開発をしています。簡潔に伝えるとWordPressみたいなものです!
- 自分が作りたいと思ったアプリを作れるような技術力を持ったエンジニアになりたいです。「これあったら便利だな」って日常生活の中で感じたときに「じゃあ作ってみよう」と形にできるようなスキルがあったら良いなと思っています。
大島 良国
- 昔からPCを扱うのが好きだったので、仕事としてプログラムを書きたくてWebエンジニアを目指しました。Gizumoは平均年齢が若いので、年齢の近い人が多いと働きやすそうだと思って入社しました。
- 中嶋君と同じプロジェクト先に常駐して開発業務を行っています。
- エンジニアになってからクラウドサービスの素晴らしさを実感したので、クラウド周りも扱えるエンジニアを目指して知識を深堀りしていきたいです。
▍”Sango”というプロダクトについて
−阿部 大祐(以下、阿部):まず初めに、Sangoとはどのようなサービスなのか教えてください。
木原 凌(以下、木原):Sangoは、社内のエンジニアが技術についてのナレッジを共有できるサービスです。社内のメンバーは誰でも記事を書くことができ、そこに他の人がコメントできるような機能があります。書いてほしい記事をリクエストする機能もあって、「こんなものを実装したいんだけどどうすればいい?」といった感じで、その知見を持っている誰かに対して質問を投げかけることができます。
中嶋 悠斗(以下、中嶋):Sangoという名前の由来は、海にいるあのサンゴから来ています。サンゴって、海中の石灰質のカルシウムが積み重なってだんだん大きくなっていくのですが、我々エンジニアもそうやって一歩ずつ成長していけたらいいなという思いが込められています。
大島 良国(以下、大島):技術スタックとしては、Laravel、jQuery、Sassを使用しています。Gizumoのプログラミング研修で学習した内容だけを使って開発しました。
−阿部:どうしてこのプロダクトを作ろうと思ったのですか?
木原:開発のきっかけは、入社前の内定者インターンで受講したプログラミング研修です。プログラミング研修の後半に実践型のプロジェクト演習があるのですが、そこで要件定義書という発注側の要件や要望をまとめたものを渡されるんです。その要件定義書に「ナレッジを共有したり、知識の強化ができるようなプロダクトを作ってください」と書いてあったので、それに基づいてプロダクトを考案しました。
大島:Gizumoではお客様先に常駐して開発を行うことが多いので、ただ業務をこなしているだけだとエンジニア同士の繋がりが少し薄くなりがちなんです。それだとプロジェクト先で得た経験を共有しにくいと思い、そういった知見共有に対する課題を解決することを軸に開発を進めました。
−阿部:開発の期間はどれくらいかかりましたか?
木原:研修では3か月くらいで全ての機能を作りました。リリースとかも含めて考えると、たぶん半年いかないくらいだったと思います。
−阿部:3か月であのクオリティはすごいですね。かなり質が高いと思います。
中嶋:本当はもう少し追加したい機能があったんですが、優先順位的に間に合わないので実装できませんでした。なので期間が終わった時は「もう少し時間がほしかったな」と思いました。
−阿部:研修の段階でリリースなどの運用も行っていたのですか?
中嶋:社内リリースすることが決まったのは研修期間中だったんですが、実際に本番運用としてリリースしたのは研修が終わって1年半後くらいです。時期でいうと2021年の年末くらいです。
−阿部:研修が終わった後も開発は進めていたんですか?
木原:リリースするタイミングで1回集まったくらいです。機能の追加などは特に行っていなくて、テストを行ったり認証機能を修正した程度です。
大島:細かいところでいうと、システムを社内用のメールアドレスに対応させたり、Herokuというクラウドサービスを使っていたところをAWSに切り替えたりもしました。
▍メンバーの役割分担&MVPをつけるなら?
−阿部:開発メンバーはどうやって決まったんですか?
中嶋:Gizumoのプログラミング研修ではフロントエンドコースとバックエンドコースに分かれてカリキュラムを進めるんですが、研修が終盤に差し掛かって、フロントエンド組は演習も兼ねて社内サービスの改修業務などを手伝っていたんです。でも僕たちバックエンド組は手伝う業務がなかったので、業務に関わっていないメンバーでプロジェクト演習を行うことになりました。
木原:結果的に研修でバックエンドコースを選んだメンバー5名が集まった感じです。
−阿部:役割分担はありましたか?
木原:僕がリーダーとして進めさせていただきました。その他のメンバーの役割分担は特に決めていなかったです。
大島:分担は特にないですが、タスクを振る傾向みたいなものはなんとなくありました。例えば悠斗は結構がっつりクエリ(※データベースに対する命令文)を書いてくれていました。
中嶋:メンター(研修講師)の方がチームに入ってフォローしてくださったのですが、管理するような立ち回りはあまりされていなくて。困った時にアドバイスはくれるけど、基本的には自分達で進めていくような流れでした。書いたコードは開発メンバーでお互いにレビューしあっていました。
−阿部:ぶっちゃけ喧嘩したこともありますか?(笑)
中嶋:喧嘩はないですが、主にデザイン的なところで意見の食い違いはありました(笑)細かいアイコンを「これとこれとこれ、どれにしよう?」みたいな、バックエンドエンジニア5人で考えるのが大変でした。特に印象に残っている部分があるんですが、ある場所のアイコンについて本当に意見が合わなくて、かなり議論しました。「ここのアイコンは紙飛行機じゃなきゃダメだ!」みたいな(笑)
木原:あったねー(笑)。UX(※User Experienceの略。ユーザーが感じる使いやすさや印象など)に関わる部分の話し合いに1日かけた時もありました。どんなに些細なことでも、毎回チャットで投票していました。
大島:あったあった。なんでも話し合っていた気がします。ヘッダーとコンテンツの空白をどれくらいにするかってところで揉めてた記憶もあります(笑)
中嶋:5人で開発していたので、少なくともその5人が「使いやすい」と思えるようなUXにすることは意識していました。自分が良いと思って提案しても、1人でも「それはちょっと使いにくいな」という意見がでてきたら、リリースした際も同じように使いづらさを感じる人がいると思うんです。他のメンバーの意見をしっかり聞いて、少なくともこの5人が満足できるような形にしたいとは常に思っていました。
−阿部:ちなみに、全員活躍はしていたと思うのですが、メンバーの中で個人的にMVPを付けるとしたら誰ですか?
大島:僕がMVPだと思うのは、メンターの松島さんです。松島さんはメンターとして僕たちをフォローしてくださっていたのですが、開発が終わってお話した際に「細かすぎるところまで指示をしないように意識していた」とお聞きしました。そうやって見守ってくださったおかげで、限られた時間の中でもかなり自由度の高い開発をすることができました。
中嶋:機能案とかもほとんど自分達で考えることができたもんね。自分がMVPだと思うのは、この場にはいないんですけど、フロントエンド開発をやってくれたメンバーです。バックエンドコースで学んだエンジニアが集まったので、フロントエンド開発をできる人がいなかったんです。そのメンバーもバックエンドの研修を受けていたのですが、フロントエンド開発を率先してほとんどやってくれて助かりました。
木原:僕は悠斗がMVPだと思います。当時って研修も終盤に差し掛かったところで、もっと技術力をつけたいとか、もっと複雑な実装をしていきたいみたいなことって皆考えていたと思うんです。そんな中で悠斗の実装力がすごく高くてチームとしても助かりましたし、個人的にもすごく勉強になりました。
大島:そうですね、悠斗から学ぶところは多かったです。今も同じチームで働いているので得ることは多いです。
▍チーム開発の難しさを実感
−阿部:チーム開発で難しいと感じたところはありますか?
中嶋:実装の話になるんですが、複数人で開発しているとコードの中にそれぞれのちょっとした癖みたいなものが入り混じってきて、どの程度チームで統一していくのか判断することが難しかったです。「自分としてはこっちのコードの方がきれいに見えるんだけどな、でも実装してくれた人はこのコードがきれいだと思って書いてるんだよな」みたいな。相互レビューをしていたので、他の人の書いたコードを見てどこまで指摘するかといった線引きに迷いました。
木原:僕もレビューの時に「自分はこうなのにな」みたいに思うことは多かったです。限られた期間での開発だったので、余計な話し合いで時間をとってしまうのも良くないと思って指摘しなかったところもあります。もちろん指摘する方がいいと判断したときは伝えていました。
中嶋:エンジニアとしてプロジェクトに参画している今でも「これ伝えるべきかな」と迷うことはあるのですが、以前に比べて伝えるところの線引きの判断は早くなったように思います。研修の段階で相互レビューを経験したり、レビューで悩んだ経験ができたのはよかったことでもあります。
大島:チーム開発で良かったと感じたこともたくさんあります。1日の終わりにみんなで成果を報告しあっていたので、メンバーや自分の進捗がはっきりと見えてくるんです。見栄というわけではないですけど、メンバーの進捗と見比べて「1日あたりこれくらいは進めよう」といった目標を立てたり、いい意味でモチベーションを保ちつつ開発できたように思います。
木原:僕も見栄はありました(笑)
中嶋:僕もです(笑)
−阿部:完成した時はどんな気持ちでしたか?
木原:研修期間を経て、最終的に1つのサービスを作るところまでできたので、達成感はすごくありました。と同時に「もっと綺麗なコードを書けたんじゃないか」とか「リファクタ(※リファクタリングの略。無駄な部分を取り除いてコードを整理すること)もっとしたいな」みたいなことは完成してからも考えていました。
大島:多分皆終わったときに「リファクタしたいな…」って考えていたと思います。時間の関係で手をつけられなかった部分もあったので。
−阿部:Sangoを開発する前に比べて、心境や価値観の変化はありますか?
木原:Sangoの開発は自分たちにとって初めてのチーム開発だったので、技術や実装方法を提案し合ったり自分の意見を伝える力が身に付けられたと思います。あとは研修の段階で、他の実装者の意見を汲み取りながら実際にコードに書き起こしていく過程を経験したので、現在の業務の中でもメンバー同士の意見を交換し合いながら開発できていると思います。
▍プロダクトを開発してみて感じたこと
−阿部:Sangoの推しポイントはどこですか?
大島:僕の推しポイントは、リクエスト掲示板の機能です。リクエスト掲示板があることによって「この内容の記事をリクエストしている人がいるし、自分も記事を書いてみようかな」と思う人が出てくると非常に嬉しいです。先日「〜について記事書いてくれたら〇〇GIZ送ります(※GizumoではGIZという社内通貨を導入しています)」とリクエスト掲示板に書いてみたところ、すぐに記事を書いてもらえました。GizumoにはSangoの他にも社内で開発されたプロダクトがあるので、社内のプロダクトを組み合わせて活用して相乗効果を狙うのもいいかもしれないです。
木原:Sangoは社内のメンバー限定のサービスであるところも推しポイントです。あえてクローズドなサービスにすることで、一般的な記事投稿サービスでは伝えられないような”働く人の生の声”みたいなものを交換できる場となっていると思います。
中嶋:僕の推しは、ありがちなことだとは思うんですが、下書きが出来るところです。いきなり0から100まで文章を書いてそのまま投稿することってたぶん少なくて、どこかにメモしながら少しずつ文章を書いていく人の方が多いと思うんです。Sangoは下書き機能があるので、サービス上で下書きに直接書いて保存できる点が便利だと思います。
−阿部:これからどんな風にSangoを使ってもらいたいですか?
中嶋:アウトプットすることは自分の力になります。日頃の小さな学びみたいなものをどんな些細なことでもアウトプットできるような場として、Sangoが賑わってくれたらいいなと思います。
−阿部:最近では30日間連続で順番に記事を投稿するような企画も盛り上がっていましたね。開発者視点でそれを見てどう感じましたか?
木原:おかげさまで記事投稿企画も盛り上がったので、社内のエンジニアや研修生にとって知見共有ツールのニーズが大きかったんだな、ということを改めて実感しました。あと先輩エンジニアの方から、「マークダウン形式でリアルタイムプレビュー出来るような機能が便利だね」と機能面を褒めていただいたのが嬉しかったです。
中嶋:自分たちが作ったサービスを使ってくれる方がだんだん増えていって、それと同時に記事の投稿数も増えていって、というのを目に見えて実感できたことが嬉しかったです。
−阿部:これからさらに賑わってくれるといいですね。最後に、プロダクト開発を企んでいる方に向けて一言お願いします。
大島:プロダクトを1から作り上げるのって大変なことも多いですが、いざ作り終わってインターネット上で見られるようになるととても嬉しいです。例えば、電車で移動しながら自分の作ったサービスを使えるようになったりとか。大変な分嬉しさも大きいと思うので、ぜひ挑戦してみてほしいです。
木原:今回開発したSangoは、研修の中で「こんなものを作ってほしい」と言われて作ったプロダクトではあるんですが、誰かが欲しているニーズを形にして解決してあげるという事が経験できたのは自分自身の学びになりました。誰かのニーズや悩みを解決できるのは素晴らしいことだと思います。是非挑戦してみてください!
中嶋:作りたいプロダクトがあるのなら、作る過程を楽しんでほしいと思います。仕事になると、先方や予算の兼ね合いを考慮しながら依頼された開発をすることが求められます。プロダクト開発って「自分がこの方が良いと思うからこうしよう!」みたいな、ある程度自分のやりたいように進められるものだと思うんです。自分の作りたいものを作っている時が僕自身は1番楽しいと感じるので、せっかくなら作る過程を楽しみながらやってみるのがいいと思います。