-
Notifications
You must be signed in to change notification settings - Fork 298
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
Dockerコンテナを立ち上げる際にビルドエラーが発生する #2206
Comments
issue作成ありがとうございます!! 実はdocker composeとdockerfileはあまりメンテされておらず、今後もdockerをサポートするかどうか検討しようと思っていたところでした。 dockerをサポートするかどうかについて皆さんから気軽に意見をいただけると嬉しいです! @gigi434 |
個人的には:
|
私はDocker関連の削除に反対です。
あと、おそらくDocker上でelectronが動作できます。Qiitaの記事ですが、下記のサンプルアプリケーションをもとにWSL2 + Dockerで試したところElectronのアプリケーションが動作しました。 ローカルとDocker両方サポートするのが難しいのは確かです。最終的な判断はお任せいたします。 |
ご意見ありがとうございます!! 確かにワンコマンドで環境が構築できるのは魅力的だと感じました! この2つの条件を満たす形として、例えばコマンド1つで色々環境が構築できるスクリプトファイルを作るのとかどうでしょう・・・? コマンド1つで開発の準備が万端になるのが嬉しい、という発想が全く思いつきませんでした。 (そういえばタイポチェックとかは自動テストがGithub上で回るので、あまりローカルでは実行していませんでした。 |
それならdevcontainerとして提供するべきな気がします(devcontainerにわかなのであまりよくわかってませんが...) |
であれば、今後の変更としては下記を行うつもりですが、私が着手してもよろしいでしょうか?
確かにまとめて提供できそうですね。ローカル一本に話がまとまったため�Docker周りのファイルは削除する予定です。 |
環境構築ができるスクリプトを用意するの、是非お願いしたいです!! ただちょっと、ものによってはメンテナンスが難しいかも感じました。 そういえば7zというツールがVOICEVOX内のコードで必要なのですが、ダウンロードスクリプトはnode.jsで書かれていて、 Line 32 in e9d15af
こんな感じでnode.js用のコードを書くと全 OS 共通にできる&メンテナンス性が高い&型の恩恵を受けられるかも・・・? ご不明な点や提案などあればぜひお気軽に何でもお聞きください!! |
ありがとうございます。シェルスクリプトで考えていました。 ./setup.ts
import { exec, execSync } from 'child_process';
import { promisify } from 'util';
import { platform } from 'os';
// OSのコマンドを非同期関数として処理させるために必要な関数
const execAsync = promisify(exec);
// コマンド実行とメッセージ出力を行うヘルパー関数
async function runCommand(command: string, description: string) {
console.log(`実行中: ${description} ...`);
try {
const { stdout, stderr } = await execAsync(command);
if (stdout) console.log(stdout);
if (stderr) console.error(stderr);
} catch (error) {
console.error(`エラーが発生しました: ${error.message}`);
throw error;
}
}
// 共通の環境セットアップを行う関数
async function setupEnvironment() {
await runCommand('curl --proto "=https" --tlsv1.2 -sSf https://sh.rustup.rs -o rustup_install.sh', 'Rustのインストールスクリプトのダウンロード');
await runCommand('chmod 755 rustup_install.sh', 'インストールスクリプトに実行権限を付与');
await runCommand('sh rustup_install.sh -y', 'Rustのインストール');
await runCommand('echo "source $HOME/.cargo/env" >> ~/.bashrc', '.cargo/envをシェルの設定ファイルに追加');
console.log('現在のシェルセッションに即座に反映中 ...');
execSync('. $HOME/.cargo/env', { shell: '/bin/bash' });
await runCommand('cargo install typos-cli', 'typos-cliのインストール');
}
// Debian系のLinuxディストリビューションに必要なパッケージをインストールする関数
async function installDebian() {
await runCommand('sudo apt-get update', 'APTパッケージリストの更新');
await runCommand('sudo apt-get install -y curl build-essential', '必要なパッケージのインストール');
await setupEnvironment();
}
// Red Hat系のLinuxディストリビューションに必要なパッケージをインストールする関数
async function installRedHat() {
await runCommand('sudo yum update -y', 'YUMパッケージリストの更新');
await runCommand('sudo yum groupinstall -y "Development Tools"', '開発ツールのグループインストール');
await runCommand('sudo yum install -y curl', '必要なパッケージのインストール');
await setupEnvironment();
}
// macOSに必要な環境をセットアップする関数
async function installMacOS() {
await setupEnvironment();
}
// Windowsに必要な環境をセットアップする関数
async function installWindows() {
await setupEnvironment();
}
// OSを確認して適切なインストール関数を呼び出す関数
async function installDependencies() {
const os = platform();
try {
switch (os) {
case 'linux':
if (await isDebian()) {
await installDebian();
} else if (await isRedHat()) {
await installRedHat();
} else {
throw new Error('サポートされていないLinuxディストリビューションです');
}
break;
case 'darwin':
await installMacOS();
break;
// Windowsであるとwin32という値が返る
case 'win32':
await installWindows();
break;
default:
throw new Error('サポートされていないOSです');
}
console.log('依存関係が正常にインストールされました。');
} catch (err) {
console.error(`エラーが発生しました: ${err.message}`);
}
}
// Debian系のLinuxディストリビューションかどうかを確認する関数
async function isDebian(): Promise<boolean> {
try {
await execAsync('cat /etc/debian_version');
return true;
} catch {
return false;
}
}
// Red Hat系のLinuxディストリビューションかどうかを確認する関数
async function isRedHat(): Promise<boolean> {
try {
await execAsync('cat /etc/redhat-release');
return true;
} catch {
return false;
}
}
// 依存関係をインストール
installDependencies(); しかし、rustup_install.shと同様にトランスパイルのファイルとしてプロジェクトルートにsetup.jsが出力されてしまいます。 |
おー!!!! 便利そうで良い感じに思いました!!! 現状でコメントできる点をコメントしてみました!
ちょっと開発環境が微妙になっちゃうかもですが、最初から 1行目に // 元がこうだとすると
// async function runCommand(command: string, description: string): Promise<void>
/**
* コマンド実行とメッセージ出力を行うヘルパー関数
* @param {string} command
* @param {string} description
* @returns {Promise<void>}
*/
async function runCommand(command, description) {
cargo経由よりも直接バイナリをダウンロードするほうがグローバルな環境に影響がなくて嬉しい方多いかも? |
個人の感想ですが、なんか大量に環境を汚しまくってるのはさすがに微妙な気がします... (個人的には明確に反対です) ちなみにですが、 |
たしかに、グローバルな環境にインストールするコードがpostinsallで実行されるのは、予想外の動きと感じる方多いかもですね。。
tsxやts-node導入するならいっそのことDeno導入もありに感じてます。 |
ここでのDenoはきついと思いますね、主にLSの設定がつらみになると思います。>Deno typosをその形でやるなら自分は大丈夫だと思います>npm run typos |
バイナリデータでの実行方法などあるのですね。ずっと管理パッケージマネージャー経由で管理していたので初めて知りました。 |
おー!!!めちゃくちゃ良いと思います!!! |
…ocディレクトリとREADME.mdを削除するスクリプトを追加した
* [add] #2206 typosのバイナリをダウンロードするスクリプトが必要なため * [fix] #2206 windowsにてTyposのバイナリデータがダウンロードと解凍・削除されない不具合を修正した * [fix] #2206 cross-envを使用しているためプラットフォームの違いを吸収するコマンドに修正した * [fix] #2206 ダウンロードしたいバイナリがすでにある時に再度ダウンロードされるのではなく、スキップされるように修正した * [fix] #2206 もしバイナリが既に存在する場合、ダウンロードをスキップするように修正した * [fix] #2206 macosのCPUアーキテクチャの違いを考慮し最適なバイナリをダウンロードするように修正した * [document] #2206 cargoを通したインストールではなくなったためそれに応じたドキュメントに修正した * [delete] #2206 Docker関連のファイルは使用しないため * [fix] #2206 バイナリをダウンロードする際に使用する渡すURLのオブジェクトを文字列にすることで無駄な処理を削減した * [fix] #2206 Github以外に公開している場合のバイナリにも対処し、かつ、ダウンロードする処理を共通化して冗長な部分を削除した * [fix] #2206 空行を入れていなかったため修正した * [delete] #2206 typosは手動で行うため削除する * [fix] #2206 linuxで.tar.gzファイルが解凍されない不具合を修正した * [fix] #2206 タイポがあったため修正した * [fix] #2206 定数であるのにコンスタントケースになっていないため修正した * [fix] #2206 条件を間違えていたため修正した * [fix] #2206 typosのCIが実行できていないため追加した * [fix] #2206 TYPOS_URLSがstringまたはobjectを返すことになるため、型ガードを追加しなければならないことを修正した * [fix] #2206 curlコマンドがない環境のためにnode-fetchを使用する方法に修正した * [fix] #2206 変数であるのに定数として定義していたため修正した * [fix] #2206 markdownlintのCIでエラーが出るため、typosのmarkdownファイルが存在するdocディレクトリとREADME.mdを削除するスクリプトを追加した * Apply suggestions from code review * Apply suggestions from code review --------- Co-authored-by: Hiroshiba <hihokaruta@gmail.com>
不具合の内容
Docker Composeコマンドを使用してDockerコンテナを作成する際にビルドエラーが発生する。
理由は、エラー文を読むと、npmとNode.jsのバージョンが必須要件に一致しないから
プロジェクトのルートに配置されている.node-versionファイルを確認すると、Node.jsのバージョンは20.12.2を必要としている
現象・ログ
エラー文
再現手順
フォークの後、下記手順で確認できる
期待動作
VOICEVOXのバージョン
この問題にはバージョンの影響なし
OSの種類/ディストリ/バージョン
Ubuntu-24.04
その他
・Dockerfileのベースイメージを18.13.0から20.12.2に変更することで正常にビルドが完了することを確認した
・OSSへの貢献は初めてです。DISTRIBUTION.mdは読みました。
関連 Issue
The text was updated successfully, but these errors were encountered: