LINEでAutoCAD自動モデリング

 はい、LINEでも可能です。仕組みは「LINEの受信メッセージ → Webhook(自作Bot)→ MCPサーバ → AutoCAD」です。ChatGPT経由と同じ“描画ツール”を呼ぶだけなので、構成を1つ足すだけで実現できます。


# 全体構成


- **PC**:AutoCAD+あなたの**MCPサーバ**(前回の`draw_circle`等ツール)

- **中継**:LINE **Messaging API Bot**(Webhookサーバ)

- **ユーザー**:あなたのLINEアプリから「半径100で中心(100,100)の円」等と送信


> 受け取ったテキストをWebhookで受信 → パースして `{tool:"draw_circle", cx, cy, r}` を組み立て → MCPへHTTP/JSONで転送 → AutoCADで作図。


---


# 手順(最短ルート)


## 1) LINE Botの用意


1. LINE Developersで**Messaging API**チャンネル作成

2. **Channel secret / Access token** を控える

3. Webhook URLを設定(後述のFlaskサーバURL)&有効化

    - 開発中は **ngrok/Cloudflare Tunnel** で一時公開が簡単


## 2) Webhookサーバ(Python + Flask例)


- 受信した日本語コマンドを**簡易パーサ**で数値化し、**MCP HTTPプロキシ**(先の`mcp_http_proxy.py`)へPOSTします。


```python

# line_bridge.py

import os, re, requests

from flask import Flask, request, abort

from linebot import LineBotApi, WebhookHandler

from linebot.exceptions import InvalidSignatureError

from linebot.models import MessageEvent, TextMessage, TextSendMessage


# LINEの資格情報

CHANNEL_SECRET = os.getenv("LINE_CHANNEL_SECRET")

CHANNEL_TOKEN = os.getenv("LINE_CHANNEL_TOKEN")


# MCP HTTPプロキシのエンドポイント(例:ローカルAutoCADブリッジ)

MCP_ENDPOINT = "http://127.0.0.1:8888/"


app = Flask(__name__)

line_bot_api = LineBotApi(CHANNEL_TOKEN)

handler = WebhookHandler(CHANNEL_SECRET)


# --- 超簡易パーサ:円コマンドを拾う ---

CIRCLE_PAT = re.compile(

    r"(円|circle).*(半径|r)\s*(?P<r>[-+]?\d+(\.\d+)?)"

    r".*(中心|center).*\(?\s*x\s*=\s*(?P<cx>[-+]?\d+(\.\d+)?)\s*,\s*y\s*=\s*(?P<cy>[-+]?\d+(\.\d+)?)\s*\)?",

    re.I

)


@app.route("/callback", methods=['POST'])

def callback():

    sig = request.headers.get('X-Line-Signature', '')

    body = request.get_data(as_text=True)

    try:

        handler.handle(body, sig)

    except InvalidSignatureError:

        abort(400)

    return 'OK'


@handler.add(MessageEvent, message=TextMessage)

def on_message(event: MessageEvent):

    text = event.message.text.strip()


    # 1) 円コマンドを検出

    m = CIRCLE_PAT.search(text.replace(" "," "))

    if m:

        r = float(m.group("r"))

        cx = float(m.group("cx"))

        cy = float(m.group("cy"))

        # 2) MCPへ投げる

        try:

            res = requests.post(MCP_ENDPOINT, json={

                "tool":"draw_circle", "cx":cx, "cy":cy, "r":r

            }, timeout=5)

            ok = res.status_code == 200 and res.json().get("ok")

            if ok:

                msg = f"AutoCADに円を作図:中心({cx}, {cy}) 半径{r}"

            else:

                msg = f"作図エラー: {res.text[:120]}"

        except Exception as e:

            msg = f"接続エラー: {e}"

        line_bot_api.reply_message(event.reply_token, TextSendMessage(text=msg))

        return


    # 他の形状コマンドのヒント

    help_msg = ("使い方例:\n"

                "・半径100で中心(x=100,y=100)の円\n"

                "・始点(0,0) 終点(200,0)の線\n")

    line_bot_api.reply_message(event.reply_token, TextSendMessage(text=help_msg))


if __name__ == "__main__":

    # 例:python line_bridge.py(本番はgunicorn等推奨)

    app.run(host="0.0.0.0", port=8000)

```


> Webhook URL例:`https://<あなたの公開ドメイン>/callback`  

> ngrok使用例:`ngrok http 8000` → 得たURLをLINE DevelopersのWebhookに設定。


## 3) MCP側(前回の**C#アドイン+HTTP**または**Python COM直叩き**)


- すでに前回お渡ししたどちらかを起動しておきます。

- 上のFlaskは `{"tool":"draw_circle", ...}` を **`http://127.0.0.1:8888/`** へ投げます(C#アドイン例だとそのまま動きます)。


---


# すぐ試せる“日本語入力テスト”


- LINEでBot宛てに:  

    「**半径100で中心(x=100,y=100)の円を描いて**」

- 成功レス:  

    「AutoCADに円を作図:中心(100.0, 100.0) 半径100.0」

- AutoCADモデル空間に円ができていればOK。


---


# 精度アップの実践ポイント


- **正規表現の拡張**:

    - 全角/半角、順序の揺れ:「中心100,100で半径100の円」「r=100 center(100,100)」も拾う

    - 単位(mm/m/インチ)を許容し、内部は図面単位(WCS)に変換

- **コマンド辞書化**:

    - `draw_line(x1,y1,x2,y2)`, `draw_arc(...)`, `extrude(...)`, `insert_block(...)`, `set_layer(name)` などをツール化

- **エラー返し**:

    - 不正値(半径≤0)、図面ロック時、AutoCAD未起動等に対し、LINEへ具体的な原因メッセージ

- **認証**:

    - Webhook自体はLINE署名で保護、**MCPへのPOSTはローカル限定**or **トークン必須**にする

- **同時実行**:

    - キュー化 or 排他制御(特にAutoCAD COMはシングルスレッド推奨)


---


# 運用形態の選択肢


- **開発用**:`LINE → ngrok → Flask(Webhook) → MCP(ローカル) → AutoCAD`

- **本番**:`LINE → Cloud Run/Functions/ECS(HTTPS) → VPN/ゼロトラ→ 社内PCのMCP → AutoCAD`

    - 会社PCの場合はEDR/Firewallポリシーに合わせて**アウトバウンドのみ**で到達できるようトンネル方式が安全


---


# ChatGPT連携も併用するなら


- LINEメッセージをそのまま**ChatGPTに投げてコマンド抽出**→ MCPへ、という構成も可能です(自然言語の揺れに強い)。

- ただし**同期レスポンス時間**と**コスト**を考慮。定型コマンドは正規表現で直叩き、複雑な依頼のみChatGPTで**構文化(ツール呼び出し)**が実務的です。


---


必要であれば、**線/円弧/矩形/押し出し/ブロック挿入/寸法**まで含めたコマンド一式、そして**LINEのクイックリプライ(候補ボタン)**や**リッチメニュー**付きの完成版サンプル(Flask or FastAPI)をまとめてお渡しできます。

コメント

このブログの人気の投稿

ミライアイ内服薬は薬事法違反で、ほとんど効果がない詐欺ですか?

最高裁での上告理由書受理・却下の判断基準について

裁判官の忌避申立書の作成例