Skip to content

Conversation

@sevenc-nanashi
Copy link
Member

内容

キャッシュ機構を追加します。

関連 Issue

スクリーンショット・動画など

(なし)

その他

(なし)

@sevenc-nanashi sevenc-nanashi changed the title feat: キャッシュを追加 feat: zipのキャッシュ機構を追加 Jun 21, 2025
Comment on lines 41 to 42
// キャッシュを保存するリポジトリ
export const cacheRepo = "sevenc-nanashi/voicevox-preview-pages";
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

メモ:これをvoicevox/preview-pagesに向ける

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

あとはこれですかね!

@Hiroshiba Hiroshiba requested a review from Copilot June 21, 2025 16:44
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Adds a cache mechanism for zipping and storing preview-pages artifacts via a dedicated GitHub Release.

  • Introduces a new uploadCaches script to create or reuse a cache release and upload .zip artifacts.
  • Extends DownloadData with runId and cached flags, updates collection logic to check and store cached artifacts.
  • Updates CI workflow and npm scripts to run the cache upload step.

Reviewed Changes

Copilot reviewed 6 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
scripts/uploadCaches.ts New script for checking/creating a cache release and uploading zips
scripts/constants.ts Added runId and cached to DownloadData
scripts/common.ts Added cache constants, helpers (getCachedArtifact, createCacheFileName)
scripts/collectArtifacts.ts Integrated cache lookup/download, split download vs. extract steps, metadata writing
package.json Added run:upload-caches script
.github/workflows/update_pages.yml Added “Upload Caches” step
Comments suppressed due to low confidence (1)

scripts/collectArtifacts.ts:1

  • The new extractArtifact implementation uses unzip.Extract, but there's no import for an unzip module. Add the proper import (for example, import unzip from 'unzip-stream' or similar) to enable extraction.
import fs from "node:fs/promises";

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

いろいろコメントしてみましたが、まあこだわりまくる必要もないと思うので、バグっぽいとこ確認して気が向いたらリファクタリングに挑戦いただければくらいの気持ちです!!

@sevenc-nanashi
Copy link
Member Author

んー、skipDownloadの時にjsonを書き込むかは若干悩んでます。jsonだけあってzipがない状況がちょっと変な気がして…

@Hiroshiba
Copy link
Member

Hiroshiba commented Jun 22, 2025

あ、別にバグではないのであればjson書き込まなくて良い気がします!!

(今思えば今回のPRは目標の設計が定められてなくて、何が正解なのかわかってなかったかもです。)

今downloads.json?とzipInfoのjsonと情報源が2つありそうですかね?
前者が表示のために、後者はキャッシュアップロードのためにあるという感じでしょうか。
で、キャッシュがあればキャッシュアップロードの情報が要らないから、zipInfo用のjsonは書き込まなくて良い・・・ということ?
(でもキャッシュの有無はdownloads.json側に書き込まれる・・・?)

情報源が2つあるし、しかもuploadArtifacts内は「jsonファイルが有るかどうか」で処理を分けていて、ちょっと複雑かもと感じました!
フローチャートを用意しておくのはどうでしょう?
あるいはどっちもdownloads.jsonに書き込んでしまって、uploadArtifacts内でzipInfo.jsonではなくdownloads.jsonを参照するとか・・・?

@sevenc-nanashi
Copy link
Member Author

sevenc-nanashi commented Jun 22, 2025

そもそもskipDownloadはテスト用にダウンロードURL取得までして終了するときのオプションですね。その時はjsonを書き込まないって感じです。

@Hiroshiba
Copy link
Member

Hiroshiba commented Jun 22, 2025

な、なるほど・・・!

たぶんskipDownloadがtrueだったときの目的が名前とズレてて、「ダウンロードをスキップする」じゃない感じなんですね。

skipDownloadはテスト用にダウンロードURL取得までして終了するときのオプション

というのがわかる変数名にしておくと良さそうかも。
最悪TODOコメントでも、まあとりあえず良さそう。(きっとまたこうやってわからなくなるだろうけど)

@Hiroshiba
Copy link
Member

あ、実装はもうできてるということがわかったので、課題ありそうなところをとりあえずFIXMEコメントにしてマージする手もあると思います!
モチベ次第で、今リファクタリングしておくか、とりあえず後に回すかって感じかな~と!

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

色々コメント書いてますが、LGTM!!

ぶっちゃけ空中配線感がそこそこ・・・というかまぁぶっちゃけだいぶ追加されてる感じがして、多分将来見直した時にこのプルリクエストを作った時の自分に切れそうになるんだろうなと感じています!
気になったのはキャッシュキー周りの扱いで、固定にしとかなくちゃいけないものと別に固定じゃなくてもいいものがどれがどれかわかんなくて、おそらく別の人が将来変更する時はなかなか気を使うと思います。

それでも別に一旦マージしちゃって良いと思います!
今気づいている設計上の課題点コメントを書きまくって(ちなみにFIXMEコメントやTODOコメントやNOTEコメント書きまくるのは将来変更する時の把握漏れ防止になるのでかなり重要だと思ってます)、将来切れてる自分が素早く状況を理解できるようにしておくぐらいでもいいかなと。

Comment on lines 71 to 75
console.log(`Usage: collectArtifacts.ts [--skipDownload]`);
console.log(
`--skipDownload: ダウンロードURLの取得までを行い、それ以降のダウンロードや展開をスキップします。`,
);
process.exit(0);
Copy link
Member

@Hiroshiba Hiroshiba Jun 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(あまり強くないコメントです)

ここ、コードをAI君に読んでもらってる感じずっと混乱してるんでまだちょっと分かりにくいんだと思います。
前者の取得だけするっていうところの方を引数名にすればさらに分かりやすくなるかも?

Copy link
Member

@Hiroshiba Hiroshiba Jun 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fetchUrlOnlyとかどうすかってAI君が言ってました

image

が、まあコメント書いているので、名無し。さん的にOKなら別に良いかも。
(AI君が混乱しちゃう=名無し。さん以外は混乱するなので、まあ何度も言っちゃってる感じです)

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ほぼLGTMです!!

いくつか提案してますが、良さそうなのだけ取り込む感じで良さそう!
残ってるのはfixmeなりtodoコメントにしてマージでも良さそう!

Comment on lines 71 to 75
console.log(`Usage: collectArtifacts.ts [--skipDownload]`);
console.log(
`--skipDownload: ダウンロードURLの取得までを行い、それ以降のダウンロードや展開をスキップします。`,
);
process.exit(0);
Copy link
Member

@Hiroshiba Hiroshiba Jun 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fetchUrlOnlyとかどうすかってAI君が言ってました

image

が、まあコメント書いているので、名無し。さん的にOKなら別に良いかも。
(AI君が混乱しちゃう=名無し。さん以外は混乱するなので、まあ何度も言っちゃってる感じです)

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!!

if (!targetRepo) {
throw new Error(`Unknown repo key: ${key}`);
}
const [owner, repo] = targetRepo.repo.split("/");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👀

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ここはどうしようもないような?

Copy link
Member

@Hiroshiba Hiroshiba Jun 23, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

あ、string.split("/")parseRepo(string)に関数化したんだと思ってました!
まあロジックの分散になってるのでたぶん関数化したほうが良さそうではある

must / should / want / can の wantからshould寄りくらいかなと

Comment on lines 41 to 42
// キャッシュを保存するリポジトリ
export const cacheRepo = "sevenc-nanashi/voicevox-preview-pages";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

あとはこれですかね!

@Hiroshiba
Copy link
Member

あとは変更してマージボタン押すか変更せずマージボタン押すかで大丈夫だと思います!

@sevenc-nanashi
Copy link
Member Author

マージします。

@sevenc-nanashi sevenc-nanashi enabled auto-merge June 23, 2025 13:16
@sevenc-nanashi sevenc-nanashi added this pull request to the merge queue Jun 23, 2025
Merged via the queue into VOICEVOX:main with commit 335669e Jun 23, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

VOICEVOXエディタのmainブランチのプレビューが無くなることがある

2 participants