事例紹介
東京工科大の学生が学内システムをDockerで開発、その舞台裏を聞く
どんなシステムで運用はどうするの?
(2015/2/24 06:00)
1月22日のニュースで取り上げたように、東京工科大学(以下、東京工科大)は、学生らがコンテナ型仮想化機構「Docker」を用いた学内システムを開発し、全学で運用を開始したと発表した。
全学で使うシステムを学生が開発したのはユニークな取り組みであり、そこに最新技術であるDockerを採用したことも興味を引く。こうした背景や開発事情などについて、東京工科大コンピュータサイエンス学部教授の田胡和哉氏と、開発に関係した学生たちに、八王子キャンパスの「クラウドサービスセンター」で話を聞いた。
受講や実習のためのシステムを学生が代々開発
全学で使う学内システムといっても、学生が開発したのは業務系のシステムではない。東京工科大ではクラウドベースのシステムを2系統運用している。1つは業務系のシステムで、Azureを中心にOffice 365やDynamics CRMなどを利用している。この業務系システムはすべてクラウドに移行しており、学内にサーバーは残っていないという。
もう1つが、全学約8000人が利用する、講義などの教育のためのシステムだ。こちらのシステムを、学生が中心になって、オープンソースベースで開発している。サーバーはオンプレミスにパブリッククラウドをまじえ、クラウドサービスセンターが運用する。
このシステムでは、ポータルサイトが入口となり、シングルサインオンでさまざまなサービスが利用できる。たとえば、連絡事項が掲載されるほか、講義の情報の検索や、自分の時間割の管理などもできる。授業の時間になるとポップアップで通知される機能もある。今年からは、学生が着席したときに自分の席番号を入力して出席とするシステムも始まった。ユーザーインターフェイスも、JavaScriptを活用した今時の操作方法になっている。
そのほか、コース管理システムの「Moodle」も用意されており、先生が希望すれば利用できるようになっている。
さまざまなサービスの中でも、早くから開発され改良を重ねているのが、独自開発のCMS「Raptor」だ。
田胡氏:オブジェクトベースのCMSで、Javaで開発されています。開発は代々受け継がれ、そのときどきのテクノロジーで作り直され続けています。
現在のRaptorを見せてもらった。文書中に画像や動画などを配置でき、そこから再生や編集もできる。機械学習によりタグを自動生成して検索する機能もあるという。WebRTCを使って、複数ユーザーの同時編集にも対応している。
特にプロジェクトでの情報共有にフォーカスしており、関連する情報を集約したり、プロジェクトメンバーがホワイトボードのようにアイデアを書き込んでいったりできるようになっている。実際に、後述するプロジェクト実習などで活用されているという。
田胡氏:この規模で学生が学校のシステムを作るのは珍しいのではないかと思います。この規模で開発や運用を回すには学生だけでは難しいため、「クラウドサービスセンター」を設立して組織化しました。専任の助教も1名ついています。
余談になるが、クラウドサービスセンター設立の発表は2011年3月14日で、東日本大震災と重なった。「ここに閉じ込められたような形で設立準備をしました」と田胡氏は振り返る。
田胡氏:組織まで作って、必死でやっています。走りながら整備しているところです。
1人1人の開発環境をDockerで提供
さて、今回発表されたDockerベースのシステムも、この教育向けシステムの1つとして開発されたものだ。4月の新年度から利用開始予定。
東京工科大のコンピュータサイエンス学部では、選抜された学部3年生が1年間、実際にサービスを開発する「プロジェクト実習」を週1回受ける。前期はPHPやJavaScriptなどのプログラミングを実習し、後期はグループごとに企画を立てて実現。最後にはビジネスとして提案するプレゼン会を開き、ベンチャーキャピタルをまじえて採点しているという。
田胡氏:プログラミングスキルだけではなく、なぜそれが必要かというところまで考えて開発してもらいます。
このプロジェクト実習のための開発環境を主な目的として、Dockerを使ったクラウドサービスを開発した。学生一人ずつ、自分専用のサーバー環境が与えられる。ここにWebサーバーやデータベース、プログラミング言語などがセットアップされている。学生は自分のサーバー環境を好きなように使ってサーバープログラミングを実習できる。プログラミングのためには、既存のWebIDEをDocker化した開発環境を用意。当初、Eclipse Orionも検討したが、機能が十分ではなかった。とはいえ、魅力的な体制・方向性なので、動向をみながら将来は移行したい考えという。
改めてDockerについて簡単に紹介しよう。Dockerはコンテナと呼ばれる技術を使って、1つのサーバー上で複数の仮想的なサーバー環境を動かすソフトウェアだ。コンテナは仮想マシンとは違い、サーバーマシンをエミュレートするのではなく、OSの上のサーバー環境だけを複数作り分離して動かす技術だ。そのため、仮想マシンに比べ、オーバーヘッドが小さく、作成も速いという特徴がある。
Dockerは、Linuxのコンテナ技術や、ファイルシステムの差分管理の技術、差分データのキャッシュ技術などを使って、類似のサーバー環境を何度も素早く作れるシステムソフトウェアだ。多数の学生ぶんの環境を新規で作って動かす用途に、確かに向いていそうだ。
また、Dockerは異なるマシン上で同じサーバー環境を再現するのも得意とされている。そこで東京工科大では、Dockerの動作環境をオンプレミスとAWS(Amazon Web Services)のパブリッククラウドに用意。さらに、オンプレミスやクラウドなど複数のマシンの間でDockerイメージや差分データなどを共有する機構を独自開発し、実際のサーバーがどこにあっても利用者は同じようにDocker上のサーバー環境を利用できるようにした。
なお、各自がDocker上で作業したデータは、それぞれデータ専用のコンテナに保存し(Data-only container patternと呼ばれる手法)、イメージリポジトリに登録する。これにより、オンプレミスでもAWSでも自分のデータを利用できる。
田胡氏:大学の授業で使うので、講義のあるときと、夜間や休講時期などとの利用の変動がかなり大きい。そこで、必要なときに処理をパブリッククラウドにオフロードできるようにしました。以前、IBMとの共同実験でハイブリッドクラウドを試したこともあり、大学ではクラウドが有効だと実感しました。
学部3年生がプロジェクト実習で開発した成果も見せてもらった。飲みに行くときなどに、地図にピンを立てて場所を友達と共有するスマートフォンアプリだ。クライアント側はHTML5ベースでスマートフォンアプリを開発する「Monaca」を使い、4人で開発したという。
開発に携わった学生たち
これらのシステムは、前述のとおり、大学院生と学部生が開発した。
田胡氏:修士過程では、研究して論文を書く「研究プログラム」と、実際にシステムを作ってサービスインする「開発プログラム」のどちらかを自分で選べるようになっています。クラウドのシステムを作るのに中心になったのが、まさに開発プログラムの学生です。
こうした開発メンバーの中から、中心となった5人に直接話を聞くことができたので、紹介したい。
田中氏:修士2年の田中遼です。インフラ担当で、ハードを組んで、必要なソフトを入れて、監視して、開発のプロセスを回して、そのための開発環境を整備して、と一切合切やっています。Docker環境も構築しました。学部4年生のとき、まだクラウドサービスセンターができる前から参加して、システムを引き継ぎました。ただ、引き継いだところ、構成が混沌とした状態で、LDAPから作り直して、苦労しました。
河村氏:修士2年の河村勇人です。構築には直接関わっていませんが、「Docker Guy(Docker屋)」としてアドバイスするような立場です。研究ではDockerの起動の高速化やクラスター管理機構を作っています。Google Summer of Code(選抜された学生のプロジェクトにGoogleが賞金を払う制度)にも2回通って、海外のカンファレンスへの参加や、LXCへのコントリビュートもしています。ちなみに高速化は、Linuxのチェックポイント/リストア(プロセスの状態をファイルに保存したり復旧したりする機能)を使うもので、Tomcatの起動でいうと3000倍ぐらい速くなります。そういうのを使ったKubernetes対抗のようなクラスター管理がテーマです。
古谷氏:修士2年の古谷文弥です。Webアプリケーションを主に、ポータルやCMS、出席管理システムなどを担当しました。授業で作るプログラムは作って終わりというものが多いのですが、大勢に使ってもらうというのは初めてです。それが楽しくもあり、大変でもありました。使いづらいというフィードバックをもらって、原因を分析したり。いい経験になったと思います。
山口氏:修士2年の山口湧太です。同じくWebアプリケーションでポータルや、サブで出席管理システムを担当しました。同じWebアプリケーション担当なので、感想もほぼ同じです。CMSのRaptorでWebRTCを使ったら、リリース後に先生から「IEで動かない」と苦情をもらって、あわててIEで見られるようにしたこともありました(笑)
相原氏:学部4年の相原魁です。今回のDockerのシステムで、WebのIDEを担当しました。うちの研究室は、ゴールは与えられますが、自分のアイデアをもとに、自由にやりたいテーマができます。
田胡氏:条件はただ1つ、「成果が出ること」ですね。学生の指向性を見て、その中で成果を出すにはどうするかを考えています。
今後の運用は?
さて、ニュースで取り上げたときには、読者から「今後の運用はどうするのだろうか」という感想が相次いだ。年次で入れかわる学生が独自開発したシステムで、かつ、まだ枯れているとはいいがたいDockerを採用しているとなれば、外から見ると不安要素も感じる。
田胡氏:本番運用は、職員に引き継ぎます。いまから必死でスキル移転やドキュメント整備を進めています。綱渡りのようですが。企業への委託は無理です。文化が違いすぎるので。
代々、研究室で開発を進めてきたように、今後も次世代の育成が重要ですね。バグ対応なども王道はなくて、ソースツリーをきちんとすることや、ちゃんとドキュメント化すること、ソースのクオリティを相互監視すること、などをやっていくしかありません。
まあ、うちの研究室は、テーマを広げて、インフラから機械学習までやっているので、新しい人がきたらどこかしら役割ができると思います(笑)
プロジェクト実習はスタートアップ企業のようなことをやっているので、将来的にはこのシステムを元に、社会人向けに、スタートアップに必要なものをクラウドで支援できると面白いなあと思っています。