html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Rust Execute</title> <style> #editor { width: 800px; height: 300px; } #output { white-space: pre-wrap; border: 1px solid #ccc; padding: 10px; margin-top: 10px; } </style> </head> <body> <h2>Rust Editor</h2> <div id="editor"></div> <button onclick="runRust()">Run</button> <h3>Output</h3> <div id="output"></div> <script src="https://unpkg.com/monaco-editor@0.45.0/min/vs/loader.js"></script> <script> let editor; require.config({ paths: { vs: 'https://unpkg.com/monaco-editor@0.45.0/min/vs' }}); require(['vs/editor/editor.main'], function () { editor = monaco.editor.create(document.getElementById('editor'), { value: `fn main() {\n println!("Hello from Rust!");\n}`, language: 'rust', theme: 'vs-dark' }); }); async function runRust() { const code = editor.getValue(); const res = await fetch('/run-rust', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ code }) }); const result = await res.text(); document.getElementById('output').innerText = result; } </script> </body> </html>
node
const express = require('express'); const bodyParser = require('body-parser'); const fs = require('fs'); const { exec } = require('child_process'); const path = require('path'); const app = express(); app.use(bodyParser.json()); app.use(express.static(__dirname)); app.post('/run-rust', (req, res) => { const code = req.body.code; const filename = `temp_${Date.now()}.rs`; const filepath = path.join(__dirname, filename); fs.writeFileSync(filepath, code); const outputBinary = filepath.replace('.rs', ''); exec(`rustc ${filepath} -o ${outputBinary}`, (err, _, stderr) => { if (err) { fs.unlinkSync(filepath); return res.send(`コンパイルエラー:\n${stderr}`); } exec(outputBinary, (runErr, stdout, runStderr) => { fs.unlinkSync(filepath); fs.unlinkSync(outputBinary); if (runErr) { return res.send(`実行エラー:\n${runStderr}`); } res.send(stdout); }); }); }); const PORT = 3000; const HOST = '192.168.33.10'; app.listen(PORT, HOST, () => console.log(`http://192.168.33.10:${PORT} で実行中`));