開発ブログ一覧に戻る
History2025年12月31日

any型を排除せよ:リファクタリングの記録

年末の大掃除として、一括採点のコードを整理しました。 今回のテーマは「any型の排除」。 プログラミングの話ですが、できるだけわかりやすく紹介します。

「型」とは何か

プログラミングにおける「型」とは、データの種類のことです。

たとえば、Excelで考えてみてください。 セルに「42」と入力すると、Excelはこれを数値として扱います。 「田中」と入力すると、文字列として扱います。 数値には計算ができますが、文字列に計算はできません。

プログラムでも同じです。 「この変数には数値が入る」「この変数には生徒の名前が入る」と決めておくと、 間違った使い方をしたときにコンピュータが教えてくれます。

型の例
  • 数値型:点数、人数、ページ番号など
  • 文字列型:生徒の名前、クラス名など
  • 真偽値型:採点済みかどうか(はい/いいえ)
  • 配列型:生徒の一覧、設問の一覧など

一括採点では、TypeScriptというプログラミング言語を使っています。 TypeScriptは、この「型」を厳密にチェックしてくれる言語です。 「点数を入れるべきところに名前を入れてしまった」といったミスを、 プログラムを動かす前に発見できます。

any型という「なんでもあり」

ところが、TypeScriptにはanyという特殊な型があります。 これは「なんでもあり」という意味で、型のチェックをスキップします。

テストで言えば、「この欄は何を書いてもOK」という状態です。 楽ではありますが、採点する側は困りますよね。

プログラムでも同じで、any型を使うと、 間違いがあっても気づかないまま動いてしまいます。 そして、実際に使ったときに突然エラーが起きる。 これがバグの原因になります。

any型の問題

開発を急いでいるときや、複雑な処理を書くときに、 とりあえずany型で逃げてしまうことがあります。 「あとで直そう」と思っていても、そのまま残りがち。 これが「技術的負債」と呼ばれるものです。

今回やったこと

一括採点は、Electronというフレームワークで作られています。 Electronでは、「メインプロセス」と「レンダラープロセス」という 2つの部分がデータをやり取りしながら動いています。

このデータのやり取り(IPC通信)の部分に、any型が多く残っていました。 「生徒のデータを送る」「採点結果を返す」といった処理で、 送る側と受け取る側で型が一致していないと、バグの原因になります。

今回のリファクタリングでは、データベース(Prisma)が提供する型を活用しました。 データベースの設計から自動生成される型を、プロセス間の通信でも共通して使うことで、 「送る側が想定しているデータの形」と「受け取る側が期待しているデータの形」が 必ず一致するようになりました。

主な変更
  • IPC通信まわりのany型を排除
  • Prismaの型をメイン・レンダラー間で共通利用
  • 未使用の古い型定義を削除(45%削減)

なぜこんなことをするのか

こうした作業を「リファクタリング」と呼びます。 ユーザーから見た動作は変わりませんが、内部のコードが整理されます。

教室の掃除に似ているかもしれません。 授業はできるけど、どこに何があるかわからない教室と、 整理整頓されていてすぐに必要なものが取り出せる教室。 長期的に見れば、整理されている方が効率的です。

ソフトウェアも同じで、定期的にコードを整理することで、 新しい機能を追加しやすくなり、バグも減ります。 年末の大掃除として、良いタイミングでした。

ユーザーには見えない作業ですが、ソフトウェアの品質を保つために大切なプロセスです。 これからも定期的に整理を続けていきます。

一括採点を使ってみませんか?

最新版をダウンロードして、採点作業を効率化しましょう。

最新版をダウンロード