SaaSを全部自前で動かす——450超のOSS代替を一覧にした「AltStack Data」

タグ columnコラムlinuxLinuxwindowsWindowsGitHubオープンソースaltstackHQaltstack-data

ひとことで言うと?

毎月課金しているSaaSを、自分のサーバーで動かせるOSSに置き換えるための「代替ツール辞書」データリポジトリです。Notion・Slack・Googleアナリティクスなど450種以上の代替候補が構造化データとして管理されており、Docker Composeのスニペットつきで即座にセルフホストを始められます。


実際に動かした様子

リポジトリをクローンすると、data/ ディレクトリ以下にカテゴリ別のJSONファイルが並んでいます。たとえばバックエンド・アズ・ア・サービスを探す場合は次のような流れになります。

$ git clone https://github.com/altstackHQ/altstack-data
$ ls altstack-data/data/
analytics.json  auth.json  baas.json  cms.json  crm.json ...

$ cat altstack-data/data/baas.json | python3 -m json.tool | head -40
{
  "category": "Backend as a Service",
  "tools": [
    {
      "name": "PocketBase",
      "description": "Single binary BaaS with Auth, Realtime DB, and Admin UI",
      "repo": "https://github.com/pocketbase/pocketbase",
      "replaces": ["Firebase", "Supabase (hosted)"],
      "selfHostable": true,
      "dockerCompose": true
    },
    ...
  ]
}

さらに付属のDocker Composeスニペットをそのまま使うだけで、開発用の環境がすぐ立ち上がります。

$ cd altstack-data/snippets/pocketbase
$ docker compose up -d
[+] Running 1/1
 ✔ Container pocketbase  Started

# ブラウザで http://localhost:8090/_/ を開くと管理UIが表示される

Plausible Analyticsなら以下のように起動し、自前のアクセス解析基盤が数分で完成します。

$ cd altstack-data/snippets/plausible
$ cp .env.example .env   # SECRET_KEY_BASE等を設定
$ docker compose up -d
[+] Running 3/3
 ✔ Container plausible_db       Started
 ✔ Container plausible_events   Started
 ✔ Container plausible          Started

Linux / macOS(ターミナル手順)

# 1. リポジトリ取得
git clone https://github.com/altstackHQ/altstack-data
cd altstack-data

# 2. 任意のカテゴリをJQで検索(jqが未インストールなら brew install jq)
cat data/analytics.json | jq '.tools[] | select(.replaces[] | contains("Google Analytics"))'

# 3. お目当てのスニペットを起動
cd snippets/umami
docker compose up -d

# 4. データをまるごとCSVに変換したい場合
python3 -c "
import json, csv, glob, sys
writer = csv.writer(sys.stdout)
writer.writerow(['category','name','replaces'])
for f in glob.glob('data/*.json'):
    d = json.load(open(f))
    for t in d.get('tools', []):
        writer.writerow([d['category'], t['name'], ', '.join(t.get('replaces', []))])
" > altstack_all.csv

macOSではDockerDesktopが必要です。brew install --cask docker で導入後、Docker.appを起動してから docker compose を実行してください。


Windows(コマンドプロンプト / PowerShell)

PowerShellとDocker Desktopがあれば同様に動きます。

# PowerShell でリポジトリ取得
git clone https://github.com/altstackHQ/altstack-data
Set-Location altstack-data

# JSON を PowerShell で読み込んで検索
$data = Get-Content data\analytics.json | ConvertFrom-Json
$data.tools | Where-Object { $_.replaces -contains "Google Analytics" } |
    Select-Object name, description | Format-Table -AutoSize

# スニペットを起動
Set-Location snippets\umami
docker compose up -d

コマンドプロンプト派は docker-compose up -d(ハイフンあり旧記法)でも動作します。Docker Desktopのインストーラーは公式サイトからEXE版をダウンロードしてダブルクリックするだけです。


Android(ADB連携)

altstack-dataはサーバーサイドのデータリポジトリのため、Android向けのネイティブライブラリは提供されていません。ただし、Android端末をデバッグ用ターミナルとして使いたい場合、Termux上で gitdocker CLIをインストールすれば、ADB経由でコマンドを流し込めます。

# Termux 内
pkg install git python
git clone https://github.com/altstackHQ/altstack-data
python3 -c "import json; print(json.load(open('data/baas.json'))['tools'][0]['name'])"
# => PocketBase

モバイルアプリからAPIとして使いたい場合は、PocketBaseやAppwriteなどリポジトリに収録されているBaaSをサーバーに立て、そのREST/SDKをKotlinから呼ぶのが現実的な活用方法です。


ダウンロードパッケージの使い方(ZIP内の run.sh / run.bat)

GitHub上で「Code → Download ZIP」からアーカイブを取得した場合の手順です。

altstack-data-main/
├── data/           ← カテゴリ別JSONがここに集まる
├── snippets/       ← docker-compose.yml のスニペット集
├── CRITERIA.md     ← 掲載基準の全文
└── README.md

解凍後はターミナルを altstack-data-main/ に移動し、snippets/<ツール名>/ フォルダ内の docker-compose.yml を直接 docker compose up -d で実行するだけです。run.bat / run.sh が同梱されているスニペットはそのままダブルクリックで起動できます。


Windows で .exe を自分で作る

データを読み込んでターミナルで検索するPythonラッパーを書いた場合、PyInstallerで単体EXEに固めることができます。

pip install pyinstaller
pyinstaller --onefile altstack_search.py
# dist\altstack_search.exe が生成される

altstack_search.py の最小実装例は以下のとおりです。

import json, glob, sys
query = sys.argv[1] if len(sys.argv) > 1 else ""
for f in glob.glob("data/*.json"):
    d = json.load(open(f, encoding="utf-8"))
    for t in d.get("tools", []):
        if query.lower() in t["name"].lower() or \
           any(query.lower() in r.lower() for r in t.get("replaces", [])):
            print(f"[{d['category']}] {t['name']} → replaces: {', '.join(t.get('replaces', []))}")
> altstack_search.exe Slack
[Communication] Mattermost → replaces: Slack
[Communication] Rocket.Chat → replaces: Slack, HipChat

こんな人におすすめ・まとめ

AltStack Dataは「SaaSの月額を削りたい」「自分のデータを自分で管理したい」という開発者・スタートアップ・個人の方に特におすすめです。450件を超えるエントリーはすべて「活発にメンテされているか」「セルフホスト可能か」という基準で選別されており、野良ツールをつかまされるリスクが低いのが特徴です。

Docker Composeスニペットがそのまま使えるため、コンテナの知識さえあれば本番環境に近い構成を数分で立ち上げられます。JSON形式でデータが整備されているので、社内ポータルやCLIラッパーを自作する際のベースデータとしても活用できます。

「まず試してみて、気に入ったらセルフホストへ移行する」というワークフローに最適な、実用的なデータリポジトリです。