個性豊かなユニークビジョン社員の入社に至るまでの経歴や、どんな想いをもって日々の仕事に打ち込んでいるのかなどをご紹介する「ユニークビジョンではたらく仲間」。
今回は、ユニークビジョンの創業メンバーでありCTOを務める青柳 公右平に話を聞きました。
ユーザに使いやすいものを作りたい
大学を出てエンジニアとして働き始めた当初は、ソフトウェア会社で翻訳ソフトの画面側を作っていました。その当時から「使いやすいものを作りたい」という気持ちが大きかったので、例えば翻訳する画面では横に並んだ翻訳元と翻訳先の両方を、真ん中のスクロールバーで同時にスクロールしていくようなUIを開発しました。その後、他の会社でも同様のUIが作られていったのには驚きましたね(笑)
この仕事は1年ほどで、次は大手企業のUI研究部署に行きました。ここではweb上で3Dモデルのキャラクターと触れ合うシステムに携わり、ここでも画面側をメインで担っていました。web上で3Dモデルを動かすことは今でこそ当たり前ですが当時はとても先進的なことでしたし、ユーザーの行動に合った反応ができるようにキャラクターの動きを作っていくのは今で言うチャットボットのようで、ゲームみたいで楽しかったです。
ただそういった仕事をしていく中で、作ることはもちろん楽しいもののITを軸に新しいことをやりたいと思い、ITコンサルの会社に転職しました。代表の白圡やCOOの菊池と出会ったのはこの会社ですね。当時は会社の一同僚、という関係でしたが。
技術だけではなくもっと幅広くITに触れていきたいと感じていたので、様々な分野の研修に参加していました。実際に配属されていたのはR&Dの部署だったのですが、プロジェクトにベタ付きではなかったこともあり、時間をやりくりして当時500人くらいのメンバーの中でも研修には最も多く参加していました。
部署の中ではリポジトリツールの開発に携わっていました。元々は他の部署で作られたものを引き継いだ形でしたが、それを改善したり全社で使えるようにしたりという部分です。全社統括的な部署だったので、今現在の、他のエンジニアにアドバイスしたりレビューしたりといった業務には通ずるところがありましたね。
仲間に惹かれて加入したユニークビジョンで感じた"今までなかったものが生まれる予感"
その会社でやっていくのも楽しかったのですが、断片的なところではなく初めから自分で作ればもっと良いものを作ることができると思い、フリーランスに転向しました。自分で会社を興すつもりはなかったのでそういった道を選んでいましたが、その後ユニークビジョンを立ち上げた白圡と菊池に声をかけられたので加入することにしました。それまで働いてきた会社や関わった人たちの中で色々な社長を見てきましたが、白圡はその中でも一番良い社長像だなと感じていたのでユニークビジョンへの加入を決断しました。
正直、当時のユニークビジョンと比べたらフリーランスの方がよほど稼げてはいたのですが、この二人となら今までなかったものが生まれるような予感がすごくあったんです。既存のものの拡張などではなく、一から自分たちで新しいものを作れると思いました。技術者は実質自分だけでしたし、かなり大変になるだろうとは思っていましたが、同時にこのメンバーならそれも何とかなるだろうとも感じていました。今思うと、現時点では実際に何とかなってきましたね。ここから先でまた大変なことがあるかもしれませんが...(笑)
ユニークビジョンの一員として働き始めてから、最初はエンジニアが僕一人だったのでもちろん技術面についてはコードの一行一行、隅から隅まで完璧に把握していました。大きなトラブルは特にありませんでしたし、何か小さな問題が起きてもすぐに解決できていました。割と規模の大きい仕事もこなせていけていたので、それは人数が増えても変わらないことだと思っていたのですが、エンジニアを増やして複数人で開発するようになると、品質を保つことが本当に難しくなってしまいました。一人なら自分の集中的な頑張りでなんとかなってしまうことも、チームで動いていたらそういう訳にもいきません。
会社やプロジェクトの規模が大きくなるにつれて、会社として出来るものは増える反面、品質の担保が難しくなるということを身をもって体感したので、今では全体的な品質を横断して見るようにしています。ユニークビジョン全体としてもそういった経験から、品質チームやレビューチームなど、様々な細かい視点からチェックするようにしています。
失敗を繰り返して自分なりのメソッドを確立した、エンジニアとしての信条
CTOとして第一に考えていることはもちろん、プロダクトをきちんと作るということです。早く、品質良く、というのが大前提です。ユニークビジョン加入当初の自分一人のパワーで乗り切るという形ではなく、人が増えて選択肢も多くなった中で、チームやプロジェクトとして同じ目標を達成する方法を常に模索しています。
あとは「同じものを二度書かない」ということもかなり大切にしていますね。同じことを二度書くことは単純に時間も倍かかるということなので、早く作るということの延長でもあります。二度書かないように共通化することになりますが、きちんと共通化ができているとバグが発生しにくくなり、それもまた早く作れることに繋がります。
ただ、共通化や抽象化の線引きは今でも難しいですね。共通化や抽象化をやりすぎると、なんでも受け入れられるお化けのようなものが出来上がります。なんでも出来ますがその分パラメータが大量になり、何の為に存在しているものなのか分からなくなってしまいます。共通化を全くしないのはもちろん良くないですが、やりすぎても弊害が出て来てしまうんです。
この辺りは経験というか、試行錯誤していくうちにバランスを掴んでいくものだと思います。最初から共通化を気にしすぎて遅くなってしまっては意味がないので、僕はまず一気に書いてみて、二度書くタイミングが出て来たら共通化するようにしています。たくさん経験して、たくさん失敗して、この考え方に落ち着きました。設計の本をたくさん読んで論理的に自分のやり方を身につける人もいるかとは思いますが、僕は頑固なので自分で失敗を経験して納得する方法が合っていたんだと思います(笑)
良い考えだなと思っているのは、Perlの作者が提唱している「プログラマの三大美徳」です。怠惰、短気、傲慢、この三つが全てあると良いプログラマだとする考え方です。
まず怠惰だと、いかに楽をできるかという観点で全体の労力を減らすための努力ができます。僕も面倒くさがりなので同じものを二度書くことは無駄だと思っていますし、何度も同じ作業をしたくはないと思っています。その考えから、例えばデプロイ作業を繰り返さなくて良いようにDevOpsチームで自動化を推進するなど、会社全体での活動にも繋がっています。
次に短気というのは、ちょっとしたことにも怒りを覚える気質なので、すぐに改善すべく対応し、瞬発力が高くなるので良いプロダクトになっていきます。
最後に傲慢だと、自分の書いたコードに絶対の自信を持っています。そのためには指摘の余地なく完璧で綺麗なコードを書こうとする努力を惜しまないので、これも結果的に良いプロダクトになっていきます。
どれも言葉自体は悪いですが、エンジニアとしては良い気質なんです。今改めて考えてみると、ユニークビジョンの中でも特に技術力の高いエンジニア達には共通している気質だなと思いますね。
ユニークビジョンが高い品質を提供し続けられる秘訣は"泥臭さ"と"瞬発力"
ユニークビジョンの技術的な一番の強みは、この規模としては非同期プログラミングやパフォーマンスの良いシステムなどでとても速さが出せていることと、Twitterをはじめとする各種SNSなどのAPIを長年使い続けてきたことで積み重ねられたノウハウにあります。
APIについてはただ与えられるまま普通の使い方をするだけではなく、どうしたら最大限に活用できるか考えたり、万が一APIが動かなくなっても自分たちの技術でカバー出来る仕組みを用意したりと、かなり試行錯誤しています。泥臭くてもここまでしっかり要求を実現する方法にたどり着くことができるのは、なかなか難しいことだと思いますね。
どちらも、在籍しているエンジニア陣の成長意欲がとても高く、積極的に動いてくれているからこそ可能になっています。メンバーが積極的にアイデアを出しあったり、活発に技術的な議論が行われていたりと、会社としては今が過去最高に良いチームを築けているなと感じています。
プロダクトとしては、保守性の高さが自慢できるところですね。例えばTwitter上で施策を行う仕組みである「Belugaキャンペーン」ですが、様々なジャンルの企業様からお話をいただいて行う施策は本当に千差万別です。しかし、どんなことを要求されていても全て実現できています。動的にプログラムを追加する独自の仕組みなどもあり、色んな部分で柔軟に要求を吸収できる仕組みになっているんです。
柔軟性が高いということは、先まで見通して考え、問題を先回りして解決していくということです。開発しているその時だけでなく、後から開発する時のことも想定して負債を残さないように考えて作っています。先々までしっかり考えるとその分工数もかかってしまうのでバランスも考えつつではありますが、保守性を上げることは後の工数を減らすことに繋がるので、大事に考えています。
この「Belugaキャンペーン」が少し他と違うのは、かなり高い瞬発力が求められ続けるという点です。実際にそれぞれのお客様に使っていただく期間は一回一回が短いものの、利用頻度は高く、施策の度に全く異なる様々な要求があるんです。様々な問題をかいくぐりながらも泥臭くやり遂げる力や、そのためのベースとなる要求に素早く対応する瞬発力は、ユニークビジョンならではの強みだと思います。
他の会社では見たことがないですし、僕の開発人生でも無かったですね。これだけ頻度高く、すごい量の機能開発をしていることは、エンジニアにとっては面白く感じる部分だと思います。
時代とサービスに合わせた柔軟な技術選定
ユニークビジョンでは創業当初から今まで、いくつかの技術を移り歩いてきました。最初に作った「Beluga」ではFlashだったりPHPだったり、色々な技術を使って沢山失敗してきましたね。創業当初は受託事業が多かったこともあって、書きやすくて人も集めやすいPHPを主に使用していました。しかし会社も発展し始めて受託事業の割合が下がってきたタイミングで、当時のPHPではなかなか痒い所に手が届かず、根本的な部分に手をかけることができないところに不便さを感じていました。制約が多く、自由度が低かったんです。
それからは次から次へと様々な技術に手を出してみていたのですが、会社としてきちんと習熟した言語を持とうと考え、Rubyに集中することにしました。Rubyでは根本的な部分にも手が届きますし、コードに手を加えず差し込みで対応できるくらい柔軟性も高く、少ない量で楽にかけたりと、良い言語だなと感じています。
ただ、Rubyではなかなかパフォーマンスが追いつかない部分があり、今は徐々にRustに切り替えていっています。Rubyではサーバーごと落ちてしまっていたものもRustでは数分で返ってくるなど、かなり恩恵は感じていますね。最近はユニークビジョンとしても世間的な流れとしても、静的型付け言語の方が良いのではないかという考えになってきていることもあり、RustとTypeScriptを主に使用するようになっています。技術はあまり変えないようにしているつもりでしたが、結果的に見ると結構変わっていますね(笑)
幅広い領域に触れられる環境に、意思を持って取り組むエンジニアがたくさん在籍しているユニークビジョン
ユニークビジョンには、UCバークレーを卒業してAppleに買収されたベンチャー企業で働いていたり、命に関わる繊細な仕組みを扱う自動車会社で技術をつけてきていたり、AI将棋の世界大会で上位入賞していたりといった派手な実績を持つメンバーたちに加えて、些細な変化も見逃さずに安定感を発揮し続けるメンバー、新卒でエンジニアの少ないチームにジョインしてメキメキと総合力を身につけているメンバーなど、幅広く強力な視点や技術力を持つエンジニアが在籍しています。
あとは期せずして国際色は豊かになっていますね。エンジニアではベトナム、ミャンマー、アメリカ、ディレクターではオーストリアなど、世界中からメンバーが加入してくれています。海外からくるメンバーは考え方がユニークな人が多いですし、海外で働こうという覚悟を持って来ているので成長スピードやパワーが凄いなと感じます。
また、ユニークビジョンにはワーキンググループという枠組みがあるので、開発プロジェクトのエンジニアとしてだけでなく、各々の領域で力を発揮してくれている人が多いですね。色々なことが出来る環境があり、そこで意思を持って取り組んでくれるエンジニアが沢山いることは、本当に面白い環境です。
ここ数年では成長意欲が高くて積極的に発言してくれる人が増えて来ているので、それはかなりありがたいと思っています。
今後としても、問題を自分で見つけ出して対応できる人に入って来てもらいたいですね。何かに乗っかるだけでなく、自分で動く人と一緒に働きたいです。
考え方としては、この技術が何を解決するためにあるのかという本質を考えることが自然にできる人だと、ユニークビジョンの考え方とマッチするかなと思います。
この言語がやりたい、この技術がやりたい、ということがベースになっていると手段が中心になり本質からずれて来てしまうので、その時々で適した技術を考えられるような、ものづくりが好きな人に入ってもらえたらと思っています。
<関連記事はこちら>
ユニークビジョン株式会社's job postings