- ギノ株式会社
- paiza事業部 チーフ・フェロー
- 吉岡 恒夫
軽量&シンプルなコンテナ仮想化技術「Docker」で構築!技術力を測るインフラ環境とは
今回のソリューション:【Docker/ドッカー】
〜コンテナ型の仮想化技術「Docker」を使い、本体サービスとは切り離した環境で、オンラインのプログラミングテストの集計・実行環境を構築した「paiza」の事例〜
オンライン上でプログラミングのテストを行い、そのテスト結果を元に転職活動を行えるサービス「paiza」。面接では測りづらい技術力を、定量的に評価できるとして注目を集めている。
そのサービスのコアになっているのが、ユーザーが入力したプログラムを実行、評価する「オンラインジャッジシステム」だ。同システム上では、多様なユーザーが入力するプログラムに対し、正確で公平なテスト結果を返す必要がある。
そのジャッジシステムを、コンテナ型の仮想化技術「Docker(ドッカー)」を用いて構築したのが、paizaを運営するギノ株式会社の、吉岡 恒夫さん。プログラム実行結果の公平性、スピード、そしてセキュリティという観点から、Dockerでの構築に踏み切った。
今回は吉岡さんと、同社でCEOを務める片山 良平さんに、Dockerの活用方法、エコシステム、そしてオンラインジャッジシステムが目指す世界まで、お話を伺った。
▼実際のプログラミングスキルを測定した上で転職活動を行える「paiza」
エンジニアの能力を「正しく」測って採用を判断できる「paiza」
片山 弊社は、エムアウトという会社の新規事業のひとつとして生まれた会社です。エムアウトは新規事業を専業にしており、新しい事業を考えては、ある程度いけると思ったものを子会社化しています。
私も2年ほどは試行錯誤をしていて、人材紹介の新規事業を立ちあげて、うまくいかず潰してしまったこともありました。そんな中で3年目に差し掛かったときに思いついたアイデアが、paizaでした。
paizaは、ITエンジニアに100%特化した求人サービスです。彼らの仕事って、プログラムを書くことじゃないですか。でも、今の転職プロセスだと、その技術力をなかなか正しく測れない。面接で「プログラムを書けますか?」と聞くだけだったりするんですよね。
そして実際にプログラムを書くのは、入社した後です。それって、とても危険ですよね。例えば曲芸師を雇うのに、曲芸を1度も見ずに雇い、本番で「あれ?できない?」となるようなものです。
そこでpaizaでは、実際に動くプログラムを書いてもらって、それをコンピューターがテストします。人間が評価するより、コンピューターが評価したほうが正確です。そうして計測したスキルレベルを元に、求職者と企業をつないでいくサービスになります。
paizaで技術を認められ、フィンランドからギノに転職
吉岡 私は前職はF-Secureというフィンランドに本社がある会社で、ずっとLinux系の開発をしていました。その会社には、日本で5年、フィンランドで5年勤めたのですが、そろそろ日本に戻りたいなと思っていた時に、Twitterでpaizaを見つけました。
「コードを書いて転職しよう」というコンセプトが面白いと思い、実際にテストを受けてみたところ、なんと運営元であるギノからオファーを頂きました(笑)。最初はフィンランドで働きながらお仕事をもらい、帰国して正式に入社したという形です。
片山 グローバル化が進む中、「この地域でこの役割が求められているから、この仕事をする」といった、場所に縛られた発想は今後減少していくと思っています。その人の才能が地球の裏側でも活きるなら、お互いがすぐに繋がった方がいいですよね。
そのような世界が実現したときに、paizaが「エンジニアのスキルを客観的に計るインフラ」になればいいなと思っています。このような考えからサービスを作っていたところ、ちょうどフィンランドにいる吉岡と出会えたので、「これは運命的な出会いだ」と感じましたね。
手作業だったオンラインジャッジシステムに、Dockerを活用
片山 paizaの立ちあげ当初、プログラムのスコアを測る「オンラインジャッジシステム」は、手動で動かしていました。つまりユーザーが入力したプログラムをダウンロードして、私がPC上で実行して結果を返していたという…(笑)。
その後は、海外サービスを使って結果の診断を自動化していた時期もありました。ですが、やはり自社でその仕組みを押さえておかないと後々ネックになると考えたので、内製化の検討を始めました。
オンラインジャッジシステムという性質上、「任意のコードを実行し、その後すぐに捨てられる環境」が欲しかったんです。その要件をどの技術で実現するか検討していた時に、「Docker」を見つけました。当時はまだバージョンが1.0になる手前くらいの頃でしたね。
「セキュリティ」と「公平性」をDockerで実現
吉岡 Dockerは、Linux上で動くシンプルで軽量なコンテナ(仮想環境)です。コンテナ技術というものは昔からあったのですが、それをシンプルな形でまとめて、誰でも使えるようにしたのがDockerですね。Linux上で動作するものなので、Linuxのアーキテクチャや仕組みがわかっていれば、比較的スムーズに使えます。
Dockerを選んだ大きな理由のひとつが、ユーザーが入力したコードに対するセキュリティです。悪意のあるコードが送られきてサーバーを攻撃されたり、他の人の環境に影響が出てくると困ります。ですから、コンテナという閉じられた空間で実行できることが重要でした。
セキュリティだけでなく、コードの実行時間もジャッジの評価に含まれるので、タイミングによって実行速度が変わってしまうとダメなんです。確実に同じ量のリソースを割り当てて、同じコードなら同程度の実行時間で終わるようにしなくてはならない、という要件でした。
Dockerであれば、コンテナごとにメモリやCPUの割り当てを調整できる上、環境がおかしくなっても消せばいいだけです。今回の要件にはぴったりでしたね。
「Docker Hub」などのエコシステムも優秀で、どんどん便利に
片山 paizaのオンラインジャッジシステムは、ユーザーが入力した1個のプログラムに対して、10個程度のテストケースを試しています。そのテストケースごとにコンテナが立ち上がり、プログラムを実行し、結果を取得したらコンテナを消しています。
Dockerコンテナの立ちあげは一瞬なので、だいたい2〜3秒程度で結果が返るようになっています。このスピード感はDockerでなければ実現できなかったと思いますね。2016年6月現在では、月間で200万コンテナほどを作っては消しています。
吉岡 Dockerは、エコシステムが良いですよね。コンテナのイメージを一度作れば、どこでも使い回せるだけでなく、レジストリである「Docker Hub」というクラウド環境に上げると、だれでも自由に人が作ったイメージを使えるようになっています。
Docker社自体も最近大きな資金調達をしていますし、MacやWindows向けのインストーラーやクラスタ管理のツール、エンタープライズ向けのツールもどんどん出していて、より便利になっています。
弊社ではシステムの性質上使っていないのですが、AWSにも「EC2 Container Service」や、コンテナイメージを保存、デプロイできる「EC2 Container Registry」といったDocker関連のサービスも増えてきています。
日本のエンジニアを「世界レベル」にしていきたい
吉岡 実は、こういった弊社でのDockerの活用方法について、『Docker実践活用ガイド』という本を書きました。Dockerの入門書は最近出てき始めているのですが、「実際に現場でどう使えるの?」という事例はまだまだ少ないですよね。
オンラインジャッジシステムで実際に使ってみて気付いたことも多いので、そういったノウハウを今後は外に伝えていければなと思っています。
片山 私は、「日本のエンジニアのレベルをどうやって世界レベルに高めるか」という事をずっと考えています。そのためにも、初心者が気軽にプログラミングに触れる機会を増やすことが重要だと思います。ただ、世の中のプログラミング学習サービスというものは、どれも苦戦しているんですよ。
学んだ後に、「結局何になるの?」というのが大きいですね。営業の人がプログラミング学習サービスで学んだからと言って、それで転職できるかというと、業務経験が無いと難しいです。
それでは、あまり社会に還元されていないと思っていて、中途採用だけでなく、新卒向けの採用や教育サービスを始めています。学生であれば、プログラミングを少し身につけるだけで、就職するときに差別化ができます。
今後は、日本のエンジニアのレベルを上げていくためにも、学生の領域にもどんどん展開していきたいと思います。(了)