はじめに
Laravel 版のつぶやきサイトを Elixir/Phoenix 版へ置き換えてみました。
参考:
現在の Phoenix アプリ本体は apps/tubuyaki にあります。ルート直下の docker-compose.yml で Elixir/Phoenix 開発用コンテナ、PostgreSQL、Adminer を起動します。
構成
tubuyaki_replase/
├── Dockerfile
├── docker-compose.yml
├── apps/
│ └── tubuyaki/ # Phoenix アプリ本体
├── data/
├── postgres/volume/ # PostgreSQL 永続化データ
ソース入手
ソースは以下になります。
git clone https://github.com/naritomo08/tubuyaki_replase_public.git
cd tubuyaki_replase_public
起動方法
ルートディレクトリでコンテナを起動します。
docker compose up -d
web コンテナが mix deps.get、DB 作成、migration、mix phx.server を自動で実行します。
ブラウザで http://127.0.0.1:4000 を開きます。
URL
- つぶやき一覧: http://127.0.0.1:4000/tweet
- ユーザー登録: http://127.0.0.1:4000/register
- ログイン: http://127.0.0.1:4000/login
- アカウント: http://127.0.0.1:4000/account
- 管理画面: http://127.0.0.1:4000/admin/users
- Adminer: http://127.0.0.1:8082
初回の使い方
-
docker compose up -dでコンテナを起動します。 - http://127.0.0.1:4000/register からユーザー登録します。
- 最初に登録したユーザーは管理者になります。
-
/tweetで投稿、画像付き投稿、編集、削除、いいねが使えます。 -
/accountでプロフィール変更、パスワード変更、退会ができます。 - 管理者は
/admin/usersでユーザー管理と集計確認ができます。
実装済み機能
- ユーザー登録、ログイン、ログアウト
- つぶやき一覧、投稿、編集、削除
- いいね
- アカウント管理
- 管理者向けユーザー管理
- PostgreSQL migration
- Phoenix controller test
Google OAuth 連携は導線のみ実装済みです。実際の Google 認証を有効にするには、GOOGLE_CLIENT_ID と GOOGLE_CLIENT_SECRET を使った OAuth フローの追加実装が必要です。
DB
Phoenix アプリは PostgreSQL を使います。
開発用接続情報:
- ホスト:
postgres - ユーザー:
postgres - パスワード:
postgres - DB:
testsite_dev
Adminer で確認する場合:
- URL: http://127.0.0.1:8082
- データベース種類: PostgreSQL
- サーバ:
postgres - ユーザ名:
postgres - パスワード:
postgres - データベース:
testsite_dev
8082 が使えない環境では、ADMINER_PORT=任意のポート docker compose up -d のように変更できます。
よく使うコマンド
コンテナ起動:
docker compose up -d
コンテナ停止:
docker compose stop
コンテナ削除:
docker compose down
web コンテナに入る:
docker compose exec web /bin/bash
テスト実行:
docker compose exec -T -e MIX_ENV=test web /bin/bash -lc "mix test"
このコマンドはテストを実行するだけで、ブラウザ画面は更新しません。
format:
docker compose exec -T web /bin/bash -lc "mix format"
このコマンドはコード整形だけを行うため、ブラウザ画面は更新しません。
手動 migration:
docker compose exec -T web /bin/bash -lc "mix ecto.migrate"
このコマンドは DB 構造を更新するためのものです。画面表示を確認する場合は、docker compose up -d で web が起動していることを確認し、ブラウザで http://127.0.0.1:4000/tweet を再読み込みしてください。投稿フォームはログイン後に表示されます。
開発 DB 初期化:
docker compose stop web
docker compose run --rm web /bin/bash -lc "mix ecto.reset"
docker compose up -d web
このコマンドは開発用 DB を作り直すため、登録済みユーザー、つぶやき、いいね、画像レコードは削除されます。アップロード済み画像ファイル自体は apps/tubuyaki/priv/static/uploads に残る場合があります。
おわりに
本サイトについて、codexを使用して駆け足でリプレースしたため、まだまだ拙い部分はありますが、少しずつ完成に近づけていきます