2020.8.7の学習ノート2

◆書籍
初学書を終わらせたので、中級書籍を実施。
これの内容をマスターすればrailsプロ名乗れると、amazonに記載ある良書

◆目次

  • 環境構築
  • Railsアプリケーションの新規作成
  • テスト環境の構築
  • 仮設トップページの作成
  • エラー画面の作成
  • ログイン/ログアウト機能の実装
  • ルーティング
  • 管理者が職員のアカウント情報を変更する機能の実装
  • Strong Parameterによるセキュリティ強化
  • アクセス制御の仕組み
  • 管理者が職員のログイン/ログアウトを監視する機能
  • 職員が自分のパスワードを変更する機能
  • フォームプレゼンターを用いたソースコードの改善
  • 職員が顧客アカウントを追加・編集・削除する機能の実装
  • 職員が顧客の電話番号を追加・編集・削除する機能の実装

◆動作環境

  • Ruby2.6
  • Ruby on Rails6.0
  • PosgreSQL 11
  • Linux系

◆開発環境の構築

仮想環境を使う理由

本当のアプリ開発を行うときの課題。作業マシンと実運用の環境が異なること。
環境とは、OSの種類・バージョン、ソフトウェアやライブラリの種類とバージョン。

これらの問題の単純な解決法は、作業マシンとプロダクトマシンの環境を一致させることです。しかし、それはOSを変更し、プロダクションマシンにログインしてVimでコードを書き換えて開発することになります。

そこででてくるのが仮想環境というオプションである。デスクトップOSの上に仮想的な環境を構築し、そこにLinuxベースのServerOSをインストールするのです。

開発中のアプリケーションは仮想環境で動作させます。そして、デスクトップOSのWebブラウザからアプリにアクセスして動作を確認します。他方アプリのソースコードは「共有フォルダ」の機能によって、デスクトップOSで開いて編集します。

Dockerとは
仮想環境を提供するオープンソフトです。設定の容易さと起動の速さで人気があります。
個々の仮想環境をコンテナとよびます。コンテナの中身はDockerfileと呼ばれるテキストファイルで記述されます。このファイルがあればさまざまなOS上でコンテナを復元できます。

Docker Composeとは
Dockerを用いてRailsアプリを開発したり、プロダクト環境で動かすとき、アプリケーションサーバとデータベースサーバを別々のコンテナで構築するのが一般的です。Docker Composeはこれらの複数のコンテナをまとめて起動・停止するためのツールです。後述しますがdocker-compose upというコマンド一つ実行するだけで、Webアプリケーションを構築するコンテナ群が動き出します。

Docker/Docker Composeのインストール

Ubuntu
-古いDocker Engineをアンインストール
sudo apt-get remove docker docker-engine docker.io contained runc
-パッケージ情報を更新
sudo apt-get update
-次のコマンドを実行
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
-Dockerの公式GPG鍵を追加
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
※ここでエラー出たらこれ実行
-次のコマンドを実行
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
-再度パッケージ情報を更新
sudo apt-get update
-Docker Engine と Docker Composeをインストール
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo apt-get install docker-compose
-現在ログインしているユーザでdockerコマンドを実行できるようにする
sudo usermod -aG docker $(whoami)
最後にバージョン番号を確認
docker --version
docker-compose --version
-ログアウトして,再ログインする

Rails開発環境の構築

Gitのインストール
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git

Rails開発用コンテナ群の構築
git clone https://github.com/oiax/rails6-compose.git
cd rails6-compose
./setup.sh
Ubuntuの再起動方法について
※エラー:
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
この記事を参考に
$ sudo service docker start
 * Docker is running

docker daemonの公式ドキュメント
rootにて$ sudo docerd
※エラー:perhaps iptables or your kernel needs to be upgraded.
※ここでのエラーはあとでUbuntu18.04で再度トライする
→今は先に進む

コンテナ群の起動と停止
docker-compose up -d
docker-compose stop

開発プロジェクト始動

新規Railsアプリケーションの作成

webコンテナへのログイン

→これは後回し
初期ソースコードの生成

dockerではなくWindows環境でRails実装を行う
rails new baukis -d postgresql --skip-test-unit
-データベースをポスグレ
-test-unitはインストールしない
※もし、rails new でGemfileを抜かしたい場合、--skip-bundleを付す

Gemパッケージのインストール

Gemfileの編集

source 'https://rubygems.org'
git_source(:github) { |repo"https://github.com/#{repo}.git" }

ruby '2.6.6'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails''~> 6.0.3''>= 6.0.3.2'
# Use postgresql as the database for Active Record
gem 'pg''>= 0.18''< 2.0'
# Use Puma as the app server
gem 'puma''~> 4.1'
# Use SCSS for stylesheets
gem 'sass-rails''>= 6'
# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
gem 'webpacker''~> 4.0'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks''~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder''~> 2.7'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Active Storage variant
# gem 'image_processing', '~> 1.2'

# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap''>= 1.4.2'require: false

group :development:test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug'platforms: [:mri:mingw:x64_mingw]
end

group :development do
  # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
  gem 'web-console''>= 3.3.0'
end

group :test do
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara''>= 2.15'
  gem 'selenium-webdriver'
  # Easy installation and use of web drivers to run system tests with browsers
  gem 'webdrivers'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data'platforms: [:mingw:mswin:x64_mingw:jruby]
不要な下記を削る(->今回はWinなのでやはり削らない)
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data'platforms: [:mingw:mswin:x64_mingw:jruby]
そして、下記を足す
gem 'bootsnap''>= 1.4.2'require: false

gem "bcrypt"
gem "rails-i18n"
gem "kaminari"
gem "date_validator"
gem "valid_email2"
gem "nokogiri"

group :development:test do
RSpecのGemパッケージも組み込む
  gem 'webdrivers'
  gem 'rspec-rails'
  gem 'factory_bot_rails'
end
bin/bundleコマンドの実行

Gemパッケージのインストールをします
bin/bundle
インストール完了で,
ディレクトリにGemfile.lockというファイルが生成される
bin/bundle list
でアプリが利用するGemパッケージのリストが表示できる

JavaScriptパッケージのインストール

JavaScriptパッケージインストールにはyarnコマンドをうつ。
yarnコマンドは、実行時にyarn.lockファイルの有無を調べて、なければpackage.jsonファイルの中身を見て、必要なパッケージ群をインストールして、インストールしたパッケージのリストとバージョン番号をyarn.lockファイルに書き込みます。
JavaScriptパッケージをupdateしたいときは、yarn upgradeをうちます。

データベースのセットアップ

database.ymlの編集

config/database.ymlを開いて編集する

  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: db
  username: postgres
  password""
データベースの作成

次のコマンドを実行して、データベースを作成する
bin/rails db:create
※エラーdb:hostにしてエラーが出たので、
対処としてhost: localhostにて対処した。
→明日対処すること!

その他準備作業

ドキュメントの整備

Readme.mdにアプリケーションの基本的な情報を書く。
記述すべき情報は例えば以下のようなものです。

  • アプリケーションの簡単な説明
  • 推奨されるシステム環境
  • インストールの手順
  • データベース初期化の手順
  • テストの実行手順
アプリケーションルートの下に、MIT-LICENSE.txtを配置すること

タイムゾーンとロケールの設定

config/application.rb
・シングルクォートをすべてダブルクォートに置換する
require_relative "boot"

require "rails/all"

Bundler.require(*Rails.groups)

module Baukis
  class Application < Rails::Application
    config.load_defaults 6.0

  end
end
・timezone/localeを付与する

    config.load_defaults 6.0

    config.time_zone = "Tokyo"
    config.i18n.load_path +=
      Dir[Rails.root.join("config","locales","**","*{rb,yml}").to_s]
    config.i18n.default_locale = :ja

ロケールファイルの情報を再帰的に取り込んでjaに設定する

ジェネレータの設定

ジェネレータが親切すぎるので設定を変更する。初期構築をfalseにする。
    config.generators do |g|
      g.skip_routes true
      g.helper false
      g.assets false
      g.test_framework :rspec
      g.controller_specs false
      g.view_specs false
    end

hostsファイルの設定

三種類のユーザごとにトップページURLが変更。そのためにはlocalhostに相当する127.0.0.1にexample.com/baukis2.example.comを設定する。
ホストOS側で設定すること。hostsというファイルを管理者で編集すること
\windows\system32\drivers\
Ubuntu]  /etc/
127.0.0.1 example.com baukis2.example.com
Blocked Hostsの設定

ブラウザがRailsアプリにアクセスする際にホスト名を制限するものです。
デフォルトではlocalhostのみ許可されているので、上記二つをホワイトリストに登録する
Rails.application.configure do
    config.hosts << "example.com"
    config.hosts << "baukis2.example.com"
end

web-consoleの設定

debagツールですが、127.0.0.1しか受け付けない設定なのでDocker => hostOSのアクセス状態でコンソールが応答しない。これを回避するため、config/enviormentsのdevelopment.rbを書き換える

  # Use an evented file watcher to asynchronously detect changes in source code,
  # routes, locales, etc. This feature depends on the listen gem.
  # config.file_watcher = ActiveSupport::EventedFileUpdateChecker
  config.web_console.whitelisted_ips = ["172.16.0.0/12"]
end
172.16.0.0/12は172.16.0.0~172.31.255.255までのアドレス範囲の指定
アプリケーションの動作確

Next Post Previous Post
No Comment
Add Comment
comment url