Alti blog

(実験サイトでのブログなのでサイトが落ちてたらごめんなさい)

投稿者: 高地

  • 【勝手翻訳】Linearは私をローカルファーストのウサギの穴に導いた

    Linear sent me down a local-first rabbit hole | Bytemash の記事が興味深ったので、少しまとめました。

    動機

    Linearは信じられないほど高速なプロジェクト管理ツールで、ネットワークの遅延はどこにあるのでしょうか?競合はどのように処理されているのでしょうか?オフラインになるとどうなるのでしょうか?と疑問に感じて調べたそうです。

    ウサギの穴に落ちる

    簡単に言うと、彼らはブラウザのIndexedDBを実際のデータベースとして扱う独自の同期エンジンを構築しました。すべての変更はまずローカルで行われ、その後バックグラウンドでGraphQLによる変更とWebsocketによる同期が行われているそうです。

    データベースをクライアントに移動することで、ユーザーインタラクションパスにおけるネットワーク遅延が排除されることです。更新はローカルデータベースの読み取り/書き込みのみなので、瞬時に実行されます。

    課題:これは簡単なことではない

    Linearのアプローチを理解した後、私の最初の直感は似たようなものを作ることでした。しかし、現実が突きつけられました。彼らの同期エンジンの基本バージョンでさえ、おそらく数ヶ月のエンジニアリング作業が必要だったのです。

    複雑さの原因は次のとおりです。

    • オフライン/オンラインの移行を適切に処理する
    • 分散クライアント間の競合解決
    • 部分的な同期(データベース全体をダウンロードしたくない)
    • キャッシュされたデータ間のスキーマ移行
    • 分散システムにおけるセキュリティとアクセス制御
    • きっと誰かがすでにこの魔法を再利用できるものに組み込んでいるのでしょう…

    2025年のローカルファーストエコシステム

    幸いなことに、地域を第一に考えるコミュニティが解決策を構築してきました。現在の状況は次のとおり調査したそうです。

    生産準備完了オプション

    • Electric SQL – Postgres ベースの同期エンジン
    • PowerSync – エンタープライズ向けソリューション
    • Jazz – 私の目に留まったもの (下記参照)
    • Replicache – The OG (RIP)
    • [Zero](https://zero.rocicorp.dev/( – Replicacheチームの新しいアプローチ
    • Triplit – TripleStoreベースの同期
    • Instant – 開発者エクスペリエンスに重点を置く
    • LiveStore – 電力会社やその他のプロバイダー向けのリアクティブレイヤー

    深掘り:Jazz

    Jazz と Zod で構築されたスキーマから始めます。これらが単なる型定義ではなく、自動的に同期するライブで反応的なオブジェクトである点です。APIルートも、リクエスト/レスポンスのサイクルも、DTOもありません。ただ…魔法のように同期するオブジェクトだけ。

    ローカルファーストが意味を成すのはいつでしょうか?

    ローカル ファーストを調べ、Jazz を試した後、このパラダイムがどのような場合に適するかについて次のような印象を受けました。

    優れたフィット感:

    • クリエイティブツール(デザイン、ライティング、音楽)
    • 共同作業アプリケーションまたは大規模なアプリケーションの要素
    • オフラインサポートが必要なモバイルアプリ
    • 開発者ツール
    • 個人の生産性向上アプリ

    挑戦的なフィット感:

    • 重いサーバーサイドビジネスロジック
    • 厳格な監査要件
    • 大規模分析
    • 深く統合された既存のシステム
    • リクエストがサーバー側のロジックによって定期的に拒否されるシステム(楽観的な更新が困難になる)

    楽しみにしている

    ローカルファーストは、アプリケーション構築方法に根本的な変化をもたらします。ユーザーエクスペリエンスのメリットは紛れもなく、Linearがそれを証明しました。問題は、アーキテクチャ上のトレードオフが、あなたのユースケースにとって価値があるかどうかです。

    これらのトレードオフを実際に理解するために、Jazzを使って個人用アプリケーションを開発しています。開発体験は驚くほど新鮮ですが、抽象化が漏れている箇所を注意深く見守っています。

    エコシステムはまだ若い。ツールは成熟し、パターンが生まれ、鋭いエッジは滑らかになるだろう。しかし、データをローカルに保つことでユーザーエクスペリエンスを劇的に向上させることができるという、核となる洞察は消えることはない。

    何か新しいものを構築していて、制約内で作業できる場合は、ローカルファーストを試してみることをお勧めします。最悪のケースでは、新しいアーキテクチャパターンを習得することになります。最良のケースでは、ユーザーにとって信じられないほど高速に感じられるものを構築できるでしょう。

    応答時間が 300 ミリ秒の世界では、これは利点となります。

    まとめ

    ブラウザのIndexedDBにデータを持たせて、ユーザー体験を素早いものにしつつ、サーバ側/クラウド側に裏で同期して、整合性を持たせる。というアーキテクチャは今後増えていきそうですね。

  • 【勝手翻訳】[RooVetGit/Roo-Code] Release v3.23.14

    ソース: Release Release v3.23.14 · RooCodeInc/Roo-Code

    [3.23.14] – 2025-07-17

    • API によって開始されたタスクを tmp ディレクトリに記録する
  • 【勝手翻訳】[RooVetGit/Roo-Code] Release v3.23.13

    ソース: Release Release v3.23.13 · RooCodeInc/Roo-Code

    [3.23.13] – 2025-07-17

    • プロンプトの変更を「元に戻す」機能を追加
    • LiteLLMプロバイダのベースURLのパスコンポーネントにパスが含まれているバグを修正(@ChuKhaLiさんに感謝)
    • Claude CodeをVertex AIで使用する際に、Vertex AIモデル名のフォーマットをサポート(@janaki-sasidharさんに感謝)
    • list-filesツールには、少なくとも第1階層のディレクトリの内容が含まれている必要があります(@qdaxbさんに感謝)
    • 連続エラーとツールの繰り返しの両方を制御する設定可能な制限を追加(@MuriloFPさんに感謝)
    • チェックポイント除外パターンに.terraform/および.terragrunt-cache/ディレクトリを追加(@MuriloFPさんに感謝)
    • Ollama APIのタイムアウト値を増加(@daniel-lxsさんに感謝)
    • 設定変更がない場合でも、保存前に「変更を破棄」する必要がある問題を修正
    • DirectoryScannerのメモリリークを修正し、ファイル制限の処理を改善(@daniel-lxsさんに感謝)
    • 環境設定(@chrarnoldus さん、ありがとう)
    • 空のモード名が保存されないようにしました(@daniel-lxs さん、ありがとう)
    • 自動承認チェックボックスのUXを改善しました
    • チャットメッセージの編集/削除機能を改善しました(@liwilliam2021 さん、ありがとう)
    • GlobalSettings に commandExecutionTimeout を追加しました
  • 【勝手翻訳】[backstage/backstage] Release v1.41.0

    ソース: Release v1.41.0 · backstage/backstage

    v1.41.0

    Backstage v1.41.0 リリースのリリースノートです。

    このリリースの開発と完成に尽力いただいた、メンテナーとコントリビューターのチーム全員、そして素晴らしい Backstage コミュニティの皆様に深く感謝いたします。

    ハイライト

    速報:カタログバックエンド 3.0 – 新しいデフォルト

    カタログプラグインバックエンドのこのメジャーリリースでは、カタログの動作に影響を与えるいくつかのフラグのデフォルト値が変更されました。 #30546

    catalog.orphanStrategy がデフォルトで削除されるようになりました これにより、デフォルトの孤立戦略が、カタログ内で参照されなくなったエンティティを積極的に削除するように切り替わります。

    このフラグは、移動または削除されたエンティティをクリーンアップする方法として何度も提案されており、これをデフォルトで有効にするのが良いタイミングだと考えています。

    設定で orphanStrategy: keep を指定することで、以前の動作に戻すことができます。

    catalog.orphanProviderStrategy がデフォルトで削除されるようになりました。 これにより、デフォルトのプロバイダインストール戦略が変更され、存在しなくなったプロバイダのエンティティは保持されなくなります。

    過去にインストールしたプロバイダが、保持したいエンティティをカタログに取り込んでいた場合は、そのプロバイダをカタログに再度追加することをお勧めします。プロバイダの実行を中止したい場合は、非常に長い間隔でスケジュールを設定できます。

    catalog.disableRelationsCompatibility がデフォルトで有効化 リレーション互換性がデフォルトで無効化されました。新しい enableRelationsCompatibility フラグで再度有効化できますが、カタログ全体のパフォーマンスが大幅に低下する点にご注意ください。

    リレーション互換性により、カタログレスポンスのリレーションオブジェクト内に targetReftarget の両方が含まれるようになります。無効化されている場合は、targetRef のみが含まれます。targetRef への移行は何年も前に導入されたため、Backstage エコシステムでは長い間 target は必要ありませんでした。したがって、この変更の影響を受けるのは、カタログを利用する外部のカスタムコンシューマーのみです。

    catalog.stitchingStrategy はデフォルトで { mode: 'deferred' } になりました。 スティッチングは、エンティティをカタログに取り込む最終段階です。個々のエンティティに関連するすべての情報を収集し、エンティティの完全な出力バージョンを生成して、読み取り API を実行するテーブルに書き込みます。

    これにより、スティッチングはメインのカタログ処理ループではなく、バックグラウンドタスクで非同期的に実行されるようになります。これにより、大規模なカタログでのスティッチングのパフォーマンスが大幅に向上します。

    catalog.useUrlReadersSearch が常に有効になりました 1.36 で追加された catalog.useUrlReadersSearch フラグが削除され、常に有効になりました。つまり、カタログ内の UrlReaderProcessor は、場所を読み取る際に read メソッドではなく、常に search メソッドを使用します。これにより、個々の URL リーダーは、場所が単一のファイルを参照しているのか、それとも検索が必要なワイルドカードなのかを判断できます。

    この重大な変更は、カタログで使用するためにカスタム URL リーダーをインストールしている場合にのみ影響します。これらのリーダーが既に正確な位置から読み取れる検索メソッドを実装している場合は準備完了です。そうでない場合は、以下のように更新する必要があります。

    search(url, options) {
      if (!isWildcard(url)) {
        return this.readUrl(url, options)
      }
      // 既存の検索ロジック、またはワイルドカードがサポートされていない場合は例外をスロー
    }

    @tcardonne による #29788 への貢献

    重大な変更: Scaffolder の権限の変更

    Scaffolder のアルファ版権限ルールの一部に、重大な変更が加えられました。

    タスクの再試行には、以前は scaffolder.task.readscaffolder.task.cancel の両方が必要でしたが、現在は scaffolder.task.readscaffolder.task.create の両方の権限が必要になりました。

    scaffolder.task.readscaffolder.task.cancel に新しい scaffolder ルール isTaskOwner を追加しました。これにより、タスク作成者に基づいてタスクやタスクイベントへのアクセスを制限するなどの条件付き権限ポリシーが可能になります。

    また、 scaffolder.task.readscaffolder.task.cancel をリソース権限に変換しました。

    #29202 で @04kash が貢献しました。

    Canon から Backstage UI への名称変更

    Backstage の新しいデザインシステムである Canon の名称を Backstage UI に変更することを決定しました。この変更の詳細については、デザインシステム RFC のこちらのコメントをご覧ください。この変更の一環として、 code>@backstage/canon は code>@backstage/ui に、canon.backstage.ioui.backstage.io に変更されます。

    Backstage Yarnプラグインによる backstage:^ バージョンの自動生成

    backstage:^プロトコルを使用して、yarn が新しいBackstage依存関係をインストールできないバグを修正しました。🎉

    #30390で@eipc16が貢献しました。

    セキュリティ修正

    このリリースにはセキュリティ修正は含まれていません。

    アップグレードパス

    Backstageプロジェクトをこの最新リリースにアップデートすることをお勧めします。アップグレード方法の詳細については、Backstageを最新の状態に保つためのドキュメントをご覧ください。

    リンクと参考資料

    以下に、この新しいリリースについて学び、使い始める際に役立つリンクと参考資料のリストを示します。

    Backstage の最新情報を受け取りたい場合は、ニュースレター にご登録ください。

  • 【勝手翻訳】[RooVetGit/Roo-Code] Release v3.23.12

    ソース: Release Release v3.23.12 · RooCodeInc/Roo-Code

    [3.23.12] – 2025-07-15

    • モデルパラメータの最大トークン計算を更新して、Kimi K2 などをより適切にサポートします。
  • 【勝手翻訳】[RooVetGit/Roo-Code] Release v3.23.11

    ソース: Release Release v3.23.11 · RooCodeInc/Roo-Code

    [3.23.11] – 2025-07-14

    • GrowにKimi K2モデルを追加し、コンテキストコンデンシングの計算を修正しました。
    • 前のモードに切り替えるためのCmd+Shiftキーのキーボードショートカットを追加しました。
  • 【勝手翻訳】[RooVetGit/Roo-Code] Release v3.23.10

    ソース: Release Release v3.23.10 · RooCodeInc/Roo-Code

    [3.23.10] – 2025-07-14

    • 組み込みモデルディメンションをカスタムディメンションよりも優先します (@daniel-lxs さん、ありがとうございます!)
    • インデックスモデルオプションにパディングを追加します
  • 【勝手翻訳】[RooVetGit/Roo-Code] Release v3.23.9

    ソース: Release Release v3.23.9 · RooCodeInc/Roo-Code

    [3.23.9] – 2025-07-14

    • Claude Code プロバイダーを Windows でネイティブに実行できるようにしました (@SannidhyaSah さん、ありがとうございます!)
    • gemini-embedding-001 モデルを code-index サービスに追加しました (@daniel-lxs さん、ありがとうございます!)
    • 埋め込みモデルの切り替え時に発生するベクトル次元不一致エラーを解決しました
    • exec ツールのレスポンスで cwd を返すようにしました。これにより、後続の呼び出しでモデルが失われることはありません (@chris-garrett さん、ありがとうございます!)
    • VS Code 設定でコマンド実行のタイムアウトを設定できるようになりました
  • 【勝手翻訳】[RooVetGit/Roo-Code] Release v3.23.8

    ソース: Release Release v3.23.8 · RooCodeInc/Roo-Code

    [3.23.8] – 2025-07-13

    • コードインデックスの有効/無効切り替え機能を追加しました(@daniel-lxs さん、ありがとうございます!)
    • 自動承認設定にコマンド自動拒否リストを追加しました
    • HistoryPreview の履歴タブにナビゲーションリンクを追加しました
  • 【勝手翻訳】[RooVetGit/Roo-Code] Release v3.23.7

    ソース: Release Release v3.23.7 · RooCodeInc/Roo-Code

    [3.23.7] – 2025-07-11

    • Mermaid 構文警告を修正 (@MuriloFP さん、ありがとうございます!)
    • Vertex AI リージョン設定を拡張し、GCP Vertex AI で利用可能なすべてのリージョンを含めるようにしました (@shubhamgupta731 さん、ありがとうございます!)
    • 埋め込みモデルの切り替え時に Qdrant ベクトル次元の不一致を処理するようにしました (@daniel-lxs さん、ありがとうございます!)
    • コメントとドキュメント内のタイプミスを修正しました (@noritaka1166 さん、ありがとうございます!)
    • コードベース検索結果の表示を改善しました
    • 埋め込みエラーに対する翻訳フォールバックロジックを修正しました (@daniel-lxs さん、ありがとうございます!)
    • MCP ツールの無効化をクリーンアップしました
    • モードと MCP タブからマーケットプレイスにリンクするようにしました
    • TTS ボタンの表示を修正しました (@sensei-woo さん、ありがとうございます!)
    • Devstral Medium モデルのサポートを追加しました
    • コードインデックス サービスに包括的なエラーテレメトリを追加しました (@daniel-lxs さん、ありがとうございます!)
    • コンテキストウィンドウの計算からキャッシュトークンを除外するようにしました (@daniel-lxs さん、ありがとうございます!)
    • コンテキスト検出のためにアーキテクトモードで動的なツール選択を有効にしました
    • 設定可能な最大出力トークンを追加しましたclaude-codeの設定