皆様こんにちは!
andount.comエンジニアチームです。統合工事管理システム「OpenDS」の開発途中経過をお伝えします。今回は実運用で特に要望が多かった「LINE通知の制御機能」と「AI自動単価の精度向上」を中心に、大きく2つのアップデートを実装しました。現場スタッフの使いやすさと積算の実用性を大幅に向上させる内容となっています。
📢 LINE通知 ON/OFF 機能の実装
工事現場のスタッフに対してLINE Pushで通知を送る機能は非常に便利ですが、「メンテナンス中や深夜帯には通知を止めたい」「テスト期間中に誤通知を防ぎたい」といったニーズが寄せられていました。そこで今回、管理画面から一時的に通知をON/OFFできる機能を追加しました。

🔧 バックエンドの実装内容
まず、汎用的な設定管理のためにapp_settingsテーブルを新設し、キーバリュー形式で各種設定を柔軟に管理できるようにしました。これにより将来的に別の設定項目も容易に追加できます。
// AiNotificationService.php
public function isNotificationEnabled(): bool
{
return $this->getSetting('line_notification_enabled', '1') === '1';
}
次に、API側(notification_action.php)にtoggle_settingアクションを追加しました。セキュリティ面を考慮し、変更可能なキーはホワイトリスト方式で厳密に制限しています。
$allowed = ['line_notification_enabled'];
if (!in_array($key, $allowed, true)) {
echo json_encode(['ok' => false, 'error' => 'forbidden_key']);
break;
}
さらに、日次自動通知を実行するcron処理(daily_notify.php)にも早期終了チェックを追加しました。これにより、通知がOFFの状態では無駄な処理をスキップし、ログにも明示的に記録されます。
if (!$svc->isNotificationEnabled()) {
echo "[...] LINE通知は現在OFFに設定されています。スキップ。n";
exit(0);
}
💡 フロントエンドのUI改善
管理画面には直感的に操作できるトグルスイッチを配置しました。通知がOFFの状態では、画面上部に警告バナーを表示し、送信ボタンもdisabled状態にすることで誤操作を防止しています。運用担当者が一目で状態を把握でき、安全に設定変更できる仕組みとなっています。
🤖 AI自動単価の精度改善と価格帯モーダル
OpenDSでは積算書作成時にAIが自動で単価を提案する機能を提供していますが、「実際の相場と合わない」というフィードバックを複数いただいていました。そこで今回、AIのプロンプトを大幅に改善し、さらに価格帯を選択できるモーダルUIを実装しました。


🔍 バックエンドの精度向上
estimate_action.php内のシステムプロンプトを大幅に強化しました。具体的には、以下の信頼性の高い資料を明示的に参照するよう指示を追加しています。
- 国土交通省「公共工事設計労務単価」(最新年度版)
- 経済調査会「積算資料」最新版
- 建設物価調査会「建設物価」最新版
- 電線工業会・主要メーカーの市場価格動向
- 内線規程・電気設備工事標準仕様書
また、AIのレスポンス形式を構造化JSONに変更し、単一の単価ではなく価格帯(下限・標準・上限)と根拠をセットで返すようにしました。
{
"price_low": 85000,
"price_mid": 100000,
"price_high": 125000,
"price_type": "材工単価",
"confidence": "MEDIUM",
"note": "CVケーブル相場+電工労務単価(東京)基準"
}
さらに、AIの出力トークン数を64から350に拡大することで、根拠の記述に十分な余裕を持たせ、より詳細で説得力のある情報を返せるようにしました。
🎨 フロントエンド:価格帯選択モーダル
これまでは✨ボタンをクリックすると単価が直接適用される仕様でしたが、今回のアップデートで価格帯を選択できるモーダル方式に変更しました。
async function singleAiPrice(btn) {
// ...APIリクエスト...
if (data.ok && data.price_mid) {
_aiTargetRow = row;
showAiPriceModal(data); // モーダルを開く
}
}
function applyAiPrice(level) {
const price = parseInt(document.getElementById('ai-card-' + level).dataset.price);
const priceInput = _aiTargetRow.querySelector('[name=unit_price]');
priceInput.value = price;
// ...保存処理...
}
モーダルには以下の情報が表示されます。
- 下限 / 標準★ / 上限の3択ボタン(クリックで即適用)
- 単価種別タグ(材料単価 / 施工単価 / 材工単価)
- 信頼度バッジ(HIGH=緑 / MEDIUM=黄 / LOW=赤)
- AIの推定根拠テキスト
この仕組みにより、ユーザーは案件の条件や地域性に応じて柔軟に単価を選択でき、AIの判断根拠も確認できるため、積算の透明性と信頼性が大きく向上しました。なお、✨AI一括単価ボタンは従来通りprice_midを自動適用するため、後方互換性も維持しています。
✅ まとめ
今回のアップデートでは、「LINE通知のON/OFF機能」と「AI自動単価の精度向上および価格帯選択モーダル」の2つの大きな改善を実装しました。前者は運用の柔軟性を高め、後者は積算業務の実用性と透明性を大幅に向上させる内容となっています。OpenDSは今後も現場の声を反映しながら、より使いやすく実務に即したシステムへと進化を続けてまいります。引き続きご期待ください!





