RailsのHotwireでECサイトもどきを作る
プロジェクトのセットアップ
YuheiNakasaka/docker-rails-basisを元にサーバーが起動できるようになるところまで一旦やる
credentialsの設定
Rails セキュリティガイド - Railsガイド
config/credentialsを作り、config/master.keyとconfig/master.yml.encをdevelopment.keyとdevelopment.yml.encとリネームして配置する
development.keyは.gitignoreに追加する
credentials関連のコマンド
ファイルの中身を確認
$ bin/rails credentials:show -e development
編集
$ EDITOR="vim" bin/rails credentials:edit -e development
credentialsに定義した値はRails.application.credentials.some_api_keyみたいな感じでアクセスできる
DBのcredentialsの設定だけとりあえずやっておく
database/username/password/host/port/poolをconfig/database.ymlに追加
application.rbの設定
loggerとgeneratorの初期設定
Redisの設定
redisのgemを追加してbundle install。
config/application.rbに:redis_cache_storeを追加
Gemの追加
とりあえずdeviseとstripeを追加。このあと必要になり次第逐一追加していく。
Deviseで認証機能を作る
認証機能を実装しようをやってく
とりあえずrails g devise:install
Depending on your application's configuration some manual setup may be requiredと出るので指示に従って各種設定
AdminテーブルとCustomerテーブルを追加
$ rails g devise Admin
$ rails g devise Customer
customersテーブルにnameとstatusを追加。statusはenumで管理する。この辺最近はどう管理するのがベストなんだろ?
Railsのenumを使いこなす方法(翻訳)|TechRacho by BPS株式会社やRails 7のenumに新しい構文が導入(翻訳)|TechRacho by BPS株式会社を読むのがよさそう
controllerとviewもシュッとやってしまう
$ rails g devise:controllers admins
$ rails g devise:controllers customers
$ rails g devise:views admins
$ rails g devise:views customers
追加したparamをdeviseで受け付けるようにする。initializers/devise.rbとかadminとcustomersのdeviseのcontrollerに軽く手を入れる
routesも設定
rootのページをまだ作ってなかったので適当に作る
RubocopのFormattingが遅い
VSCodeでRubocopによるFormattingを使ってるが結構遅いのでストレスになってきた
Integrate rubocop-daemon by koic · Pull Request #10706 · rubocop/rubocopのPRがマージされたことで今はserverモードというのが使えるらしい。これを使うとrubocopのプロセスが常駐するようになるので初回の起動時以降は実行がかなり速くなる。
Ruby on Docker環境で高速にrubocopするの記事を参考に設定した
認証機能+αのUI
認証画面の UI を作成しよう|【実践 Ruby on Rails】Stripe を使って EC サイトを作ろう(Rails 7 対応)をやっていく。ただのerbファイルなので不明なところは何もない。
tailwind cssのlintや補完を効かせたいのでextensionを入れた
Tailwind CSS Cheat Sheetが便利。わからんdirectiveを雑に検索できる。
commit前にlintを効かせたい
erbのformatterとlinterとtailwind cssの補完の設定が微妙に噛み合わない。
なので結局辿り着いたのは開発中はtaildwind cssの補完を優先。erbのformattingとlintはcommitする時にovercommitで設定したhooksで検知してもらう。
commitがこけたらrubocop -Aやerblint --lint-all -aをして修正、という流れ。
商品のCRUDを作成
商品に関する機能を実装しよう(管理者)と商品に関する機能を実装しよう(顧客)をガッとやる
カートの実装
カートに関する機能を実装しようを見てガッとやる
決済の実装
Stripe使うやつ。まぁまぁだるいが決済処理を実装しようをガッとやる。
Stripeの準備
サインアップして登録
test環境になってる状態でpublishable_keyとsecret_keyを取得しcredentialsに登録。config/initializer/stripe.rbに情報を追加。
Stripe API reference – Rubyを参考にAPIをやっていく。
決済処理(Stripe側へ登録)->決済->完了->webhookが返ってくる、という流れ
Stripe CLIでローカルホストをTunnelしてwebhooksを受け取れるようになっていて便利
注文履歴系の機能の実装
注文履歴に関する機能を実装しよう(顧客)と注文履歴に関する機能を実装しよう(管理者)をみながら一気にやる
顧客情報の機能の実装
顧客情報に関する機能を実装しようをざっとやる
その他
N+1クエリの対応
退会機能
メール送信
gmailをsmtpに使う
Sidekiqの設定
デプロイ
TODO
リソース
Rails: Evil Martiansが使って選び抜いた夢のgem(翻訳)|TechRacho by BPS株式会社
Stripe API reference – Ruby
Stripe API reference – The Checkout Session object – curl
rails