← Blog
·8 blog.minutes

ローカルファーストな開発ワークフローの構築

ほとんどの開発ツールはクラウドをデフォルトとしている。本記事では、プライバシー、速度、信頼性においてなぜローカルファーストがより良いデフォルトなのか、そしてそれをどう構築するかを解説する。

ソフトウェア業界は過去15年をかけて、すべてをクラウドに移行してきた。コードエディタはウェブアプリになり、ターミナルはブラウザに移り、開発環境はリモートワークスペースになった。多くのチームにとって、このシフトは確かに価値があった——オンボーディングを簡素化し、環境を標準化し、コラボレーションを容易にした。しかし同時に、もはや無視できない一連の問題も生み出した。

クラウド専用ツールは、ネットワークが遅いとき、サーバーがダウンしたとき、飛行機の中にいるときに機能しなくなる。コードやキーストロークを他人のインフラを通して送信する。そして、警告なしに開発環境全体をオフラインにする単一障害点を作り出す。

ローカルファーストとは、クラウドを拒否することではない。デフォルトを反転させることだ。すべてはデフォルトでローカルで動作し、クラウドはバックアップ、同期、コラボレーションのためのオプションのレイヤーとなる。本記事では、なぜそのデフォルトが重要なのか、そしてそれを中心に開発ワークフローを構築する方法を説明する。

ローカルファーストの根拠

ローカルファーストとは、あなたの主要ツール——エディタ、ターミナル、バージョン管理、AIアシスタント——がすべて自分のマシンで動作することを意味する。インターネット接続があってもなくても動作する。あなたのデータは、明示的に同期を選択しない限り、自分のディスクに留まる。これは新しいアイデアではない。クラウドの波が来る前の数十年間、開発はこのように行われてきた。しかし最近のクラウドベース開発環境への熱狂により、ローカルファーストがそもそもなぜデフォルトだったのか、そしてなぜ今でも理にかなっているのかを再検討する価値がある。

速度

ローカルファーストは、最も重要な操作において常に高速である。SSD上のファイル検索はミリ秒で完了する。クラウドIDEの仮想ファイルシステムでの検索は、すべての操作にネットワークレイテンシが加わる。ローカルで実行されるGit操作は、クラウドベースの環境が接続を確立するのと同じ時間で完了する。この違いは理論上のものではない——即座に感じられるツールと、もっさりと感じられるツールの違いである。

プライバシー

あなたのコード、プロンプト、ターミナル履歴、デバッグセッションには、扱うデータの中でも最も機微なものが含まれている。これらがクラウドサービスで処理される場合、あなたはそれらのサービスに対して、知的財産、インフラのシークレット、個人のワークフローパターンを信頼していることになる。ローカルファーストアーキテクチャは、この信頼の問題を完全に排除する。データがマシンから出なければ、漏洩するものも、召喚状で要求されるものも、うっかりモデルの学習に使われるものも存在しない。

信頼性

クラウドサービスには障害がつきものだ。あなたのローカルマシンには——少なくとも同じ意味では——障害はない。クラウドIDEがダウンすると、復旧するまで作業できない。ローカルエディタが動いているときは、どこかのサーバーの状態に関係なく動いている。信頼性の低いインターネット環境、エアギャップシステム、厳格なコンプライアンス要件の中で働く開発者にとって、ローカルファーストは好みではなく必要条件である。

ローカルファーストスタック

ローカルファーストな開発ワークフローを構築するには、ローカルファーストの原則を尊重するツールを選ぶことを意味する。各カテゴリのツールには、ローカル動作をデフォルトとし、クラウド機能をオプションとする選択肢がある。

  • エディタ: VS Code、Neovim、またはローカルで動作する任意のエディタ。設定同期などのクラウド機能はオプションのアドオン。
  • バージョン管理: Gitは本質的にローカルファーストである。リポジトリの全履歴がディスク上にある。リモートは共有のためであり、作業のためではない。
  • AIアシスタント: PromptWakeのようなローカルファーストAIツールは、プロンプト、レスポンス、差分をすべてあなたのマシン上で捕捉・処理する。明示的にクラウド同期を設定しない限り、外部サーバーにデータが送られることはない。
  • データベース: SQLiteは典型的なローカルファーストデータベースである。インプロセスで動作し、サーバーを必要とせず、バックアップや同期が可能な単一ファイルにデータを保存する。
  • ノートテイキング: Obsidian、Logseq、および同様のツールは、ノートをローカルのMarkdownファイルとして保存する。同期はオプション機能であり、必須ではない。

これらのすべてに共通するパターンは同じだ。ツールはアカウント不要で完全にオフラインで動作し、クラウド機能は付加的であって必須ではない。これは、クラウドが核でありオフラインアクセスが後付けであるSaaSモデルの逆である。

ローカルファーストなAIアシスタンス

AIアシスタントは、ローカルファーストの原則にとって特に難しい課題を提示する。大規模言語モデルをローカルで実行するには相当なハードウェアが必要であり、ほとんどの開発者は日常業務でクラウドベースのAIサービスを使用している。しかし、AIインタラクションの記録とインデックス化——つまり記憶層——は、ローカルで行うことができ、そうすべきである。

この区別は重要だ。なぜなら記憶層にこそ最も機密性の高いデータが存在するからだ。クラウドAIサービスはあなたのプロンプトを処理してレスポンスを返す。そのインタラクションは一時的であり、サービスプロバイダーはさまざまなデータ保持ポリシーを持つ。しかし、そのインタラクションのローカル記録——何を尋ねたか、AIが何を生成したか、あなたがそれをどう使ったか——は、完全にあなたのマシンに保存できる。

# ローカルファーストなAI記憶: AIがどこで動くかではなく、何が起きたかを記録する
$ promptwake start
# PromptWakeはすべてのプロンプト、レスポンス、差分をローカルに記録する
# データは同期を選択するまでマシンに留まる

# ローカルタイムラインを検索
$ promptwake search "deployment script"
# ローカルデータベースからの結果——ネットワーク不要

このアプローチは、両方の長所をもたらす。APIを通じて最も高性能なAIモデルを使用できる一方で、作業の記録は自分のコントロール下に留まる。あなたのAI記憶は、単一のプロバイダーに依存しない。なぜなら、ローカル記録はプロバイダーに依存しないからだ。

ローカルファースト環境のバックアップと同期

ローカルファーストはバックアップ不要という意味ではない。バックアップがオプションであり、自分のコントロール下にあることを意味する。最もシンプルな方法は、ローカルファーストのデータディレクトリを既存のバックアップ戦略に含めることだ。ホームディレクトリを既にバックアップしていれば、ローカルファーストのデータも既にバックアップされている。

デバイス間の同期には、Syncthingのようなツールが中央サーバーなしでピアツーピア同期を提供する。どのディレクトリをマシン間で同期するかを指定すれば、Syncthingがエンドツーエンド暗号化を使って残りを処理する。これにより、プライバシーのトレードオフなしにクラウド同期の利便性を再現できる。

一部のローカルファーストツールは、独自の同期をオプションの有料機能として提供している。これが正しいモデルだ。コア機能は無料でローカルであり、デバイス間やチーム間の同期という利便性にのみ対価を払う。PromptWakeもこのモデルに従っており、ローカル記録は無料で、クラウド同期はオプションのアップグレードである。

ローカルファーストが適さない場合

ローカルファーストが常に優れているわけではない。共有コードベースでのチームコラボレーションには、通常リモートGitホストが必要だ。本番環境へのデプロイにはサーバーが必要だ。そして一部の開発ワークフロー——特に大規模データ処理や特殊なハードウェアを伴うもの——は、クラウド環境から真に恩恵を受ける。

重要な洞察は、これらはエッジケースであってデフォルトではないということだ。個人の開発作業のデフォルトはローカルであるべきだ——エディタ、ターミナル、AI記憶、ノート。クラウドは、特定のコラボレーションやインフラのニーズのために意図的に選択するものであり、その他すべてが依存する基盤ではない。

ローカルファーストはアンチクラウドではない。それはプロチョイスだ。デフォルトはローカルであり、クラウドは必要に応じてオンにするオプションである——受け入れざるを得ない依存先ではない。

今日からローカルファーストを始める

ローカルファーストの原則を採用するために、ワークフロー全体を刷新する必要はない。1つのツールから始めよう。AI履歴の記録をPromptWakeのようなローカルファーストツールに切り替える。そのたった1つの変更で、完全にオフラインで動作し、データをデフォルトでプライベートに保つ、検索可能なAIインタラクションの記録が手に入る。

そこから、スタック内の各ツールを同じように評価する。完全にオフラインで動作するか? データは自分のマシンに保存されるか? 独立してバックアップできるか? これらの質問に合格しないツールについては、ローカルファーストの代替を探そう。数週間から数か月かけて、クラウドデフォルトで構築されたものよりも、より速く、よりプライベートで、より信頼性の高い開発環境を構築できるはずだ。