1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

チーム開発終了

Posted at

はじめに

チーム開発が無事終了しました!
早い気もするし、長かった気もします😂
今回はチーム開発を振り返って、こうすれば良かったなーなど振り返ります。
個人的なメモになりますので、ご容赦ください🙇

チームビルディングについて

🌱チームメンバーは皆さん話しやすく、とても明るい雰囲気で開発を進めることができました!
土日は開発に長時間確保することが難しいという事情があり、進捗に対して常に焦りがあったと思います。
自分が進行役ということもあって、実装時間が短く済むよう予習をかなりしました。(一日5時間以上してたと思います。笑)

結果作業分担が少し偏ってしまったので、もう少し分担が均等にできていれば、細かいところにもっと時間を使えたのではないかと後悔しました。

🌱良かった点は、毎朝昨日までの進捗報告をしてマージをしていたことです。
ブランチを最新に保つことで、コンフリクトを減らすことができました。
ただ、レイアウト実装時の作業割り振りが甘く、レイアウト関連ではコンフリクトが起きてしまいました💦

🌱コメントアウトを活用できていなかった
複雑なコードなど、もっとコメントアウトを使用すれば良かったと後悔しています!

実装面について

アクションの記述方法①

例えば、show,edit,updateのアクションの最初にそれぞれ
find(params)でidを探してきて、変数に代入するという記述があったとする。
一つ一つのアクションに記述しても問題はないが、書き方を変えることで一気にコードがシンプルになるとわかった。

customers_controller.rb
class Admin::CustomersController < ApplicationController
  before_action :ensure_customer, only: [:show, :edit, :update]
  
  def show
  end

  def edit
  end

  def update
    customer.update(customer_params)
    redirect_to admin_customer_path(customer)
  end

  private
  
  def ensure_customer
    @customer = Customer.find(params[:id])
  end
end

アクションの記述方法②

条件演算子の書き方の種類
今まではifを使用した条件演算子を利用していましたが、さまざまな書き方があることを改めて認識しました。
【if文使用パターン】

item.controller.rb
  def create
    @item = Item.new(item_params)
    if @item.save
      redirect_to admin_item_path(@item)
    else
      render :new
    end
  end

【if文を使用しないパターン】

item.controller.rb
  def create
    @item = Item.new(item_params)
    @item.save ? (redirect_to admin_item_path(@item)) : (render :new)
  end

アクションの記述方法③

製造ステータスを更新した場合に、注文ステータスを更新する記述
条件分岐が難しく、かなり複雑で読みにくいコードになってしまいました💦
こんなスッキリ描けるのかと驚きました!
(order_detail_paramsは省略しています)

【記事などを参考にした記述】

order_details_controller.rb
class Admin::OrderDetailsController < ApplicationController

def update
  @order_detail = OrderDetail.find(params[:id])
  @order_detail.update(order_detail_params)
  order = @order_detail.order
  if params[:order_detail][:making_status] == "manufacturing"
   order.update(status:"making")
  end

  if is_all_order_details_making_completed(order)
    order.update(status:"preparing_ship")
  end
  redirect_to request.referer
end

private

def is_all_order_details_making_completed(order)
  order.order_details.each do |order_detail|
    if order_detail.making_status != 'finish'
      return false
    end
  end
  return true
end
end

【改善した記述】

order_details_controller.rb
class Admin::OrderDetailsController < ApplicationController
before_action :authenticate_admin!

def update
  @order = Order.find(params[:order_id])
  @order_detail = @order.order_details.find(params[:id])
  if @order_detail.update(order_detail_params) && @order_detail.in_production?
  # もし @order_detailがアップデートされてかつ、製造ステータスが"製作中"だったら
  @order.in_production!
  # 注文ステータスを"製作中"に変える
  elsif @order.are_all_details_completed?
  # 制作ステータスが全て"制作完了"になったら(モデルで定義したものを呼び出し)
    @order.preparing_shipment!
  # 注文ステータスを"発送準備中"に変える
  end
  redirect_to admin_order_path(@order)
end
end

in_production?・in_production!・are_all_details_completed?・preparing_shipment!はモデルにロジックが記載されているため確認します。

order_detail.rb
class OrderDetail < ApplicationRecord
  belongs_to :order
  belongs_to :item

  enum making_status: { cannot_start: 0, waiting_start: 1, in_production: 2, completed: 3 }
# enumで指定したステータスin_productionに?や!のようなRailsの命令規則に従った特殊なメソットが使用できる
end
order.rb
class Order < ApplicationRecord
  belongs_to :customer
  has_many :order_details
  has_many :items, through: :order_details
  
  enum status: { waiting_deposit: 0, confirm_deposit: 1, in_production: 2, preparing_shipment: 3, shipped: 4 }
# enumで指定したステータスpreparing_shipmentに?や!のようなRailsの命令規則に従った特殊なメソットが使用できる

  def are_all_details_completed?
    (order_details.completed.count == order_details.count) ? true : false
  end
end

ロジックをモデルに書くとコントローラーの記述がシンプルになることはわかっているものの…実際にするのは難しいです。

アクションの記述方法④

割と似たような感じですが、orders_controllerもコンパクトな記述に改善されました!

【記事などを参考にした記述】

orders_controller.rb
  def update
   	@order = Order.find(params[:id])
    @order.update(order_params)
    order_detail = OrderDetail.where(order_id: params[:id])
    if params[:order][:status] == "confirm_payment"
      order_detail.update(making_status:"waiting_manufacture")
    end
    redirect_to request.referer
  end

【改善した記述】

orders_controller.rb
  def update
    if @order.update(order_params) && @order.confirm_deposit?
    # もし @orderがアップデートされてかつ、注文ステータスが"入金確認"だったら
      @order.order_details.update_all(making_status: 1)
      # 製造ステータス全てを"製作中"に変える
    end
    redirect_to admin_order_path(@order)
  end

update_allについて
Ruby on RailsのActive Recordのメソッド
Active Recordは、データベース操作を簡単に行えるようにするための機能🌱

order.rb
class Order < ApplicationRecord
  belongs_to :customer
  has_many :order_details
  has_many :items, through: :order_details

  enum status: { waiting_deposit: 0, confirm_deposit: 1, in_production: 2, preparing_shipment: 3, shipped: 4 }
# enumで指定したステータスconfirm_depositに?や!のようなRailsの命令規則に従った特殊なメソットが使用できる
end

モデルの記述方法①

バリデーションで使用する正規表現について

address.rb
class Address < ApplicationRecord
  belongs_to :customer

  validates :postal_code, presence: true, format: { with: /\A\d{7}\z/ }
  validates :destination, presence: true
  validates :name, presence: true

end

format: { with: /\A\d{7}\z/ }の部分が正規表現になります。
今回の場合だと、7桁の半角数字のみ登録が可能という意味です!
詳しくはこの記事がわかりやすかったです。

他にもcustomerコントローラでも同様の処理がありましたので、紹介します。

customer.rb
class Customer < ApplicationRecord

  validates :last_name_kana, presence: true, format: { with: /\A[ァ-ヶー-]+\z/ }
  validates :first_name_kana, presence: true, format: { with: /\A[ァ-ヶー-]+\z/ }
  validates :postal_code, presence: true, format: { with: /\A\d{7}\z/ }
  validates :telephone_number, presence: true, format: { with: /\A\d{10,11}\z/ }
end

カタカナ氏名:format: { with: /\A[ァ-ヶー-]+\z/ }
10桁又は11桁の半角数字:format:{ with: /\A\d{10,11}\z/ }

さいごに

まだまだありそうですが、一旦ここまでにします💦
チーム開発は一人で開発するわけではないので、信頼して任せることも、密にコミュニケーションをとり進捗確認をすることも大事です。
今回は進行役を任せていただきましたので、他の役割になった時にもその経験を活かしていけたらと思います!

これからポートフォリオ頑張るぞ〜👊

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?