KitchenOwl入門:Dockerで始める自己ホスト型買い物リスト&レシピ管理


KitchenOwl入門:Dockerで始める自己ホスト型買い物リスト&レシピ管理

TomBursch/kitchenowl

2025-07-18

こんにちは!TomBurschさんのKitchenOwl、気になりますよね。自炊派のエンジニアにとって、これはかなり「使える」ツールになりそうです。ここでは、ソフトウェアエンジニアの視点からKitchenOwlがどのように役立つのか、そして実際にどうやって導入して使うのかを、サンプルコードを交えながらわかりやすく解説していきますね。

KitchenOwlは、単なる買い物リストアプリやレシピ管理アプリではありません。ソフトウェアエンジニアの視点から見ると、以下のような点でその真価を発揮します。

自己ホスト型であることの魅力

データ主権の確保
多くのレシピアプリや買い物リストアプリはクラウドサービスを利用していますが、KitchenOwlは自分でホストできるため、あなたのデータが完全にあなたの管理下に置かれます。プライバシーを重視するエンジニアにとっては、これは非常に大きなメリットです。

カスタマイズの自由度
ソースコードが公開されているため、必要に応じて機能を拡張したり、既存の機能を変更したりする自由があります。例えば、「この機能があったらもっと便利なのに!」と思ったら、自分で実装する、なんてことも夢ではありません。

学習の機会
Flask(Python)でバックエンド、Flutterでフロントエンドが作られているため、Web開発とモバイルアプリ開発の両方の実践的な知識を深める良い機会になります。特に、Dockerを使ったデプロイ方法も学べるので、CI/CDの練習にもなりますね。

コスト削減
月額費用がかかるクラウドサービスと異なり、一度サーバーを用意してしまえば、あとは基本的に運用コスト(電気代など)しかかかりません。長期的に見ればコストメリットも期待できます。

API連携の可能性

KitchenOwlはバックエンドがAPIとして提供されているので、例えば「スマートホームデバイスと連携して、在庫が少なくなったら自動で買い物リストに追加する」といった自動化の仕組みを自作することも考えられます。アイデア次第で、日々の生活をより便利にできますよ。

既存のサービスと連携させることで、自分だけのスマートキッチンシステムを作り上げることも夢ではありません。

開発プロセスへの応用

もしあなたがチームで料理レシピを共有したり、特定の食材の在庫管理をしたい場合、KitchenOwlは社内ツールとして活用することも可能です。オープンソースなので、ライセンスに注意しつつ自由に利用・改変できます。

個人利用はもちろんのこと、小規模なコミュニティや家族間での情報共有にも非常に便利です。

KitchenOwlの導入は、主にDockerを使って行います。Dockerを使うことで、環境構築の手間を大幅に削減できます。ここでは、基本的な導入手順を解説しますね。

DockerとDocker Composeのインストール
お使いのOS(Windows, macOS, Linux)にDocker DesktopまたはDocker EngineとDocker Composeをインストールしておいてください。

Dockerインストールガイド

まず、KitchenOwlのリポジトリをクローンします。

git clone https://github.com/TomBursch/kitchenowl.git
cd kitchenowl

docker-compose.ymlと同じディレクトリに、.envファイルを作成します。このファイルには、データベースのパスワードなどの環境変数を設定します。

cp .env.example .env

作成した.envファイルをテキストエディタで開き、POSTGRES_PASSWORDなどの値を安全なものに変更してください。

# .env ファイルの例 (抜粋)
POSTGRES_PASSWORD=your_secure_password # ここを必ず変更!
POSTGRES_USER=kitchenowl
POSTGRES_DB=kitchenowldb
SECRET_KEY=your_flask_secret_key # ここも安全なキーに変更!

準備ができたら、以下のコマンドでDockerコンテナを起動します。

docker compose up -d

このコマンドを実行すると、Docker Composeがバックエンド(Flask)、フロントエンド(Flutter)、データベース(PostgreSQL)のコンテナを自動的にビルドし、起動します。初回はイメージのダウンロードやビルドに時間がかかる場合があります。

すべてのコンテナが正常に起動したら、ブラウザで以下のURLにアクセスしてみてください。

http://localhost:8000

KitchenOwlのログイン画面が表示されれば成功です!

初回起動時にはユーザーがいないため、アカウントを作成する必要があります。ログイン画面から指示に従ってユーザー登録を行ってください。

KitchenOwlのAPIを利用して何か自動化する、というのもソフトウェアエンジニアらしい使い方ですよね。ここでは、Pythonを使ってKitchenOwlのAPIにアクセスし、買い物リストにアイテムを追加する簡単なスクリプトの例を紹介します。

注意点
KitchenOwlのAPIドキュメントは、プロジェクトのリポジトリ内で確認できます。正確なエンドポイントやリクエストボディは、そちらを参照してください。以下のコードはあくまで概念的なサンプルです。

import requests
import json

# KitchenOwlのAPIエンドポイントと認証情報
BASE_URL = "http://localhost:8000/api" # あなたのKitchenOwlのURLに合わせてください
USERNAME = "your_username"
PASSWORD = "your_password"

def login(username, password):
    """KitchenOwlにログインし、認証トークンを取得します。"""
    url = f"{BASE_URL}/auth/login"
    headers = {"Content-Type": "application/json"}
    data = {"username": username, "password": password}
    response = requests.post(url, headers=headers, data=json.dumps(data))
    response.raise_for_status() # エラーがあれば例外を発生させる
    return response.json().get("access_token")

def add_to_shopping_list(token, item_name, quantity=1, unit="個"):
    """買い物リストにアイテムを追加します。"""
    url = f"{BASE_URL}/shopping-list/items"
    headers = {
        "Content-Type": "application/json",
        "Authorization": f"Bearer {token}"
    }
    # APIの仕様に合わせて適切なリクエストボディを作成
    # ここはKitchenOwlのAPIドキュメントを確認してください
    data = {
        "name": item_name,
        "quantity": quantity,
        "unit": unit,
        "checked": False # 初期状態ではチェックされていない
    }
    response = requests.post(url, headers=headers, data=json.dumps(data))
    response.raise_for_status()
    print(f"'{item_name}' を買い物リストに追加しました。")

if __name__ == "__main__":
    try:
        # ログインしてトークンを取得
        auth_token = login(USERNAME, PASSWORD)
        print("ログイン成功!")

        # 買い物リストにアイテムを追加
        add_to_shopping_list(auth_token, "牛乳", 1, "リットル")
        add_to_shopping_list(auth_token, "卵", 10, "個")
        add_to_shopping_list(auth_token, "パン", 1, "斤")

    except requests.exceptions.RequestException as e:
        print(f"APIリクエストエラーが発生しました: {e}")
    except Exception as e:
        print(f"予期せぬエラーが発生しました: {e}")

このコードを実行する前に、以下の点を確認・変更してください。

USERNAMEPASSWORDは、あなたがKitchenOwlで作成したユーザー名とパスワードに置き換えてください。

BASE_URLは、KitchenOwlが動作しているURLに合わせてください(例
http://localhost:8000/api)。

add_to_shopping_list関数内のdata構造は、実際のKitchenOwlのAPIドキュメントを参照して、正確なフィールド名と形式に合わせてください。KitchenOwlのAPIは/api/shopping-list/itemsエンドポイントへのPOSTリクエストでアイテムを追加できると仮定しています。

KitchenOwlは、単に便利な生活ツールというだけでなく、ソフトウェアエンジニアの好奇心をくすぐる要素が満載のプロジェクトです。自己ホスト型のメリットを享受しながら、PythonやFlutter、Dockerの学習にも繋がり、さらにはAPIを活用した自動化や連携の可能性まで秘めています。

ぜひ、あなたの環境に導入して、自分だけのスマートキッチン環境を構築してみてください!何か困ったことがあれば、GitHubのIssueやDiscussionを見たり、自分でコードを読んでみるのも良い勉強になりますよ。


TomBursch/kitchenowl




逆に、使わないなんて損!Material Symbolsの導入から活用法まで

ソフトウェアエンジニアにとって、どう役に立つ?逆に、UI/UXを考えるときに、いちいちアイコンを自作するのって、めちゃくちゃ面倒じゃないですか?このMaterial Design iconsを使うと、高品質で統一感のあるアイコンを簡単にプロジェクトに組み込めます。デザイナーがいないチームでも、見栄えのいいアプリやウェブサイトが作れちゃいます。


脱・追跡広告!Organic Mapsと歩む、誠実なソフトウェアエンジニアリングへの道

エンジニアにとってのこのライブラリは、まるで「道に迷った時にそっと現れる、信頼できるベテランガイド」のような存在だよ。星座占いの運勢風に、その魅力と使い方を紐解いていくね!今日のあなたの運勢は「開拓」がキーワード。 重たいクラウドSDKや、プライバシーを切り売りする広告モデルに疲れていないかな?Organic Maps を手に取ることで、あなたのアプリ開発に「ピュアな自由」がもたらされる暗示が出ているよ。


ソフトウェアエンジニアが解説!Fluent System Iconsでガンダムを動かすコントローラー開発

ガンダムのプラモデルをコントに見立てて、Microsoft Fluent System Iconsをソフトウェアエンジニアリングの観点からどう活用するか、楽しく解説しますね!まず、「Microsoft Fluent System Icons」は、Microsoftが提供している、モダンで親しみやすいアイコンのコレクションです。スマホアプリやウェブサイトなどでよく見かける、矢印や設定マークのようなシンプルな絵文字のことだと思ってください。デザインが一貫していて、見た目もスッキリしているのが特徴です。


高速開発の秘密兵器: ホットリロードでFlutterアプリを爆速構築

Flutter(フラッター)は、モバイルアプリはもちろんのこと、デスクトップやウェブまで、一つのコードベースから複数のプラットフォームに対応する美しいアプリを素早く構築できるUIツールキットです。ソフトウェア開発者であるあなたにとって、Flutterはまさに「万能の道具箱」のような存在です。


テスト自動化の救世主!LLMとAndroidを結ぶ「droidrun」の粋な使い道

こいつは面白ぇツールだ。「droidrun/droidrun」ってのは、おめぇさんのスマートフォンを、まるで生きた人間みてぇによ、自然言語の指示で動かせるようにするモバイルエージェントのことでぇ。エンジニアの目から見て、こいつがどう役に立つのか、江戸っ子のべらんめぇ調で、威勢よく解説させてもらうぜ!


【江戸のエンジニア魂】AirPodsをAppleの鎖から解き放つ!「librepods」で挑むリバースエンジニアリングの極意

まずはっきり言っておくが、これは「kavishdevar/librepods」ってなブツに関する話だ。これはAirPodsをAppleの縄張りから解放しちまおうってな、ちょいと粋なプロジェクトでよ、AndroidやLinuxでAirPodsを自由に使いこなすための道筋をつけるもんさ。


Audacityはデバッグの味方!音声解析でバグをサクッと駆逐するエンジニア的アプローチ

Audacityは、無料で使えるクロスプラットフォームの高機能な音声編集ソフトウェアです。単なる録音・再生ツールではなく、波形編集、エフェクト処理、ノイズ除去、マルチトラック編集など、プロレベルの機能を持っています。牛丼一筋の看板無料でオープンソースという強力なアイデンティティ。誰でも自由に使える!


Web技術とネイティブアプリの融合:WebKit入門

WebKitは、Appleが開発したWebブラウザのレンダリングエンジンです。簡単に言うと、Webページを画面に表示するための、ブラウザの心臓部にあたるソフトウェアですね。みなさんが普段使っているSafariや、iPhone/iPadのアプリ内でWebページを表示する機能は、すべてこのWebKitが動かしています。


C++開発を加速するfmtライブラリ:型安全で高速な文字列フォーマット術

fmt は、C++ での文字列フォーマットをより安全で、高速で、使いやすくするモダンなライブラリです。従来の C スタイルの printf や、C++ 標準ライブラリのストリーム (<<) と比較して、次のような点が特に役立ちます。printf はフォーマット指定子 (%d, %s など) と引数の型が一致しないと、未定義動作(Undefined Behavior)を引き起こす可能性があります。fmt はテンプレートとコンパイル時のチェックを利用しているため、このような型不一致によるバグをコンパイル段階で発見できます。これにより、ランタイムでの予期せぬクラッシュを防ぎ、デバッグの時間を大幅に削減できます。