Vibe coding で SwiftUI アプリを作るのはとても楽しい

Simon Willison's Blog / 2026/3/28

💬 オピニオンSignals & Early TrendsTools & Practical Usage

要点

  • 著者は、Xcode を開かずに「vibe coding」としてローカルの SwiftUI macOS 監視ツールを作る体験を述べている。Claude Opus 4.6 と GPT-5.4 を使って、単一のテキストファイルに収まるような、十分に機能する SwiftUI コードを生成する。
  • その流れで、Bandwidther という SwiftUI アプリを構築する。これは、全体およびプロセスごとのネットワーク帯域(インターネット対 LAN)を可視化し、当初は Dropbox がどのようにデータを転送しているのか気になったことが動機だった。
  • また、GPU 活動を可視化するための companion アプリ Gpuer も作成し、両方のアプリをメニューバーのユーティリティへと磨き上げて、情報パネルを開く形にした。
  • 投稿では、生成されたアプリがモデルの提案に基づいて素早く反復できること(例:メニューバーのアイコンへの移行)を共有し、最初のバージョンを作る際に使った参照資料/トランスクリプトも含めている。
  • 全体として、モダンな LLM と SwiftUI を用いた macOS のパフォーマンス監視のための、楽しく実用的なワークフローとして位置づけられている。
Sponsored by: WorkOS — エンタープライズ顧客向けに販売する準備はできていますか?WorkOSで安全に構築し、出荷しましょう。

SwiftUIアプリのバイブコーディングはとても楽しい

2026年3月27日

新しいラップトップを買いました――128GBのM5 MacBook Proで、初期の印象としては、良いローカルLLMを動かすのに非常に有能だということです。Activity Monitorにイライラして、パフォーマンスを監視するための代替ツールをいくつかバイブコーディングすることにしました。その結果にとても満足しています。

これはバイブコーディングでmacOSアプリを作るの2回目の実験です。前回は数週間前のこのプレゼンテーションアプリでした。

Claude Opus 4.6 と GPT-5.4 の両方が SwiftUI にとても有能で、さらに完全な SwiftUI アプリが単一のテキストファイルに収まることが分かりました。つまり、Xcodeを開かずに、それらを使って何かを立ち上げられるわけです。

これまでに2つのアプリを作りました。Bandwidther は、どのアプリがネットワーク帯域を使っているかを教えてくれます。Gpuer は、GPUで何が起きているかを表示します。Claudeの提案で、これらはどちらもメニューバーのアイコンになり、情報が詰まったパネルを開くようになりました。

Bandwidther

まずこのアプリを作りました。Dropboxが何をしているのかを見たかったからです。見た目はこんな感じです:

Bandwidther macOSアプリのスクリーンショット。2列構成で、左側は全体のダウンロード/アップロード速度、直近60秒の帯域グラフ、累積合計、インターネットとLANの接続数、インターネット宛先を表示。右側はレート順に並べたプロセスごとの帯域使用量で、nsurlsessiond、apsd、rapportd、mDNSResponder、Dropboxなどのプロセスが、それぞれのダウンロード/アップロード速度と進捗バー付きで一覧表示されている。

最初のバージョンを作るのに使った完全なトランスクリプトを共有しています。私のプロンプトはかなり最小限でした:

このマシンからインターネットへ使われているネットワーク帯域と、ローカルLANへ使われている帯域がどれくらいかを教えて

(最初の疑問は、Dropboxが古いコンピュータからLAN経由でファイルを転送しているのか、それともインターネットからダウンロードしているのかを確かめたかった、というものでした。)

mkdir /tmp/bandwidther として、そこにネイティブのSwift UIアプリを書き、これらの詳細をライブに継続表示できるようにして

これで最初のバージョンができました。これが、さらに追求する価値があると確信できました。

git init をして、ここまでの分を git commit して

これから新しい機能を追加し始めるところだったので。

次に、このアプリに追加できそうな機能を提案して。目標は、異なるアプリごとの利用も含めて、ネットワーク使用に関する情報をできるだけ多く提供することだよ

Claudeに機能を提案してもらうのが良かった点は、私よりも「できること」の見通しがずっと良いことです。

いくつかバグを直すためにやり取りを少し重ね、その後、上に表示されている2列レイアウトに到達するために、さらにいくつかのプロンプトを送りました:

Per-Process Bandwidth(プロセスごとの帯域)を追加して、その作業が終わったらアプリを再起動して

逆引きDNSの機能を今度は追加して。ただし、元のIPアドレスも小さめの文字で引き続き見えるようにして

アプリを横に広いデザインにしてほしい。2列にしたい――左がプロセスごとの列、右がそれ以外の列

OK、タスクバーアイコンっぽいものにして。アイコンをクリックしたらアプリが表示されるようにして。アイコン自体は、きちんとしたミニマルな小さな見た目にして

ソースコードとビルド手順はsimonw/bandwidtherで確認できます。

Gpuer

Bandwidtherをあるセッションで作っていた間、別のセッションで、GPUが何をしているかを見るための同様のツールを作る作業も進めていました。最終的にこうなりました:

macOS上のGpuerアプリのスクリーンショット。Apple M5 Max(GPUコア40)でのメモリ使用量を表示。左パネル:大きなオレンジ色の「38 GB Available」という読み出し。128.0 GBのユニファイドメモリの使用量を示し、「圧力がかかる前にあと約18個の大きなアプリが入る」、さらに「1.5 GBがディスクに書き出しへ押し出された — 最近システムに負荷がかかっていた」という警告バナー。横方向のセグメント化された棒グラフ「Where your memory is going」で、緑・青・グレーのセグメントと凡例。GPUユニファイドメモリに関する説明注記。GPU Utilizationのセクションで0%。履歴グラフで、利用可能量とGPU Utilizationを時間経過で線グラフとして表示。右パネル:MemoryでソートされたMemory Footprintのリスト。各エントリの横にCPUパーセンテージラベルがあり、プロセス名と横方向のピンク/パープルの使用量バーを表示。Dropbox、WebKit、Virtualization、node、Claude Helper、Safari、LM Studio、WindowServer、Finderなどを含むプロセスが一覧になっている。

トランスクリプトはこちら。この件は、進行中のBandwidtherを例として使えたので、さらに少ないプロンプトで済みました:

このコンピュータがどれくらいのRAMとGPUを使っているか知りたい。難しいのは、GPUやRAM上のものはActivity Monitorに表示されないように見えるからだ

この情報はsystem_profilermemory_pressureを使って収集され、答えをくれました――もっと重要なのは、「これは可能なんだ」と分かったことなので、こう言いました:

/tmp/bandwidtherを見て、それと同様のアプリを/tmp/gpuerに作って。そこに上の情報を、継続的に表示するようにして。あるいは、もっと良くしてもいい

Bandwidtherアプリにもういくつか変更を加えた後、追いつくように指示しました:

今度は/tmp/bandwidtherで最近起きた変更を見て。そのアプリはすでにシステムトレイアイコンを使っている。あれを真似して

これは、コーディングエージェントを使うための私のお気に入りのトリックの1つであり続けています。つまり、他のプロジェクトから要素を< a href="https://simonwillison.net/guides/agentic-engineering-patterns/hoard-things-you-know-how-to-do/#recombining-things-from-your-hoard">組み合わせ直すことです。

GpuerのコードはGitHubのsimonw/gpuerで見つかります。

これらのアプリは信じすぎないで

この2つのアプリは典型的なバイブコーディングです。私はSwiftをほとんど知りませんし、彼ら(エージェント)が書いているコードをほとんど目を通していません。

しかし、さらに重要なのは、これらのツールが測定している値のようなmacOSの内部機構について、私はほとんど経験がないという点です。これらのツールが吐き出してくる数値やグラフが、信頼できるものなのか、正確なのかを評価する資格が、私はまったくありません!

そのため、両方のGitHubリポジトリに警告を追加しました。

返却形式: {"translated": "翻訳されたHTML"}

今朝、Gpuerが私にはまだメモリが5GBしか残っていないと報告しているのを見つけたのですが、それは明らかに違っていました(アクティビティモニタによると)。そこでスクリーンショットをClaude Codeに貼り付け計算を調整してもらいました。そして新しい数値は正しそうに見えますが、それでも正確に報告できているかどうかには自信がありません。

これらをGitHubで共有したのは、ClaudeがSwiftUIでどんなことをできるかという興味深い例だと思ったからです。

アプリ自体については自信がないものの、これらのプロジェクトからはいくつか有用なことを学びました:

  • SwiftUIアプリは、1つのコードファイルでかなりのことができます。GpuerApp.swift(880行)とBandwidtherApp.swift(1063行)を見てください。
  • Swiftで、さまざまなターミナルコマンドをきれいなUIにまとめることは簡単に実現できます。
  • SwiftUIアプリケーションに関して、Claudeは意外なほど良いデザインのセンスを持っています。
  • アプリをメニューバーアプリにするのも、追加で数行のコードを書くだけで済みます。
  • この種のアプリをビルドするのに、Xcodeを開く必要はありません!

この2つのアプリを作るのにかかった時間はほとんどなく、SwiftUIでmacOSアプリを作るというのは、今後のプロジェクトで検討すべき新しい能力だと私に確信を持たせてくれました。

2026年3月27日(木)20:59 投稿 · MastodonBlueskyTwitter、またはニュースレターを購読するでフォローしてください

これはSimon WillisonによるVibe coding SwiftUI apps is a lot of funで、2026年3月27日に投稿されました。

シリーズの一部私がLLMとChatGPTをどう使っているか

  1. Cooking with Claude - 2025年12月23日 午前5:01
  2. ShowboatとRodneyを紹介。エージェントが作ったものをデモできるように - 2026年2月10日 午後5:45
  3. Showboatの新しい2つのツール: Chartroom と datasette-showboat - 2026年2月17日 午前12:43
  4. Vibe coding SwiftUI apps is a lot of fun - 2026年3月27日 午後8:59
macos 106 ai 1936 generative-ai 1717 llms 1683 vibe-coding 78 coding-agents 185 swift 11 claude-code 101

前の記事: Claudeスキルを使ってStarlette 1.0を試す

月間ブリーフィング

$10/月でスポンサーになって、今月の最も重要なLLMの動向を厳選したメールダイジェストを受け取ってください。

私にお金を払って、あなたに送る量を減らしてもらいましょう!

スポンサーになって購読
広告