Classi開発者ブログ

教育プラットフォーム「Classi」を開発・運営するClassi株式会社の開発者ブログです。

Classiで発生した2つの問題を繰り返さないために我々が取り組んでいること

はじめに

こんにちは、Classiの佐々木(@sasata299)です。前回の投稿からだいぶ間が空いてしまい、季節はすっかり秋になってしまいました。

この期間、Classiでは外部の攻撃者による不正アクセス(4月)があり、また、サービスの高負荷によるアクセス障害(4月・5月)が続くなど、利用者の方々には多大なるご心配とご迷惑をおかけしました。この9月までClassiのCTOとしてサービスとお客様に向き合ってきた立場として、改めてお詫びを申し上げます。

本記事では、この2つの問題について改めて振り返りると共に、当時の状況と今我々がどのように対策を進めているのかについてお伝えします。
(※当社のCTOの変更については、後日改めて記事を出す予定です)

外部の攻撃者による不正アクセスが発覚(4月)

「Classi」は、学校現場の多様なシーンで活用されるクラウドサービスです。スマートフォン・タブレット・PCなどのデバイスを問わず利用でき、先生・生徒・保護者をつなぐサービスとして、主に高校(一部中高一貫校を含む)を中心にサービスを提供しています。

「Classi」は、4月5日(日)夕刻に予期しない事象が発生し、緊急でサービスを停止しました。不正アクセスの疑いを含めて調査を開始し、外部専門会社の協力も得てログの解析等を行ったところ、外部の攻撃者により不正アクセスが行われていたこと、この不正アクセスにより閲覧された可能性(のちに漏洩であることが判明)のある情報の範囲とその内容が11日(土)に確定し、13日(月)に全国のお客様に対して公表しました。

高負荷によるアクセス障害が発生(4月・5月)

3月から4月にかけては、新型コロナウイルスの感染拡大に伴い、全国の小中学校と高校、特別支援学校への臨時休校要請もあり、「Classi」の採用校も一斉休校となりました。 皆さんご存知のとおり、Beforeコロナの学校はほぼオフラインが前提でした。それが突然、学校は休校となり、オンラインにて学校運営を行わざるを得ない状況となりました。

当時、学校現場やそれを支援する企業側でどのようなことが起きていたのかについては、多くの先生方やメディアが発信されているので、そちらをご覧いただければと思います。


一方、「Classi」を導入している学校では、普段から学校と保護者との連絡や課題提出などがClassi上で行われ、比較的スムーズにオンラインを活用した学校運営に移行できたという声をいただきました。

しかし、このコロナ禍でのサービス運営は、我々にとってもサービス開始から約6年の間に経験をしたことのない未曾有なものでした。3月以降、特に春休みが明けて1学期が始まった4月・5月には、全国規模で一斉に先生・生徒・保護者が「Classi」を利用されるようになりました。

この頃から、「Classi」の校内グループでの毎朝の連絡、学習記録での振り返りをきっかけとしたコミュニケーション、課題の提出などでの利用が大きく増え、またアンケートを使った体温調査が行われるなど、通常時とは異なる使い方が見られました。我々もリクエストが増えることはもちろん想定していたものの、想定を大きく上回る、ユーザー数で3倍、リクエスト数で7倍となったことで、4月・5月には慢性的につながりづらい状況を引き起こしてしまいました。

f:id:sasata299:20201022115225p:plain
あるサーバのリクエスト数の推移(2月1日〜5月25日)


Datadog等を見ながら負荷となっている箇所の改善を日々進めていましたが、ボトルネックとなっていた箇所を改善すると次のボトルネックが発生するという状況で、少しずつ改善はするものの根本的な解決には至らない、、、本当に苦しい日々が続きました。自分たちのプロダクトにも関わらずコントロールが効かない、まるでコントロールを失った飛行機を操縦しているような、そんな絶望的な感覚でした。

なんとかこの危機的状況を改善したいと、毎日のように社内で対策を検討し、パフォーマンスの改善はもちろん、負荷となっていた部分の機能を一部止めたり、「Classi」本体のサービスとは切り離した代替機能を準備したりと全社一丸となって全力で対応にあたっていました。

6月以降の動き

6月以降は、つながりづらい状況を引き起こす根本的な原因の調査と、その解決に向けて動く社内体制の構築を急ピッチで進めていきました。これを社内では「再建プロジェクト」と呼んでいます。

6月に入ると徐々に休校が解除となり、分散登校や時差通学などで学校への登校が再開され、リクエスト数も落ち着いてきました。安定してご利用いただける状況となったのですが、今後また休校などによってリクエストが大きく増えた際にもサービスを安定してご利用いただけるように、7月以降は「再建プロジェクト」と「セキュリティ強化」を最優先で進めています。

セキュリティ強化では、既報の外部の攻撃者による不正アクセスの再発防止策(4月時点で実施済み)に加え、より安心・安全なサービスを提供できるよう、さらなるセキュリティ強化策について検討、実施しています。4月の不正アクセスと直接関連するものではありませんが、潜在的なリスクを減らすために、フレームワークやライブラリのアップデート、ネットワーク構成の見直しなども進めています。

再建プロジェクトでは、まず現状の分析からはじめ、技術的な課題やつながりづらい状況を引き起こした組織的な課題を一つひとつ明らかにすることからはじめました。その結果、組織的な課題として、チームの責任範囲が明確でないことや、一部のリポジトリのメンテナンス責任が曖昧、といったことが根本的な原因の一つとして浮かび上がってきました。

体制変更

一つのひとつの現象と根本的な原因を丁寧に分析し、その結果に対して、適切に遂行できるよう社内の体制も変えました。

7月からは、動作しているすべてのコードに対して、チームの責任範囲を明確にしました。また、技術的な課題をそれぞれのチームの責任において改善するような動き方にも変えました。やるべきことが明確(「再建プロジェクト」と「セキュリティ強化」が最優先)で、かつ、チームが主体となって意思決定する形にしたことで、現在は各チームが担当する機能やリポジトリをしっかりとメンテナンスしていく、そんな体制になってきたと思います。

その形をより強化するために、また、やるべきことを今後もぶらさないために、「技術的負債を適切にコントロールする」「技術的な意思決定を行う」ことを責務として、10月からは各チームにテックリードを置く形に変えました。各チームのテックリードが目を光らせることで、健全にメンテナンスしていける仕組みを作りたいと思います。

これらは一例ですが、今後も間違いなく課題は出てくるでしょう。いわゆる銀の弾丸はないので、プロダクト同様、組織についても少しでも良い形にできるように改善を続けていきます。

終わりに

「Classi」は、サービスの提供から約6年で、日本中の高校の半分以上、高校生の3人に1人に使っていただく、いわばライフラインとも言えるサービスにまでなりました。今現在も多くの学校、そして家庭で、先生・生徒・保護者の方々にご利用いただいています。

ユーザーの皆さんに、本当に使いたいときに当たり前に使っていただける。今回振り返ってみて、まず我々がやるべきことは、安心・安全なサービスを、安定して提供することだと改めて強く感じています。そのためにも、引き続き、全社一丸となって「再建プロジェクト」と「セキュリティ強化」をしっかりと進めていきます。

新型コロナウイルスの影響で全国の学校が休校になってどうなったか

みなさん、こんにちは。 Classiデータ/AI部でデータサイエンティストをしている、てつろう(@tetsuroito)です。 Classiでもエンジニアやデータサイエンティストの人数も増えてきたことから、テックブログを開設し、積極的に情報を発信していこうという機運が高まり、新たにブログを開設しました。今後の情報発信にご期待ください!

新型コロナウイルスへの対応

今はどこもかしこも新型コロナウイルス関連で大変な時期に差し掛かっていますね。いち早く事態が収束することを願ってやみません。 当社でも1月末ごろからプロジェクトチームが発足し、現在は全社員が原則在宅勤務にて対応するという状況になっています。 詳細は当社のお知らせに記載がありますので、もしご興味があればご覧いただければと思います。

さて、教育業界の対応についてですが、ニュースなどでも盛んに報道された、2020年2月27日に開催された「第15回新型コロナウイルス感染症対策本部」にて、安倍 晋三総理大臣は全国全ての小学校・中学校、高校などに、2020年3月2日から春休みに入るまで臨時休校を要請する考えを表明しました。

それに伴い、当社でも全国の学校向けに一部の機能を無償で提供する対応を実施しています。

参考:新型コロナウイルスの影響で学校活動を休止する全国の高校へ一部サービスを無償提供

これまで当たり前だった学校に行って、学ぶという前提が大きく崩れ、学校へ行かずとも学びを止めないという考え方へ急遽シフトせざるを得なくなりました。実際に多くの学校でClassiを使った様々な対応を現場の先生方がなされており、その対応の臨機応変さに感動しました。

休校対応のClassiへの影響

多くの学校でClassiを活用し、学校の連絡や学習の状況についてのやりとりするという状況が始まりました。Classiでもエンジニア部門がこれまでの想定よりも多くの負荷を捌くために、様々な対応をしていたり、マーケティング部門がこういった場合にどのような使い方をすれば、影響が大きくならないかを考え、それぞれの学校へ密に連携するなど、急場な対応を迫られました。 データ/AI部では、これらのサービスの利用がすぐに可視化できるように、これまで整理してきたデータ基盤を有効活用し、すぐさまダッシュボードを作成しました。 今回はそこから抜粋し、Classiが休校対応でどのように使われていたかを説明します。

ClassiのDAU(Daily Active User)

f:id:tetsuro-ito:20200316215427p:plain
DAU

Classiのユーザーには3種類のタイプがあります。学校の先生が利用するアカウント、学校の生徒が利用するアカウント、そしてその生徒の保護者が利用するアカウントの3種類です。

上記のグラフはそれぞれのタイプの日々の利用推移のグラフです。 まもなく年度末に差し掛かる時期だったので、通常であれば安定的な利用状況になるのですが、臨時休校の要請についての発表が行われた2月末を起点に、生徒や保護者の利用が急増しました。

特に顕著なのは保護者のアクセスのスパイクです。これは休校対応によってどうしたら良いのか、学校との連絡を待つため、Classiへ情報を取りにきたことが考えられます。 先生や生徒は実際に学校で普段からご利用いただいている状況ではあったのですが、それでも休校後はアクセスの平均がこれまでよりも上昇しています。

機能利用の内訳

では、実際に各ユーザータイプごとの機能利用状況を見てみましょう。まずは先生からです。

f:id:tetsuro-ito:20200317163354p:plain
先生

圧倒的に利用されているのは学校内での連絡や情報共有のために使われる校内グループです。様々な情報が錯綜する中で、学校側が生徒や保護者に必要な情報を適切に配信していたのがわかります。

つづいて、学習記録という日々の学習時間などを記録する機能がよく利用されています。これは学校で確保されていた授業の時間という前提が崩れてしまったため、家庭学習の記録を促し、先生から生徒へのコメントなどを行なっているものです。 残りの機能は満遍なく利用されていますが、それぞれの学校のスタイルに合わせて各機能をご利用いただけているようです。

次に生徒の利用状況です。

f:id:tetsuro-ito:20200317163440p:plain
生徒

こちらもやはり校内グループの利用が群を抜いています。先生からの連絡を受け取り、みましたというボタンを押してレスポンスする機能があるのですが、これで出欠を取ったり、日々の健康観察のような使い方をしていたために、多く利用されています。 学習記録は前述した通り、日々の学習時間を記録して、先生に伝えるために利用していただいています。 3番目はアンケートの利用が多くなっています。これは先生から生徒に対してアンケートを配信することで、それらを集計する機能ですが、学校にこられない分、いろいろな設問で日々の状況を確認していることがわかります。 4番目の生徒カルテは生徒のこれまでの成績を一覧できる機能です。模試の結果やこれまでの成績を見返していることがわかります。 5番目のWebテストはClassi上で問題を解きながら学習をできる機能です。こちらもアンケート同様、先生が毎日課題を配信して、その課題に対して各生徒が家庭で学習に取り組んでいることがわかります。

上記のように、学校に行くという前提が崩れてしまっても学びは継続的に行われていることがデータからもわかります。

最後に保護者です。

f:id:tetsuro-ito:20200317163633p:plain
保護者

保護者の機能はシンプルなので、基本的には学校からの連絡を受け取るために多く利用されています。 2番目の生徒カルテはお子さんのこれまでの成績が見られる機能です。タイミングが重なって、自分の子供の成績を確認した保護者の方も多くいらっしゃったのかもしれません。また、アンケートなどを一部の学校で保護者に対して取っている形跡も見られます。

最後に

今回の新型コロナウイルスの流行や全国の学校の休校対応など、これまでの常識では考えられなかった事象が起きています。 従来のICT化される前のままであれば、今回の騒動に対応することは難しかったであろうことは想像に難くありません。 学びの形も少しづつ、着実に進歩しています。今回の件で、多少なりともそれが証明できたのではないかと思います。 Classiは今後も引き続き全社ミッションである 子供の無限の可能性を解き放ち、学びの形を進化させるを実現させるために日々頑張っていきたいと思います。 このような課題に対して前向きに取り組んでくれる仲間をいつでも募集しています!

Classi採用ページへ

© 2020 Classi Corp.