空色の新CTOが語る、空色の開発はここが面白い。「WhatYa」解体新書!
皆さん、こんにちは!空色エンジニア採用チームです。
別場所で記事を書いておりましたが、noteにお引っ越ししましたので転記していきたいと思います。投稿時期が少し異なりますので、ご注意くださいませ。。!
弊社は、2014年からコミュニケーションコマースアプリの開発/運用を開始し、チャットを通じた販売ノウハウとシステムを構築。2015年からB2B事業に拡大し、WEB接客ソリューション「OKSKY」の提供をスタート。2018年から、空色がこれまでに構築した有効会話ログデータを活用し、プリセット化されたFAQが提供できるAIチャットボットシステム「WhatYa」をリリース。シンプルかつ低価格のボットとして提供を開始しています。
今回は空色に新しくCTOとして就任した(2020年4月)平松より当社のエンジニアチームの魅力をお話いただきます。
是非、ご覧ください!
まず、WhatYaの開発背景を教えてください。
僕がまだフリーランスをしていたときに来た案件が、WhatYaの元になっています。
そのときはIBMワトソンを活用したチャットボットを作って欲しいというご依頼だったのですが、既に提供されているツールとのバランスを考慮して、新たなプロダクトとして作ろうかという話になり、その後正式にジョインしました。
初期の作成段階での僕の中のキーワードは「ビジネスソリューションディベロップメント」です。
端的に言うと、「ビジネスに役立つ愉快なものを作ろう」という考え方ですね。ビジネスの考え方をサービス設計に包括し、プロダクトに落とし込むことを開発の思想としています。
例えば、すでにOKSKYという別のプロダクトがあったので、それをバックアップするようなもの、それでいて並行しているものを開発すべきだとなった。その答えの一つとして、チャットボットだったんですよね。
そういえば、プロダクト名を決める社内コンペがあったときに、僕らエンジニアチームは「beeWe」と言う名前を出したんですよね。これには、「蜂(bee)」のような生命のエコシステムのようなプロダクト構想と「僕たちはここにある(We)」という2つの意味がありました。
結局、コンペで落ちちゃって…笑
CFO瀧の発案で現在の「WhatYa」というネーミングに決まりました。WhatYaの意味は「賑やかなワイワイ」。WhatYaを利用して広がる会話をイメージしています。
WhatYaの開発環境について教えてください。
まず、ざっと選定技術を並べるとこういった技術を選定しています。
## 言語:NodeJS, Python, Shell, Golang, Java, React
## フレームワーク:React/Redux, express
## データベース:Cloud Datastore, Cloud SQL, Redis, Firestore, Treasure Data
## ソースコード管理:git
## プロジェクト管理:JIRA, Confluence
## 情報共有ツール:slack
## その他:GCP, AWS, IBM Cloud, Azure, Watson Cognitive Service, Kubernetes, Cloud Run, CloudFunction, S3, CloudFront
特にGCP/JavaScript/Kubernetesの選定背景はご興味を持っていただけると思うので、詳しくお話したいと思っていいます。
まず、GCPの選定背景をお話します。
GCPを選定したのには大きく2つ理由があります。
・チャレンジングであること
・Googleさんらしいフラットな世界観があったこと
です。
プロジェクトがスタートした段階ではIBMクラウド/Azure/AWS/GCPを並べて3ヶ月でテストしました。まず、IBMクラウドは当社のプロダクトとマッチせず、ワトソンだけにしようと判断しました。次に、AWSとAzureについてはそんなに使用感が変わらずでしたが、AWSは費用の面で課題を感じていました。
多くの企業がAWSを導入し世の中に情報も出回っているので誰でもやりやすい一方、1時間単位の料金設定がというのが最大の懸念でしたね。
コストについては、僕が営業出身といういこともあり結構シビアに見ています。その面ではAzureはクリアしているので、AzureかGCPにしようという流れになりました。
選定したGCPは特に使用感が変わらなかったのと、1秒単位での料金設定というのが大きかったです。先ほどの繰り返しになりますが、Googleさんの思想が反映されているなぁと感じました。
GCPはAWSに比べ情報量が少ないので、チャレンジングな意思決定をしたなと思っています。ただ、僕としては、じっくりドキュメントに向き合いながら開発を行っていく。これが心地よかったり気持ちよかったりするんですよね。笑
それに付随して、Kubernetesを選定しました。
これは、GCPを選定技術においたことが大きく影響しています。KubernetesはGoogleさんが開発したオープンライセンスで、非常に早いスピードでスケールアウト/スケールダウンさせることのできるオーケストレーションシステムです。
元々、この技術を使いたいと思っていて、コスト感が素晴らしいGCPとの親和性が高かったというのも背景にあります。(どちらもGoogleさんが開発したので当然ですが。)
これまで繰り返してきた実証実験のおかげで安定稼働しており、サービスを継続し続けてきたことで(色々ありましたが)、だいぶ知見がたまった実感があります。
余談ですが、ここには今後、自由にマイクロサービスをリリース&ドロップさせていくための基盤作りという側面もあります。
以前、「気象情報をチャットで送ってくれるようにしたい」となったときに、より詳細な情報を提供するためにアビームさんまで「実証実験したから安く使わせていただけませんか?」と交渉しにいき、OKが出ました。
そのシステムと組んだ時に、会話ログを拾って、特定の場所に対して気象予測をさせていきたいと考えました。または、今後ウェアラブルからの情報も取り入れるなど、情報の入出力をマイクロサービスレベルでコントロールしたいと考えています。その際には、双方向通信の技術やプロトコル自体も変更していきたいなと。このような諸々を検討していくと、オーケストレーションの基盤作りとして、Kubaretesを導入する必要性がありました。
最後に、開発言語の選定背景についてです。
当社のWhatYaは、サーバーサイドがNodeJS、フロントエンドはReact & Reduxで開発を行っています。サーバーサイドのNodeJSを選定した理由は明確で、学習コストの低さと、コミュニティの活発性です。
もう一つは、並行処理の使いやすさです(ここはもろもろ諸先輩方の苦労の結晶でもありますね)。
webシステムを扱う上で重要となる観点の一つに並行処理は欠かせません。
アプリをロードするにおいても、バックエンドに処理を渡した際にも、同期すべき、非同期であるべき、観点を様々に網羅した設計でなくては成り立ちません。
つまり、裏側で同期させなければならないものを同期させ、同期させたくないところはスピードを持たせてキャッシュさせていく。というような設計を組んでいます。それが得意なのが、NodeJSという言語の特徴のひとつです。
その特徴でいうと、Golangも該当するので、現在、積極的に使っています(サービスオンはしていませんが)。
また、JavaScript/Node.js/Goは世界的に活発化しているコミュニティだったりするので、どんどん新しいミドルウェアが出てきますね。Web言語の進化も早いので、言語は使い分けて小さなフレームワークを組み合わせることによって、開発のスピード感や切り替えも早くなると考えています。
今後のプロダクトに対する展望などは…?
・自分達のスタイルに合うもの愉快性の高いもの
・エンドユーザーが求めているもの
という2軸を見たときには、様々な他社システムとのAPI連携を加速させていく必要はあります。
現在で言うとLINEやSlack・Facebookといったツールが挙げられると思いますが、今後新しい流行り物が出てくるはずです。調査をし、予測し、開発を行うというサイクルを回し続け、最新を追い続けていきたいと考えています。
そしてもっと、人と機械の融合によって、人を中心に機械が人を助け、より愉快な世界が拡がっていくこと、その一端を担っていくことが目標です。
裏側のAPI連携で、デバイスを変える。それが僕の中では働き方改革だと感じています。
技術の話がたくさん出てきましたが、技術以外でエンジニアとして働く魅力はありますか…?
まず、エンジニアとして実現したいことがあるのであれば、その流れに乗ることができる環境ということですね。
僕のスタンスとしては、「やりたい」「やらせてほしい」のであれば、まずは実力とやる気を見せてからだと思っています。
そして、ある程度の信頼関係が生まれたら「ドンドンやりなさい」と背中を押したいです。
また、そのやりたいことを一緒になって考えることも勿論しますし、新しいことに挑戦することを後押しし、タスクを投げっぱなしにすることはないです。そういった思想のもとで開発を行っているので、コミットメントはして欲しいなと思っています。
沢山会話を重ねたいと思ってますし、積極的にコミュニケーションを図っています。そうすることで、「笑いながら開発するチーム」を構築できるのではないか考えてます。
僕自身の思想としては、「愉快かどうか」を重要視しています。
それは、単純な「楽しさ」もそうだし、役に立つということです。僕らは開発者である前に、ビジネスパーソンですからね。
平松のプロフィールはこちら⬇︎
■CTO 平松孝弘氏 略歴
1996年神奈川大学工学部機械工学科卒業後、タイコエレクトロニクスアプに入社。コネクタの新規開発および営業に従事。その後、飲食店経営を経てフリーランス等で金融系システムやECサイト開発を行う。2011年に株式会社ATGSにてChatBot導入に向けたシステム開発、SaaSアプリ・マーケット基盤構築など多数案件を担当。2018年7月からプロダクト開発部長として空色に参画し、「OKSKY」「WhatYa」の開発およびエンジニア組織のマネジメントに従事。2020年4月、CTOに就任。