「Show HN:**Whosthere** ― モダンなテキストユーザーインターフェースを備えたLANディスカバリーツール(Goで実装)」

2026/01/23 20:54

「Show HN:**Whosthere** ― モダンなテキストユーザーインターフェースを備えたLANディスカバリーツール(Goで実装)」

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Whosthere は、軽量で Go ベースの LAN 検出ツールであり、モダンなターミナル UI(TUI)を提供します。mDNS、SSDP、および ARP スイープを使用して権限なしで並列スキャンを実行し、ローカルサブネット上のデバイスを検出します。検出されたデバイスは OUI ルックアップでメーカー情報を表示するように拡張されます。

主な機能:

  • 権限昇格なしで高速かつ並列スキャン
  • オプションのポートスキャナ
  • プログラム的アクセス用 HTTP API(
    /devices
    /device/{ip}
    /health
    )を公開するデーモンモード
  • config.yaml
    (デフォルト位置:
    $XDG_CONFIG_HOME/whosthere/config.yaml
    または
    ~/.config/whosthere/config.yaml
    )によるテーマと設定。主要な設定項目にはスキャン間隔、期間、スプラッシュ画面、テーマ、スキャナ有効フラグ、ポートリスト、およびネットワークインターフェースが含まれます。
  • 環境変数
    WHOSTHERE_CONFIG
    (設定ファイルへのパス)と
    WHOSTHERE_LOG
    (ログレベル)
  • ログは
    $XDG_STATE_HOME/whosthere/app.log
    または
    ~/.local/state/whosthere/app.log
    に書き込まれます。
  • Linux でのクリップボードサポートには X11 ライブラリが必要。macOS と Windows では追加依存関係はありません。

インストール方法は簡単です:Homebrew(

brew tap ramonvermeulen/whosthere && brew install whosthere
)、
go install github.com/ramonvermeulen/whosthere@latest
、または GitHub からクローンしてビルドすることで行えます。
現在のプラットフォームサポートは Linux と macOS を含み、Windows のサポートは将来リリースで予定されています。

本文

Whosthere

Goで書かれたモダンなターミナルユーザーインターフェース(TUI)を備えたLAN探索ツール。

直感的にLANを発見・探索し、理解できるよう設計されています。
Whosthere は mDNS と SSDP スキャナを使って権限不要で同時実行のスキャンを行います。
さらに TCP/UDP 接続を試みて ARP 反応を誘導し、その結果得られた ARP キャッシュからローカルネットワーク上のデバイスを検出します。この手法は特権ユーザでなくても ARP キャッシュを満たせます。
発見されたすべてのデバイスに対して OUI(組織識別子)検索を行い、メーカー情報が入手可能なら表示します。

Whosthere は「ネットワーク上に誰がいるか?」という質問への親しみやすく直感的な答え方を提供します。


主な機能

  • モダン TUI – 発見したデバイスを直感的に閲覧・探索できます。
  • 高速&同時実行 – 複数の発見手段を同時に活用。
  • 特権不要 – ユーザースペースで完全に動作。
  • デバイス情報拡張 – OUI ルックアップでメーカー名を表示。
  • 統合ポートスキャナ – 見つかったホストのサービス探索(許可されたデバイスのみ)。
  • デーモンモード + HTTP API – バックグラウンドで動作し、他ツールと連携可能。
  • テーマ & 設定 – YAML で見た目や挙動をカスタマイズ。

インストール

brew tap ramonvermeulen/whosthere
brew install whosthere

または Go を使う場合:

go install github.com/ramonvermeulen/whosthere@latest

ソースからビルドするには:

git clone https://github.com/ramonvermeulen/whosthere.git
cd whosthere
make build

使い方

インタラクティブに探索したい場合は TUI を起動します。

whosthere

デーモンとして HTTP API と共に実行するには:

whosthere daemon --port 8080

その他のコマンドラインオプションは以下で確認できます。

whosthere --help

対応プラットフォーム

Whosthere は以下の OS をサポートしています。

  • Linux
  • macOS
  • Windows(将来的に追加予定、協力歓迎!)

キーバインディング (TUI)

キー動作
/
正規表現検索を開始
k
上へ移動
j
下へ移動
g
一番上にジャンプ
G
一番下にジャンプ
y
選択したデバイスの IP をコピー
Enter
デバイス詳細を表示
Ctrl+t
テーマセレクタを切り替え
Ctrl+c
アプリケーション終了
Esc
検索クリア / 戻る
p
(詳細ビュー)
デバイスでポートスキャン開始
Tab
(モーダルビュー)
ボタン選択を切り替え

環境変数

変数説明
WHOSTHERE_CONFIG
設定ファイルのパス(デフォルト位置を上書き)
WHOSTHERE_LOG
ログレベル設定(例: debug, info, warn, error)。既定は info

設定

Whosthere は YAML ファイルで設定可能です。
デフォルトでは次の順序でファイルを検索します。

  1. WHOSTHERE_CONFIG
    で指定されたパス(セットされている場合)
  2. $XDG_CONFIG_HOME/whosthere/config.yaml
    (
    XDG_CONFIG_HOME
    が設定されている場合)
  3. ~/.config/whosthere/config.yaml
    (それ以外の場合)

TUI モード以外で実行すると、ログはコンソールにも出力されます。

デフォルト設定例

# 発見スキャンの頻度
scan_interval: 20s

# 各スキャンの最大時間
# この値を低くしすぎると一部スキャナやスイーパーが完了できない場合があります
scan_duration: 10s

# スプラッシュスクリーン設定
splash:
  enabled: true
  delay: 1s

# テーマ設定
theme:
  # TUI に使用するテーマを指定。利用可能なテーマ一覧は以下から確認できます。
  # https://github.com/ramonvermeulen/whosthere/tree/main/internal/ui/theme/theme.go
  name: default
  # カスタムテーマカラー(name を custom に設定してコメントアウト解除)
  # primitive_background_color: "#000a1a"
  # contrast_background_color: "#001a33"
  # more_contrast_background_color: "#003366"
  # border_color: "#0088ff"
  # title_color: "#00ffff"
  # graphics_color: "#00ffaa"
  # primary_text_color: "#cceeff"
  # secondary_text_color: "#6699ff"
  # tertiary_text_color: "#ffaa00"
  # inverse_text_color: "#000a1a"
  # contrast_secondary_text_color: "#88ddff"

# スキャナ設定
scanners:
  mdns:
    enabled: true
  ssdp:
    enabled: true
  arp:
    enabled: true

# ポートスキャナ設定
port_scanner:
  timeout: 5s
  tcp: [21, 22, 23, 25, 80, 110, 135, 139, 143, 389,
        443, 445, 993, 995, 1433, 1521, 3306, 3389,
        5432, 5900, 8080, 8443, 9000, 9090, 9200,
        9300, 10000, 27017]

# 特定のネットワークインターフェースを設定したい場合は以下を有効化
# network_interface: lo0

デーモンモード HTTP API

Whosthere をデーモンとして起動すると、非常にシンプルな HTTP API が利用可能です。

メソッドエンドポイント説明
GET
/devices
発見済み全デバイスのリストを取得
GET
/device/{ip}
指定 IP のデバイス詳細を取得
GET
/health
ヘルスチェック

テーマ

テーマは設定ファイルか、実行時に

Ctrl+t
キーで切り替えられます。
利用可能なテーマの完全リストはここにあります。ご自身のテーマを追加したい場合は PR を歓迎します。

名前を

custom
にすると、上記カラーオプションで独自テーマを作成できます。


ログ

ログはアプリケーションのステートディレクトリへ書き込まれます。

  • $XDG_STATE_HOME/whosthere/app.log
    (
    XDG_STATE_HOME
    が設定されている場合)
  • ~/.local/state/whosthere/app.log
    (それ以外の場合)

TUI モード以外で実行すると、ログはコンソールにも出力されます。


よくある問題

クリップボード機能

プラットフォーム必要条件
Linux (X11)X11 クライアントライブラリ(例: Ubuntu の
libx11-6
、Fedora/Arch の
libX11
)がインストールされていること。
Linux (Wayland)ネイティブには非対応。XWayland が必要になる場合があります。
macOS / Windows依存なし。

ソースからビルドする際の要件

プラットフォーム要件
LinuxX11 開発パッケージ(
libx11-dev
libX11-devel
、または
libx11

免責事項

Whosthere は、自分のネットワーク(例: 自宅ネットワーク)で使用することを想定しています。
無許可でのスキャンは違法・非倫理的となる可能性があります。ツールを利用する前に必ず適切な権限を取得してください。


コントリビューション

機能追加、バグ報告、改善提案などは大歓迎です!
GitHub リポジトリで issue を開くか PR を送信してください。
主要変更を実装する前に GitHub の issue で議論していただけると助かります。

同じ日のほかのニュース

一覧に戻る →

2026/01/24 10:00

**27ブランドから325車種へ対応したオープンソース自動運転**

## Japanese Translation: 提供された要約は正確で網羅的かつ明瞭であるため、変更の必要はありません。 --- **元の要約:** Comma Four は、オープンパイロットプラットフォームを利用した高度なドライバーアシスタンス機能を車両に提供する AI 主導型アップグレードです。トヨタ・ヒュンダイ・フォードなど 27 社の 325 台以上の車に追加でき、広範なモデルでテストされ、人間の入力を最小限に抑えて数時間動作可能であることが示されています。オープンパイロットの実証済み自律走行機能を基盤とし、Comma Four は自動運転技術の業界全体への普及へ向けた一歩を表します。同社はユーザーにコミュニティ参加と将来の自律システム形成への貢献を呼びかけつつ、プロダクト開発・自律工学・運用部門での採用も積極的に行っています。広く展開されれば、このアップグレードは多ブランドのドライバーアシスト機能の導入を加速し、自動車技術分野で新たなキャリアパスを創出する可能性があります。

2026/01/19 17:03

**現代のプログラミングで実践しているC++習慣** 1. **説明的な変数名を使う** - 単一文字の識別子は避け、意図が伝わる名前を選ぶ。 2. **不変データには `const` と `static const` を優先する** - 変更されないことを保証し、コンパイラ最適化を促進する。 3. **RAII(Resource Acquisition Is Initialization)パターンを採用する** - リソースの取得と解放をオブジェクトに閉じ込めることでリークを防止。 4. **必要に応じてヘッダーオンリ―ライブラリを利用する** - コンパイル依存性が減り、ビルド時間が短縮される。 5. **型推論には `auto` を使う** - 複雑なイテレータ型を簡潔にしつつ可読性を保つ。 6. **モダンなコンテナ初期化子を活用する** - `std::vector<int> v{1, 2, 3};` は手動の `push_back` よりも明確で簡潔。 7. **Catch2 や Google Test のようなフレームワークで単体テストを書く** - コードの正しさを保証し、リファクタリングを容易にする。 8. **関数は短く、目的を絞る** - 単一責任原則を目指すことで保守性が向上する。 9. **Doxygen コメントでドキュメント化する** - クリーンで検索可能な API ドキュメントを自動生成できる。 10. **最適化はプロファイル後に行う** - ホットスポットを測定し、実際のパフォーマンスボトルネックに対処する。

## Japanese Translation: 作者は主にC#とPythonで作業していますが、バインディングやニッチなタスクのために依然としてC(またはC++)を使用します。これは細粒度の制御を提供するからです。Cには公式のスタイルガイドラインがないため、ブログ、Rust、および完璧主義的マインドセットから引き出した個人的な習慣を構築しています。 新しいプロジェクトでは、GCC/Clang/MSVCサポート付き**C23**を好み、`#if CHAR_BIT != 8 #error` を強制して8ビットの `char` を保証します。彼らは簡潔な typedef のセット(`u8`, `i8`, `i16`, `u16`, `i32`, `u32`, `u64`, `f32`, `f64`, `uptr`, `isize`, `usize`)を採用し、<stdbool.h> からの C23 の `bool` をブール値に使用します。 ヌル終端文字列を避けるために、彼らは **長さ+データ構造**(`String` に `u8 *data; isize len`)を使用します。「parse, don’t validate」に触発されてオープックタイプと信頼できるコンストラクタ(Lelenthran のブログ参照)を作成しています。C23 のタグ互換性により、マクロ (`Tuple2(T1,T2)`) を使って単純なタプルを定義できますが、名前付き構造体は必要です。 エラーハンドリングは **sum types** でモデル化されています:列挙型とそれに伴う構造体(`ErrorCode`, `SafeBuffer`, `MaybeBuffer`)が戻り値に成功または失敗を符号化します。作者は純粋な C では動的メモリ割り当てを意図的に避け、ヒープ重視のコードには Rust または C# を好みます;アレーナアロケータも言及されますが使用されません。 標準ライブラリの使用は最小限です。文字列関数はほとんど使わず、代わりに生の `mem*` 呼び出しを優先します。また、OS API はエルゴノミクスが悪いため再実装されることがよくあります。作者は外部関数のドキュメントを注意深く読むことを強調し、将来的により安全なメモリ取り扱いのために **「slice」タイプ** を追加することを検討しています。 全体として、この記事は読者が自分自身の C スタイルガイドラインを作成するよう奨励しつつ、言語の強みと挫折の両方を認めています。

2026/01/20 0:06

**Go言語が1万5000行を削減** --- ### 概要 Goプログラミング言語は、最近の更新で約 **150万行(LOC)** のコードを削除し、コードベースの大幅な縮小を実現しました。これはコミュニティが言語をシンプルに保ち、保守性を向上させるために継続的に取り組んでいる結果です。 ### 主なポイント - **削減規模** - コアパッケージとツール全体で約1,500,000行が削除されました。 - **動機** - 現在の使用状況に合わなくなった重複コードやレガシーコードを排除する。 - 保守性を簡素化し、コンパイル時間を短縮し、可読性を向上させる。 - **開発者への影響** - 廃止予定の機能に対してわずかなAPI変更が加えられました。 - よりシンプルになったコードベースを反映したドキュメントが更新されました。 - **今後の展望** - ミニマリズムとパフォーマンスへの継続的な注力。 - 言語をさらに洗練させるため、コミュニティからの貢献を奨励しています。 ### 結論 Goプロジェクトが半百万行に及ぶ削減を意図的に実施したことは、世界中の開発者に対して明瞭性・効率性・長期的持続可能性へのコミットメントを示すものです。

## Japanese Translation: ``` ## Summary 著者はQuaminaにUnicode文字プロパティ正規表現の堅牢なサポートを構築し、`[~p{L}~p{Zs}~p{Nd}]`という構文を使用しました。 Goの標準ライブラリが最新のUnicodeバージョン(15.0対17.0)に追いついていないため、Quaminaは独自のデータを維持する必要がありました。著者は `UnicodeData.txt` を取得し、フィールド1と3を解析してすべての37カテゴリとそれらの補集合の範囲をリスト化したコードを生成しました—結果として従来の775K行アプローチに比べ5,122行のGoコードのみで済みました。 初期は、すべてのオートマタを事前計算しコードへ直列化すると約12Mのデータが生成され、起動時に長時間停止したりIDEがクラッシュする問題が発生しました。実行時キャッシュ戦略に切り替えることで、Quaminaは初回使用時にUnicodeプロパティオートマタを計算し保持できるようになりました。この変更で追加速度が135/秒から4,330/秒へ(30倍)向上しました。マッチング性能も高いままであり、UTF‑8の短さと浅いオートマタのおかげで数十万〜百万メッセージ/秒を処理できます。 著者は日常的な作業にGenAIツールを使用することを検討しましたが、ツール不足・時間制約・そのようなサービスのビジネス実現性への懐疑心から控えています。次の主要機能は数値量指定子サポート(例:`a{2-5}`)であり、これによりQuaminaの正規表現機能が完結します。この成功を受けてQuamina 2.0の安定リリースが計画されています。生活上の誘惑が勢いを鈍らせましたが、不確実性があるものの今後の開発は奨励されます。 ```