なぜクラウド型のレシピアプリをやめるべきなのか?
多くのデジタルレシピコレクションは、機能していないブラウザのブックマークや、NYT CookingやPaprikaといったアプリへの月額5ドルのサブスクリプションで溢れ、散らかりがちです。これらのプラットフォームは便利ですが、データを「クローズドな庭(ウォールド・ガーデン)」の中に閉じ込めてしまいます。もしサービスが価格を改定したり終了したりすれば、長年蓄積してきた料理のメモが一夜にして消えてしまうかもしれません。
Mealieはこの状況を変えてくれます。所有権とスピードを重視した、高速な自己ホスト型管理ツールです。特筆すべき機能は、乱雑なURLを2秒足らずでクリーンなレシピに変換する強力なスクレイパーです。ホームラボ(HomeLab)愛好家にとって、これは軽量ながら非常に強力なツールです。私は自宅の本番環境でMealieを14ヶ月以上運用していますが、数十回のアップデートを経ても安定性は揺るぎません。
現状の再確認:クラウド vs セルフホスト
サブスクリプションかセルフホストかの選択は、結局のところ「誰がデータベースを所有するか」に集約されます。現実的な比較は以下の通りです。
- クラウドサービス (Whisk, Paprika, NYT): 設定の手間はゼロですが、基本的な機能が有料の壁(ペイウォール)の向こうにあることが多いです。プライバシーは二の次で、500件以上のレシピをエクスポートするのは通常、技術的な悪夢となります。
- セルフホスト (Mealie): すべてのデータを自分で所有できます。広告のないインターフェース、自動化のためのフルREST API、すると専用の献立カレンダーが手に入ります。唯一の「コスト」は、コンテナの設定にかかる15分程度の時間だけです。
メリットとデメリット
完璧なソフトウェアはありません。Mealieをキッチンのメインツールとして1年間使用した上での、正直な評価をお伝えします。
メリット
- スクレイパー:
recipe-scrapersというPythonライブラリをベースにしており、AllRecipesやSerious Eatsなどのサイトをほぼ完璧な精度で処理します。材料、手順、高解像度の画像を自動的に取得します。 - API連携: UI上のすべての要素にAPI経由でアクセスできます。私はこれを利用して、Home Assistant経由で壁掛けタブレットに今夜の夕食を表示させています。
- 家族間でのコラボレーション: 家族ごとに別のアカウントを作成できます。全員が共有の買い物リストに追加したり、週間の献立をリアルタイムで編集したりできます。
- PWA対応: App Storeからのネイティブアプリはありませんが、プログレッシブウェブアプリ(PWA)が非常に優秀です。iOSでもAndroidでもネイティブアプリのように動作します。
デメリット
- 導入のハードル: Docker Composeの基本的な知識が必要です。アプリストアから「ワンクリックでインストール」できるものではありません。
- リソースの計画: SQLiteでも動作しますが、長期的な安定性を考えるならPostgreSQLバックエンドの方が優れています。そのためには、2つ目のコンテナを管理する必要があります。
安定した本番運用アーキテクチャ
レシピを何年も保存するつもりなら、SQLiteの「クイックスタート」はスキップしましょう。家族が同時にリストを更新する場合、SQLiteでは同時書き込みに苦労することがあります。代わりに、データの整合性を高めるために、PostgreSQLをバックエンドに使用した Docker Compose スタックを推奨します。
外部からのアクセスのためには、Nginx Proxy ManagerやCloudflare Tunnelsなどのリバースプロキシの背後にMealieを配置しましょう。これにより、自宅のIPアドレスを直接公開することなく、外出先のスーパーで安全なHTTPS接続を通じて買い物リストを確認できるようになります。
デプロイガイド:MealieとPostgreSQL
このセットアップでは、サーバーにDockerとDocker Composeが準備されていることを前提としています。簡素化のため、統合されたMealieイメージを使用します。
1. ファイルの整理
まず、設定ファイルとデータベースファイルを保存するディレクトリを作成します。今整理しておくことで、将来の移行時のトラブルを防ぐことができます。
mkdir -p ~/homelab/mealie/data
cd ~/homelab/mealie
2. Docker Composeの設定
docker-compose.yml ファイルを作成します。この設定ではメモリを1GBに制限しています。これはMealieにとって十分な量であり、画像処理中にサーバー全体のリソースを使い果たすのを防ぎます。
services:
mealie:
image: ghcr.io/mealie-recipes/mealie:latest
container_name: mealie
restart: always
ports:
- "9000:9000"
deploy:
resources:
limits:
memory: 1000M
volumes:
- ./data:/app/data
environment:
- ALLOW_SIGNUP=true
- PUID=1000
- PGID=1000
- TZ=Asia/Tokyo
- MAX_WORKERS=1
- WEB_CONCURRENCY=1
- DB_ENGINE=sqlite # 本番環境ではpostgresに切り替えてください
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- [email protected]
- [email protected]
- SMTP_PASSWORD=your-app-password
- SMTP_TLS=True
3. サービスの起動
以下のコマンド1つでコンテナを起動します:
docker compose up -d
http://your-server-ip:9000 でダッシュボードにアクセスします。初回のログインには以下のデフォルトの認証情報を使用してください:
- ユーザー名:
[email protected] - パスワード:
MyPassword
セキュリティ上のヒント: ログイン後、すぐにこれらの認証情報を変更してください。プロファイル設定に移動して、独自のパスワードを設定し、メールアドレスを更新してください。
長期運用のためのプロのヒント
コンテナを動かすのは始まりに過ぎません。家庭用として信頼できるサービスにするために、以下のメンテナンス手順に従ってください。
賢いバックアップ戦略
Mealieの設定メニューにはバックアップツールが組み込まれています。/app/data/backups フォルダへの毎日バックアップをスケジュールしましょう。data ボリュームをホストにマッピングしているため、ResticやRcloneのようなツールを使用して、毎晩バックアップをNASやS3バケットに同期することができます。
スクレイパーの微調整
すべてのウェブサイトが標準的なレシピスキーマに従っているわけではありません。スクレイピング結果が乱れている場合は、組み込みのMarkdownエディタを使用して手順を整理してください。Mealieは非常に柔軟です。もし特定のサイトで頻繁に失敗する場合は、開発者がGitHubで非常に活発に活動しており、スクレイピングロジックのアップデートを頻繁にリリースしています。
ストレージの管理
高解像度の料理写真は積み重なると大きなサイズになります。1,000件以上のレシピがある場合、data/media フォルダは数ギガバイトに膨らむ可能性があります。ディスク容量を監視し、ホームラボを小さなブートドライブで運用している場合は、専用のSSDパーティションの使用を検討してください。Composeファイルの1GBメモリ制限により、画像のりサイズ処理が他のコンテナをクラッシュさせることはありません。
結論
有料アプリからMealieへの移行は、ホームラボで取り組むプロジェクトの中でも特に満足度の高いものの1つです。家族全員に毎日、即座に価値を提供します。Docker Composeを使用することで、レシピライブラリのポータビリティ、プライバシー、そして完全なコントロールを確保できます。ブックマークの山や有料アプリは完全に不要になり、キッチンのワークフローはより速く、より整理されたものになるでしょう。

