0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Malt: Homebrewでつくる共有可能な開発環境

Last updated at Posted at 2025-11-28

はじめに

Dockerは開発環境に革命をもたらしました。環境の一貫性と再現性という大きな価値を提供し、「手順書どおりに環境構築」から「コードを実行するだけ」に変えました。

しかし、macOSでの開発では課題も残っています。ファイルI/Oの遅さ、起動時間、メモリ消費、そして設定ファイルの複雑さ。プロダクション環境と開発環境では求められる特性が異なるのに、同じ方法で環境を作る必要があるのでしょうか?

そこで「Malt」を開発しました。Homebrewの力を活かし、Dockerのようにプロジェクト単位でサービスを管理しながら、ネイティブのパフォーマンスを実現する開発環境マネージャーです。

Maltとは

Maltは特別なデーモンやランタイムを持たない、シンプルなHomebrewフォーミュラです。PHPデベロッパーなら「Composerのインフラ版」と考えてください。Composerがライブラリの依存関係を管理するように、Maltはサービスの依存関係を管理します。

Composer Malt 役割
composer.json malt.json 依存関係の宣言
vendor/ malt/ 依存関係の保存場所
composer install malt install 依存関係のインストール
- malt start サービスの起動

クイックスタート

インストール

brew tap shivammathur/php
brew tap shivammathur/extensions
brew tap koriym/malt
brew install malt

プロジェクトの初期化

cd your-project
malt init

malt.jsonが作成されます。必要なサービスやPHP拡張を指定してください:

{
  "project_name": "myapp",
  "dependencies": [
    "php@8.4",
    "mysql@8.0",
    "composer",
    "redis",
    "nginx"
  ],
  "ports": {
    "php": [9000],
    "redis": [6379],
    "nginx": [8080],
    "mysql": [3306]
  },
  "php_extensions": [
    "xdebug",
    "redis",
    "apcu"
  ]
}

環境構築と起動

malt install   # 依存関係をインストール
malt create    # 設定ファイルを生成
malt start     # サービスを起動

既存プロジェクトに参加する場合も同じです。malt.jsonがあれば、この3コマンドで同じ環境が再現できます。

3つの特徴

1. ネイティブの速さ

仮想化レイヤーがないため、すべてがネイティブ速度で動作します。

  • ファイルI/O: Dockerのボリュームマウントによる遅延がありません。多数のファイルを扱うPHPフレームワークでは体感できる違いがあります。
  • 起動時間: サービスが即座に起動します。
  • メモリ効率: コンテナのオーバーヘッドがなく、システムリソースを効率的に使用します。
ソリューション ファイルI/O メモリ使用 起動時間
Malt ネイティブ 少ない 即座
Docker 遅い(特にmacOS) やや多い 数秒
VM かなり遅い 多い 数分

2. デバッグのしやすさ

Dockerでは「コンテナの中」と「コンテナの外」という二重の文脈が存在します。Maltではすべてがネイティブに実行されるため:

  • ログファイルはmalt/logs/に集約され、直接アクセスできる
  • XdebugなどがIDEと直接統合でき、設定が簡単
  • サービスの状態確認が標準的なOSツールで可能

「なぜ動かないのか」を調査する時間を減らし、本来の開発に集中できます。

3. 開発に特化した便利さ

Maltは開発専用ツールとして、便利なエイリアスを自動生成します。

source <(malt env)  # 環境変数とエイリアスを設定

たとえばMySQLへの接続は、mysql --defaults-file=/path/to/conf/my_3306.cnf -h 127.0.0.1とする代わりに:

% mysql@3306

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 8.0.41 Homebrew
...
mysql@3306:(none)> 

ローカル開発用なのでパスワード入力も不要です。DBデータはプロジェクト内に作成され、グローバルな設定に影響を与えません。

Dockerとの使い分け

MaltはDockerの代替ではなく、補完的なツールです。

用途 推奨ツール 理由
日常の開発 Malt 高速なファイルI/O、迅速な起動
統合テスト Docker 本番に近い環境でのテスト
本番環境 Docker コンテナ化による一貫性

日常の開発はMalt、本番環境に近いテストはDocker。状況に応じて使い分けることで、開発効率と環境の一貫性の両方を高められます。

devboxとの比較

JSON形式で開発環境を定義するツールにはdevboxもあります。

機能 Malt devbox
エコシステム Homebrew Nix
焦点 サービスの管理と制御 広範な開発環境管理
設定 シンプルなJSON より複雑なスキーマ
プロジェクト構造 malt/に設定・ログを集約 最小限のファイル変更

Maltは複数のサービスを管理し、ログや設定に直接アクセスしたいチームに向いています。

アンインストール

不要になったらきれいに削除できます。

malt stop                # サービスを停止
rm -rf malt/             # プロジェクトの設定とデータを削除
brew uninstall malt      # Maltをアンインストール
brew untap koriym/malt   # タップを削除

Homebrewでインストールしたサービス(MySQL、Redisなど)は他のbrewフォーミュラでの依存があれば残りますし、maltでしか依存してないならクリーンに削除されます。

まとめ

古代中国の思想家・老子は「大道は甚だ夷らかなるも、而も民は径を好む」と言いました。大道はとても平らで広いのに、人々は近道を好み、それが結局違う苦難を招いてしまう、という意味です。

ソフトウェア開発でも同じことが起きがちです。何かを解決する新しいツールが、また新しい問題を持ち込み、それを解決するためにさらに複雑なツールが登場する。

時に必要なのは、より多くの抽象化レイヤーではなく、本質に立ち返ることかもしれません。Maltはそういう思いから生まれたシンプルで小さなツールです。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?