開発者向けSDK

自分のMac / Linuxアプリに、RoamSwitchの診断機能をそのまま

RoamSwitchKit(Mac)と roamswitch-linux-kit(Linux)は、RoamSwitch本体が計算しているセキュリティ診断結果を、Swift / Rustコードから直接参照できる無償・オープンソースのクライアントです。ARP監視やポートスキャンを自作することなく、「今のネットワークは安全か」を自分のアプリに組み込めます。

🍎 RoamSwitchKit (macOS) → 🐧 roamswitch-linux-kit (Linux) →

🔒 なぜ安全なのか

  • 読み取り専用: ロックダウン切替・ポート隔離・デバイス取り出しなどの操作系APIは一切存在しません。組み込んだアプリがユーザーの許可なくRoamSwitchの設定を変更することはできません。
  • 完全ローカル: RoamSwitch本体に同梱されたバイナリ(macOS: RoamSwitchMCPServer / Linux: roamswitch-mcp)をサブプロセスとして起動し、標準入出力のみで通信します。外部サーバーへの送信は一切ありません。
  • 無償・オープンソース: MITライセンスで公開されており、誰でも自由にソースコードを確認・組み込めます。
導入方法

パッケージマネージャーに1行追加

Package.swiftのdependenciesに追加するだけです。macOS 12+、Swift 5.9+、RoamSwitch 1.3.0以降のインストールが前提です。

dependencies: [
    .package(url: "https://github.com/lafine1211/RoamSwitchKit.git", from: "1.0.0")
]

Cargo.tomlのdependenciesに追加するだけです。安定版Rust(2021 edition、tokio非同期ランタイム)、roamswitch-mcpバイナリを含むRoamSwitch for Linuxのインストールが前提です。

[dependencies]
roamswitch-linux-kit = { git = "https://github.com/lafine1211/roamswitch-linux-kit", tag = "v0.1.0" }
使用例

メソッドで診断結果を取得

import RoamSwitchKit

let client = try RoamSwitchClient()

let report = try await client.securityReport()
print(report.score, report.grade)

let ports = try await client.exposedPorts()
for port in ports.ports where port.overallRisk == "high" {
    print(port.processName, port.port)
}

let status = try await client.guardStatus()
print(status.activeSecurityLevelLabel, status.isCurrentNetworkTrusted)

let urlReport = try await client.auditURLSafety(url: "https://apple.com.login-verify.xyz")
print(urlReport.score, urlReport.riskLevel) // e.g. 20, "dangerous"
use roamswitch_linux_kit::RoamSwitchClient;

let client = RoamSwitchClient::new(None, None)?;

let report = client.security_report().await?;
println!("{} ({})", report.score, report.grade);

let ports = client.exposed_ports(false).await?;
for port in ports.ports.iter().filter(|p| p.overall_risk.as_deref() == Some("high")) {
    println!("{} {}", port.process_name, port.port);
}

let status = client.guard_status().await?;
println!("{} {}", status.active_security_level_label, status.is_current_network_trusted);

let url_report = client.audit_url_safety("https://apple.com.login-verify.xyz").await?;
println!("{} {}", url_report.score, url_report.risk_level); // e.g. 20, "dangerous"
提供API

読み取り専用のメソッド

securityReport()

FileVault・SIP・Gatekeeper・ファイアウォール・Wi-Fi暗号強度・ARPスプーフィング・外部公開ポートなど15項目を総合診断したスコアと改善アドバイスを取得します。

exposedPorts(includeLocalOnly:)

現在リッスン中の全ポートを一覧化し、外部公開されているものは既知の危険サービス(Redis/MongoDB等やOllama/LM Studio等のローカルAI推論サーバー)判定を含む詳細な監査結果を取得します。

guardStatus()

未知ポート自動遮断・ARPスプーフィング自動対応・USBストレージガード・Bluetoothガード・Web/Mailダウンロード保護(Pickle AIモデル保護含む)・DNS脅威保護の有効状態と、現在の保護レベルを取得します。

auditURLSafety(url:)

不審なメールリンクや短縮URLを引数に取り、フィッシング詐欺・Unicodeホモグラフ偽装・有名ブランド偽装サブドメイン・高リスクTLDを完全端末内(Zero Telemetry)で高速解析・スコアリングします。

RoamSwitchKitには、さらに4つの読み取り専用メソッド(security log auditing(マスキング・異常検知対応)・実証型脆弱性診断・パッケージCVE照合など)があります。詳細はGitHubのREADMEを参照してください。

security_report()

LUKS/dm-cryptディスク暗号化・UEFI Secure Boot・AppArmor/SELinux・sudo/SSH設定・ARPスプーフィング・外部公開ポートなど24項目を総合診断したスコアと改善アドバイスを取得します。

exposed_ports(include_local_only)

現在リッスン中の全ポートを一覧化し、外部公開されているものは既知の危険サービス(Redis/MongoDB等やOllama/LM Studio等のローカルAI推論サーバー)判定を含む詳細な監査結果を取得します。

guard_status()

未知ポート自動遮断・ARPスプーフィング自動対応・USBストレージガード・Bluetoothガード・Web/Mailダウンロード保護(Pickle AIモデル保護含む)・DNS脅威保護の有効状態と、現在の保護レベルを取得します。

audit_url_safety(url)

不審なメールリンクや短縮URLを引数に取り、フィッシング詐欺・Unicodeホモグラフ偽装・有名ブランド偽装サブドメイン・高リスクTLDを完全端末内(Zero Telemetry)で高速解析・スコアリングします。

roamswitch-linux-kitには、さらに10個の読み取り専用メソッド(secret-leak scanning・security log auditing(マスキング・異常検知対応)・quarantine/canary status・実証型脆弱性診断・パッケージCVE照合・FIM改ざん検知など)があります。詳細はGitHubのREADMEを参照してください。

活用例

こんな組み込み方ができます

以下はSwift(Mac)での例です。roamswitch-linux-kit(Linux)でも同名のメソッド(snake_case)で同様に実装できます。

同期・バックアップアプリ

信頼できないネットワークに接続した際、バックグラウンド同期を一時停止する。

let status = try await client.guardStatus()
if !status.isCurrentNetworkTrusted {
    syncEngine.pauseBackgroundSync()
}

パスワードマネージャー

未信頼ネットワークでは自動ロックまでの時間を短縮するなど、保護レベルに応じて挙動を変える。

let status = try await client.guardStatus()
let lockTimeout: TimeInterval = status.isCurrentNetworkTrusted ? 300 : 30
vault.setAutoLockTimeout(lockTimeout)

開発者向けツール・自動化

開発サーバーやローカルAI推論サーバー(Ollama/LM Studio等)が0.0.0.0で待受を始めた際に警告する、Shortcuts等でネットワーク信頼度に応じたワークフローを組む。

let ports = try await client.exposedPorts(includeLocalOnly: false)
for port in ports.ports where [3000, 5173, 8000, 11434, 1234].contains(port.port) {
    print("⚠️ Dev/AI server exposed on port \(port.port)")
}

メール・チャットアプリでのリンク事前チェック

受信したメッセージ内のリンクを表示前に自動スキャンし、危険なものだけを警告表示する。

let result = try await client.auditURLSafety(url: link)
if result.riskLevel == "dangerous" || result.riskLevel == "suspicious" {
    showWarningBanner(for: link, score: result.score)
}

右クリックメニュー・Shortcutsでの安全性チェック

Finderの「サービス」メニューやmacOS Shortcutsに組み込み、コピーしたURLをワンアクションで検査する。

// macOS Shortcuts (App Intent) や Services メニューのハンドラから呼び出す
let report = try await client.auditURLSafety(url: pasteboardURL)
return "\(report.riskLevel.uppercased()) (\(report.score)/100)"

IT資産管理・MDMダッシュボード

社内の複数Macからスコアを収集し、管理者向けダッシュボードで一覧・アラート化する。

let report = try await client.securityReport()
try await mdmAPI.reportScore(deviceID: deviceID, score: report.score, grade: report.grade)
よくある質問

SDKについて

Q. 無料で使えますか?

A. はい。RoamSwitchKit(Mac)とroamswitch-linux-kit(Linux)はどちらもMITライセンスで無償公開しています。RoamSwitch本体(診断エンジン)のインストールが前提ですが、SDK自体に費用はかかりません。

Q. ユーザーの設定を変更できますか?

A. いいえ。読み取り専用で、ロックダウン切替やポート隔離などの操作系APIは一切実装されていません。組み込んだアプリがユーザーの許可なくRoamSwitchの保護設定を変更することはできません。

Q. RoamSwitchがインストールされていない場合は?

A. 対応するエラー(Mac: RoamSwitchClientError.appNotInstalled / Linux: RoamSwitchClientError::AppNotInstalled)が返されます。この場合は機能を非表示にするなど、穏やかに処理することを推奨しています。

Q. 自社製品にRoamSwitch本体を同梱・再配布したい場合は?

A. SDK連携(本ページの内容)は無償のままご自由にお使いいただけますが、RoamSwitch本体の同梱・再配布にはOEMライセンスが必要です。OEM・パートナー連携についてはこちらからご相談ください。