教育目的のWebベースオートマトンエディター。グラフィカルインターフェースを通じて決定性有限オートマトン(DFA)および非決定性有限オートマトン(NFA)の作成、編集、シミュレーションが可能。NFAからDFAへの変換機能、正規表現からNFAへの変換機能、およびDFA最小化機能を実装。
- 状態とトランジションの追加・編集・削除
- 複数入力値のカンマ区切り入力
- 重複遷移の自動防止
- シミュレーション実行
- オートマトンの自動レイアウト
- JSONファイルによるインポート/エクスポート
- NFAからDFAへの変換
- 正規表現からNFAへの変換(ε遷移対応)
- DFA最小化アルゴリズムの実行と視覚化
- React (useEffect, useCallback)
- コンポーネントベースアーキテクチャ
- JSONデータ構造
このアプリケーションは Docker を使用して実行することができます。
- Docker
- Docker Compose
- リポジトリをクローン:
git clone https://github.com/yoshi-juun/AutomatonEditor.git
cd AutomatonEditor- Docker コンテナのビルドと起動:
docker-compose up --build- アプリケーションへのアクセス: ブラウザで http://localhost:5001 を開いてください。
Control+Cで終了
docker-compose upDocker Compose 実行時にポート競合 (Ports are not available エラー) が発生する場合、以下の手順で対処してください。
現在使用中のポートを確認するには、以下のコマンドを実行します:
lsof -i :<ポート番号>例: ポート5001を確認する場合
lsof -i :5001表示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ControlCe 1008 sampleUser 10u IPv4 0x... 0t0 TCP *:5001 (LISTEN)
この結果からポート5001を使用しているプロセス (例: ControlCe) を特定できます。
ポートを解放するには、対象プロセスを停止します。
kill -9 <PID>例: ControlCeのPIDが1008の場合
kill -9 1008ポート競合を防ぐために、ホスト側のポートを変更することもできます。
ports:
- "<新しいポート番号>:5000"例: ポート5001を使用する場合
ports:
- "5001:5000"変更後に以下を実行してください:
docker-compose down
docker-compose up --build変更後、ブラウザで以下のURLにアクセスします:
http://localhost:<新しいポート番号>
すべてのDockerコンテナを停止して解放するには、以下を実行します:
また、アプリケーションを使い終わり無駄に動かしておきたくない人もこちらを実行
docker stop $(docker ps -q)lsofで特定できない場合、システムの他のサービスやアプリケーションがポートを使用している可能性があります。以下を試してください:
- サービスの再起動
sudo service docker restart- システムの再起動
これでポート競合の問題を解決できます。適切にポートを変更または解放して再実行してください。