Knowledge

Webコンパイル

公開日:2025/11/18
技術ノウハウ・Tips

はじめに

WEBブラウザ上でJavaのコーディング・コンパイル・動作確認までを完結できる環境を、学習管理システム(LMS)に統合する方法を検討しました。

技術的なアプローチ(試作版)

  • 基盤:Google Cloud Run                                                                              コンテナベース、GitHub Actionsと連携して自動デプロイが可能
  • API:Node.js + Express                                                                              サーバー側は Node.js + Express で実装
    コードをPOST → サーバ側でコンパイル・実行 → 結果をレスポンス
    エラー時にはコンパイルエラー内容が返る仕組み
  • フロントエンド:Vue.js                                                                              ユーザーが入力したコードをAPIに渡し、結果を画面に表示するシンプルな構成
  • 管理: Cloud Run 管理画面                                                                             リクエスト数や負荷をグラフィカルに確認可能
    割り当てメモリやCPU数、Auto Scalingの設定も可能

試作版の課題

  • 悪意のあるコードの実行リスク
  • 多数同時アクセス時の負荷

これらの課題を踏まえ、改良版では別の仕組みを用いて安全かつ安定的な環境構築を実現しました。

できたもの(改良版)

  • 基盤:Spring Boot アプリケーション + 独自コンテナ制御
    - SpringBootの採用で従来LMS機能の移植を簡易化
    - Spotify社のJava版Dockerクライアントを利用
      ユーザーごとに個別コンテナを立ち上げる方式をシンプルに実現
  • フロントエンド:Thymeleaf + javascript
    - 基本的な流れは試作版と同じ
    - サーバ側とはAjaxでシンプルに連携し、複雑さを排除
    - Ace Editor を組み込み
      複数ファイル切り替えやエラー行のハイライトなど、コーディング学習に必要な機能を実装
  • 管理:自社管理
    実装は必要になったが、要件を満たす機能を柔軟に対応可能
    - コンテナの起動状態を管理(データベース)
    - 定期監視: 放置コンテナの自動終了
    - 全体の起動コンテナ数の上限設定 (上限超過リクエストは待機)

執筆者:加藤 武宏(プロフィール)富永 みなみ(プロフィール)

あなたに最適な解決策を一緒に考えます。

Contact お問い合わせ

状況に応じた最適なご提案で、お客様の課題解決をサポートいたします