todoアプリ開発の備忘録
はじめに
普段はLinux系のインフラエンジニアとして業務に従事しています。現在はオンプレミス環境が中心ですが、今後はクラウド分野にも挑戦したいと考えており、その一環としてポートフォリオを鋭意制作中です。
ポートフォリオのゴールは、AWSのリソースを活用した3層構成のアプリケーションを構築・運用することです。まずは、シンプルなToDoアプリをローカル環境で作成し、その後EC2上にデプロイする予定です(あくまでインフラの構築・運用が主目的のため、アプリ自体の機能にはあまりこだわっていません)。
- 開発環境:macOS
- 言語:ruby(3.4.4), Rails(8.0.2), html, css, tailwind, git, postgreSQL(17.5)**
1.アプリの作成
rails newコマンドでアプリの作成。
% rails new todo -d postgresql
todoという名前のアプリを作成。
またdオプションでpostgreSQLをデータベースに指定する。
2.database.yml
データベースをpostgreSQLのユーザーで操作できるよう、下記記述を変更。
default: &default
adapter: postgresql
encoding: unicode
username: user
password: <%= ENV['PG_PASSWORD'] %>
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: todo_development # 開発用データベース名
test:
<<: *default
database: todo_test # テスト用データベース名
データベースのユーザーは予め作成しておいたuserを使用。
パスワードはアプリ内の環境変数(PG_PASSWORD)に設定する。
※database.ymlに直接パスワードを書くのは推奨されない。
アプリのトップディレクトリにいる事を確認し".env"ファイルを作成。
touch .ebv
echo "PG_PASSWORD=ここにパスワード" >> .env
※アプリで使用するpostgreSQLユーザーのパスワードを.envに追記。
※.envの記述内容をrailsは環境変数として認識してくれる。
3.データベースの作成
データベースの作成とマイグレーションを行う
% rails db:create
% rails db:migrate
- rails db:create -> データベースの作成
- rails db:migrate -> データベースにテーブルなどの構造を作る処理
(補足)
% rails db
psql (17.5 (Homebrew))
"help"でヘルプを表示します。
user=> \db
テーブル空間一覧
名前 | 所有者 | 場所
------------+--------+------
pg_default | ***** |
pg_global | ***** |
(2 行)
データベース:アプリケーションごとのデータの「箱」。例:todo_development など。
テーブル空間:データベースの物理的な保存場所。PostgreSQL内部の仕組み。
pg_default / pg_global:PostgreSQLが最初から持っている標準のテーブル空間。すべてのデータは通常 pg_default に保存される。
rails構築中にデータベースについて理解したこと
4.アプリ接続
アプリの雛形作成後、アプリが起動できるか確認。
% rails s
=> Booting Puma
=> Rails 8.0.2 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 6.6.0 ("Return to Forever")
* Ruby version: ruby 3.4.4 (2025-05-14 revision a38531fd3f) +PRISM [arm64-darwin24]
* Min threads: 3
* Max threads: 3
* Environment: development
* PID: 18974
* Listening on http://127.0.0.1:3000
* Listening on http://[::1]:3000
Use Ctrl-C to stop
http://127.0.0.1:3000にブラウザからアクセスしてみる。
無事デフォルトページが表示された。
5.scaffoldで骨組み作成
ToDoの項目として「タイトル、説明文、期日、優先度、完了フラグ」を設定。
% rails generate scaffold Task \
title:string \
description:text \
due_date:date \
priority:integer \
done:boolean
migrateでデータベースに反映。
rails db:migrate
== 20250617002612 CreateTasks: migrating ======================================
-- create_table(:tasks)
-> 0.0052s
== 20250617002612 CreateTasks: migrated (0.0052s) =============================
試しにhttp://localhost:3000/tasks/newにアクセスしてみる。
こちらもToDo登録画面が無事に表示された。scaffoldによりCRUDの基本設定も済んでいるので、ToDoリストを作成したり削除したりもできる状態。
さいごに
とりあえず必要最低限のアプリは完了しました。
以下の図はデプロイ後のAWS構成のイメージです。今後はこのToDoアプリを土台に、AWSへのデプロイを進めていく予定です。
Discussion