dkrqr’s blog

僕がつくったものとやったこと考えたことの記録

KU1025をもっと使ってほしい話(KU1025の歴史)

僕はKU1025という物理工学科の過去問サイトを運営していた。 ソフト面の運営は卒業とともに現役学部生に引き継いだが,技術的な部分はまだ僕がやっている。 楽しいので。

数日前(もっと前かもしれない)からKU1025β*1がなぜかchromeから見れなくなっている。 これを機にKU1025βの更新をやめてもいい気がする。 少なくとも技術的なアップデートはやめる。 夏休み中の僕の努力によってKU1025は完全にKU1025βの上位互換になっているから。

KU1025βではなくKU1025を使ってほしいお気持ちをKU1025のTwitterに書こうとしたらクソ長怪文書ができかけたので,どうせならばと加筆してブログにした。

KU1025の誕生

"KU1025βではなく”KU1025をもっと使ってほしい話をしようと思うと,KU1025の歴史の話を避けては通れない(気がする)。 ので,KU1025の誕生から順に書いていく。 ちなみにこのセクションは使ってほしさにはあまり関係ない。

そもそも,物工過去問サイトKU1025ができたのは2年前半前の2018年7月4日。 僕のTwitterに過去問サイトの話が初めて出てくるのが6月27日なので,思いついてから約1週間でらしい。 我ながらすごい。 まあ実際にはtweetするまでにいろいろ考えてはいただろうけど。

所属していたサークルに物工,特に機シスの過去問が大量にあって,且つ特に部外秘でもなかったのでこれを活用しない手はないと思ったんだったはず。 ちなみにサイトの名前は物理工学科の学生番号が1025で始まることに由来する。 物工の学生でも気づいていない人がいるらしい。KU1025豆知識1。 メールアドレスとかtwitterのユーザー名とかサイトのurl*2とかが1025kuexamなのは,最初にgoogleアカウントを取得したときにku1025が空いていなかったから。KU1025豆知識2。

当時のKU1025はしばにゃんさんのkakomon-site-generatorをそのまま利用していた。 github.com

本当にびっくりするほどそのまま利用していて,色を変えたりすることすらしていなかった。 変えたところはページタイトルとtwitterを入れたことくらい。 さすがにもうちょっと変えろよ。

f:id:dkrqr:20210127232341j:plain:h300
当時のKU1025の画面
f:id:dkrqr:20210128183920p:plain:h300
KUEE13の画面

KU1025βの誕生

kakomon-site-generatorの過去問サイト生成方法をざっくり説明すると次の通り。 (ちょっと分かる人は前述のgithubのREADMEを読んで)

  1. google drive に過去問を科目ごとにフォルダ分けして保存
  2. google apps script(GAS) *3 でシバニャンさんのプログラム1を実行。保存した過去問のデータがいい感じにまとめられる。
  3. まとめられたデータをダウンロードして,rubyというプログラミング言語で書かれたシバニャンさんの書いたプログラム2を実行。html *4 が生成される。
  4. 生成されたhtmlを静的サイトホスティングサービスにアップロードするとwebページとして公開される。

シバニャンさんのコードはとてもよくできているが,当時の僕にとっては2+1個の問題があった。

1つめは僕のPCにrubyの実行環境がないこと。 附属図書館のパソコンにはrubyの実行環境があったので,サイトを更新するたびにいちいち附図書のパソコンで作業していた。 めちゃくちゃ面倒だった。

2つめはほぼ毎日更新*5する必要があったこと。 KU1025を早めに公開しようとしたため過去問の整理が終わっておらず,整理の終わった過去問が日に日に増えている状況だった。 整理したからには公開したいので,毎日更新する必要があった。

3つめはリンクがtwitterに貼れないこと。 当時使っていた静的サイトホスティングサービス“bitballoon”で公開されていたサイトの一部がtwitter社のお気に召さなかったようで,リンクがtwitterに貼れなかった。宣伝しにくかった。 これは僕の問題でもないし,シバニャンさんのコードも関係ない。 bitballoonがNetlify(今使っているホスティングサービス)に吸収されることで解決した。

1つめの問題を解決するためだけなら自分のPCにruby環境を作ればよかったが,2つめの問題も解決しようとなると自動化するしかない。 最初のgoogle driveをいじる部分はGASでせざるを得ない感じだったので,全部GASで自動化してしまえと思い立ってしまった。 (環境構築が大嫌いなのでしたくなかったという理由もある) 試験期間中に色々調べると,GASを使えば少し強引な方法ながらwebサイトを表示できることが分かった。 そこからいろいろ勉強して約3週間でKU1025βを公開。(このへんの技術的な試行錯誤みたいなのも思い出して書きたいね)

これで過去問を追加すればすぐにwebサイト上で閲覧できるようになった。

KU1025βの改善

はじめに作られたKU1025の問題点はKU1025βによって解決されたが,完全上位互換であるかというとそういうわけでもなかった。 KU1025βにはKU1025とは別の欠点があった。

1つめは検索結果に表示されないこと。 GASが検索エンジンのクローラをブロックしているらしく,GASで作ったwebページは検索結果に出てこない。 KU1025は検索で出てくるので,そこにリンクを貼って対応した。 あと分かりやすい短縮リンクを作ってそれをtwitterで宣伝した。 これはまあまあ効果があったっぽい。 が,検索結果から直接最新情報にアクセスできないのはやっぱり不便。

2つめはKU1025に比べて表示が遅いこと。 最初期はページを表示する度にgoogle driveの過去問のデータを毎回取得しに行くなど無駄の多い設計になったいたのでページの表示に2~3秒かかっていた。 今考えるとよくこんなのを人に使わせようと思ったなと思う。 表示速度はアルゴリズムを工夫することで少しずつ速くしていった。 データ取得していい感じにまとめたやつを保存しておくのが一番効果が大きかった気がする。 (バージョン管理してないしデータも取ってないので分からん。) それでも静的サイト *6 であるKU1025には敵わない。

他にも,Twitterカードが使えないとか,ページタイトルやファビコンの入れ方が分からなかったりとか細かい問題はたくさんあって,解決策が見つかったものは順次解決していった。 (この辺も技術的な話を別で残すべきなんですよね) しかし,根本的な解決をするにはKU1025の方を自動更新にする以外ないなぁという考えがずっとあった。

KU1025復活

そういう感じでKU1025βの細かい改良を2年くらい続けていた。 その間に,Netlifyはgithub *7 のcommit *8 を検出して自動更新してくれるようになり(これは初めからそうだったかもしれない),僕はgithubを雰囲気で使うようになり,twitterのおかげでAPI *9 のイメージがなんとなくつかめるようになってきた。 要するにKU1025を自動更新にするための技術的な課題が少なくなり,機運がどんどん高まっていたということである。

twitterをさかのぼってみると,KU1025を作った9か月後くらいに今使っている自動更新の方式を思いついてはいたようなので,序盤にラスボスの城の入り口があるRPGみたいだと思った。 KU1025βは中ボスくらいの感じで,普通にストーリーを進めていけば倒すこと自体は簡単という感覚だった(KU1025βの誕生)。 そのあと中ボスのダンジョンの細かい抜け道とかに落ちてるアイテムを拾いに行ったり(KU1025βの改善),メインのストーリーとは関係ないダンジョンを攻略したり(githubを使い始める),別のゲームで遊んだり(TaSKとか寮食メニューbotでtwitterAPIを使う)しているうちに,ラスボスを倒すための力がついていた。 計画的に経験値を積んでストーリーを進めなかったので攻略に2年もかけてしまった。

そして去年の夏,ついにgithub APIをGASから叩くことができるようになり,google driveからまとめた過去問のデータでhtmlを自動的に生成し,githubにcommitして自動的にKU1025を更新することができた。 こうして約2年ぶりにKU1025が更新され,KU1025βの完全上位互換として復活した。

おしまい

そういう感じで,僕の中では持てる技術を総動員みたいなイメージで作ったので,不完全なKU1025βではなく,KU1025を使ってほしいわけです。 そして,KU1025を使ったら過去問を投稿してほしいわけです。

1025-kuexam.netlify.app

*1:このあとKU1025とKU1025βが何回も出てきて頭おかしくなるのでKU1025βは斜体にしています

*2:urlはhttps://ku1025.netlify.app/に変えた。

*3:googleが提供するJavaScriptというプログラミング言語ベースのweb上の開発環境

*4:webページに表示される文字の素みたいなもの

*5:糸井重里とは関係ない

*6:事前に作成したhtmlを表示するサイトのこと。KU1025βは毎回htmlを生成する動的サイトだった。

*7:プログラムを共有したり,変更点とかを良い感じに管理してくれる「設計図共有サイト」(2018日経)

*8:プログラムの変更や追加を記録すること

*9:外部からアプリ(twitterなど)を操作するための方法