KitchenOwl入門:Dockerで始める自己ホスト型買い物リスト&レシピ管理
こんにちは!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}")
このコードを実行する前に、以下の点を確認・変更してください。
USERNAMEとPASSWORDは、あなたが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を見たり、自分でコードを読んでみるのも良い勉強になりますよ。