今日からカケハシ公式noteとTech Blog 連動で、アドベントカレンダー企画が始まる。そのはえある1日目を私にやらせて欲しいとしゃしゃり出たのにはワケがある。そう、ずっと前からあたためていたネタがあるのだ——。
ということで、カケハシでCEOをやっている中川です。
欧米のスタートアップって、イケてるエンジニア出身の経営者が山ほどいますよね。むしろ感覚的には、非エンジニア経営者のほうが珍しいんじゃないかというくらい。(あのイーロン・マスクも“エンジニア”ですよね)
一方で日本だと、プログラミングできる経営者って、テックスタートアップであってもめちゃくちゃ少ない印象があります。はい、何を隠そう私も非エンジニアです。学生時代からいろいろなITサービスに関わってきたのですが、自分でコーディングできないことにある種のコンプレックスを抱えてきました。テックスタートアップという大海原を、“エラ呼吸できない魚”として泳いでいるような、なんというか常に息苦しい感覚です。
たとえば自動車会社の経営者にはやっぱりクルマ好きでいて欲しいし、実際、みなさん自動車の設計・製造に多少なりとも関わってこられた方だと思います。マーク・アンドリーセンが「Software is eating the world」と表現したように、多くのイノベーションがソフトウェアから生まれ、多くのスタートアップの価値の源泉がソフトウェアにある今、テックスタートアップの経営者が「プログラミングできない」というのは、やっぱりおかしな話だと思うんです。
さらに誤解を恐れず言うと、これって経営者に限った話でもないんじゃないかと思っています。テックスタートアップに集まる人であれば、程度の差こそあれ、技術に興味をもちWEBサービスが好きであってほしい。エンジニアリングを生業にするメンバーでなくても、誰もがプログラミングへのチャレンジに意欲や魅力を感じていてほしい。エクセルをさわるのと同じテンションでみんな気軽にSQLを叩いたり、簡単なPythonをかいたり、GASをいじって作業を自動化したり。社内ハッカソンとか、Kaggleに挑戦してみようとか、それがチームの日常になっているような……。
カケハシもそんな会社でありたいと、ずっと思ってきました。どこまでいってもカケハシはテックカンパニーであり続けたい。そんな思いを折にふれてメンバーに語ったり、毎月1万円のスキルアップ支援を制度化したりしてきたのですが、あるとき目が覚めました。
そうじゃない、まず自分がやるんだ、と。
機械学習エンジニアに、俺はなる!
前置きが長くなりましたが、そんな流れで本腰を入れてプログラミングに取り組んでみた記録を、この場を借りて残しておこうというのが本記事になります。
さて、私が選んだのはいま最もアツい技術分野の一つである「機械学習」です。なぜこのテーマを選んだかというと、理由は一つ。カケハシ社内の機械学習エンジニアにあこがれたからです。
実はカケハシには、Kagglerでありデータ解析の著作もある機械学習エンジニアが所属していて、類は友を呼ぶじゃないですが、彼の周りの優秀なエンジニアがどんどん集まってくれて、今やかなりのチームになっているんですね。
彼らと話しているうちに、「超かっこいい。私もやりたい」と思うように。「機械学習を使ったプログラムを組んで、こっそり相談に乗ってもらおう」「トップレベルのエンジニアから学べるなんてめちゃくちゃラッキーだぞ」という下心を抱きながら、「ひよっこ週末エンジニア」として一歩を踏み出すことにしたのです。
とはいえ、ただ「プログラミングを勉強する」だと受験勉強感もありテンションは上がらず。具体的に何かつくるほうが面白い! ということで、「ボートレースの勝率を機械学習で予測するプログラム」に挑戦することにしました。
なぜボートレース?
そもそもボートレースどころか、競馬も競輪もそのあたりの趣味にはほとんど縁のなかった私。このテーマを選んだきっかけは、カケハシ社内のライトニングトークで、エンジニアが競馬予測の機械学習モデリングについて話していたことでした。
ただ、調べてみると競馬を題材にしている例はわりと多いようで、せっかくならカブりたくないなと。また競馬はレースごとに出走する馬の数がまちまちで、一頭あたりの出走機会も少なくサンプルデータの数は限られます。その点、ボートレースはレースの数がそれなりに多く、一人の乗り手が複数回出走することもあるのでサンプルデータが豊富。加えて、競艇場の水質や波の高さ、コースのカーブの幅、使われるモーターの過去数カ月間の勝率、スタート位置といった複数のインプットの組み合わせによって、予想の精度をより追い込んでいくことができる。まさに、最高の題材!
(この段階で、ボートレースにそこそこ詳しくなりました 笑)
やったこと
基本的に稼働は休日のみで、1日だいたい10時間くらいの活動。実際のプロダクト開発に入るまでに、まずこんな感じで学習に時間を使いました。(ちなみにまったくのプログラミング初心者というわけではなく、過去にちょこちょことさわったことはあります)
- Pythonの基礎学習と、忘れかけていたHTML/CSSの振り返りに、ざっくり50時間弱
- 機械学習の基礎学習、いくつか試しに決定木やSVMなどを使ってみたり、Tensorflowで簡単なサンプルデータを扱ってみたりといったことに50時間ほど
その後はもう、作りたいアプリをいくつかの機能/モジュール単位に分割して、とにかくコードを書きました。書いてはエラーと格闘し、直しては試すを繰り返すのみ。アジャイルでいうところのストーリー単位で実装していく感じです。
実際やりはじめたら楽しくてめちゃくちゃハマってしまい、1日15時間以上やってしまう日も。睡眠不足で本業(いちおうCEOです……)に影響が出たらどうしようとさすがに不安になり、途中でちょっと自制しました。
それでもだいたい半年くらいで、「自動的に複数のデータを収集し、データをきれいに加工・処理して、モデルを回して期待値計算を行い、締め切り前オッズと期待値の差分から一定の法則で自動的に入札処理を実行し、また学習モデルに結果を反映していく」プログラムが完成!
その後も、風向きのデータをSinとCosに分解して読み込ませたり、過去の出走成績も独自の指標を作り出して前処理の精度を上げたり、満潮と干潮のデータを取得して出走時刻と当て返して引き潮と上げ潮をみたりと、マニアックなチューニングを続けていったのですが……このあたりはまた別の機会に。(あくまで個人の学習を目的に、諸所の規約等を遵守してやっております)
参考にしたコンテンツ
私が実際にやってみた中から、特によかったものをピックアップしてみます。
▼Udemy
Udemyはかなり講座が充実しているし、優良なコンテンツが多くておすすめです。値引きも結構あってお財布にも優しい。いろいろ購入して2倍速で聞きまくったのですが、導入としてはこのあたりがおすすめ。
・データサイエンティストを目指すあなたへ〜データサイエンス25時間ブートキャンプ
ちょっと途中で退屈になってスキップしまくったけど……丁寧なのは間違いないです。
・プログラミング初心者でも安心、Python/Django入門講座
2倍速で聞いてましたが、入門用としてはかなり良かったです。
▼Progate
Progateは、チュートリアル方式で簡単に学習ができるので実戦練習としてとても良かったです。無料である程度つかえます。
本当にゼロからプログラミングをはじめる方であれば、HTMLやCSS、Java Script、ターミナル操作、Gitの基礎も押さえておきたいところ。Progateの講座を一通りやっておくといいと思います。
▼YouTube
実は、YouTubeにかなりいいコンテンツがたくさんあって、正直、YouTubeを一番活用させてもらいました。なかでも「いまにゅのプログラミング塾」はかなり分かりやすくておすすめ。エクセルとかCSVのデータを処理したいというニーズなら、Pythonの基礎を学習したら、あとはPandasだけしっかりと使いこなせるようになればある程度OKなので、1⇒2⇒3とやれば、それなりにできた気分になれるはず!
1.この動画1本でPythonの基礎を習得!忙しい人のための速習コース(Python入門)
2.Python基礎力を圧倒的に向上させる特訓100問
3.この動画1本でデータ操作に特化したPythonライブラリPandasの基礎をマスター!
4.2時間で基礎を完全マスター!PythonによるWebスクレイピング入門
5.この動画1本で機械学習実装(Python)の基礎を習得!忙しい人のための速習コース
▼Google Colab / Jupyter
簡単にPythonを試してみるだけなら、Google Colabを使うのが圧倒的にラクでした。(ただし、スクレイピングをするのがちょっと面倒だったりとクラウド環境ゆえのハードルもある)
ローカルマシンのCPUを使わないし、同時に5個開けるうえにGPUとかも使えるので、重たい機械学習をするときや同時に大量のスクレイピングをするときに重宝します。(でも、長い処理の途中でランタイムが切れたときの落胆はヤバい)
Google Colaboratorycolab.research.google.com
Jupyter Notebookもアリですね。とはいえ Jupyter を使うなら Google Colab でいいんじゃないかっていう説も。ちゃんとしたIDEは、私は Visual Studio Code を使ってます。
非エンジニアCEOがプログラミングやってみて、何が変わったか?
プログラミングを始めるメンバーが出てきた!
ドキュメントを社内ポータルにこっそりアップしたり、Slackの分報(times)でつぶやいたりしていたら……なんと何人かのメンバーからPythonやSQLの勉強をはじめたという報告が! なかには「本気でエンジニアを目指したい」とキャリアチェンジを考えはじめた人も!(※ホントです)
ちょっとずつでも、カケハシのテックカルチャーに貢献できているのかな……。はっきり言って、めちゃくちゃ嬉しい。これだけでもやってよかったです。
エンジニアメンバーと話をするのがもっと楽しくなった!
実際に業務でコードを書くわけではないし(そもそも業務で書けるレベルじゃない)、プロのエンジニアからすれば半端な知識で知ったかぶりされるほどウザいことはないと思うのだけど(申し訳ない)、エンジニアメンバーと話すことが、以前より明らかに楽しくなってるんですよね。 多少なりとも自分で手を動かしてみたことで、ようやくガチのエンジニアのすごさがわかったというか、自然にわきでるリスペクトというか……。
エンジニアメンバーにも何か変化を感じてもらえていたら嬉しいですが、そこまでじゃなくても「カケハシって技術好きのCEOがいる会社なんだ」と認識してもらうきっかけになってたら大成功なんじゃないかなと。
余談ですが、経営者の友人たちと話していると「開発文化がわからん」とか「組織の断絶が」とかよく話題にのぼりがちなんですよね。でもそれって問題はむしろこちら側にあって、わからないものにフタをしようとするのではなく、まず自分からわかろうとするムーブが大事なのかも、なんてことも思いました。
経営判断の解像度が上がった!
カケハシのプロダクトと私の趣味とでは比較にならないのは大前提ですが、それでも「技術負債ってこういうことか」という実感値が得られたのはめちゃくちゃ大きな収穫でした。
私ひとりでやっていてもこうなんだから、それが巨大なチームで巨大なプロダクトだったらと想像すると……。そのリスクが肌感覚でわかっただけでも、非エンジニアCEOにとっては大きな価値。「新規開発よりも技術負債の解消を優先する」というようなトレードオフのある意思決定を、以前より圧倒的に確信をもって実行できる気がします。
これからのこと
カケハシを、誰もが技術に親しむチームにしたい!
前述のとおり、カケハシはどこまでいってもテックカンパニーでありつづけたいし、それを楽しめるチームでありたいと思っています。だからと言って、そこでシビアに人を選ぶというのも違うと思っていて。たとえばITに苦手意識があったり「実は、ひっそりプログラミングやってみたい」と思っていたりする人でも自然と一歩目を踏み出したくなるような……テックカルチャーにはそんな形もあるのではと考えたりしています。
今ここに具体的なアイデアを挙げられるわけではないのですが、現在のスキルアップ支援にとどまらないサポートや場づくりをいろいろと試していくつもりです。(いいアイデアがあったらぜひ教えてください!)
週末エンジニアもつづけます
正直めちゃくちゃ楽しかったので、また何かやりたいなと。同じテーマでもう少し追い込んでもいいんですが、画像や映像の機械学習とか、強化学習的な何かを使ってみるのも面白そう。スキューバダイビングが趣味なので、魚の映像から名前を判定するスキューバゴーグルを作れないかな……。 次は Tech Blog へのエントリを目指します!
KAKEHASHI Tech BlogカケハシのEngineer Teamによるブログです。kakehashi-dev.hatenablog.com
最後にちょっとだけ番宣📣
アドベントカレンダーやってます!
今日から1ヶ月間、カケハシメンバーが毎日記事をポストします! ぜひ見にきていただけると嬉しいです。
採用もやってます!
薬局向けSaaSのMusubiは業界シェア10%をこえ、Pocket MusubiやMusubi Insight、AI在庫管理といったプロダクトラインナップ全体での新たな価値創出にチャレンジしているところです。新規事業・新規サービスも見えてくるタイミングですので、ちょっとでも気になった方はぜひお声がけください!
株式会社カケハシ 採用サイト「⽇本の医療体験を、しなやかに」をミッションに、患者満足と薬局の働き方改革を支援する薬局体験アシスタント「Musubi」をrecruit.kakehashi.life