Rails – プロジェクトの生成と確認

概要

Railsのプロジェクトの開始は、おおむね次の手順による。

  1. プロジェクトファイル群の生成
  2. タイムゾーン設定
  3. MySQLサーバー起動
  4. Railsサーバー起動

ここまででRailsが準備したデフォルトのページが表示される。

手順

プロジェクトファイル群の作成

コマンドラインで以下を実行。RailsはデフォルトでSQLiteを使うので、MySQLを使うためにはプロジェクト生成時に指定する。

rails new project_name -d mysql
rails new project_name --database=mysql

project_nameでディレクトリーが作られ、その下にサブディレクトリ―やファイル群が作成される

タイムゾーンの設定

project_name/config/application.rbファイルを開く

以下の2行をclass Application...endの間、config.load_defaultsの下に追加

database.ymlの編集

MySQLをデータベースに指定しているので、config/database.ymlの編集が必要になる。

最低限、データベースのユーザー名とパスワードをdevelopmentブロックに設定。

MySQLサーバーの起動

以下のコマンドでMySQLサーバーを起動する。

sudo systemctl start mysqld

稼働状況の確認は以下のコマンド。

systemctl status mysqld

Railsサーバーの起動

プロジェクトディレクトリーに移動する。

cd project_name

サーバー起動のコマンドを実行する。

rails s

Rails 6の場合は以下。

rails s -b 0.0.0.0

確認

この段階でホスト側のブラウザーで以下のURLからRailsのデフォルト画面が表示されることを確認。

localhost:3000

ファイル配置

ディレクトリー・ファイルの配置

プロジェクトの削除

  1. データベースを作成している場合、データベースが不要なら削除
    • rails db:drop
    • ただしMySQLレベルでデータベースが一切削除されてしまうので注意
  2. プロジェクトファイル群を削除
    • rm -rf project_name

実行例

実行例概要

demo_appという名前のプロジェクトを生成して結果を確認する。

最初はデータベースを設定せず、MySQLサーバーも起動しない。

プロジェクト生成

database.ymlの修正

config/database.ymlの内容を修正。

  • defaultブロック
    • データベースがmysql2であることを確認
    • usernamepasswordを設定
  • developmentブロック
    • database:はとりあえずコメントアウト
  • testブロック・productionブロック
    • とりあえず全てコメントアウト

最低限の構成は以下のとおり。

Railsサーバー起動

接続確認

ホストのブラウザーからlocalhost:3000に接続し、デフォルト画面を確認。

 

Rails – ファイル配置

Railsバージョン

Rails 6.1.3

ファイル配置

ディレクトリー

.git
  • branches
  • hooks
  • info
  • objects
  • refs
  • HEAD
  • config
  • description
app
  • assets
    • config
    • images
    • stylesheets
  • channels
    • application_cable
      • channel.rb
      • connection.rb
  • controllers
    • concerns
      • .keep
    • application_controller.rb
    • コントローラー名_controller.rb
  • helpers
    • application_helper.rb
    • コントローラー名_helper.rb
  • jobs
    • application_job.rb
  • mailers
    • application_mailer.rb
  • models
    • concerns
      • .keep
    • application_record.rb
  • views
    • layouts
      • application.html.erb
      • mailer.html.erb
      • mailer.text.erb
    • コントローラー名
      • アクション名.html.erb
bin
  • bundle
  • rails
  • rake
  • setup
  • spring
  • webpack
  • webpack-dev-server
  • yarn
config
  • envitonments
    • development.rb
    • production.rb
    • test.rb
  • initializers
    • application_controller_renderer.rb
    • assets.rb
    • backtrace_silencers.rb
    • content_security_policy.rb
    • cookies_serializer.rb
    • filter_parameter_logging.rb
    • inflections.rb
    • mime_types.rb
    • permissions_policy.rb
    • wrap_parameters.rb
  • locales
    • en.yml
  • webpack
    • development.js
    • environment.js
    • production.js
    • test.js
  • application.rb
  • boot.rb
  • cable.yml
  • credentials.yml.enc
  • database.yml
  • environment.rb
  • master.key
  • puma.rb
  • routes.rb
  • spring.rb
  • storage.yma
  • webpacker.yml
db
  • seeds.rb
lib
  • assets
  • tasks
log
  • .keep
  • development.log
node_modules
  • 多数のライブリーディレクトリー
public
  • packs
    • js
  • 404.html
  • 422.html
  • 500.html
  • apple-touch-icon-precomposed.png
  • apple-touch-icon.png
  • favicon.ico
  • robots.txt
storage
  • .keep
test
  • channels
  • controllers
  • fixtures
  • helpers
  • integration
  • mailers
  • models
  • system
  • test_helper.rb
tmp
vendor
  • .keep

ファイル

  • .browserslistrc
  • .gitattributes
  • .gitignore
  • .ruby-version
  • Gemfile
  • Gemfile.lock
  • README.md
  • Rakefile
  • babel.config.js
  • config.ru
  • package.json
  • postcss.config.js
  • yarn.lock

Rails – erbのコメントアウト

概要

Railsで生成される.html.erbファイル中のスクリプト部分のコメントアウトについて。

たとえば以下のコードをコメントアウトする場合。

<!– —>は使えない

HTMLのコメントアウトでは実行を抑止できない。

#~1行コメント

Rubyの#で1行をコメントアウトできる。HTMLソース中には表示されない。

スクリプトタグの中でコメントアウトする場合、既存の<%の後ろに#を追加。

スクリプトタグの外でコメントアウトする場合、先頭に<%#を追加。この場合は最初に%>が現れるまでの内容がコメントになるので、末尾に%>を追加しなくてもよい。コメントアウトを戻すときも先頭の<%#だけを削除。

=begin…=end~複数行コメント

Rubyの=begin...=endによる複数行コメントを使う。=begin=endとも行頭になければならない。

ファイルの末尾でエラーが出ることがあり、見栄え・打ち込みやすさの点からあまりよろしくない。

<% if false %>…<% end %>

falseで実行されないifクローズで該当する部分を囲む方法。

直感的にコメントだと認識し難いのが難点。

空のメソッドで囲む方法

共通で参照可能な場所に以下のような関数を定義する。

そしてコメントアウトしたい部分を関数で囲む。

 

Vagrant/CentOS7 – Railsのインストール

概要

Vagrant + VirtualBox + CentOSの環境にRuby、MySQLをインストール後、Railsをインストールするのにいろいろと躓きながら進めた記録。

構成

  • Vagrant : 2.2.14
  • VirtualBox : 6.1.18
  • Box : bento/CentOS-7.7
  • mysql : Ver 8.0.23 for Linux on x86_64
  • Ruby : ruby 3.0.0p0
  • Rails : Rails 6.1.3

インストール概略

階層が下のものは今回必要になったもの。

  • SELinux、firewalldの停止
  • Railsインストール
    • sasscインストール
      • g++インストール
    • mysql-develインストール
      • Node.jsインストール
  • Railsサーバー実行
    • webpackerインストール
      • Node.jsインストール(再掲)
      • Yarnインストール

利用手順

アプリケーション生成

sqlite3がデフォルトで未インストールではエラーが出るため、コマンドラインでmysqlを指定。

  • rails new app_name -d mysql
  • rails new app_name --database=mysql

database.ymlの修正

データベースを使わない場合は、development、test、productionの各database:をコメントアウト/削除。

Railsサーバー起動

アプリケーションディレクトリー内で以下を実行。

rails s -b 0.0.0.0

ブラウザから以下でアクセス。

localhost:3000

Railsに影響する機能の停止

Railsをインストール・稼働させるにあたって、Railsに影響を与える機能を停止させる。

SELinux

アクセス制御機能のSELinuxのステータスがEnforsingの場合にはPermissiveになるよう設定する。

firewalld

ファイアーウォール・サービスfirewalldが有効の場合は無効化する。

Railsのインストール

Rails本体のインストール

インストール後のバージョン確認。

エラー1~アプリ生成時~sassc

sasscパッケージがない

Railsインストール後にアプリケーションを生成しようとすると、sasscインストール時にエラーとなる。

sasscインストール時にg++がない

メッセージに従ってsasscをインストールしようとするとエラーになる。g++がないのが原因らしい。

参考サイト:centos7でsassc 2.0.0 with native extensionsのインストールに失敗

gcc-c++はあるようだが・・・

インストールしてみる。

sasscのインストール成功

gcc-c++をインストールしてみると、無事sasscがインストールできた。

エラー2~アプリ生成時~sqlite3

sqlite3エラー

再度アプリケーションを生成すると、まだsqlite3に関するエラーが残っている。使いたいのはmysql。

mysql-develのインストール

mysqlを使いたいので、mysql-develの存在を確認。

yum list | grep mysql-devl

存在しない場合はインストール。

Node.jsがないというエラー

生成時にエラーが発生したアプリケーションをいったん削除し、データベースにmysqlを指定してアプリケーションを生成。

railsサーバー起動でもエラー

webpackerエラー

ここでいったんrails sでサーバーを起動すると、webpackerの設定ファイルがないというエラー。

webpackerインストールエラー

webpackerインストール時の”Please run rails webpacker:install”に従ってインストールしようとすると、ここでも”Node.jsがない”というエラーが出てサーバーが起動しない。

Node.jsのインストール

アプリケーション生成時、Railsサーバー実行時に共通してNode.jsに関するエラーが出ているので、Node.jsをインストール

当初、最新版のv15.10.0をインストールした。

再度webpackerインストールでエラー

再度webpackerをインストールしようとすると、Node.jsの警告とYarnに関するエラーが出てストップ。

Node.jsのダウングレード

Node.jsの警告も気持ち悪いので、ダウングレード。

ダウングレードしたNode.jsを使用。

ここで再度webpackerをインストールしようとすると、まだ”Yarnがインストールされていない”というエラーが残っている。

Yarnのインストール

npmでYarnをインストールする。

参考:Yarn公式サイト

webpackerインストール

Node.jsとYarnがそろったので、webpackerがインストールできた。

Railsサーバー起動・接続

vagrantfile設定

vagrantfileには以下の1行を設定している。

サーバー起動・接続

ここでrails sでサーバーを起動するが、ブラウザーがつながらない。

参考サイト(Rails4.2:Vagrant上の仮想マシンで起動したRailsにホストのブラウザからアクセス出来ない)のおかげで、Railsサーバーを以下で立ち上げるとよいことが分かった。

この状態で、ホストのブラウザーからlocalhost:3000でつながった。

アプリケーション生成~成功

ここで再度アプリケーションを生成して成功。

viなどでdatabase.ymlを修正。

Railsサーバー起動。

ホストのブラウザーからlocalhost:3000で接続。

Vagrant/CentOS7 – rbenv/Rubyインストール

概要

VagrantのCentOS7仮想環境にrbenv&Rubyをインストールした記録。

  • ホスト:Windows10
  • ゲスト:Vagrant + VirtualBox + bento/CentOS-7.7

Gitのインストール

yumによるGitのインストール

suでyumを実行してGitをインストールする。

確認

rbenvのインストール

ユーザー環境へのrbenvのダウンロード

カレントディレクトリーの確認。

Gitでユーザー環境にrbenvをclone(ダウンロード)。

/home/vagrand下に.rbenvフォルダーが作成され、その下にフォルダー・ファイル群が展開される。

.bash_profileの設定

$PATHの確認

.bash_profileの確認

PATHの追加

$echo 'export PATH=通したいパス:$PATH' >> .bash_profile

rbenvの場合は

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

起動時のrbenv init実行設定

echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

設定後の.bash_profile

.bash_profileを修正したら、ターミナルを再起動して.bash_profileを反映させる。

rbenvの確認

ruby-build

ユーザー環境へのruby-buildのダウンロード

Gitでユーザー環境にruby-buildをclone(ダウンロード)。

Ruby

ライブラリーのインストール

gcc, make, openssl-devel, readline-develが必要になるので、yumでインストール。

インストール可能なパッケージの確認

ruby-envでインストール可能なパッケージを確認する。

  • -listは最近の安定バージョンのみ表示
  • --list-allはインストール可能な全バージョンを表示

Rubyのインストール

今回は3.0.0をインストール。3~4分ほどかかった。

デフォルトのRubyの設定

通常使うRubyにダウンロードした3.0.0を設定。

確認

参考サイト

 

MySQL – 初期値の設定

列の初期値を設定するには、対象の列でDEFAULT VALUEを定義する。

 

Ruby – ファイル操作 – CSV

ライブラリーの読み込み

ライブラリーのcsvを読み込む。

require "csv"

CSVファイルの書き込み

ファイルのオープン

モードを指定してファイルを開き、CSVオブジェクトを取得(モードはファイル操作を参照)。

csv = CSV.open("ファイル名", "モード")

行単位の書き込み

カラム数を要素数とする配列でputs()メソッドを使う。

csv.puts([col1, col2, ... ])

'<<'演算子でもよい。

csv << ([col1, col2, ... ]

ファイルのクローズ

csv.close

CSVファイルの読み込み

ファイルのオープン/クローズは不要で、read()メソッドで直接一括読み出し。

array = csv.read

結果は2次元配列で、行数がレコード数、列数がカラム数。

 

Ruby – 日付と時刻

現在時刻

現在時刻はTimeクラスのnowメソッドで取得。

Time.now

フォーマッティング

Timeクラスのstrftime()メソッドで日付・時刻を書式整形した文字列が得られる。

time.strftime("書式文字列")

典型的な書式の例

time.strftime("%Y/%m/%d %H:%M:%S")

 

Rails – 基本操作

ビューの記述

コントローラー作成時にアクションを指定した場合

ビューは以下のHTMLファイルに準備されているので、その内容をHTMLで記述する。

app/views/controller_name/action_name.html.erb

あとからアクションを追加する場合

以下のファイルを作成し、その内容をHTMLで記述する。

app/views/controller_name/action_name.html.erb

各ビューに共通するビュー

各ビューのファイルはbodyタグの中だけを書くが、HTML全体の枠組みやHEAD要素など各ビューに共通の内容は以下のファイルに書かれている。

app/views/layouts/application.html.erb

SCSS

コントローラーごとに以下のSCSSファイルでスタイル指定する。

app/assets/stylesheets/controller_name.scss

stylesheetsディレクトリー下のSCSSファイルは全てのビューに適用される。

フォーム送信

HTML

HTMLのformタグの代わりにヘルパーメソッドが使える。

<%= form_tag("送信先URL") do %>
<% end %>

送信先URLは"/controller_name/action_name"のような形で指定する。form_tagメソッドはデータをPOST形式で送る。

routes.rb

また、POSTに対して指定したメソッドが起動するようにroutes.rbでルーティングを設定する。

post '/controller_name/action_name', to:'controller_name#action_name'

controller_name_controller

コントローラーのファイルでで定義されているコントローラークラスにアクションメソッドを追加する。

この段階でもsubmitボタンを押すとコンソールでデータが渡されているのが確認できる。

 

PHP – array_map

概要

array_map()関数は、引数で指定した配列の各要素にコールバック関数を適用した配列を返す。

コールバックの指定方法として、文字列で関数名を渡す方法と、Ver5.3.0以降ではラムダ関数を引き渡す方法がある。

コールバックを文字列で渡す方法

以下の処理では、array_map()の第1引数に文字列でコールバックの関数名を渡している。

コールバックをラムダ関数で渡す方法

以下の処理では、ラムダ式で無名関数を変数にバインドし、array_map()の第1引数にその変数を渡している。結果は上と同じ。

無名関数を直接渡す方法

以下の処理では、無名関数を変数にバインドせず、array_map()の第1引数に直接書いている。