非公式シラバス作ってたら大学に雇用されて公認サイトになった話
この話の概要
大阪公立大学 工学部 情報工学科3年のボクが大学1年の夏に作った非公式シラバス「裏バス」が「大阪公立大学 授業カタログ」として、omu.ac.jp ドメイン下で公開することになった経緯をお話します。
このようなサイトです。
👇ぜひアクセスしてみてください。
https://catalog.sp.omu.ac.jp
制作した動機と既存シラバスの問題点
既存のシラバスには以下のような問題がありました。
- 検索が遅い
- 授業ごとに固有のリンクがないので友人などに共有することができない
- 戻るボタンや再読み込みボタンすら使えない
それを解決するために、スクレイピングしてシラバスデータを抽出して、独自サイトで公開すればいいのでは!?と考えたのが始まりです。そもそもシラバス自体は公開されているので、大きな問題はなさそうと考えました。
▲ とりあえず作って公開
Webの知識やスクレイピングできる技術はあったものの、ベタ書きのHTMLやCSS,JavaScriptしか書いたことがなかったため、Next.jsを使ったモダンなWebフレームワークは利用したのは初めてでした。
Reactの概念の理解や苦労しましたが、22年8月末になんとか公開しました。
ポリシー面を懸念する声もあるものの、使いやすいとおおむね好評でした。
更に情報が欲しいのでスクレイピングを強化
外部用シラバスからではオフィスアワーと連絡先が取得できないので、OMU認証システム(SSO)を解析し、本大学の教務システムである「UNIPA」にPythonのスクリプトでログインしてからシラバスを曜日/時限ごとにスクレイピングして取得するようにしました。
(そろそろポリシー的に怪しくなってきた)
大学の掲示板も流すように
次は大学のお知らせを取得したいと考えました。
UNIPAに掲載される大学のお知らせには必要なお知らせと重要性の低いお知らせがあるので、それらをTwitterのインプレッション数などでランキング付けすることを狙い、Twitterに自動投稿するアプリケーションを開発しました。
(本格的にポリシー的にアウトになった)
▲ 部活(C.H. Random)の11月の学祭展示で展示した実際の発表ポスター
URABUS+という成績共有サービスを始めた
23年2月末にGPC(授業の成績分布)を共有できる機能があってもいいのではと思い、自分の成績分布を共有した人には他の人がアップロードしたものまで見れる成績分布共有サービスを始めました。
技術的には、てぃら・みす(本学の成績分布を確認できるためのサービス)を開いたブラウザ上でこちらで用意したコードを開発者ツールのConsoleで実行してもらうことで、自動的にURABUS+側に自分の成績をアップロードするというクロスオリジンリクエストを利用したものです。
▲ 金色の成績分布をみるボタンができた
(完全にアウトになった)
凄い!!という意見がある一方、当然やり過ぎという意見もでてきました。
→多分、この時点で大学に連絡が入った
大学にバレた
バイト帰りに裏バスのアカウントにDMが来ていて中身を確認してみると、「大阪公立大学 情報戦略課」と書いてあり、長文が連なっていました。
遂にばれてしまったのかと思い、返信して、すぐに公開停止にしました。
公開停止にしたのでしばらく気にせず放置していたところ、A先生の研究室の院生からリア垢のほうに連絡が来ました。
「A先生が興味を持っている。一回連絡してくれないか?」――――
恐る恐る連絡をするとA先生と面談することになりました。
A先生「学内の情報を持つシステムは大学のサーバーで動かす必要がある。ので、大学のリソースを使って開発してもらいたいと考えている。アルバイトを紹介するので、ぜひ働いてほしい」
ということがあり、面接の日程等も決まり、結果的に大学(正確には大学法人)で勤務することになりました。
情報戦略課で勤務を開始 (23年5月~)
情報戦略課での勤務が始まったものの手探り状態。
そもそも、情報戦略課自体は全く開発をしていないので、システム開発のためのマニュアルや接続方法などの体系がありませんでした。
配席表見て、担当っぽい技術の職員さんに声をかけて、業者が大学に納入した資料を見て勉強する日々が続きました。
サーバーを貰える (8月)
サーバーを貰えたものの、RHEL(RedHat Enterprise Linux)で苦戦しました。
結局、自分が慣れているUbuntu Serverに入れ替えることにしました。
また、ファイヤーウォールの設定変更やDNS設定の依頼もしないといけなくて慣れずに苦労しました。
しかも、大学ドメインなのでみんな大好きCertBotのLet’s Encryptはポリシー上使えず、NII(国立情報学研究所)のUPKIという機関に申請して証明書を発行してもらわないといけないということでした。
このように個人開発と比べて苦労する場面が多々ありました。
リリース「直前」まで行く (9月)
フルタイム4連勤をして、なんとか4日ほどでリリース直前まで行ったものの、公開するには教育推進課との調整が必要とのことで断念。
やはり公認サイトとして大学ドメインで出すので、調整や検証などはしっかりしないといけないので調整を進めることにしました。
教務システムの担当係長と打ち合わせ (10月)
教務システムの具体的なシラバスのデータの連携方法や作成中のシステムの検証方法、そもそもの履修というシステムについて話し合いました。
教務システムの担当係長の方から「授業と科目の違いって分かってますか?」と言われて、科目の下に授業がぶら下がっている構造になっていることや1つの授業に複数の科目が紐づいている場合があること、科目の情報は上位システムで設定されていることや、シラバスがどのように公開まで行われているかを教えていただきました。
教えていただいた情報を踏まえて、データ構造の見直しや表示をどのようにするかなどの仕様の決定を行いました。
サービス名の決定 (10月)
学生が公式サービスだと誤認しないようなサービス名が求められていましたが、それだとなかなかシラバスサイトであることが分かりにくくなってしまうことが課題でした。ロゴをプロジェクトのロゴにするなどの調整をしたうえで「授業カタログ」という名前に決定しました。
プロジェクトメンバーが増える
ずっと一人でやっていた中で、「TryAngle」という名前のプロジェクトとして複数人でやっていくことになり、もう一人、メンバーが増え2人で進めることになりました。
ただ、彼は航空宇宙工学科なので情報工学科の僕とは時間割が違うためになかなか会うことはありませんでした。
→たまたま時間が少し被った時に話すとスマホなどのガジェットにも詳しく、大変気が合ったのでそこから話し始めるようになりました。
そこからはこのシステムもそれ以後もチームで作っていて、それが次に記事を書く予定のmiikun77に当たります。
特にオンプレミス環境のSharePoint(次の章の学生Navi)からデータを引き出すロジックで助けられました。次回の記事をお楽しみに!
要覧や時間割表を見れる機能を追加 (11,12月)
大学の要覧(学科ごとにどの授業を何単位取るべきかを書いている文書)や時間割表は公式的には、学生Naviというところで配信しているけど、知っている人が少ないことに気付きました。学生NaviはオンプレミスのSharePointですが、動作が快適ではなく使いにくいので、知ってる人からも評判がよくありませんでした。
→これも授業カタログで見れたらいいのでは!?
ということで、PythonでSharePointのスクレイピングを行い、そのデータを表示でき量にしました。
これで教務システム、SharePointといった複数に散らばった情報を集約するサービスになり完成度は更に上がりました。
最終的な構成としてはこの図のようになります。
最終調整 (1月)
複数授業名がある場合の表示方法やスクレイピングで取得したデータと元データの検証方法などを説明し、教育推進課からの指摘事項に対応しました。
具体的には科目ナンバリングの表示や代表教員フラグの削除、授業管轄部署を表示、科目名などの基本情報があっているかというデータ検証、授業名と配当年次と単位数は新大学と旧大学のものを併記などの様々な修正を行いました。
そして
遂に、、、リリース!!(24年1月)
情報戦略課長をはじめとする様々な方のご協力、何回もの教育推進課との調整や書類の作成を経て
2024年1月16日(金)に「大阪公立大学 授業カタログ」としてリリースしました!
インターネット上では大好評で、現在だと月4,000人ほどのアクセスがあるサイトになりました。
謝辞とまとめ
A先生や情報戦略課、そして教育推進課の職員の皆様のご協力のおかげで授業カタログの公認サイト化を実現することができました。心から感謝申し上げます。
今ではこのチーム「TryAngle」は授業カタログだけではなく、教職員向けのサービスや、より根幹にかかわるシステムを開発しており、今後は大学システムの根本的な改善に取り組んでいきたいと思っています。
そして開発だけではなく、いわゆる情シスとしての仕事である障害の原因調査なども行っています。やはり学生教職員合わせて20,000人以上を抱える情シスの現場で積む経験は本当に凄く勉強になります。
大阪公立大学の学生の皆さんで、技術が好きor学内システムの改善を行いたい方は、定期的に募集しているのでぜひこの情報戦略課のシステムスタッフにご応募ください。
---「TryAngle」技術ブログ、START---
Discussion