FastAPI と Alpine.js で EXFO テスター管理パネルを軽量構築する
この投稿では、FastAPI と Alpine.js を使用して、EXFO テスターと連携する軽量なウェブアプリを作成する方法を紹介します。ユーザー認証、テスト結果の取得、そして簡単なダッシュボードを一つの HTML ページで実装できます。
なぜ FastAPI + Alpine.js なのか?
- FastAPI は非同期に対応したモダンな Python フレームワークで、API やバックエンド構築に最適。
- Alpine.js は HTML に対して軽量にインタラクティブ性を加える JavaScript ライブラリで、React や Vue を使うほどではない用途に最適。
- この組み合わせにより、軽量かつ高速な内部ツールや管理画面を構築できます。
主な機能
- セッションベースのログイン(ユーザー名+パスワード)
- ログインユーザーのみがアクセスできる API
- ログイン後にテスト結果を取得する HTML+Alpine.js ダッシュボード
- EXFO API との統合準備済(モックデータでテスト)
技術スタック
- バックエンド:FastAPI(Python)
- フロントエンド:HTML + Tailwind CSS + Alpine.js
- 認証:Cookie によるセッション管理
- データ:モックのテスト結果データ(将来的に MongoDB などに対応可)
光ファイバー基礎用語
- OLT(Optical Line Terminal):通信事業者側の中心機器。複数の ONU にデータを送信。
- ONU/ONT(Optical Network Unit/Terminal):ユーザー側の機器。OLT からのデータを受信。
- PON(Passive Optical Network):受動分岐型光ネットワーク。中継器なしで分配。
- GPON / XGS-PON:それぞれ 2.5Gbps / 10Gbps の速度規格。
- dBm:光信号の強度を示す単位。
EXFO PON テスターの基本設定手順
1.テスターの接続
ドロップケーブルを EXFO テスターの ONT ポートに接続(PON ポートはオプションで ONU 接続用)
2.PON モードを選択
GPON、XGS-PON、または両方を選択
3.光信号の測定
下り(OLT → ONU)と上り(ONU → OLT)のパワーレベルを確認(通常 –8 dBm ~ –27 dBm が良好)
4.判定と結果確認
テスター上に Pass/Fail が表示される。必要に応じて閾値調整
5.結果の保存・出力
USB または API 経由で保存・取得可能
システム構成図(Mermaid.js)
graph TD
A["EXFO Tester"] --> B["FastAPI Server"]
B --> C["Session Auth API"]
B --> D["Test Results API"]
D --> E["MongoDB (optional)"]
B --> F["Static HTML + Alpine.js"]
F --> G["User Browser"]
G -->|ログイン| C
G -->|結果取得| D
EXFOとONUの構成フロー(Mermaid.js)
graph LR
Start["開始"] --> Splitter["ドロップファイバーをEXFOテスター(ONTポート)に接続"]
Splitter --> InlineTest["(オプション) ONUをPONポートに接続"]
InlineTest --> Mode["PONモードを選択(GPON/XGS-PON)"]
Mode --> PowerTest["光パワーテストを実行"]
PowerTest --> Result["OLT RX / ONU TXのレベル確認"]
Result --> Decision{"範囲内か?"}
Decision -- Yes --> Save["結果を保存・エクスポート"]
Decision -- No --> Adjust["再接続や再調整して再試験"]
Save --> Done["完了"]
Adjust --> PowerTest
FastAPI バックエンド(main.py)
pip install fastapi uvicorn python-multipart jinja2
from fastapi import FastAPI, Request, Form
from fastapi.responses import RedirectResponse, JSONResponse
from fastapi.templating import Jinja2Templates
from starlette.middleware.sessions import SessionMiddleware
app = FastAPI()
app.add_middleware(SessionMiddleware, secret_key="supersecret")
templates = Jinja2Templates(directory="templates")
users = {"admin": {"password": "1234"}}
fake_data = [
{"id": 1, "onu": "ONU123", "status": "PASS"},
{"id": 2, "onu": "ONU456", "status": "FAIL"},
]
def get_current_user(request: Request):
return request.session.get("user")
HTML + Alpine.js フロントエンド(index.html)
<template x-if="!loggedIn">
<form method="POST" action="/login">
<input type="text" name="username" placeholder="ユーザー名">
<input type="password" name="password" placeholder="パスワード">
<button type="submit">ログイン</button>
</form>
</template>
<template x-if="loggedIn">
<div>
<h2>ようこそ <span x-text="username"></span></h2>
<ul>
<template x-for="item in testResults">
<li>
<span x-text="item.onu"></span> - <span x-text="item.status"></span>
</li>
</template>
</ul>
</div>
</template>
実行方法
uvicorn main:app --reload
- アクセス: http://localhost:8000
- ユーザー名:
admin - パスワード:
1234
まとめ
このプロジェクトは以下の目的に最適です:
- EXFO テスターと連携した軽量な管理画面
- APIとUIを分離しやすく、柔軟な拡張が可能
- モバイルでも使いやすいインターフェース
- 追加予定: MongoDB統合、CSV/PDF出力、ロールベース制御
Get in Touch with us
Related Posts
- コンピュータビジョンのエッジ化と低リソース環境:日本企業における課題と新たな機会*
- Simplico — 企業向けAIオートメーション & カスタムソフトウェア開発(日本市場向け)
- AIによる予知保全 ― センサーから予測モデルまでの全体像
- 会計業務におけるAIアシスタント ― できること・できないこと
- なぜ中小企業はERPカスタマイズに過剰なコストを支払ってしまうのか — そしてその防ぎ方
- なぜ SimpliShop を開発したのか —— 日本の中小企業の成長を支えるための新しい EC プラットフォーム
- ファインチューニング vs プロンプトエンジニアリングを徹底解説 ― 日本企業がAIを活用するための実践ガイド ―
- 精密灌漑(Precision Irrigation)入門
- IoTセンサーよりも重要なのは「データ統合」―― スマート農業が本当に抱える課題とは
- モバイルアプリ開発提案書(React / React Native)
- AIバーティカル・インテグレーション:日本企業のDXを加速し、データ駆動型の高効率な組織へ
- 日本企業向け:AI導入を一歩ずつ進める実践ガイド 2025
- EVフリート管理は「AI最適化」が鍵
- 製造業とビジネスを変革する 7つの Machine Learning(機械学習)活用事例
- LSTMによる洪水・水位予測:日本の防災を強化するAIアプローチ
- SimpliMES Lite — 日本の中小製造業向け MES 提案書(日本語版)
- 介護ロボットとオープンソース技術 — 超高齢社会を支える未来のケアテクノロジー
- 中堅・中小製造業のためのスマートファクトリー入門
- 日本企業がAI搭載のカスタムシステムへ移行する理由
- なぜ成功しているオンラインストアは SimpliShop を選ぶのか — ビジネスを「作る・育てる・勝ち続ける」ための新しい標準













