2022-7-9

NUCTハック

はじめに

この記事では私が知り得た,名大の学習支援システムであるNUCTをハックするための情報をまとめます.API は名大生しか叩くことができませんが,それ以外情報は Google 先生を駆使すれば誰でも辿り着ける情報です.

1. そもそも NUCT とは

実は,NUCT は名大の人が 0 から作ったサービスではありません.実はオープンソースの Sakai というプロジェクトを元にして作られています.

その証拠に,NUCT を開いて,一番下までスクロールしてみてください. nuctにpowerd-by-sakaiと書いてある このようにPowerd by Sakaiと書いてあります.Sakai はオープンソースの LMS(学習管理システム: Learning Management System)です.オープンソースなので,だれでもこちらからダウンロードして自由に使うことができますし,ソースコードはこちらに公開されています.

つまり,NUCT では Sakai のために開発されたツールを使うことができるのです!

コラム:NUCTをさらに詳しく知る

NUCT は 2010 年度から(出典)提供されており,Sakai を元にして名大独自のアレンジを加えたシステムとなっています.独自のアレンジの例としては,NUCT の情報と連携した動画配信サービスがあるそうです(出典).また,2020 年の COVID-19 の一斉休校の際は NUCT による DX にさまざまな工夫がされていたようです(資料 pdf), (当時作られたであろう教員向けサイト)

2. Sakai の API

Sakai には API のエンドポイントがあります.ブラウザから簡単に確認することができます.NUCT にログインした状態で https://ct.nagoya-u.ac.jp/direct/describe にアクセスしてみましょう.すると API の使い方一覧が出てきます.

有用そうなエンドポイントを貼っておきます.(末尾の.json を.xml に変えると xml で取得できます)

  1. NUCT の講義サイトの ID 等がわかる json https://ct.nagoya-u.ac.jp/direct/site.json ※説明にもあるようにクエリパラメータを付けることができます.0 が all を意味します. https://ct.nagoya-u.ac.jp/direct/site.json?_limit=0
  2. 課題の一覧の json https://ct.nagoya-u.ac.jp/direct/assignment/my.json
  3. カレンダーの情報の json https://ct.nagoya-u.ac.jp/direct/calendar/my.json
  4. ある授業のリソースの一覧の json https://ct.nagoya-u.ac.jp/direct/content/site/{site_id}.json

これらのエンドポイントからデータを取得するためには NUCT にログイン済みである必要がある(=アクセスするときに Cookie を送らないといけない)ため,cookie を手に入れる工夫は必要ですが,これだけ情報があれば色々なことに使えそうですね.

さらに詳しい API の情報はこちらのsakai の wikiも見てみるといいかもしれません.

3. Confortable Sakai

前述の Sakai の API を用いた神 Chrome 拡張として,Comfortable Sakaiがあります. Chrome に導入する場合はこちらから. Comfortable Sakai とは:

NUCT のベースとなっている Sakai というシステムに適用可能なブラウザ拡張機能が,京都大学の武田和樹さん(工学部電気電子工学科 4 回生【2022 年度時点】)を中心とした有志により作成・公開されています.

↑NUCT の公式のこのページより引用.

実は,京都大学でも Sakai を元にした PandA という LMS が使われており,Comfortable Sakai は元々 PandA 用の拡張機能として開発されたそうです(Comfortable PandA 公式ページ),(開発者へのインタビュー),(Comfortable PandA をリリースした話)

PandA の API を使っている方は他にもいらっしゃいました.多すぎん…?笑 (GitHub の検索窓で「panda kyoto-u」とかでコードを調べるとごろごろ出てくる)

詳細

コード見る限り,京大は多要素認証がなく,id とパスワードだけの cas 認証でログインしているように見えました.わからないけど.

同様に,名大でも API を使っている人がいないか探してみましたが,あまりいませんでした… 多要素認証になる前の NUCT で使えるコードを書いている方はいらっしゃいました:https://github.com/nu50218/go-nagoyau

4. その他ハック

  1. 多要素認証自動化 https://github.com/obashun22/auto-mfa-cas-login こちらの Chrome 拡張を用いれば多要素認証を自動化することができます. もちろん,ちゃんとしたやり方で認証するよりは多少はセキュリティが落ちると思いますので,使う際は自己責任で……(ただめちゃめちゃ便利)
  2. 課題を Google Tasks に追加する NUCT にはカレンダーのエクスポート機能があります.それを Google カレンダーに取り込んで,Google Tasks に変換するという仕組みです.詳しくはこちら
  3. Sakai の iOS クライアント 以下のような Sakai の iOS クライアントを開発されている方がいらっしゃいます. iOS のアプリ開発がわかる方,動かしてみてくれないかなあ…… https://github.com/alihen/Sakai-iOShttps://github.com/PRAN1999/SakaiClientiOS

終わりに

いかがでしたでしょうか.この記事を見て誰かがいい感じの NUCT 拡張を作ってくれないかな…と期待しています…!