自分のMac / Linuxアプリに、RoamSwitchの診断機能をそのまま
RoamSwitchKit(Mac)と roamswitch-linux-kit(Linux)は、RoamSwitch本体が計算しているセキュリティ診断結果を、Swift / Rustコードから直接参照できる無償・オープンソースのクライアントです。ARP監視やポートスキャンを自作することなく、「今のネットワークは安全か」を自分のアプリに組み込めます。
🔒 なぜ安全なのか
- 読み取り専用: ロックダウン切替・ポート隔離・デバイス取り出しなどの操作系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"
読み取り専用のメソッド
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・パートナー連携についてはこちらからご相談ください。