2019.09.30

新設コース!Web Engineering インターン の紹介

はじめに

こんにちは。次世代システム研究室のY.Kです。
今回は今年から新設されたWeb Engineeringコースの紹介と今月行われた大阪夏季インターンでの成果の一部をご紹介したいと思います。

内容

概要

お題のWebサービスの構築を行い、実サービスで運用できるクオリティの構成を一人、もしくはチームで実現してもらいます。メンターにヒントを貰いながらアプリケーション全体の構成を自分たちで考え、限られた時間でどこまで構築できるかに挑戦します。スクラムベースのタスク管理も体験しながら業務での一連の流れを体験できます。
Web運用に関するソフトウェア・ミドルウェアであれば利用するものは自由に選定できますので、興味のあるものの性能調査や性能比較も大歓迎です。

このコース設立の思惑

ここ数年、かなりの数の企業がインターンを行っています。私自身も学生時代10社ほどのアルバイト・インターンに参加させていただきました。
学生のうちから企業で働くことが出来るので大変学びが多く、それらの経験は現在の社会人生活にも活きていますが、一方で業務への参加やハッカソン形式のインターンには以下のような問題も感じました。
  • 雑務的なコーディングばかりで学ぶことが少ない場合がある。
  • 機能開発によってコーディング力はつくが、運用面で実力がつかない。
  • 順位付け目的で完成度が求められてしまうため、利用経験のある環境で勝負をしがち。
学生にプログラミングネイティブの人口が増える中プログラミングだけを行わせても学びは得られなくなっていくような気がします。企業としては優秀な学生との接点を持つことができればよいのかもしれませんが、現代は書籍や情報が溢れており、独学でも技術は学べるため、普段から開発をしている学生ほどインターンのカリキュラムに対し物足りなさを感じることが多くなりそうです。そのような学生目線からするとせっかくインターンに行くなら企業でしか経験できないことをしたいのではないでしょうか。

そこで今回、本コースを作成するにあたって、私自身が学生時代に経験したかったコースを目指しました。本コースでは運用や構成・技術選定などに重きを置き、実際に我々が運用するサービスの構成に近いものを構築目標としてもらいます。
さらに、メンターから実際に起こりうるバグや問題についてツッコミを受けて、その要求に耐えられるように修正、サーバー追加を行ってもらいます(内容は次節で少し説明します)。個人開発やただコーディングするだけでは得られない知識が得られると思います。

学べること

我々運用者がシステム運用時に考えることはとても多岐に渡りますが、評価指標の一つにRASISがあります。RASISは以下の5つの指標の頭文字です。
  • 信頼性(Reliability)
  • 可用性(Availability)
  • 保守性(Serviceability)
  • 保全性(Integrity)
  • 安全性(Security)
各項目についてどれだけの要件が満たせるのか、満たすためにはなにが必要なのかを考えて実践し、メリットの提示や効果測定を行います。
可用性に影響を与える冗長化について簡単な例を上げます。
  • 「webシステムが冗長化できている」という状態にはなにが必要か
  • 「冗長化する場合」のメリットはかけるコストに見合っているのか
  • 検討したメリットが実際に享受できているのか
我々の普段の業務は機能を開発するだけでなく、このような思考で進行していきます。しかし、いくら注意していても設定漏れや経験不足からバグを生んだり、安定稼働に影響を及ぼすことも少なからずあります。その時の失敗や経験からノウハウを共有するようなアドバイスやツッコミを学生に入れていきます。

以下がツッコミの一部です。
他にもたくさん有りますが、応募してくれる方への楽しみにもなりますので簡単なものだけ記載しておきます。
  • このペースだとあと3ヶ月でディスクがいっぱいになってしまいますね。なぜでしょう?
  • 現状の構成でどれくらいのアクセスが有るとレスポンスが返せなくなるかわかりますか?
  • サーバーが停止したとき、いつそれを知ることができますか? etc…
これらに対して、対策を立てたり、定量的な証拠の用意、我々の疑問点の解消を行いながら運用時に意識することや検証方法について学んでもらいます。
さらに、これらの課題を解決するための手法・ツールは自由に選定できるので、経験のない事項についてチャレンジすることも可能です。
それについても弊部署のメンターがサポートします。

大阪インターン成果

昨年から大阪でもインターンを開催しているのですが、2019年度大阪インターンがWeb Engineeringコースの初開催となりました。
今回は3人1チームで10日間、全部で9台のサーバーに対して役割を与え、構築していただきました。


※各項目について資料を作りながらなにをするか決定します。

以下、取り組んでもらった内容です。考えてもらうこともこのコースの本質ですので紹介は一部にとどめたいと思いますが、項目数としては3〜4倍の数は取り組んでもらいました。
  • 冗長化
  • DB設計
  • パフォーマンス検証
  • 死活監視
  • 脆弱性チェック etc…
冗長化に関してはアプリもDBも完成、さらに不十分では有りましたが一部のサーバーが未稼働の状態との性能比較なども行いました。
他にも最近流行りのソフトウェアの利用にチャレンジしたり、設定ファイルのメンテナンス性にこだわって作業してくれたり、私の予想をいい意味で裏切る完成度を達成してくれました。


※構築したサーバー構成の途中経過です。各サーバーがどのような役割か考えてみてください。

開発のアルバイトでチームリーダーをやっているような学生も参加していましたが、「知らないことだらけ、普段の開発で意識していないことだらけであること実感したので就職前に経験できたのは良かった」といった感想や、成果発表では「業務と趣味のギャップが埋まり、エンジニアとして働くイメージが持てた」と言ってくれた学生もいたので、有用性はあったかなと少し安心しました。
今回は浅く広くやってもらいましたが、特定の項目について深堀りする方針でも大歓迎です。

こんな学生さんは是非!!!

以下のような考えをお持ちの方には有意義なコースであると思います。
  • アルバイトや研究でコードは書くけど、運用がどのように行われるのか気になる。
  • 自分のサイトをサーバーで公開できてはいるけど、冗長化などについて勉強したい。
  • 最近流行りのソフトウェアの性能や有用性などの検証がしたい。
  • 自分の力が社会で通用するのか試したい。
  • 圧倒的成長がしたい!!!
※Webもしくはスマホアプリの開発経験は必須です。

さいごに

いかがでしたでしょうか?
少しでも興味をお持ちいただけたなら幸いです。参加してみたいという方はこちらからエントリーをお願いいたします。皆様のご応募お待ちしております。

Pocket

関連記事