こんにちは!クルーバー ZERO TO ONE事業部 採用担当の川北正和です。
ZERO TO ONEは2015年にアップガレージからスピンオフして誕生し、2020年4月より株式会社クルーバーの傘下でZERO TO ONE事業部として神奈川県横浜市青葉区でIT事業を展開しています。
最寄駅は東急田園都市線の青葉台駅。閑静な住宅街にポツンとオフィスがあります。今年で6年目を迎えるZERO TO ONEは、今では世界115ヵ国にビジネス展開し、自社開発システムは取扱高200億円を超えました。知名度も少しずつ上がり、優秀な人材も増え、今まさに第二創業期を迎えているネクストブレイクカンパニーです。
そんなZERO TO ONEが取り組んでいるプロジェクトを色々な切り口で紹介していきます。第1回目は、異なるプロジェクトの主要メンバーによるコラボインタビューです!
メンバー紹介
森下 広季(もりした ひろき)
「起業して10年以上自身でビジネスをやっていたエンジニアが、通勤時間片道1.5時間以上かかるITベンチャー企業に転職して叶えたいこと」
https://www.wantedly.com/companies/zerotoone2/post_articles/178905
中村 篤志(なかむら あつし)
「動画配信大手で特許を取得したフルスタックエンジニアが、青葉台にあるITベンチャー企業に転職してチャレンジしたいこと」
https://www.wantedly.com/companies/zerotoone2/post_articles/177435
※普段はお互いを「篤志」「森下さん」と呼び合う仲なので、文中もそのまま記述しています。
ジョインしているプロジェクトについて
川北:お二人が担当しているプロジェクトとプロジェクト内でのお二人の役割を教えてください。
森下:私は主にECサイト「クルーバー」(https://www.croooober.com/)を担当しています。役割としては、開発の取りまとめや、メンバーから上がってきたものや他のシステムと関連する部分のチェックをしています。あと、クルーバー内の新しいコンテンツ「クルーバーショップ」(https://newparts.croooober.com/)がリリースされてひと段落したので、最近は篤志のいる基幹系システムのプロジェクトにも参加しています。
中村:私は主に基幹系システムを担当しています。役割としては、新しいシステムのアーキテクチャ設計やメンバーフォローなど、システムリーダー的な役回りです。あと、BoonBoonJob(https://www.boonboonjob.com/)も担当しています。
川北:お二人ともプロジェクトではリーダー的な役割をされているんですね。
中村:そうですね。会社とのやりとり等、プロジェクト全体に関するマネジメントは高橋さん(ZERO TO ONE創業メンバー、現事業部部長)が担当していて、プロジェクト内のマネジメントは森下さんや私が担当しています。システムリーダーやプロダクトマネージャーのような役回りですね。
開発の進め方
川北:お二人のプロジェクトではどういう流れで開発をされていますか?開発手法も併せて教えてください。
中村:新規案件のケースだと、まずはプロダクトのステークホルダーと打ち合わせをして要件の洗い出しをします。その後、私がチケットを一気に切って、メンバーとストーリーポイントを決めたり不明点を詰めたりしてチケットの完了状況を明確にした上で、アジャイルで回していくイメージです。一般的なアジャイル開発の手法にのっとって進めることが多いですね。今取り組んでいる、入庫省力化プロジェクトで買取査定周りのシステムをリファクタする作業もアジャイルで回しています。
森下:私の場合は篤志と違ってステークホルダーが外部のことが多いので、まずは打ち合わせでしっかり要件を詰めます。最近は中上に入ってもらってワイヤーを作ってきちんと議論をして、それをチケットにした上で進めることが多いです。あとは、差し込み案件が多いので、アジャイルではなく2週間位の短いスパンでスケジュールを組んで作業を進めることが多いですね。
※中上についてはこちらの記事をご覧ください。
「バイク好きWebディレクターが語る、青葉台のIT企業で働く魅力とキャリアについて」
https://www.wantedly.com/companies/zerotoone2/post_articles/249010
川北:プロジェクトによって方法が違うんですね。
中村:新規案件が多いか保守案件が多いかで変わってきますね。私は新規案件が多いのでアジャイル開発が多いです。森下さんは保守案件が多いので、フレームはアジャイルに乗っかっていますが、スプリントのスコープが大分変わってしまいますね。
森下:そうですね。古い技術で作られている部分が多く、技術的な負債の影響で思うように開発が進まず、チェックしながら時間をかけて作業することが多いので大変ですね。
中村:エンジニアの手を介さずに設定できるようなところもエンジニアの手を介してゴリゴリ書き換えないと設定できない部分があるので、そこは対応工数取られていますね。
川北:新規開発はそういうことがないようにしていると。
中村:そうですね。エンジニアの手を介さなくていいように置き換えています。クルーバーショップは、モダンな技術を使ってあまりエンジニアの手を介さず、かつ、不具合も起きにくいことを目指して作られていて、個人的にはとても気に入っています。
森下:って言ってるけど、篤志はクルーバー作ってないじゃん笑。
川北:あ、そうなんですね!?
中村:そうなんです笑。でも、自分で作ってないけど気に入っています!動きがいいなと思って。
森下:そのいい部分を他のECサイトにもできる限り展開していくのが今後の課題かな。
中村:少し話がズレるんですけど、クルーバーショップで複数の商品を買う時、何円以上で送料無料とかやりたいですよね。倉庫持つ必要が出てくると思いますが、サービスとして魅力的というか、バイクの会社でやっているところがあるので、バイクより母数の大きいクルマ業界でできないはずがないと思っています。
森下:それ是非やりたいね。その意見はクルマ大好きでクルーバーショップを使っている篤志ならではだよね。作りながらユーザーっていうのは強みだね。
メンバー同士のコミュニケーション
川北:様々な開発をチームで進める上でメンバーとのコミュニケーションは欠かせないと思います。普段はどの様にコミュニケーションを取られていますか?
森下:朝は各プロジェクトのリーダーが集まって15分位ミーティングをしています。それ以外は基本Slackでやり取りすることがほとんどですね。差し込みの案件が入ってきたときもSlackでやり取りしていますし、最近はリモートで作業する機会も増えたので、ますますSlackメインになっています。
川北:新しく入ってきた中途メンバーや新卒メンバーもSlackでスムーズにコミュニケーション取れていますか?
中村:問題なくやれていると思います。中途の人は元々エンジニアなので違和感ないと思いますし、新卒メンバーも徐々に慣れてくると思います。エンジニアは作業している最中にあまり話しかけられたくないというか、声をかけられると考えが飛んでしまったり、どこまでコードを書いていたか分からなくなったりするので、区切りがいいところで順番にタスクを処理したいんですね。そういった意味では、Slackって通知が来て、作業中だとすぐに返信できないので溜めておいて、作業のキリのいいところで一気に処理するという使い方ができるので使い勝手はいいですね。
川北:なるほど、Slackは必須のツールですね。ちなみに、お二人は普段からよくコミュニケーションを取られるんですか?
森下:プロジェクトは違いますがインフラは二人とも見ているのでAWSの話はよくしますね。あとは、篤志はリプレイスとか既存のモノをよくしていこうというタスクが多くて、私はどちらかというと保守の領域が多いのですが、目指すべき方向は一緒なので相談はよくしています。
中村:プルリクエストのコードレビューもコミュニケーションの1つですね。コードの品質を高める話し合いは常にしていますね。プロダクトが違うのでビジネスロジック色の強い話はあまりしませんが、コードやインフラ等の技術的なところはしっかりコミュニケーションを取ってます。
技術的なこだわり
川北:技術的なところのお話が出てきたのでそこを少し掘り下げたいと思います。先程AWSを使用しているというお話がありましたが、AWSを使用している理由はありますか?
中村:インフラだとオンプレミスかクラウドかという話になりますが、オンプレミスだと専門のインフラエンジニアが必要ですし、我々アプリケーションエンジニアでは触れない領域なんですよね。そこをカバーしてくれるのがクラウド上のインフラで、我々だけで回していくのはクラウドしかないなと。もし、インフラの知識があってオンプレミスを導入したとしても、当然そこに工数をかけないといけないので、会社の規模的にそこの工数をかけられないという背景もあります。コストを払う代わりに手が回らない部分をやってもらうという意味では、クラウドは必須だなと思います。ベンダーへのこだわりは・・・何かありましたか森下さん?
森下:こだわりがあるというか・・・今使っているデータベースは基本的にデファクトスタンダードですし、篤志や私が入社した時には既にAWSを使用していたので新旧のシステムの連携を考えると必然だったのかなと。敢えて他のベンダーに変える理由はなかったですね。
川北:なるほど。今後開発が進んで規模が大きくなったら、オンプレミスにした方がいいなとかっていう話はあるんですか?
中村:そうですね、難しいところなんですけど・・・あまりにも会社の規模が大きくなりすぎて提供するサービスが異常なほどサーバのリソースを食って、インフラエンジアを雇って保守させたとしてもランニングコストが安くなるという判断が下れば、オンプレミスも選択肢としてあり得るかなと思います。ただ、現状のサービス内容やコスパを考えると、多分ないかなと思います。クルパ(https://www.crpa.jp/)がメチャクチャ流行って、我々が動画配信をかなりやらないといけないっていう状況になったら、話は別ですけど。
森下:動画配信あるかなぁ笑、でも、逆にそうならない限りは物理インフラを持つメリットがないと思います。
中村:サーバールームも作らないといけないですしね。
森下:でも今は一部基幹システムをオンプレミスで持っていて、実はこれには理由があって、20年近く前にアップガレージ(https://www.upgarage.com/)の各店舗間の通信を暗号化する目的で導入されました。当時クラウドでは実現できなかったのですが、今はできるので徐々に移行しています。
中村:アップガレージの設立あたりからこのシステムはあって、当時はSSLって一般的ではなかったし、HTTPでシステム間を結合する発想はないような設計で、Visual Basicで作られていたんで技術的にキツかったですね。
森下:凄く高いVPNルータとか置かないといけなかったからなぁ・・・
中村:我々はその頃から溜まっている負債と闘ってるんですよね!?
森下:そうだな笑
川北:その闘いに毎年新卒メンバーも加わっています。最近新卒メンバーはみんなLinuxを使用していると聞きましたが、何か理由がありますか?
中村:新卒メンバーにLinuxを渡したのは、Web開発に向いているOSなのと、私が元々Linux好きなのが理由です。私が研修担当になった時に彼らのサポートをしっかりできるだろうということで渡したのが始まりで、その流れが続いています。あと、そもそもLinuxはWebエンジニアにとって必須のスキルですし、普段から使ってもらうことで知識を吸収して欲しいなという思いもありました。
森下:それもあってか、今やエンジニアメンバーの半分がLinux笑。
中村:確かに笑。加藤君なんかは「マウスで操作するのもうヤダ!」って言ってますしね笑。慣れちゃうとそうなるんですよね。
※加藤についてはコチラの記事をご覧ください。
「20歳のクルマ好き新卒Webエンジニアが語る、自動車業界と自分自身の将来について
https://www.wantedly.com/companies/zerotoone2/post_articles/249854
森下:私もLinuxいいなと思いますね。Docker周りの話に繋がるんですけど、Linuxだと完全にネイティブで動きますし、実際の動作環境と完全に同一なのでいいんですよね。Macだと、一応Unix系なんですけど、BSD由来とかで若干違っていて、そのままネイティブで動かないのでパフォーマンス的に問題があるんですよね。
中村:ファイルシステムの違いも若干ありますよね。APFSに対してext3とか4とか使えるので。
森下:そういう意味で言うと、篤志が入社してきた時にLinuxでやると言い出して、その後新卒もいきなりLinuxやらせて「おいおい大丈夫か?」と思ったけど、今思えばあれは正しかったんだな。
中村:Windows使うとサポートコストがキツかったですしね。あと、Macよりも安くマシンが手に入るというか、高性能なPCを新卒メンバー渡せるっていうのも理由としてありましたね。
森下:あと、Linuxの操作ができないと当然PCが動かないので、強制的にLinuxに慣れますね笑。
中村:そうですね、まぁ、最悪慣れなくても、コピペしてコマンドで動かすこともできますしね笑。コマンドだと再現性が保証されているのでいいですよね。
川北:なるほど、新卒メンバーの急成長を促すためにも、Linuxは必須ということですね。もう少し技術的なお話いいでしょうか?インフラの話に少し戻りますが、データベースは何を使用していますか?
中村:MySQLのアーキテクチャを使えるAuroraを使っています。データベースに関しては、他のデータベースを使う明らかなメリットがない限りは、スタンダードなMySQLを使うのが最善なのかなと思っています。ただ、今後柔軟なデータスキーマの変更に対応したいということであれば、MongoDBとかJSONをバシバシ直せるようなデータベースを導入するっていうのはあり得るのかなと思います。
川北:技術的な質問の最後に、開発に使用している言語を教えてください。
中村:RubyとRuby on Railsを使ってバックエンド周りは実装しています。一般的にRubyは遅いイメージがあると思うんですけど、可読性と保守性が非常に優れているんですね。そこは静的型付け言語が好きな人と若干コンフリクトするところはあると思うんですけど、今の開発環境やサービス内容を鑑みて、パフォーマンスよりも可読性や保守性を優先しているため、Rubyを選択しています。
川北:フロントエンドはどうですか?
中村:フロントエンド周りはNuxtを使って実装をしています。最近だとクルーバーショップはNuxtを使って作られたSPAのサイトですね。
森下:最近の世の中的にはNuxtという流れがあるからね。
中村:そうですね。やっぱり、フレームワークとしてきちんと完成しているのがいいところですね。10年くらい前にBackbone.jsとか、一部のJS実装をフレームワークに置き換える話があったと思うんですけど、それってサーバサイドでテンプレートを使って何か出力する前提のことが多くて、完全にJSだけで完結するような仕組みではなかったんですね。でも、ここ4、5年位でJSだけできちんとアプリケーションが完結するような仕組みができはじめて、フロントエンドにはNuxtを採用しています。
森下:クルーバーショップを開発した時は書きやすいし、テストもしやすかったですね。
中村:コンポーネント志向で閉鎖してるというか、きちんと一つのコンポーネントで完結するっていう設計が書けるのでそこは利点ですよね。
森下:機能が多いフレームワークではあるんですけど、仕様的には割とシンプルなんですね。でも、ドキュメントとかを読んでみるとよく考えられていて、シンプルながら高機能という感じですね。
中村:Reactとか他のフレームワークと比べても、テンプレートエンジン的にNuxtの方がHtmlに似ていて自然という感じもしますね。
これからの課題
川北:ありがとうございます!技術的なお話はまだまだ尽きませんが時間も限られていますので・・・最後に、今後のプロジェクトの課題を教えてください。
森下:私のプロジェクトは作られてから時間が経っているプロダクトも少なくないので、どんどん新しくしていかないといけないという課題があります。そういった意味では、クルーバーショップはその礎となる存在で、新たな技術を使って開発しましたし、特にフロントに関してはまっさらの状態から作りました。このように、現状のものを改善というよりかは、新しいものにシンプルに作り変えていく、というのが課題ですかね。
中村:私のプロジェクトの課題は2つ、プロダクトの課題とチームの課題です。プロダクトの課題は、今稼働しているシステムが1990年代頃から動いているもので、それ故に負債が多くて、このシステムをベースに新しいサービスを展開するとなると一大事で、システム間のデータ連携や欲しい目的のデータを取り出すのに工数がかかる上にリスクも高く、気軽に新しいサービスに連携させることも難しいんですね。じゃあそこで既存のシステムと連携させない新しいシステムを作るとなると、それはゼロベースでシステムを作るのと同じで会社の資産価値を全く生かせていないと。そこを解決するために、基幹システムやデータの持ち方を新しくして、ゼロからの立ち上げではなくて会社の資産を活用した新しいシステムを作っていて、これを一刻も早く完成させなければというのがプロダクトの課題です。もう一つのチームの課題というのは、新卒メンバーの割合が多くプロダクトを任せきりにできるメンバーが限られているので、教育を強化しないと人がスケールしないところですね。プロダクトがスケールするようになっても、任せられるメンバーが限られているが故に開発速度が出ない現状があるので、そこを改善するために教育を強化、もしくは、外部メンバーを迎えて開発力を高めていきたいという意識はあります。
川北:(・・・外部メンバーを迎えて、のところは採用担当として耳が痛い・・・)
中村:あと、個人的な課題なんですけど、今あるスキルセットだけで仕事をこなそうとしていて、新しいものに触れる機会が減ってきているので、もう少し余裕が出てくれば、新しいものにきちんと触れながら仕事を進められるようにしたいですね。新しいものに触れるには余裕がないとできないので、今の課題をクリアして余裕を作って、よりいい環境にしたいですね。
森下:確かに、そういう新しいものに触れる流れというか風がチームに吹き込んできて、メンバー全体を巻き込めるような形を作りたいですね。人それぞれというか、篤志は自分で新しいものにあまり触れられてないと言ってますけど、結構触れてると思うんですね。一方で、新しいものに対するアンテナが立っていないというか、今のことで精一杯というメンバーもいると思うんです。そこで情報を拾える人が拾って、メンバーを巻き込んで共有できる位の余裕というか、そういう環境ができるといいなと思っています。
中村:そうですね。それが結果的にチームの開発力に繋がりますからね。チームとしての開発力が上がれば余裕ができて、余裕ができれば新しいことにチャレンジできて、そのチャレンジが結果的にさらなるチームの開発力に繋がる・・・そんないい循環ができればいいなと思いますね。
川北:ちなみに、新しいものに触れる・取り入れていくというのは、将来の会社の開発のためなのか、それとも、純粋にエンジニアとしての知識欲求なのか、どちらの意味合いが強いのでしょうか?
中村:そうですね、難しいところではあるんですけど・・・永遠に最先端を走り続ける技術ってないんですね。なので、私たちが今使っている技術も割と新しいんですけど最先端ではなくて、おそらく最先端の波のちょっと引いたくらい、割と一般層に普及してきて安定したやり方になってきた位のものを採用しています。でも、最先端の波の部分は今の内から吸収しておかないと、多分5年後とか10年後とかに私たちがやっていることが他社から見たら随分レガシーなことやってるな、となってしまうので、やっぱり時代の波に取り残されないようなシステムを作っていくために、最先端のものに日頃から触れて取り入れたいですね。それは私にとっては趣味でもあるので、会社のためでもエンジニアとしての自分のためでもありますね笑。
森下:会社によっては新しいことに拒否反応を示すところも少なくないんですが、私たちの会社は新しい技術を取り入れるカルチャーですし、エンジニアにとって新しいものに触れるって、やっぱり楽しいんですよね。なので、もっと余裕が出てくればより新しいことにチャレンジできて、会社としてもエンジニアとしてもどんどんステージが上がっていける環境にあるので、このカルチャーをもっと有効活用していきたいですし、新しくジョインするメンバーはチャンスがあるなと思いますね。「現状の課題を解決し、新しいメンバーと一緒に新しいチャレンジをしていく」というのが、次の課題ですかね。
川北:ありがとうございます。お二人の役割から始まり、具体的なプロジェクトや技術的なこだわり、今後の課題まで色々お話いただき、お二人のプロジェクトへの情熱とプライドがヒシヒシと伝わってきました!
中村:技術的なところはまだまだ話足りませんが・・・
川北:それは・・・是非Slackでお願いします笑。本日は長い時間ありがとうございました!
二人:ありがとうございました!