created_at
updated_at
tags
toc

Web 技術年末試験 2025 講評 #web_exam2025

Intro

2025 年の Web 技術を振り返る試験として、「Web 技術年末試験 2025」を実施した。

その問題と想定解答、平均点などを公開する。

Web 技術年末試験

この試験は、「去年の Web にはどんな変化があったか」「どんな新しい技術が出てきたか」などを、試験形式で振り返るコンテンツを作ってみたことに端を発している。2022 年に始まり、今年が 4 回目の実施となる。

試験形式であるため点数は出るが、目的は「今年はこんなことがあった」を振り返ることや、「こんなことがあったのは知らなかった」という取りこぼしに気づく機会になることである。

解答用紙/想定回答

今年は Docs のタブ機能で、大問ごとのタブを分ける作りにした。

過去問は以下。

試験形式

自身で受験する場合は、以下の形式で実施してほしい。

  • 範囲: 2025 年の Web 技術の変化、トレンド、重要トピックなど
  • 方式: 選択、記述、コーディング
  • 時間: 60 分
  • 点数: 100 点満点
  • その他
    • 何を調べても良い(検索、AI など)
    • Google Docs で行うため、Google アカウントが必要

オンライン試験

オンライン試験のイベントを開催し、参加者は 60 分の時間制限で一斉受験し、終了後に問題の解説を行った。参加者のみ、筆者が採点を行い、点数を通知している。

37 名の受験者が参加登録し、Meet には 21 人が出席、そのうち提出したのは 14 人だった。

事前に N > 10 の場合にのみ平均と中央値を公表するとしていたため、以下の通り公開する。

  • 提出数: 14 人
  • 平均点: 59.9 点
  • 中央値: 59.5 点

作問は、ただただマニアックな問題や、時間内に完成できない問題を出して誰も点が取れなかったり、調べればすぐに出る誰でも解ける問題ばかりでは、実施する意味がない。

ある程度歯応えがありつつ、全く無理ではない問題として、平均/中央値ともに 50 点を狙って作問している。その意味では、まあまあの精度で作問できたと思う。

アンケート

アンケートの結果は以下の通りだった。

時間に対する問題量は多かったが 58%

問題の難易度は難しかったが 75%

今回は、比較的難しく時間が足りなかったという意見が多かった。

しかし、解答を見ると全てを解けなかった人ばかりだったわけではないので、「ギリギリ解ききれるかどうか」という点では、ちょうど良かったように思う。

問題解説

作問意図

今回も、テーマ選びにはかなり苦戦した。

ある程度全員が知っているが、当たり前すぎないテーマで、知っておいてもいいという点では復習にもなるというバランスは、毎回難しい。

しかし、時事やトレンドを含めて、それなりにバランスの取れたテーマが選べたと思うし、コーディング、選択、記述などをバランスよく揃えられたと思うので、配分はうまくできたとは思う。

アンケートでは最も難しかったのが「Temporal」で、最も簡単だったのが「Security」だったようだ。

最も難しかったのは Temporal

最も簡単だったのは Security

大問 1: Security

2025 年はサイバーインシデントが多発した年でもあった。

何か 1 つは出そうと思っていたが、アサヒやアスクルのような大規模な事件は出しようもないし、React2Shell は RSC を使っている人だけだったので、サプライチェーン攻撃にした。Web 技術そのものの話ではないが、Web 開発者誰もが対象となる話だったので、スコープとしては良かっただろう。

架空の攻撃にすると話がぼやけるので、Nx で起こった S1ngularity を題材にした。サプライチェーン攻撃とされているが、それは入口であって、実被害は感染したインフォスティーラーで発生しているので、そこに対して取りうる対策の話を中心に作問した。

pnpm も、みんなが使っているわけではないが、今年は npm から pnpm への移行の話がかなりあったので、リテラシとして知っていても良さそうだ。また、その移行自体は本質的な対策というよりは、暫定的な対応なので、長期的にどうするのが理想かも含めて出題した。

大問 2: Customizable Select Element

HTML 周りでも、Open UI を中心にかなり進捗があったので、その中で大きかったテーマの 1 つとして、<select> を選んだ。Masonry と最後まで悩んだが、すでに動くのでこちらにしたのもある。

知識問題にするよりは、直接使ってコードを書いてもらう問題にしたほうが良いだろうということで、スクショに対応する CSS を実装する問題にした。

余計なデザインコードが増えると採点が大変になるので、基本は必須の属性、疑似要素/クラスを中心にしているため、実質穴埋め問題のようなイメージだ。

唯一、CSE では <option> の中身が <selectedcontent> に Clone されるという特殊な仕様と、<button> が inert になるという特徴は知識として問う設問を入れた。

大問 3: PKI

Let's Encrypt を中心に、CA 証明書の世界でもかなり大きな変化が起こっている。といっても、一般的な開発をしていると、あまり触れることがない人も多いため、知識問題として入れた。

直近での大きなテーマは 2 つだ。

  • 証明書の期限短縮
  • IP アドレス向け証明書の発行

短期間証明書は、最短で 6 日などにすることで、「失効」の問題が解決する。その後ろ盾として ACME の普及があり、副作用として CT へのトラフィックなどが懸念されている。

IP アドレス向け証明書は、複数の用途が考えられるが、最もわかりやすい 1.1.1.1 と DoT の関係が把握できていると良いだろう。

大問 4: Temporal

試験直前に Chrome 144 がリリースされ、Temporal が使えるようになったため、それを使うことで改善するユースケースとして、時差とサマータイムをテーマとした。

わかりやすい例として、シンガポールのローカルタイムで決められたミーティングの時間が、ニューヨークでサマータイムの始まるタイミングと重なった場合の解決方法というシナリオにした。

実は Temporal API を使うとかなり簡単に書けてしまうため、「Temporal を使わないで実装」という方法も考えたが、CLDR の問題などもあり複雑になりすぎるのでやめた。

代わりに、現実では再現できない「US のサマータイムが大統領令で無くなったら」というシナリオを入れ、オフセットの設問を作った。

日本固有の問題として、「和暦」を出す問題を絡めて Intl API の問題にもしようと思ったが、Temporal の toLocaleString() を使えば、Intl.DateTimeFormat() をラップしているので、Intl が明示的に出ないため、逆に Temporal に絞ることになった。

設問を TS にして型を明示した方が解答のブレが無くなるとは思ったが、そうするとほぼもう答えなのであえて設問で指示するようにした。このあたりは作問上悩ましい点だ。

Gemini でのデバッグ

Docs 付属の Gemini で、誤字脱字の検出やファクトチェックなどを行った。

特に、完成した問題を Gemini にまるっと解かせたところ、ほぼ正しい解答が出てきたため、それが作問のチェックにも役立った。

ということで、AI を使えばほぼ満点が出せるが、まあそれをするためにわざわざ夜に時間を作って受ける意味も無いので、特に気にしていない。

Outro

アンケートでも「勉強になった」「楽しかった」などの感想をもらえたので、試験実施の目的自体は果たせたと思う。

前回の試験では、当日にいろいろなバグが発覚したので、今回は一部の人を集めてリハーサルを兼ねた事前の試験を行った。

そこで様々な不具合が発覚し、事前に直すことができたので、本当にリハーサルをやって良かった。

今年で 4 回目の実施だが、参加者が 10 人を超えるうちは続けたいと思う。

一方で、作問の負荷が非常に高く、一定期間かなり疲れる。受けるほうが楽しそうなので、誰か代わりに開催してくれないかなとも思う。