Code Monkey home page Code Monkey logo

genba-rails's People

Contributors

tobibako45 avatar

Watchers

 avatar

genba-rails's Issues

Reactを導入

Reactとは?

仮想DOMと呼ばれるデータ構造をメモリに上に持ち、ページ変化の差分のみをレンダリングすることで効率的にページ表示。更新することができる。

インストール

React は、npmのパーッケージとして公開されてる。
ブラウザ上で実行するには、ReactDOM も必要。

なので、2つをインストール

$ bin/rails add react react-dom

サービスクラス

複数のモデルが絡む特定処理の専門家を作る

【本の例え】
ポイントをためてクーポンと交換することができるアプリケーション。

登場するモデルは「ユーザー」と「クーポン」
この2つは強い関係性がないから、
ユーザーモデルで「クーポン数に限りがある」とか、
クーポンモデルで「ユーザーの保有ポイントがあるか」とかには立ち入りたくない。

なので、

「クーポン交換」という、特定の処理の専門家クラスを用意する。

本では、app/models/copon_exchange.rb で、modelsディレクトリの中に作ってる


特定の処理の専門家のオブジェクトを作成する設計パターンを サービスオブジェクト(またはサービスクラス) と呼ぶ。
このクラス名や実行のメソッド名は、それがサービスクラスとして働くことを示す一貫性のある名前をつけるとわかりやすくなる。

クラス名の付け方の例としては、
ExchangeCouponのように、わざと動詞のクラス名にしたり、CouponExchangeServiceのように Serviceで終わる名前にするやり方もある。

専門家クラスを作る際は、あくまでその特定の処理一つのみに専念し、管轄を小さく留める
ように努める。
また、処理の記述の中では、モデルの提供する操作を呼び出す ようにし、モデルに書くべき詳細を長々と書かないように気をつける。

Yarn備忘録

yarnってなに?

JSのパッケージマネージャ
「パッケージ」とはライブラリの公開単位で、コードなどのファイルをひとまとめにしたもの。

npmが従来よく使われていた。

参考。インストールなど
yarnを使ってみた
npmから乗り換えてわかったYarnの4つのメリット


インストール

$ npm install -g yarn

Macでhomebrewを使っているなら

$ brew update
$ brew install yarn

で、

.base_profile にPATHを通す。

export PATH="$HOME/.yarn/bin:$PATH"

モジュールを上手に利用するために

モジュールを利用する際に以下の5つの原則を念頭に置くこと(おすすめ)

  1. 構造として分かりやすい意味をもたせる
  2. 利用元クラスの一部として違和感がないか検討する
  3. 利用元クラスと内部データが共有していることを意識する
  4. 独立的にして利用条件をわかりやすくする
  5. 追加部品であるという節度を守る

Turbolinks備忘録

Turbolinks専用のイベントを使わないとダメ。

Turbolinksを利用している場合は、

docdocument.addEventListener('turbolinks:load', function () {
   console.log('Hellow wprld!');
});

としないと、正しく動かない。
$(document).ready()やwindow.onloadとかはうまく動かない。

既存のJS資産を流用する場合も対応させておく必要がある。

モデルの共通化

Concern? コンサーン?

Rails 共通部分を切り出す

Mix-inと何が違うわけ?

これがわかりやすかった
ActiveSupport::Concern の存在理由


複雑な記述が省略できる。

module Common
  extend ActiveSupport::Concern

  included do
    # ここにcallback等
  end

  # メソッド
  def categories
    ArticleCategory.order(:id).all
  end

  private

  # privateメソッド

end

呼び出し

class ArticlesController < ApplicationController
  include Common

  def index
    @categories = categories
  end

end

複雑な依存関係を考えずにすむ。

Mix-inだけだと

class Hoge
  # AはBのために先にincludeしないといけない
  include A 
  include B
end

concernを使うと、

require 'active_support/concern'

module A
  extend ActiveSupport::Concern
  ...
end

module B
  extend ActiveSupport::Concern
  include A
  ...
end

class Hoge
  # Bだけをincludeしても動く
  include B
end

モデルクラスのconcernは、app/models/concernディレクトリに。
コントローラークラスのconcernは、app/controller/concernディレクトリに。

ビュー(プレゼンテーション)の共通化

ビューの共通化は大き分けて2つ

テンプレートの共通化

  • パーシャルテンプレートで画面の共通化
  • レイアウトで画面の大枠を共通化する

ロジックの共通化

  • カスタムヘルパーに共通処理を記述する
  • Docoratorパターンでモデルに固有の教示ロジックを分離する

config/datebase.ymlとセキュリティ

DBの設定を記述するconfig/datebase.ymlについて、
本番環境または各々の開発環境のユーザー名やパスワードが書かれることがあるので、gitでバージョン管理を行うと、GIthubとかで公開してしまう恐れがある。

これを避けるためにも、通常database.ymlは直接バージョン管理の対象とせず、
ユーザー名やパスワードを記述しない状態で、detabase.yml.example等の名称でバージョン管理を行い、各開発マシンでそれをリネームして利用する方法が取られる。

マイグレーションに注意する

ロールバックできることを確認する

  • バージョンを上げる際のスキーマ
  • バージョンを下げる際のスキーマ

この両方をちゃんと兼ね備える。

「どの値からどの値へ変更するか」 を知らせるようにする。

Webpacker備忘録

Webpackerとは

JavaScriptのビルドツール「Webpack」のラッパーで、RailsアプリケーションでWebpackを使ってJavaScriptを管理することを簡単にしてくれるGem。

より大きなプロジェクト、もしくはJavaScriptでアプリケーションのGUIを作り込むときは、
Sprocketsでは物足りない。

特徴

  • WebpackerのコマンドをRakeタスクでラップして提供
  • BabelによるES2015コードのコンパイル
  • React/Veu.js/Angularなどのサポート
  • Rails用のビューヘルパーの提供

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.