見出し画像

【OrbStack】まだDocker Desktop を使っている人は2倍仕事が遅い?

OrbStackの革新的ファイルシステム:macOSコンテナ開発の新時代

はじめに

最近X上でOrbStackとういものを目にしました!
アメリカの学生はみんな使っているらしい!ということで検証して実際に導入してみました!

macOSでのコンテナ開発は長年、開発者たちを悩ませてきました。遅いインストール、アプリケーションの起動の遅さ、そして全体的なパフォーマンスの問題が常に付きまとっていました。これらの問題を解決しようとする試みは数多くありましたが、その成功度は様々でした。しかし、OrbStackが新たに導入したファイルシステムは、この状況を劇的に変える可能性を秘めています。

https://orbstack.dev/

本記事では、OrbStackの新しいファイルシステムがどのようにmacOSでのコンテナ開発を革新し、従来の2〜10倍の速度を実現したのかを詳しく解説します。さらに、この技術革新がどのように開発者の日々の作業を改善し、生産性を向上させるかについても探っていきます。

macOSにおけるコンテナファイルシステムの課題

仮想マシンの壁

macOSでコンテナを実行する際、実際にはLinux仮想マシン内で動作しています。これは単にLinux固有の機能(ネームスペースなど)を利用するためだけでなく、「一度ビルドしたらどこでも実行できる」というコンテナの基本概念を実現するために必要不可欠なアプローチです。

しかし、この方法には大きな課題があります。仮想マシンはCPU処理に関しては一般的に高速ですが、I/O操作で仮想マシンの境界を越える際のコストが非常に高くなります。この結果、Linux側のネイティブファイルシステム(Dockerの名前付きボリュームなど)は高速に動作しますが、macOS側に存在するバインドマウントは遅くなってしまいます。

従来の解決策とその限界

これまでにも、この問題を解決するためのいくつかのアプローチが試みられてきました:

  1. ネットワークファイルシステム
    NFS(Network File System)やSFTP(SSH File Transfer Protocol、sshfsを介して)などが一時期人気を集めました。これらのプロトコル自体は比較的遅いのですが、ネットワーク越しの使用を想定して設計されているため、積極的なキャッシングによってパフォーマンスの問題を一部隠蔽することができました。ただし、このアプローチはいくつかのユースケースで問題を引き起こす可能性がありました。

  2. VirtioFS
    FUSEプロトコルを使用し、共有メモリを通じてリクエストを転送し、macOS側で処理を行います。現時点で最も優れたオプションの1つですが、それでもネイティブのパフォーマンスには遠く及びません。

  3. 同期
    このアプローチは高速ですが、ファイルを使用しない場合でもすべてのファイルをコピーするのを待つ必要があります。同期の遅延と一貫性の問題により、すべてのバインドマウントに適用することは難しく、いつ適用するかを慎重に考える必要があります。また、すべてのファイルを複製するのに十分なディスク容量が必要となるため、大規模なプロジェクトやリポジトリには問題があります。さらに、初期同期や再スキャンにも時間がかかります。

OrbStackの新しいファイルシステム:ブレークスルーの詳細

OrbStackチームは、同期ベースのアプローチに内在する根本的な問題を克服することが困難であると判断し、共有ファイルシステムそのものを可能な限り高速化することに注力しました。その結果、1回の呼び出しあたりのオーバーヘッドを最大10倍削減することに成功し、実際の使用シーンで2〜5倍の高速化を実現しました。多くの場合、ネイティブのmacOSパフォーマンスの75-95%に達しています。

パフォーマンスの飛躍的向上

OrbStackの新しいファイルシステムがもたらした具体的な改善を、いくつかのベンチマークで見てみましょう:

  1. pnpmインストール

    • ネイティブパフォーマンスの88%(12.2秒 vs 10.9秒)

  2. yarnインストール

    • ネイティブパフォーマンスの77%(9.8秒 vs 7.9秒)

  3. node_modulesの削除(rm -rf)

    • ネイティブパフォーマンスの87%(4.0秒 vs 3.6秒)

  4. Postgres pgbench

    • ネイティブパフォーマンスの76%(8998 TPS vs 11785 TPS)

https://orbstack.dev/blog/fast-filesystem

これらのベンチマークは、1614パッケージ(インストール後の総サイズ807 MiB)を含むnode_modulesで実施されました。Postgresに関しては、90%以上のネイティブ速度を達成できる可能性がありますが、OrbStackはデータの整合性を優先し、ハードシャットダウン時の破損を防ぐためにデータがSSDに送信されるのを待つ設計になっています。一方、macOS上のPostgresはデータを完全にディスクにフラッシュしないため、若干のパフォーマンス差が生じています。

実際のユーザー体験

OrbStackの新しいファイルシステムは、ベンチマークだけでなく実際のユーザーからも高い評価を得ています。大規模なアプリケーションを使用しているユーザーからは、以下のような報告がありました:

  • データベースタスクが5倍高速化(テスターの報告によると、Docker Desktopと比較して36倍)

  • Railsのテストスイートが16%高速化

これらの結果は、OrbStackの新しいファイルシステムが実際の開発環境で大きな影響を与えていることを示しています。

技術的な特徴と利点

OrbStackの新しいファイルシステムには、以下のような特徴と利点があります:

  1. 思考の必要性の低減
    名前付きボリューム、同期マウント、監視など、どのアプローチを使うべきか悩む必要がありません。バインドマウントが常に合理的な選択肢となります。

  2. 利便性の向上
    ファイルはmacOSから簡単にアクセスできます。開発者は普段使い慣れたツールやエディタを使って、コンテナ内のファイルを直接編集できます。

  3. 追加のディスク容量不要
    ファイルの複製が不要なため、追加のディスク容量を消費しません。これは特に大規模なプロジェクトや、ディスク容量が限られている開発環境で重要です。

  4. 一貫性の維持
    ファイルの同期や複製を行わないため、macOSとコンテナ間でファイルの一貫性が自動的に維持されます。これにより、同期の遅延や不整合による問題が解消されます。

  5. 広範なワークロードのサポート
    ほとんどのワークロードで、ネイティブに近いパフォーマンスを実現しています。一部の要求の厳しいワークロードでは完全なネイティブパフォーマンスには達していませんが、それでも大幅な改善が見られます。


導入手順

方法1: 直接ダウンロード

  1. OrbStackの公式サイトからアプリをダウンロードします。

  2. ダウンロードしたファイルを開くだけで使用可能です。別途インストール作業は不要です。

方法2: Homebrewを使用

Homebrewを使用してインストールすることも可能です。ターミナルで以下のコマンドを実行してください:

bash

Copy

brew install orbstack

基本的な使い方

Dockerコンテナの実行

OrbStackはインストール後すぐに使用できます。以下のコマンドで簡単なDockerコンテナを実行できます:

bash

Copy

docker run -p 80:80 docker/getting-started

このコマンドの解説:

  • docker run: Dockerコンテナを実行するコマンド

  • -p 80:80: ホストのポート80をコンテナのポート80にマッピング

  • docker/getting-started: 使用するDockerイメージ名

Linuxマシンの使用

完全なLinuxマシンを使用するには:

  1. OrbStackアプリを開きます。

  2. お好みのLinuxディストリビューションを選択して新しいマシンを作成します。

  3. 作成したマシンをダブルクリックして起動するか、orbコマンドを使用します。

便利なTips

Dockerの使用

  • Composeなどのツールが既に含まれています。

  • 機能はそのまま動作します。特別な設定は不要です。

  • 最適なファイルシステムパフォーマンスを得るには、~/OrbStack/dockerにボリュームを配置してください。

リソース管理

  • CPU使用率を最小限に抑えるには:使用していないコンテナは停止しておきましょう。

  • メモリ使用量を減らすには:設定画面でメモリ制限を下げることができます。

ネットワーク

ホストネットワーキング、VPN、DNS、IPv6、ping、tracerouteなどの機能がそのまま使用できます。

Linuxマシンの活用

  1. CLIとGUI:

    • コマンドラインインターフェースにはorbコマンドを使用します。

    • GUIにはネイティブのSwiftアプリを使用します。

  2. ファイル共有:

    • Linux側からmacOSのファイルにアクセス:同じパスか/mnt/macプレフィックスを使用

    • macOS側からLinuxのファイルにアクセス:~/OrbStackかアプリ内から

  3. SSH接続:

    • ssh orbコマンドでLinuxマシンにSSH接続できます。

    • Visual Studio Codeを使用する場合は、"Remote - SSH"拡張機能をインストールしてください。

  4. 統合機能:

    • macコマンドを使用して、Linux側からmacOSコマンドを実行したり通知を送信したりできます。

    • mac linkでコマンドをリンクできます。

    • SSHエージェントは自動的に転送されます。


さらなる最適化:仮想化スタックの再構築

OrbStackチームは、ファイルシステムの改善だけでなく、仮想化スタック全体の再構築にも取り組みました。Virtualization.frameworkは、macOSにおける以前の仮想化ソリューションよりも優れていますが、それでも改善の余地が多く残されていました。

OrbStack 1.6では、パフォーマンス、安定性、効率性を向上させるために仮想化スタックを完全に書き直しています。この取り組みにより、以下の各要素を個別に最適化する無限の可能性が開かれました:

  • CPU

  • メモリ

  • ファイルシステム

  • ディスク

  • ネットワーク

  • 信頼性

これらの改善により、全体的なパフォーマンスが向上しただけでなく、以前のOrbStackバージョンで発生していた多くのクラッシュやフリーズの問題も解決されました。

開発者への影響:生産性と効率性の向上

OrbStackの新しいファイルシステムと仮想化スタックの改善は、開発者の日々の作業に大きな影響を与えます:

  1. 開発サイクルの短縮
    ファイルシステムの高速化により、依存関係のインストール、ビルド、テストの実行など、日常的なタスクが大幅に高速化されます。これにより、開発者はより短い時間で多くのイテレーションを行うことができます。

  2. ストレスの軽減
    遅いファイルシステムやI/O操作による待ち時間は、開発者にとって大きなストレス要因でした。OrbStackの改善により、このストレスが大幅に軽減されます。

  3. リソース使用の最適化
    効率的なファイルシステムと仮想化スタックにより、マシンのリソース(CPU、メモリ、バッテリー)の使用が最適化されます。これは特にノートPCを使用する開発者にとって重要です。

  4. 大規模プロジェクトの扱いやすさ向上
    大規模なプロジェクトや多数の依存関係を持つプロジェクトでも、スムーズに作業を進めることができます。これまで避けていたような大規模な改修や依存関係の更新も、より気軽に行えるようになります。

  5. クロスプラットフォーム開発の促進
    macOSでのLinuxコンテナの実行がより効率的になることで、クロスプラットフォーム開発がさらに促進されます。開発者はmacOS上で快適に作業しながら、本番環境に近い Linux 環境でテストを行うことができます。

今後の展望:さらなる最適化の可能性

OrbStackチームは、現在の成果に満足することなく、さらなる最適化の可能性を探っています。今後の改善の方向性としては以下が考えられます:

  1. 特定のワークロードに対する最適化
    現在、一部の要求の厳しいワークロードではまだネイティブパフォーマンスに達していない部分があります。これらのワークロードに特化した最適化を行うことで、さらなるパフォーマンス向上が期待できます。

  2. macOSファイルシステムスタックの最適化
    macOSのファイルシステムスタックは、Linuxほど最適化されていません。OrbStackチームは、Apple社とも協力しながら、macOS側のファイルシステムスタックの最適化に取り組む可能性があります。

  3. 新しい仮想化技術の採用
    仮想化技術は日々進化しています。OrbStackは常に最新の技術動向を追い、より効率的な仮想化手法が登場した際には迅速に採用することが予想されます。

  4. コンテナ技術との統合強化
    DockerやKubernetesなど、コンテナ関連技術との統合をさらに強化することで、より
    シームレスな開発体験を提供できる可能性があります。

  5. AIによる最適化
    機械学習や人工知能を活用して、ユーザーの使用パターンを学習し、自動的にパフォーマンスを最適化する機能の導入も考えられます。

結論:macOSコンテナ開発の新時代(続き)

特に注目すべき点は、この改善がベンチマークだけでなく、実際のユーザーからも高い評価を得ていることです。大規模なアプリケーション開発やデータベース操作など、実際の開発シーンでの劇的なパフォーマンス向上は、OrbStackが単なる理論上の改善ではなく、実用的な価値を提供していることを証明しています。

開発者コミュニティへの影響

OrbStackの革新は、個々の開発者の生産性向上だけでなく、開発者コミュニティ全体にも波及効果をもたらす可能性があります:

  1. macOS開発環境の再評価
    これまでパフォーマンス上の理由からmacOSでのコンテナ開発を避けていた開発者や組織が、その方針を見直す契機となるかもしれません。macOSの優れたユーザーエクスペリエンスとLinuxコンテナの柔軟性を両立できることで、新たな開発者層の獲得につながる可能性があります。

  2. クロスプラットフォーム開発の促進
    macOSとLinuxの垣根が低くなることで、よりシームレスなクロスプラットフォーム開発が可能になります。これは、異なるOS間での開発上の摩擦を減少させ、多様な環境での開発とテストを容易にします。

  3. オープンソースプロジェクトへの貢献
    高速なファイルシステムにより、大規模なオープンソースプロジェクトへの貢献がより容易になります。特に、ビルドや
    テストに時間がかかるプロジェクトでの作業効率が大幅に向上することが期待されます。

  4. 新しい開発パラダイムの可能性
    高速なコンテナ環境は、これまで考えられなかった新しい開発手法やツールの登場を促す可能性があります。例えば、リアルタイムでのクロスプラットフォーム開発やテストなど、革新的なアプローチが生まれるかもしれません。

OrbStackの今後の展望

OrbStackチームは、現在の成果に満足することなく、さらなる革新を目指しています。今後の展開として以下のような方向性が考えられます:

  1. エコシステムの拡大
    OrbStackを中心とした開発ツールやプラグインのエコシステムが形成される可能性があります。これにより、様々な開発ニーズに対応したカスタマイズや拡張が可能になるでしょう。

  2. クラウドサービスとの統合
    ローカル開発環境とクラウドサービスをシームレスに連携させる機能の強化が予想されます。これにより、ローカルでの開発からクラウドへのデプロイまでの一連のワークフローがさらに効率化されるかもしれません。

  3. セキュリティの強化
    高速化と同時に、コンテナ環境のセキュリティをさらに強化する取り組みが行われる可能性があります。特に、企業での利用を念頭に置いたセキュリティ機能の拡充が期待されます。

  4. 教育リソースの充実
    OrbStackの利用をさらに促進するために、詳細なドキュメント、チュートリアル、ベストプラクティスガイドなどの教育リソースが充実していくことが予想されます。これにより、新規ユーザーの学習曲線が緩やかになり、より多くの開発者がOrbStackを採用しやすくなるでしょう。

  5. コミュニティ主導の開発
    オープンソースコミュニティとの協力を強化し、ユーザーからのフィードバックやコントリビューションを積極的に取り入れることで、より多様なニーズに対応した機能開発が進められる可能性があります。

開発者へのアドバイス

OrbStackの新しいファイルシステムと仮想化スタックの改善を最大限に活用するために、開発者には以下のようなアプローチをお勧めします:

  1. 既存のワークフローの見直し
    現在のdocker-composeファイルやコンテナ関連のスクリプトを見直し、OrbStackの高速ファイルシステムを活用できるよう最適化することで、さらなるパフォーマンス向上が期待できます。

  2. 大規模リファクタリングへの挑戦
    これまでパフォーマンス上の理由で避けていた大規模なリファクタリングや依存関係の更新を検討してみましょう。OrbStackの高速な環境で行うことで、作業時間が大幅に短縮される可能性があります。

  3. 自動化の促進
    高速なファイルシステムを活かし、より細かい粒度でのCI/CDパイプラインの構築や、頻繁な自動テストの実行を検討してみましょう。これにより、品質向上と開発サイクルの短縮を同時に達成できる可能性があります。

  4. クロスプラットフォームテストの強化
    macOS上でLinuxコンテナを高速に実行できる利点を活かし、クロスプラットフォームのテストケースを増やすことで、アプリケーションのポータビリティと信頼性を向上させることができます。

  5. 新しい開発手法の探求
    OrbStackの高速な環境を活かした新しい開発手法や
    ツールの使用を検討してみましょう。例えば、リアルタイムコラボレーションツールやライブコーディング環境など、これまで難しかった開発スタイルが可能になるかもしれません。

最後に

OrbStackの新しいファイルシステムと仮想化スタックの改善は、macOSでのコンテナ開発に革命をもたらしています。これは単なる技術的な進歩ではなく、開発者の日々の作業や開発プロセス全体を変革する可能性を秘めています。

高速で効率的な開発環境は、イノベーションを加速し、より品質の高いソフトウェアを生み出す基盤となります。OrbStackがもたらした這改善は、macOS上でのコンテナ開発の新時代の幕開けと言えるでしょう。

開発者の皆様には、この新しい可能性を積極的に探求し、自身の開発プラクティスを進化させていくことをお勧めします。OrbStackという強力なツールを手に入れた今、私たちにできることはさらに大きく広がったのです。

新しい時代のmacOSコンテナ開発で、皆様の開発体験がより生産的で楽しいものになることを願っています。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?