宇部高専 第60回 高専祭で広報部長としてやったこと
宇部高専 第 60 回 高専祭において広報部長を務めました。広報部として高専祭に関わるのはこれで 3 年目になります。
高専祭において、僕が何をしたのか振り返ってみたいと思います。
何をしたのか
主にロゴ(及びロゴ候補の投票を行うサービス)・ポスター・パンフレット・公式 Web サイト・エンディング映像(及び映像で用いる楽曲)の作成を行いました。昨年および一昨年に取り組んだのはこのうちポスター・パンフレット・エンディング映像(Web サイトは存在せず、ロゴは他の人が作成)で、つまりロゴデザインおよび Web サイト開発は初めてということになります。
ロゴ
まず、実行委員間の会議および投票により、テーマは「Re:」であることが決まっていました。ここ数年はコロナの影響により高専祭での露店が無くなっており、また 2 年前は外部参加も禁止されていました。昨年は外部参加が許可され、そして今年はついに露店を出せるようになりました。という経緯があり、「再出発」を意味する Restart をもじって「Re」となっています。これは「Recall excitement」の意味も持ち、露店の制限がなくなって「興奮を思い出す」事ができるようにしよう!というテーマです。コロンがついている理由は忘れました。
というわけで、広報部としての最初の仕事はロゴ作成でした。'R', 'e', ':' の 3 文字でロゴを作るのはまあわりと大変でした。
まずこんなふうに手描きでデザイン案を練りました。これは iPad の Freeform(フリーボード)で作りました。デザインだし無限キャンバスだと嬉しいだろうな~と思ったからです。
次に、これを SVG に落とし込みました。これは結構大変でした。このタイミングではまだ Adobe を契約しておらず、Inkscape を用いてデザインを行ったのですが、Inkscape にあまり慣れていないので苦労しました。手描きだと普通にサクサク描けるのに SVG 的な(?)デザインに落とし込もうとすると大変なんだなと感じました。
不慣れであることを言い訳にするつもりはないですが、フォントをあまり考えずにデザインしてしまったり、そもそも文字ベタ打ちで全く調整しないロゴ案を作ってしまったりと、質より量みたいな感じになってしまったのが残念ポイントです。もうちょっとひとつひとつに時間をかければよかったかなと思っています。ロゴ制作は別にそこまで焦る必要もなかったので。
投票サービス「ImGrate」
さて、ロゴの案をいくつか用意して、次に実行委員間で投票を行いました。正直 LINE の投票機能を使う方が早いしそれで十分だったのですが、ちょうど Chakra UI・Golang・SQLite あたりを触ってみたかったので、自作しました。その名も「ImGrate」です。
画像の一覧表示およびそれぞれに対する投票・コメント機能をもつサービスです。実行委員限定で公開することを想定していたため、アカウント機能のようなものはかなりシンプルになりました。学籍番号を入れてもらって終わりです。
このサービスについては Scrapbox で散々語っているのでそちらもご覧ください。実際に使ってみて、まあ作ってる最中にも危惧していたのですが、ロゴデザインに対するコメントなんて求めても無駄だなという感想が発生しました。逆の立場だったら他人が作ったロゴにあれこれ意見なんて言えないし……。少なくとも今回はなんでも指摘して欲しいと思っていましたが、特に来ませんでした。
このサービスを用いて 3 回投票を行いました。1 回目はそれぞれ最低 3 つ・最大 6 つのお気に入り投票を行ってもらい、22 個あった候補を 5 つまで絞り込みました。次に、それぞれ 1 つに投票を行ってもらったところ、なんと同票のものが 2 つ出来てしまったので、3 回目を行いました。
こうして選ばれたのが、このロゴです。
Bruno Ace というフォントで文字そのまま入れただけです……。一応最後まで残ったロゴも供養しておきます。個人的には一番気に入っています。
05/28 にロゴのアイデア出しを始めて、投票を始めたのは 06/09 でした。投票には 1 週間1かかりました。
ポスター
スポンサー企業などに配布するためのポスターも作成しました。基本的に Illustrator で作成しました。
途中でレイアウト決めに難航してしまい、結果としてデザイン案が 3 つくらい出来てしまいました。
ちまちま取り組んでいたので具体的にどれくらいの時間をかけたのかは分かっていません。おそらく 1 週間程度だった気がします。
ポスター自体は公開していませんが、後述のパンフレットの最終ページにおまけ程度に載っています。気になる方はパンフレットをダウンロードしてみて下さい。
パンフレット
次に作ったのはパンフレットです。InDesign で作成しました。去年までは Illustrator で作成していましたが、共通レイアウトの作成やページ番号付けが非常に大変だったため、今年は InDesign を使うことにしました。実際に使ってみると、SVG を取り込んでも色を変更できないとか、「イラレだったら出来たのに……」と感じてしまう場面も少なくありませんでした。とはいえ、InDesign を使うことに決めたきっかけとなる不満(ページ番号とか)は解消されて、全体的に楽な作業が出来たような気もしています。InDesign の採用は失敗ではなかったと思っています。にしてもレイヤー周りはもうちょっとどうにかならなかったのかと思わずにはいられません。ネストくらいさせてほしかった……。
夏休みが明けた時点での進捗はゼロでしたが、夏休み明け直後に発生した 5 連休のうち 4 日の†すべて†を費やして、基本的な部分を完成させました。ただ、スポンサーやバンドに関する情報が集まるのを待つ必要があり、結局パンフレットの印刷を発注したのはそこから 2 週間後になってしまいました。
後述の公式サイトから PDF としてパンフレットをダウンロードできます!気になる方はぜひ見てみてください。
Web サイト
さて、これらが終わったらいよいよ Web サイト作成です。Web サイトの公開先としてサブドメインだけで良いからほしいな〜と先生に打診したら、サーバーごと渡されました。と書くと凄そうですが、実態は学内ネットに接続した上で、暗号化を全て無効化した通信でなければ使えないFTP サーバーで、とても悲しかったです。今回は GitHub Actions で自動デプロイ環境を整備するぞ〜と思ってたのに、Web サイトを更新するたびに USB メモリにビルド成果物をコピーして、学校のコンピューター室みたいなところに行って、FFFTP でアップロードする……という、CD とは全く逆の方向になってしまいました。
とりあえず、作成した Web サイトはこちらからアクセスできます。特に問題がなければ 2025 年までは維持しようと思っています2。トップページからはパンフレットをダウンロードできます。
GitHub にも公 開したかったのですが、アイコン素材が再配布を禁止しているので出来ませんでした……。
技術選定
前述の通り、今回は Node.js を立てるような余地はなく、最終的に HTML(+JS など)として出力する必要があります。SSG ですね。
まず、今年は特に Web サイトを用いて凝ったことはしないっぽい雰囲気が漂っていました。そのうえで、学生はだいたい容量制限に苦しみがちであるという偏見があるため、なるべく通信容量を使わないようにしたいと思いました。あと当然ですが Web サイトは速ければ速いほど良いです。
というわけで、使うことにしたのは Vite + Preact です。SSG で高速と言われた時、僕はまずこのサイトに使っている Gatsby を思い浮かべたのですが、ここまでシンプルなサイトに対して Gatsby を使うのは重すぎると感じたため、高速であると話題の Vite を選択しました。
スタイリングは安定の vanilla-extract で行いました。また、いい機会だったので、Vitest によるテストや Storybook も導入しています。Vitest を選んだ理由は単純で、Vite を使っていたからです。JSON ファイルの整合性を確認したり、ユーティリティー関数のテストをしたりしていましたが、フロントエンド周りのテストは導入しませんでした。
あと、言うまでもないですが言語は TypeScript です。
選定した技術に対する感想
Vite および Preact、とりわけ前者の開発体験は非常に良かったです。速度は十二分で、出力されるバンドルもかなり小さく、求めていたものは達成することが出来ました。
Storybook は正直あまり活かせた気がしていないのですが、今後 Web アプリを作るときはぜひ導入したいと強く思いました。やっぱコンポーネント単体で見れるのって便利ですね。まあこのサイトみたいな非アプリケーションだと活かせないかなという気はします。
Vitest については、テストコードは書きやすいし、速いし、結果の出力も見やすいしで総じて良い感じでした。なんかフワッとした感想しか出てこないです。
技術選定の結果
ちなみにこの技術選定は失敗でした。失敗ポイントはシンプルで、何も考えずに Vite + Preact の組み合わせで開発していたら SPA になっていたことです。複数ページをもつ一般的なサイトなのに SPA はまずいです。
まずいポイントの 1 つは、SEO に弱いということです。今まで「SPA は SEO に弱い!」と聞いてはいましたが、今回この身をもってその実情を感じることになりました。いや今回の失敗がこの言説と一致しているのかわかりませんが。
HTML ファイルが 1 つしかないので、複数ページあるのに検索エンジンにはトップページしか出てきません。この点は、React であれば react-helmet-async とか使えば解決できそうな気がしますが、Preact においてそれに準ずるライブラリであろうpreact-headは最終コミットが4 年前で、最新版だと動きませんでした3。
まずいポイント 2 つ目は、ページ移動後にリロードをかけると 404 が発生することです。SPA なのでビルドしてもindex.html
しか生えないのですが、example.com
からリンク踏むなりして URL がexample.com/test
に書き換わったあとにリロードすると、example.com/test/index.html
を取得しようとするので、当然 404 が出ます。Vite でプレビューしているときは発生しなかった(それはそう)ので気付くのがだいぶ遅れてしまいました。
2 つ目だけであれば htaccess をいじるなりして対処できたかもしれませんが、流石に 2 つも発生してしまうとつらいので、Gatsby に乗り換えました。
移行自体はそこまで苦しくなかったのが幸いです。バンドルサイズ・開発環境の立ち上がり・ビルド・ビルド後ページアクセス時の速度は目に見えて悪化しましたが、初回ページアクセス速度の悪化は致命的ではなく、ページ移動に至っては体感ほぼ変わらないという感じだったので許容範囲だと思いました。