オンラインでのプログラミング系の演習をGoogle Colab & Google Driveで行なう

去年に引き続き、東京都立大学の非常勤講師の依頼をid:mamorukさん(小町先生)からして頂いたので、今年も講義を担当してきました。講義の内容としては

  • Mackerelでのロール内異常検知を題材に、機械学習をプロダクトに取り込んでいく際、どういった視点が必要になるのか
  • 実際の開発はどういった形式やツールで行なわれているのか、擬似的に体験してもらう

といった内容(講義 & 演習)で行ないました。内容としては昨年とほぼ一緒ですが、新型コロナウイルスの影響で演習パートがオフラインの対面ではなく、オンラインで行なう点が一番違いました。演習系のサポートは学生さんの手元の環境がそれぞれ違う、などあって去年も苦戦しました。今年は同じ感じでいくとさらに大変そう(というか見切れない...)だろうなと思って、やり方を考えてみました。

他にいいやり方があったら誰か教えて & 自分用の今後*1のメモという感じのエントリです。

演習パートの前提

  • 学生さんは人によってはカメラやマイクをオンにするのが厳しい人が多い
    • ネットワーク環境だったり、ハードウェア的なものだったり
    • ネットワーク環境によっては画面共有も厳しい、という人もいる
  • 学生さんの手元環境は様々。プログラミングへの慣れ方もかなり幅はある
    • 普段から慣れている人は勝手に進んでもらえるとよいが、講義の主旨的には環境設定で脱落者をなるべく出したくない
  • 講師1名 + TAさん2名のサポート体制
    • TAさんは去年の講義の履修者で内容はある程度把握してもらってる
  • 演習時間は2.5~3時間程度
  • 夏の集中講義の中の1日分の担当

実行環境はGoogle Colab

これはすでに割とやられているところ多そうですね。学生さんの手元の環境はMac / Windows / Linuxだったりするわけですが、それぞれのトラブルシューティングはかなり大変。昨今の話題的には、コンテナを使った開発も体験して欲しくてdocker上での実行も考えたのですが、この人数をリモートで対応するのはちょっと厳しい...ということで今年は採用を見送りました...(ちなみに去年はdocker上で作業をしてもらっていました)。Google Colabだと、Pythonのコードがしゅっと動く環境が手に入りますし、shellが動いてjqなどちょっとしたツールのインストールも楽、ということもあり採用しました。

雛形のColabのNotebookを用意しておいて、自分のアカウントにコピーしてもらってそこで各自実行してもらう、という形を取りました。Colabは「リンクを知っている全員に共有」ということが簡単にできるので、うまく動かない場合はNotebookを共有してもらって様子を見るということができました。これはリモートならでは感がありますね。

あと、採点するときにメールがzipファイル地獄にならずに済むというメリットもあります...。

課題のリポジトリはGitHubで管理、Google DriveでマウントしてColab上で修正

ちょっとしたデータ分析するだけであればColabだけで十分なのですが、今回の演習では

  • テストを書く
  • テストこける
  • プログラム修正する
  • テスト通る
  • プログラムを改良する
  • テスト通す
  • ...

といった一般的な開発のフロー(の一部)を学生さんに体験してもらうのが主目的でした。そのため、Colabだけでは不十分*2。そこで、以下のやり方を採用しました。

  • Colab上でGoogle Driveをマウント
  • マウントしたパス上にGithubの演習課題リポジトリをgit clone
    • Colabは何の追加インストールもせずにgit cloneが動いて助かる...
  • Colab上からマウントしたファイルを編集
    • Google Drive上のファイルも編集されるので、変更が永続化される
      • Colabではセッションストレージも使えるが、ランタイムのリセットなどで消えてしまうため、今回の目的に適さない
    • VSCodeなどみたいにリッチな補完が効くわけではないが、最低限のコードのシンタックスハイライトなどはColabがやってくれる
      • 演習で使うリポジトリはコードサイズは大きくないので、これで十分ではある
  • Colab上のマウントしたディレクトリでmake testを実施
    • ブラウザ上だけでテストを体験してもらえる環境が完成
  • 修正してもらったGoogle Driveのディレクトリを採点者やTAの方に共有してもらう
    • 学生さんがはまったときの手元の様子がリモート越しでも分かる
    • 実際、演習中に結構な人数の方の手元の様子をこれで一緒に見ることができました

学生さんによってはZoomの画面共有も環境的に厳しいという方もいらっしゃいましたが、Google Driveの共有リンクを共有してもらうことで何とか最低限のサポートはできたかなと思います。演習課題の提出時に講義の感想も一緒に送ってもらいましたが、Colab & Google Driveを使ったやり方はまあまあ満足してもらえたようでした。

実際のColab上の編集風景は↓のような感じ。右側でコードを書いて、左側でテストを実行します。IDEっぽさがありますね。

難しかったこと

受講者がありがたいことに40名近くいらっしゃったのですが、オンラインで学生さんの顔の様子もなかなか分からないこともあり、みんなスムーズに行っているのか、はまっているのか、最初は様子を掴みかねました。オフラインの講義の場合、教室をうろついて画面の様子を後ろから見てコメントしたり、といったことで様子を把握していましたが、オンラインだとそういうことが気軽にはできない。

40人の前では学生さんもなかなか質問しにくいところもあるかも、ということで途中からZoomのブレークアウトルームの機能を使って3チームに分かれ質疑を行なうようにしました。その結果、結構質問をしてもらって、それはそれでよかったのです。ただ、ブレークアウトルームが違うと、他の部屋でどういった質問が出たかが聞けない、などの悩ましさがありました。

演習系の講義を担当されている先生で「自分はこういう感じにしたところ、リモートでもある程度うまくいった!」というのがあったら是非教えて欲しいです。

参考

*1:予定は特にないです

*2:ファイル分割などがNotebookだとやりにくい