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




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

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


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

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


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

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


【ベテラン刑事直伝】完全オフラインSTT「Handy」を開発現場に導入する方法とセキュリティメリット

今回は、オフラインで動作する高機能な音声認識アプリケーション「cjpais/Handy」、通称「Handy(ハンディ)」について、ソフトウェアエンジニアの視点から、その魅力と活用法を徹底解説していきますよ。この「Handy」は、まるでベテラン刑事(アプリ)と若手刑事(我々エンジニア)のコンビのように、手を取り合って私たちの開発作業をサポートしてくれる、非常に頼もしいツールなんです。


ソフトウェアエンジニア必見!lynx-family/lynxによるコード共通化とモノレポ戦略

「またか!」「あのプラットフォームでは動かない!」「リリースが遅れる!」...と、プロジェクトマネージャー(PM)が頭を抱える声が聞こえてきそうです。彼らの苦悩の種、それは「マルチプラットフォーム開発の複雑さ」です。PM 「A君、Web版の機能、最高だよ!次はモバイルアプリにも展開してくれ!」


ReactでiOS/Androidアプリを同時開発!Expoの基本とサンプルコードを彼女との会話で解説

彼女がそう言って、キラキラした目で試着室から出てきました。 「うーん、似合うと思うよ。でもさ、それってさっき見てたのとちょっと違うデザインじゃない?」僕がスマホをいじりながら返事をすると、彼女は少し頬を膨らませました。 「もう!ちゃんと見てる?今日、デートだって言ったでしょ?」


「Google版Rust」で学ぶ、信頼性と安全性を高めるコーディング

このコースは、単なる文法解説にとどまらず、実用的な視点でRustを学ぶことができます。信頼性の高さ GoogleのAndroidチームという、世界トップクラスのエンジニアたちが実際に使っている教材です。内容の質と正確性は非常に高いと言えます。


エンジニアの禁術。Androidを究極のポータブル開発機に変えるTermuxの世界

今日は、まるで異世界に迷い込んだような…でも実はスマホの中に広がる、エンジニアの桃源郷「Termux」について解説します。Androidスマホの中に、突如としてLinux(Debianベース)の黒い画面が現れる……。それがTermuxです。エミュレータというよりは、Androidの上で直接Linux環境を構築する魔法のツールですね。


Dockerで爆速構築!Androidエミュレータをコンテナ化する「HQarroum/docker-android」解説

「Androidのエミュレータを立てるだけでPCが重くなる…」「CI(継続的インテグレーション)でUIテストを自動化したいけど、設定が地獄だ…」そんな胃もたれしそうな状況を、このツールがサクッと軽くしてくれますよ。どうぞ、じっくり味わってみてください!