diff --git a/.gitignore b/.gitignore index ee7ad24..cb5c646 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ AGENTS.md __pycache__/ *.pyc +build/ +dist/ diff --git a/README.md b/README.md index 1a3e7ad..3955904 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,17 @@ python -m unittest discover -v 正常コード、典型的エラー、原因行と発覚行が異なるケース、コメント・文字列内の括弧、ネスト、複数候補をテストしています。 +## Windows配布版のビルド + +開発用依存パッケージをインストールし、PowerShellスクリプトを実行します。 + +```powershell +python -m pip install -r build-requirements.txt +.\build.ps1 +``` + +`dist`フォルダーにWindows向け実行ファイルを含む配布フォルダーと、BOOTHへ登録できるZIPファイルが生成されます。購入者はPythonや追加パッケージをインストールする必要がありません。 + ## 注意事項 - 原因位置と修正候補は簡易構造解析とヒューリスティックによる**推定**であり、100%正しいとは限りません。 diff --git a/build-requirements.txt b/build-requirements.txt new file mode 100644 index 0000000..9b192b0 --- /dev/null +++ b/build-requirements.txt @@ -0,0 +1,2 @@ +-r requirements.txt +pyinstaller==6.21.0 diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000..3c898e4 --- /dev/null +++ b/build.ps1 @@ -0,0 +1,60 @@ +param( + [string]$PythonExecutable = "python" +) + +$ErrorActionPreference = "Stop" + +$repositoryRoot = $PSScriptRoot +$buildRoot = Join-Path $repositoryRoot "build" +$binaryOutput = Join-Path $buildRoot "binary" +$workOutput = Join-Path $buildRoot "pyinstaller" +$distRoot = Join-Path $repositoryRoot "dist" +$productName = "構文エラー解析ツール_Windows" +$productDirectory = Join-Path $distRoot $productName +$archivePath = Join-Path $distRoot "$productName.zip" + +foreach ($target in @($buildRoot, $distRoot)) { + $resolvedParent = [System.IO.Path]::GetFullPath((Split-Path $target -Parent)) + if ($resolvedParent -ne [System.IO.Path]::GetFullPath($repositoryRoot)) { + throw "ビルド出力先がリポジトリ外です: $target" + } +} + +& $PythonExecutable -c "import tkinter; interpreter = tkinter.Tcl(); print(interpreter.eval('info library'))" +if ($LASTEXITCODE -ne 0) { + throw "Tcl/Tkを利用できるPythonが必要です。" +} + +& $PythonExecutable -m PyInstaller ` + --noconfirm ` + --clean ` + --distpath $binaryOutput ` + --workpath $workOutput ` + (Join-Path $repositoryRoot "syntax_error_helper.spec") +if ($LASTEXITCODE -ne 0) { + throw "PyInstallerの実行に失敗しました。" +} + +$executablePath = Join-Path $binaryOutput "構文エラー解析ツール.exe" +if (-not (Test-Path -LiteralPath $executablePath -PathType Leaf)) { + throw "配布用実行ファイルが生成されませんでした。" +} + +if (Test-Path -LiteralPath $productDirectory) { + Remove-Item -LiteralPath $productDirectory -Recurse -Force +} +if (Test-Path -LiteralPath $archivePath) { + Remove-Item -LiteralPath $archivePath -Force +} + +New-Item -ItemType Directory -Path $productDirectory | Out-Null +Copy-Item -LiteralPath $executablePath -Destination $productDirectory +Copy-Item -LiteralPath (Join-Path $repositoryRoot "distribution\はじめに.txt") -Destination $productDirectory +Copy-Item -LiteralPath (Join-Path $repositoryRoot "LICENSE") -Destination (Join-Path $productDirectory "LICENSE.txt") +Copy-Item -LiteralPath (Join-Path $repositoryRoot "examples") -Destination $productDirectory -Recurse + +Compress-Archive -LiteralPath $productDirectory -DestinationPath $archivePath -CompressionLevel Optimal + +Write-Host "ビルドが完了しました。" +Write-Host "配布フォルダー: $productDirectory" +Write-Host "BOOTH登録用ZIP: $archivePath" diff --git "a/distribution/\343\201\257\343\201\230\343\202\201\343\201\253.txt" "b/distribution/\343\201\257\343\201\230\343\202\201\343\201\253.txt" new file mode 100644 index 0000000..629b91c --- /dev/null +++ "b/distribution/\343\201\257\343\201\230\343\202\201\343\201\253.txt" @@ -0,0 +1,76 @@ +構文エラー解析ツール ご利用方法 + +このたびは「構文エラー解析ツール」をご利用いただき、ありがとうございます。 + + +【対応環境】 + +Windows 10/11 64bit + +本商品はWindows向け実行ファイルです。 +Pythonや追加パッケージをインストールする必要はありません。 + + +【起動方法】 + +1. ダウンロードしたZIPファイルを右クリックします。 +2. 「すべて展開」を選択し、任意の場所へ展開します。 +3. 展開したフォルダー内の「構文エラー解析ツール.exe」をダブルクリックします。 + +ZIPファイルの中から直接起動せず、必ず展開してからご利用ください。 + + +【基本的な使い方】 + +1. 画面上部からC、Java、Python、JSONのいずれかを選択します。 +2. 左側のソースコード欄へコードを入力または貼り付けます。 +3. 「解析」ボタンを押します。 +4. 左側のハイライト行と、右側に表示される原因・理由・修正候補を確認します。 + +画面右側では、解析内容を薄い赤、修正候補を薄い緑で表示します。 +左右の境界をドラッグすると、表示幅を変更できます。 + + +【ファイルを読み込む場合】 + +解析したいファイルを、エクスプローラーから左側のソースコード欄へドラッグ&ドロップします。 + +対応形式 + +C:.c、.h +Java:.java +Python:.py +JSON:.json + +UTF-8とCP932、2 MB以下のファイルに対応しています。 +複数ファイルを同時にドロップした場合は、最初の1ファイルを読み込みます。 + + +【検証用サンプル】 + +examplesフォルダーには、各言語の正常コードと、意図的に構文エラーを含めたコードがあります。 + +validを含むファイル:正常コードの確認用 +syntax_errorsを含むファイル:エラー検出の確認用 + + +【Windowsから警告が表示される場合】 + +ダウンロードした実行ファイルのため、Windowsによって確認画面が表示される場合があります。 +販売元とダウンロード元を確認したうえで操作してください。 + + +【ファイルをドロップできない場合】 + +・対応する拡張子か確認してください。 +・ファイルが2 MB以下か確認してください。 +・ツールとエクスプローラーを異なる権限で起動していないか確認してください。 + + +【注意事項】 + +・原因位置と修正候補は推定であり、100%正しいとは限りません。 +・すべての構文エラー、型エラー、論理エラー、実行時エラーを検出するものではありません。 +・入力されたコードは実行しません。 +・大切なソースコードは、修正前にバックアップしてください。 +・必要に応じて授業資料、公式ドキュメント、コンパイラのメッセージも確認してください。 diff --git a/syntax_error_helper.spec b/syntax_error_helper.spec new file mode 100644 index 0000000..a2708ea --- /dev/null +++ b/syntax_error_helper.spec @@ -0,0 +1,40 @@ +from PyInstaller.utils.hooks import collect_data_files + + +datas = collect_data_files("tkinterdnd2") + +analysis = Analysis( + ["main.py"], + pathex=[], + binaries=[], + datas=datas, + hiddenimports=[], + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +python_archive = PYZ(analysis.pure) + +executable = EXE( + python_archive, + analysis.scripts, + analysis.binaries, + analysis.datas, + [], + name="構文エラー解析ツール", + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git "a/\345\225\206\345\223\201\347\264\271\344\273\213\346\226\207.txt" "b/\345\225\206\345\223\201\347\264\271\344\273\213\346\226\207.txt" new file mode 100644 index 0000000..f2c6077 --- /dev/null +++ "b/\345\225\206\345\223\201\347\264\271\344\273\213\346\226\207.txt" @@ -0,0 +1,92 @@ +構文エラー解析ツール + +プログラミング初心者向けに、コードの構文エラーを日本語で分かりやすく説明するWindows用デスクトップツールです。 + +コンパイラやパーサーがエラーを報告した行だけでなく、「実際に間違いの原因になった可能性が高い行」を推定して表示します。 + +例えば、前の行にセミコロンがないことで次の行にエラーが表示された場合、セミコロンが不足している可能性がある行を原因候補として案内します。 + + +【Pythonのインストールは不要です】 + +本商品はWindows向け実行ファイル形式です。 +ZIPファイルを展開し、「構文エラー解析ツール.exe」をダブルクリックするだけで起動できます。 + +Pythonや追加パッケージを購入者ご自身でインストールする必要はありません。 + + +【対応環境】 + +Windows 10/11 64bit + + +【対応言語】 + +・C +・Java +・Python +・JSON + + +【主な機能】 + +・構文エラーの可能性がある行をハイライト +・原因になった可能性が高い行を推定 +・エラーの理由を初心者向けの日本語で説明 +・修正候補を表示 +・複数のエラー候補を同時に表示 +・行番号付きソースコードエディタ +・ファイルのドラッグ&ドロップ読み込み +・ファイル拡張子から言語を自動選択 +・UTF-8、CP932のファイルに対応 +・入力したコードを実行せずに解析 + + +【画面の見方】 + +画面左側にソースコード、右側に解析結果と修正候補を表示します。 + +・薄い赤色:問題の位置、原因候補、理由 +・薄い緑色:修正候補 + +左右の境界はドラッグして表示幅を調整できます。 + + +【ファイル読み込み】 + +次のファイルをエディタへドラッグ&ドロップできます。 + +・C:.c、.h +・Java:.java +・Python:.py +・JSON:.json + +読み込めるファイルサイズは2 MB以下です。 + + +【商品内容】 + +・構文エラー解析ツール.exe +・購入者向けご利用方法 +・C、Java、Python、JSONの検証用サンプル +・ライセンス文書 + + +【こんな方におすすめ】 + +・プログラミングを学び始めた方 +・エラーメッセージの意味が分からず困っている方 +・どの行を修正すればよいか見つけにくい方 +・C、Java、Python、JSONの基本構文を学習している方 +・授業や自主学習の補助ツールを探している方 + + +【ご購入前の注意事項】 + +・原因位置と修正候補は簡易解析による推定です。100%正しい結果を保証するものではありません。 +・すべての構文エラー、型エラー、論理エラー、実行時エラーを検出するものではありません。 +・CとJavaの外部コンパイラは使用しません。 +・入力されたコードは実行しません。 +・Windows以外のOSでは、本商品の実行ファイルを利用できません。 +・ダウンロードした実行ファイルのため、Windowsの確認画面が表示される場合があります。 +・ご利用前に大切なソースコードをバックアップしてください。