Skip to content

インストールの失敗経路が、用意された失敗値に落ちず例外になる #2435

Description

@hal-shu-sato

背景

#2434(strict 化)で strictNullChecks を有効にしたところ、「見つからなかった値をそのまま先へ渡していて、呼び出し先で Cannot read properties of undefined になる」箇所が 3 つ見つかった。あの PR は構造変更なので挙動を保存し、発生位置とメッセージが読めるように throw へ置き換えるに留めてある。

ただしこれらの関数には、同じ「見つからない」を表す失敗値が既に用意されている。数行上では使っているのに、その先で使っていない。

該当箇所

1. installProgram(src/main/services/core.ts)

InstallCoreResultnoVersionData があり、coreInfo が取れないときは使っている:

if (!coreInfo) {
  log.error('The version data do not exist.');
  return 'noVersionData';
}

その直後、指定バージョンの release が見つからないケースは失敗値へ落ちない(現状は throw):

const release = progInfo.releases.find((r) => r.version === version);
if (!release) {
  throw new Error(`No release found. program:${program} version:${version}`);
}

2. installScript の redirect(src/main/services/scriptInstall.ts)

redirectNotFound があり、packageId が無いときは使っている:

if (!packageId) {
  return { route: 'flow', status: 'redirectNotFound' };
}

その直後、ID はあるが一覧に無いケースは失敗値へ落ちない(現状は throw):

const packageToInstall = packages.find((p) => p.id === packageId);
if (!packageToInstall) {
  throw new Error(`The redirect target is not listed. id:${packageId}`);
}

3. installPackage の direct 経路(src/main/services/packageInstall.ts)

direct 指定なのに directURL を持たないパッケージ(2 箇所)。ダウンロード失敗には downloadFailed / redownloadFailed がある。

提案

1〜3 を、それぞれの関数が既に持っている失敗値へ寄せる。renderer 側は失敗値を見て表示を出す作りになっているので、いまクラッシュしている経路が UI のエラー表示になる

注意

挙動変更なので #2434 とは別 PR。renderer 側で各失敗値がどう表示されるかを確認したうえで、既存の表示に合流させるか新しい文言を足すかを決める必要がある。

参考として src/renderer/main/aviutl/BatchInstallButton.tsxcoreInfo が null のケースも同じ形だが、こちらは catch が「エラーが発生しました。」を表示するので UI 上は既にエラーになっている。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions