教えて!キラキラお兄さん「クソみたいな社会は変えられますか?」

downloaddata_383.jpg

岡本和也さんは、既卒、第2新卒向け転職支援サービスを提供する「UZUZ(ウズウズ)」の最高技術責任者(CTO)だ。
それなのに「月に2日程度しか出社しない」という自由な働き方で仕事に取り組んでいる。

UZUZのCTO職を務めるのと同時に、ソフトウェア開発会社の「ARoW(アロー)」を経営し、さらにフリーランスエンジニアとしても活動する。
得意技として駆使するプログラミング言語は「Haskell」だ。
純粋関数型言語として知名度が高いが、業務利用はまだ珍しい
複数の仕事に同時に取り組み、希少なHaskell技術者でもある岡本さんの自由な働き方の背景には、どのような考えがあるのだろうか。
話を聞いてみることにした。

●Haskellの魅力に取りつかれ、業務アプリ開発にフル活用
岡本さんは、もともとプログラミングや電子工作が好きだった。

小学6年生でVisual Basicと出会い、大学の学部3年の授業でHaskellに触れた。
岡本さんはたちまちHaskellの魅力にとりつかれた(なぜHaskellを学ぶと良いかなどの記事も執筆している)。

「Haskellプログラミングには、パズルを解くのと同じ種類の楽しさがある」と岡本さんは語る。
「関数型言語としての側面はあまり強調したくない」とも言う。

「関数型言語といえばまずLispを連想するが、HaskellはLispとはまるで違う言語。
カッコがたくさん出てくるわけでもない」
岡本さんが考えるHaskellの特徴は「型が厳密。
型に関してコンパイルエラーが出ないように書くところにパズル的な面白さがある。
コンパイラを通ったプログラムは、まずランタイムエラーが出ない」というところ。
確かに、エラーが出にくいことは業務上のプログラミングでも有用な性質だ。

Haskellは、他の大抵の有名な言語と設計思想が違う。
数学的なバックグラウンドもある。
使いこなすには能力が必要──はっきり言うと、頭が良くないと使えないのではないだろうか?ところが岡本さんは、堂々と「僕は頭が良くないのでHaskellを使っています」と話す。
どういうことなのだろう?
岡本さんによるとHaskellは、「言語仕様が大きくない。
というよりも、いかに機能を削ぎ落としていくかを追求した言語。
何しろ変数に値を代入して書き換えることができない。
その制約の中でプログラミングすると、知らず知らずのうちにバッドノウハウが入らないプログラムになる」とのことだ。
さらに「うっかりミスがあり得ない。
コンパイルを通ればランタイムエラーが出ない」と続ける。

他の言語の話をすると、例えばRubyは型宣言を書かなくて済む動的言語で、自由で多様な書き方ができるので人気がある。
ただし、動的言語はプログラムを実行させないとバグを発見しにくい。
そこでRuby活用の現場ではテスト用のコード(テストケース)をプログラムと一緒に書き、実行時にバグを発見して修正することを繰り返すテスト駆動開発(TDD)の考え方が広がっている。

ところが岡本さんは「僕はRubyは厳しいですね。
きっと実行時エラーを出してしまう。
でもテストケースを書きたくない」というのだ。

これは言語や手法の批判というより、立場が違うということだろう。
ここで筆者にはテスト駆動開発の普及に取り組むあるプログラマーの顔が脳裏に浮かぶ。
「……これは話がかみ合わないだろうな……いや、意外と面白い対話になるかもしれないぞ……(取材者の心の声である)」。

岡本さんの考え方は、多数派の開発者の考えとちょっとだけ違うかもしれないが、岡本さんにとってHaskellは“ちょうどいい”言語だったのだ。

●サーバ側はServant、フロントエンドはElmやES6で
岡本さんが手掛けてきた開発プロジェクトは、UZUZの仕事も他の仕事も、Webアプリケーションが中心だ。
HaskellでWebアプリを作るため、DSL(ドメイン特化言語)のServantを活用している。
「型レベルプログラミングをむちゃくちゃ使っている」ことがServantの特徴だ。

「従来の型では表現できない副作用に関する型、例えばWeb APIのリクエスト仕様などを明記し、コンパイル時にその仕様に従っているかを確認できる」
このような型の制約をうまく使いこなせば、Haskellの強みを生かし「ランタイムエラーがまず出ない、改修、保守しやすい」プログラムを作れる。

Webのフロントエンド側では、最近気に入っているのがElmだ。
Haskellに似た言語仕様を持ち、JavaScriptを生成する。
JavaScriptを生成するプログラミング言語(Alt JS)はTypeScriptなど複数登場しているが、その中でもElmは「型がすごく安全」だと岡本さんは強調する。

「フロントエンドで本当に必要なものだけに機能を絞っている(HaskellのMonadなどは使っていない)のに加え、The Elm Architecture という、React.js + Reduxのもととなったフレームワークを公式にサポートしている。
このため実際にフロントエンド開発を始めるまでの学習障壁が低い」
この他、JavaScriptの最新仕様であるECMAScript6(ES6)で記述したVanilla JS (フレームワークを使わない素のJavaScript)を、現行バージョンであるECMAScript5仕様のJavaScriptにコンパイルするやり方も使っている。
「(ECMAScript6の新機能の)クラスとconstは使いたい」のが理由だ。

「ざっくり言って、規模が大きい開発ではElm、規模が小さい場合はES6+Vanilla JSと使い分けている」と岡本さんは説明する。

●就職先を3カ月でドロップアウト
岡本さんは、新卒で就職した会社を3カ月で辞めた。

Haskellに関連した研究開発の人材を募集していたソフトウェア開発の大手企業だった。
ところが入社してみたら、非エンジニア職も含めた全新入社員が同じ研修を受けるため、技術研修のレベルが岡本さんにとっては低過ぎた。
それに研修中は社内からインターネットに接続できなかった。

時間の無駄だと思った岡本さんは、研修の途中から出社することを辞め、自宅で勉強することにした。
すると人事部から呼び出しが掛かり、いろいろあって、研修期間中に退職してしまった、というわけだ。

研修の印象は散々だったが、コンサル営業の研修だけは気に入ったそうだ。
「課題を解決する提案をグループで作る」という内容で、「自分は割とできるな、と感じた」そうだ。
岡本さんはプログラミングだけでなく、コンサルティングや営業、経営にも関心があり、「そちらの能力を伸ばしてみたいな」と感じていた。

その後岡本さんは、不動産会社の営業職に第2新卒として就職した。
「営業を勉強したかった」からだ。

この会社には半年いた。
営業のノウハウを学べたことは、その後の起業やフリーランス活動に大いに役立っているそうだ。
2番目の会社にいた時期の終わりごろには、会社の業務を効率化するためのプログラム開発に取り組んでいた。

退職後も会社との関係は良好で、フリーランスとして独立した後の最初の仕事は、この不動産会社から受注した。

●ストレスはプログラミングで発散
岡本さんの話は、とにかく意表をつかれるものばかりだ。

例えば、2番目の会社の話で印象的だったことがある。
「営業をしていると、あまり良い思いをしないこともある。
そんなときはストレス発散のためにお酒を飲みに行く人も多いが、僕はプログラミングで発散していた」というのだ。

岡本さんの仕事への姿勢、そして自信の元になっているのは、抽象度を上げて考え、課題を解決できる能力だ。
プログラミングには必要となる能力だが「プログラマーの持っている抽象化能力は他の分野――例えば顧客への提案や課題の解決、会社経営にも役に立つ」と岡本さんは言う。

「僕は会社をエンジニアリングしている。
開発して保守運用している」
これは岡本さん流の「ものの言い方」だ。
「一緒に働きたい人の基準も、『今、何ができるか』ではなく、必要な能力を身に付けられるかどうか。
プログラミングに必要な能力は、他の分野にも役に立つはず。
それを求めている」と話す。

プログラミングを通じて培った「抽象化」と「問題解決」の能力、さらに「学ぶ能力」があれば、多くの課題の解決に役に立つという信念があるのだ。

「仮に明日、プログラマーが世の中から必要とされなくなっても、自分は生きていけると思っている。
学ぶ能力があれば何にでもなれる」と、岡本さんは言い切る。

●抽象化能力と多様性がより重要になる
UZUZとは、業務委託のエンジニアとして付き合いが始まった。
他にエンジニアはいない。
業務部門の社員たちとよく話し合い、時には「僕はそれは作りません。
お金を払って外部のサービスを使った方がいいです」といった提案もした。

今も、CTOとして取り組むUZUZ、代表取締役を務めるARoW、それにフリーランスエンジニアとして取り組む仕事と、3つのプロジェクトを同時に走らせている。

「正社員として働くのが当たり前、という世の中の風潮をツブしたい」と岡本さんは言う。
ARoWは週休4日、「1日5時間以上働くと怒られる」という会社だ。

岡本さんがこうした“複業”を推奨する背景には、2つの考えがある。

1点目は、「技術者としてたった1つの仕事しかしていないと、伸びないし、視野が狭くなる」ということだ。
複数の会社の複数のプロジェクトを手掛けると、それぞれに新しい知識、知見が手に入る。

「ある会社で技術を手に入れ、それを別の会社に還元する。
これはどちらの会社にとっても良いことだ。
広い範囲で技術に触れることで技術者の視野が広がるし、メタな能力(抽象化能力)を生かすことになる」
2点目は「世の中を変えたい」ということ。

「トガった人間が生かされない日本の社会を変えたい。
大企業は均質な人材を働かせているが、これはプロセッサでいうと、(同じ種類のCPUコアをチップ上に集積する)ホモジニアスマルチコアに相当する。
コア数がn個あってもルートnぐらいの能力しか出せない。
ゲーム機PS/3が搭載していたCellのように、(種類が異なるCPUコアをチップ上に集積する)ヘテロジニアスマルチコアにして適材適所で活用すれば、もっと上の能力を出せる場合がある」
ちなみに岡本さんは東京大学の学部と大学院でコンピュータアーキテクチャを専攻している。
取り組んだテーマは低消費電力プロセッサに関する研究だ。
並列処理プロセッサを研究してきた岡本さんは「多様化した課題を解決するには、異なる種類の人材を組み合わせていける組織が必要だ」と考えるのだ。

「はぐれもの、社会不適合者、そのように思われている人に、いかに実力を出してもらうかだ」
●「クソみたいな社会に悩まされている」人が活躍できる世の中にしたい
既卒、第2新卒の就職活動を支援するUZUZのビジネスは、岡本さんが重視する方向と親和性が高い。
現在CTO職に就任しているのも、会社の経営に関わることで世の中へのインパクトを与えたかったことがある。

「『自分はクソみたいな社会に悩まされている』と思っている人の特性を見抜いて、“千里の馬”のように活躍してもらえたら」と希望を述べた。

1日に千里を走る名馬も、その才能を見抜く“伯楽”がいなければ知られることはない。
世に伯楽ありて、しかるのち千里の馬あり──この名伯楽の役目を果たしたいというのが、岡本さんの願いだ。

You may also like...