Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Docker関連ファイルの削除とTyposのスクリプトの追加 #2239

Merged

Conversation

gigi434
Copy link
Contributor

@gigi434 gigi434 commented Aug 21, 2024

内容

Dockerコンテナによる開発はしない方向のため、下記変更を取り込む
・Docker関連ファイルの削除
・上記に付随していたタイプミスを見つけ出すライブラリTyposのバイナリを使用したスクリプトの追加
・付随するドキュメントの整備

関連 Issue

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

image

その他

動作確認したOS

  • Windows 11 Pro
  • Ubuntu 24.04 LTS
  • Apple M1 Sonoma 14.5

@gigi434 gigi434 requested a review from a team as a code owner August 21, 2024 13:31
@gigi434 gigi434 requested review from Hiroshiba and removed request for a team August 21, 2024 13:31
Copy link
Member

@sevenc-nanashi sevenc-nanashi left a comment

Choose a reason for hiding this comment

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

いくつか意見です。

1:
他に使いまわせるようにするかtypos専用にするか、が中途半端な気がします。
というのも:downloadTypos.jsの今のコードは、

  • Windows用のバイナリは全て7zで処理できて、
  • Mac/Linuxならtarで処理できる

という前提の処理で書かれていると思います。
これに汎用性を持たせるのはまぁしんどいと思うので、typos専用にした方が楽になるかも。

2:
ダウンロードURLをハードコードすれば、変にバージョンが上がったりしないので後々困らなくなりそう。(解決されたバージョンが固定できないなら動的なバージョン指定はやるべきではないと言う思想)

const urls = {
  windows: {
    x64: "https://...",
  },
  darwin: {
    ...
  },
  linux: {
    ...
  }
}

3:
Workflow(.github/workflows下)のtyposダウンロードは無くしていいかも。

package.json Show resolved Hide resolved
package.json Outdated
@@ -128,4 +129,4 @@
"vue-tsc": "2.0.24",
"yargs": "17.2.1"
}
}
}
Copy link
Member

Choose a reason for hiding this comment

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

ファイル末の空行を入れた方がいいかも。

build/downloadTypos.js Show resolved Hide resolved
| ディレクトリ名 | 内容 | ダウンローダー |
| -------------- | ------------------------------------------ | ------------------------ |
| `7z` | [7-Zip](http://www.7-zip.org/) | `build/download7z.js` |
| `typos` | [typos](https://github.com/crate-ci/typos) | `build/downloadTypos.js` |
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

@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.

他に使いまわせるようにするかtypos専用にするか

難しいですが、条件に寄ってはどちらもありに感じています。

他に使い回せるようにするなら、実際に使いまわしたいですね!
たぶんtyposと同様にshellcheckのダウンロードもできた方が良いので、やるならこっちもかなと。
(そして試してみたら共通化がかなり難しいことに気づくと思います)

提案としては、こうとかどうでしょう?

  1. まずtypos専用にシンプルにdownloadTyposを書いてみてマージ
  2. 続いてshellcheck用のを別でdownloadShellcheckとして作ってマージ
  3. 共通化していく
  4. (オプション)download7zも共通化する。こちらはライセンスファイルも含む必要があってちょっと複雑

あるいは逆に全部共通化するプルリクを作り、レビューを通して良くしていくのもありだと思います。
ただこっちはかなり時間がかかるので、1つ1つちょっとずつ進める前者の方法がおすすめではあります。

とはいえ何事も経験だと思うので、好きな方で大丈夫です!!
腕に自身があれば後者でも、なければ前者が安定ではあります!

Comment on lines 155 to 161
/**
* Linuxに合わせたバイナリをダウンロードするための関数
* @param {Object} params - バイナリの情報を含むオブジェクト
* @param {string} params.name - バイナリの名前
* @param {string} params.url - 各プラットフォームのダウンロードURL
*/
async function downloadBinaryForLinux({ name, url }) {
Copy link
Member

Choose a reason for hiding this comment

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

ダウンロード→解凍→ファイル権限変更→削除の流れですが、たぶんlinux/mac/winで別々にせず、
nodejs fetch→7z解凍→nodjsのfs.chmod→unlinkSyncにすればほとんど共通化できると思います!

解凍だけ引数が違うので、getBinaryURLのように解凍用関数だけは作ることになるかもですが。

Comment on lines 16 to 28
// ダウンロードしたいバイナリデータの配列オブジェクト
const WANT_TO_DOWNLOAD_BINARIES = [
{
name: "typos",
repo: "crate-ci/typos",
version: "latest",
},
// {
// name: 'anotherBinary',
// repo: 'some-other-repo/some-binary',
// version: 'v1.2.3', // 指定したバージョン
// }
];
Copy link
Member

Choose a reason for hiding this comment

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

Githubリポジトリに沿う形で書くことで、他のを追加しやすくしてみた感じですよね!
VOICEVOXで長いことメンテしてて気づいたのですが、そもそもGithubでリリースしてない人とか、Githubに置いてるけどファイル名のOS・アーキテクチャの書き方がバラバラだったりとかいろいろあるので、逆に汎用性が下がっているかもです。

個人的には、数年単位でメンテすること考えると、ダウンロードURLを直書きしちゃうのが良い塩梅に感じてます。
@sevenc-nanashi さんと同じ意見になりそう)

@gigi434
Copy link
Contributor Author

gigi434 commented Aug 22, 2024

#2239 (review)

2: ダウンロードURLをハードコードすれば、変にバージョンが上がったりしないので後々困らなくなりそう。(解決されたバージョンが固定できないなら動的なバージョン指定はやるべきではないと言う思想)

const urls = {
  windows: {
    x64: "https://...",
  },
  darwin: {
    ...
  },
  linux: {
    ...
  }
}

3: Workflow(.github/workflows下)のtyposダウンロードは無くしていいかも。

修正します。

#2239 (review)

他に使いまわせるようにするかtypos専用にするか

難しいですが、条件に寄ってはどちらもありに感じています。

他に使い回せるようにするなら、実際に使いまわしたいですね! たぶんtyposと同様にshellcheckのダウンロードもできた方が良いので、やるならこっちもかなと。 (そして試してみたら共通化がかなり難しいことに気づくと思います)

提案としては、こうとかどうでしょう?

  1. まずtypos専用にシンプルにdownloadTyposを書いてみてマージ
  2. 続いてshellcheck用のを別でdownloadShellcheckとして作ってマージ
  3. 共通化していく
  4. (オプション)download7zも共通化する。こちらはライセンスファイルも含む必要があってちょっと複雑

あるいは逆に全部共通化するプルリクを作り、レビューを通して良くしていくのもありだと思います。 ただこっちはかなり時間がかかるので、1つ1つちょっとずつ進める前者の方法がおすすめではあります。

とはいえ何事も経験だと思うので、好きな方で大丈夫です!! 腕に自身があれば後者でも、なければ前者が安定ではあります!

徐々に共通化したほうが失敗するリスクが低そうなため、前者がいいと思います。
コメントしていないものも含めて修正しますのでお待ちください。

@Hiroshiba
Copy link
Member

徐々に共通化したほうが失敗するリスクが低そうなため、前者がいいと思います。
コメントしていないものも含めて修正しますのでお待ちください。

ありがとうございます!! お待ちしております・・・!

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です!!

動作的にはほぼ問題ないと思うのですが、コーディング周りのちょっと細かいところでコメントさせていただきました!
もしご興味あれば変更いただけると・・・!

(残しといていただければ、のちほどこちらでよしなに変更してマージさせていただこうと思います!)

.github/workflows/typos.yml Outdated Show resolved Hide resolved
build/downloadTypos.js Outdated Show resolved Hide resolved
build/downloadTypos.js Outdated Show resolved Hide resolved
build/downloadTypos.js Outdated Show resolved Hide resolved
build/downloadTypos.js Outdated Show resolved Hide resolved
build/downloadTypos.js Outdated Show resolved Hide resolved
…ocディレクトリとREADME.mdを削除するスクリプトを追加した
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!!

実際にnpm iしてtyposが入ることを確認しました!
コンフリクトが発生しているのでこちらで解消し、あと細かい部分のコメントの変更をしてからマージさせていただこうと思います!

丁寧な進行ありがとうございました!!!
もしよかったら続きのプルリクエスト、あるいはissue作成をお待ちしています!!
(どういう感じの予定でしたっけ?shellcheckも実装する・・・?それともダウンロード機構の共通化・・・?)

Copy link
Member

Choose a reason for hiding this comment

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

(判断メモです!)

こちらのファイルは他のファイルに比べるとコメントが結構多めで、一部冗長な箇所もあるなと感じました!
が、問題なさそうと思いました!

ここはビルドでしか使われなく、おそらく滅多に変更されることはないと思われます。
よく変更される箇所でしたらより洗練する方がいいかもしれませんが、ここはあまり変更されない場所なので、丁寧にコメントされているのはOKだと思います!

build/downloadTypos.js Outdated Show resolved Hide resolved
build/downloadTypos.js Outdated Show resolved Hide resolved
build/downloadTypos.js Outdated Show resolved Hide resolved
build/downloadTypos.js Outdated Show resolved Hide resolved
Comment on lines +120 to +125
const fileStream = createWriteStream(compressedFilePath);
await new Promise((resolve, reject) => {
response.body.pipe(fileStream);
response.body.on("error", reject);
fileStream.on("finish", resolve);
});
Copy link
Member

Choose a reason for hiding this comment

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

(ただのコメントです)

ここ、たぶんパイプ経由で保存している感じですよね。
Node.js的にはもっとスマートの解決策があって、responseからバイナリーを得て、fs.writeFileなどで普通にファイル出力する方が一般的かもです。
もし次書く機会あればぜひ・・・!

package.json Outdated Show resolved Hide resolved
@Hiroshiba Hiroshiba merged commit a43d28a into VOICEVOX:main Sep 13, 2024
8 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.

Dockerコンテナを立ち上げる際にビルドエラーが発生する
3 participants