tobibako45 / genba-rails Goto Github PK
View Code? Open in Web Editor NEW現場で使えるRuby-on-Rails5速習実践ガイド
現場で使えるRuby-on-Rails5速習実践ガイド
仮想DOMと呼ばれるデータ構造をメモリに上に持ち、ページ変化の差分のみをレンダリングすることで効率的にページ表示。更新することができる。
React は、npmのパーッケージとして公開されてる。
ブラウザ上で実行するには、ReactDOM も必要。
なので、2つをインストール
$ bin/rails add react react-dom
【本の例え】
ポイントをためてクーポンと交換することができるアプリケーション。
登場するモデルは「ユーザー」と「クーポン」
この2つは強い関係性がないから、
ユーザーモデルで「クーポン数に限りがある」とか、
クーポンモデルで「ユーザーの保有ポイントがあるか」とかには立ち入りたくない。
なので、
「クーポン交換」という、特定の処理の専門家クラスを用意する。
本では、app/models/copon_exchange.rb で、modelsディレクトリの中に作ってる
特定の処理の専門家のオブジェクトを作成する設計パターンを サービスオブジェクト(またはサービスクラス) と呼ぶ。
このクラス名や実行のメソッド名は、それがサービスクラスとして働くことを示す一貫性のある名前をつけるとわかりやすくなる。
クラス名の付け方の例としては、
ExchangeCouponのように、わざと動詞のクラス名にしたり、CouponExchangeServiceのように Serviceで終わる名前にするやり方もある。
専門家クラスを作る際は、あくまでその特定の処理一つのみに専念し、管轄を小さく留める
ように努める。
また、処理の記述の中では、モデルの提供する操作を呼び出す ようにし、モデルに書くべき詳細を長々と書かないように気をつける。
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"
Turbolinksを利用している場合は、
docdocument.addEventListener('turbolinks:load', function () {
console.log('Hellow wprld!');
});
としないと、正しく動かない。
$(document).ready()やwindow.onloadとかはうまく動かない。
既存のJS資産を流用する場合も対応させておく必要がある。
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ディレクトリに。
DBの設定を記述するconfig/datebase.ymlについて、
本番環境または各々の開発環境のユーザー名やパスワードが書かれることがあるので、gitでバージョン管理を行うと、GIthubとかで公開してしまう恐れがある。
これを避けるためにも、通常database.ymlは直接バージョン管理の対象とせず、
ユーザー名やパスワードを記述しない状態で、detabase.yml.example等の名称でバージョン管理を行い、各開発マシンでそれをリネームして利用する方法が取られる。
この両方をちゃんと兼ね備える。
「どの値からどの値へ変更するか」 を知らせるようにする。
JavaScriptのビルドツール「Webpack」のラッパーで、RailsアプリケーションでWebpackを使ってJavaScriptを管理することを簡単にしてくれるGem。
より大きなプロジェクト、もしくはJavaScriptでアプリケーションのGUIを作り込むときは、
Sprocketsでは物足りない。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.