ソースからのビルド

このページでは、Antimatterをソースコードからビルドして実行する方法を説明します。開発作業や独自のビルドを作成するために使用できます。サーバーとWebインターフェースは1つのリポジトリに収容されており、その後Dockerイメージとアプリについて説明します。

必要なもの

  • 開始は、server/go.mod に記載されているバージョン(執筆時点では 1.26.7)を使用します。
  • Node.jsとnpm: .nvmrcとwebapp/package.jsonに記載されているバージョン(Node 24.11.1とnpm 11.6.2)。miseを使用する場合、リポジトリのmise.tomlが適切なNodeをインストールします。
  • DockerとCompose: 開発環境では、PostgreSQLやその他のいくつかのサービスをコンテナ内で実行します。
  • make、git、そしてLinuxまたはmacOSマシン。
  • メモリ: Webインターフェースのビルドが最も負荷が高い部分です。16GBのRAMを確保してください。ビルドとメモリを参照してください。
git clone https://github.com/AntimatterChat/antimatter.git
cd antimatter

リポジトリには、server/にサーバー、webapp/にWebインターフェース(Fusionはwebapp/fusion、クラシックはwebapp/channels、共有パッケージはwebapp/platform)、e2e-tests/にエンドツーエンドテストが含まれています。

開発サーバーの実行

cd server
make run

make runを実行すると、開発コンテナ(PostgreSQL、Redis、メールキャッチャー、監視ツール)が起動し、Webアプリのビルドが配置され、go runでサーバーがバックグラウンドで起動し、Webアプリのウォッチャーが起動します。ウォッチャーは、クラシックインターフェースを編集するたびに再ビルドします。http://localhost:8065を開いてアカウントを作成してください。最初のアカウントがシステム管理者になります。

コマンド(server/内)機能
make run-server, make run-clientサーバーのみ、またはWebアプリのウォッチャーのみを起動します。
make restart-serverGoコードを変更した後にサーバーを再起動します。
make stopサーバー、ウォッチャー、コンテナを停止します。
make debug-serverDelveデバッガーでサーバーを実行します。
make run-cli ARGS="-version"サーバーコマンドを実行します。
make config-resetconfig/config.jsonをデフォルト値にリセットします。
make clean, make nukeビルドファイルを削除します。nukeは開発データも削除します。

開発用データベースはpostgres://mmuser:mostest_password@localhost/mattermost_testで、サーバーのデフォルトデータソースです。server/config.override.mkファイルまたは環境変数(server/config.mkを参照)でENABLED_DOCKER_SERVICESを設定し、どのコンテナを起動するか選択できます。

Webインターフェース

webapp/内:

npm install      # also builds the shared packages
npm run build    # the classic interface, then Fusion

ビルド成果物は webapp/channels/dist(classic)と webapp/fusion/dist(Fusion)に出力されます。server/ ディレクトリで make client を実行すると、これらが server/client と server/client-fusion としてリンクされ、サーバーから配信されます。classic は /static/ 配下、Fusion は /static/fusion/ 配下から配信されます。

  • npm run run(または webapp/ 内の make run)を実行すると、classic インターフェースを監視して再ビルドします。WATCH_FUSION=true を追加すると、Fusion も再ビルドされます。
  • npm run dev-server(make dev)を実行すると、代わりに webpack の開発サーバーが起動します。classic はポート 9005、Fusion はポート 9006 で提供されます。
  • ブラウザでどちらかのインターフェースを表示するには、任意のページの URL に ?webui=fusion または ?webui=classic を追加してください。

テストとチェック

コマンド設定場所機能
make test-serverserver/開発コンテナに対するサーバーのテストスイートです。実行に長時間かかります。
make test-server-quickserver/短いテストのみを実行します。
go test ./channels/app/... -run TestNameserver/コンテナを起動した状態(make start-docker)で、特定のパッケージまたはテストを実行します。
make check-styleserver/go vet、golangci-lint およびその他の Go チェックを実行します。
make testwebapp/Web アプリのユニットテスト(Jest)をすべてのパッケージで実行します。
npm run test -- <pattern>webapp/fusionFusion の一部のテストを実行します。
make check-style, make check-typeswebapp/ESLint と TypeScript のチェックを実行します。
make i18n-extractserver/ と webapp/文字列を追加または変更した後に、英語の文字列ファイルを更新します(詳細は 翻訳 を参照)。

server/ 内で go mod tidy ではなく make modules-tidy を実行してください。

リリースアーカイブ

cd webapp && npm run build && cd ..
cd server
make build-linux       # the antimatter and amctl binaries
make package-linux     # dist/antimatter-linux-amd64.tar.gz and -arm64

make buildを実行すると、WebインターフェースとLinuxバイナリが一度にビルドされます。アーカイブにはbin/antimatter、bin/amctl、設定変更に関するREADME.mdを含むデフォルトのconfig/config.json、両方のWebインターフェース、テンプレート、フォント、翻訳が含まれています。その他のプラットフォーム: make package-osx、make package-windows、make package-freebsd。

バンドルアプリ

単にmake package-linuxを実行すると、アプリなしのアーカイブがビルドされます。公開されているリリースのようにアプリをバンドルするには、まず署名済みのアプリバンドルを取得し、そのフォルダを渡します:

build/package/fetch-apps.sh "$HOME/release-apps"   # needs gh, python3 and gpg
make package-linux PREPACKAGED_PLUGINS_DIR="$HOME/release-apps"

fetch-apps.shは、antimatter-dockerのplugins.jsonにリストされている各アプリの最新のGitHubリリースを、その署名とともにダウンロードし、Antimatterのプラグインキーに対して署名を確認します。デフォルトでは、ホワイトボード、音声チャンネル、通話、エージェント、ToDo、投票、メモ、GIF、ミームを取得します。AM_BUNDLED_APPS(スペースで区切られたリポジトリ名)でリストを変更できます。リリースがない、または署名がないアプリは警告とともにスキップされます。バンドルはアーカイブのprepackaged_plugins/に配置されます。

.debおよび.rpmパッケージ

build/package/build-packages.sh <archive> <amd64|arm64> <version> <out-dir>は、リリースアーカイブを.debおよび.rpmのオールインワンパッケージに変換します。nfpmを使用します。管理者ガイドにはインストール内容が記載されています: .debまたは.rpmパッケージのインストールを参照してください。

リリースワークフロー

サーバーリポジトリのantimatter-release.ymlワークフローは、GitHub上でこれらすべてを実行します:v*タグが付けられたとき、amd64およびarm64向けのアーカイブとパッケージをSHA256SUMSとともにビルドし、そのタグのGitHubリリースとして公開します(バージョンに-が含まれる場合はプレリリース)。手動で実行した場合、ビルド番号は0.9.0-dev.<run>となり、ファイルはワークフロー成果物として保持されます。各アプリリポジトリには、同じ方法で署名済みバンドルを公開するrelease.ymlワークフローがあります。

Docker イメージ

antimatter-docker リポジトリは、公開されているイメージ(アプリを含むサーバー)を完全に Docker 内でビルドします:

git clone https://github.com/AntimatterChat/antimatter-docker.git
cd antimatter-docker
scripts/build-all.sh                     # from the main branches on GitHub
SOURCES=local scripts/build-all.sh       # from your checkouts next to this folder
VARIANT=next scripts/build-all.sh        # the "next" image, with every Antimatter app

Docker(buildx 対応)、Python 3、git、gpg、約 16 GB の RAM、30 GB のディスクスペースが必要です。生成されたイメージは ghcr.io/antimatterchat/antimatter:dev としてロードされ、ANTIMATTER_IMAGE=ghcr.io/antimatterchat/antimatter:dev docker compose -f compose.local.yml up -d で試すことができます。plugins.json にはビルドされたアプリとそのバージョンがリストされ、リポジトリの README にバリアントの説明があります。

build-all.sh はバンドルされたアプリに Antimatter 署名キーで署名を適用します。イメージビルドでは未署名のアプリは拒否されます。この秘密鍵はメンテナーのみが保持しているため、最初のステップのみを実行してください: scripts/fetch-sources.sh、scripts/build-plugins.sh(out/plugins/ にアプリバンドルを生成)、scripts/build-server.sh(out/server/ にサーバーアーカイブを生成)。

ビルドとメモリ

Web インターフェースは大きな webpack ビルドであり、メモリ不足は最も一般的なビルド失敗の原因です。

  • npm run build は、ピークメモリ使用量を低く抑えるために、クラシックインターフェースと Fusion を並列ではなく順次ビルドします。ご自身で並列実行しないでください。
  • ミニファイアはプロセッサごとにワーカーを1つ起動します。コア数が多いがメモリが少ないマシンでは、ビルドが見えるプロセッサ数を制限してください: taskset -c 0-5 npm run build。
  • Node がヒープを使い切った場合は、上限を引き上げてください: NODE_OPTIONS=--max-old-space-size=6144。Docker ビルドはこの値を使用しています(build.env 内の BUILD_NODE_OPTIONS)。
  • 小規模なマシンで、サーバーの完全なテストスイート、Web ビルド、Docker ビルドを同時に実行することは避けてください。

アプリ

各アプリ(プラグイン)には独自のリポジトリと Makefile があり、make dist でそのバンドルをビルドします。詳細は ビルド、インストール、デバッグ を参照してください。

デスクトップアプリ

デスクトップアプリ は Electron アプリです。Node.js 24 以降を使用する場合:

npm install --allow-git=all
npm run build          # development build, into dist/
npm start              # run it
npm run package:linux  # packages into release/ (also package:windows, package:mac)

サーバーの事前設定などのビルド時設定は src/common/config/buildConfig.ts にあります。Apple 証明書がない場合は、AM_MAC_ADHOC_SIGN=true を設定して macOS アプリをアドホック署名します(ノタリゼーションなし)。Apple シリコン搭載 Mac は未署名のコードを拒否するためです。リポジトリの release.yml ワークフローは、v* タグが付けられたときに Linux、Windows、macOS 用の未署名パッケージをビルドします。

モバイルアプリ

モバイルアプリ は React Native アプリです。その README にコマンド(npm run ios、npm run android)が記載されています。独自のビルドを作成するには、独自の署名キー、Android の通知用 Firebase プロジェクト、iOS 用 APNs キー、そしてそれらの認証情報を保持する プッシュプロキシ が必要です。リポジトリの release.yml ワークフローは、v* タグが付けられたときに、ストアアカウントなしで Android APK と AAB、および未署名の iOS .ipa をビルドします。その README には、Android ビルドを署名し Firebase を設定するためのシークレットが記載されています。