【Rails】チュートリアルをきちんとやってみる 1

こんにちは、しきゆらです。
今回は、Railsさんと仲良くなるための施策として、公式のチュートリアルを進めながら理解を深めていこうと思います。

Railsと戯れることが多いのですが、まだまだ仲がいいとは言えません。
デプロイで苦戦した記憶があるのと、Rails流のお作法をきちんと把握しきれていないことが要因です。
そこで、手軽にできて楽しそうなRailsチュートリアルを一通りふれながらRails流のお作法を学んで行きます。

今回は、Rails Guidesにある「Railsをはじめよう」というものをやっていきます。
基本はガイドにある通りですが、一部違うことをすることがあるかもしれません。
この時はきちんと記載します。

 

0. なぜ本ではなく無料のガイドを使うの?

Railsに強い先輩に、良さげな本はないかを聞いたところ、本よりも公式情報のほうがよい、ということを伺いました。
実際、少し見てみるとブログや技術系サイトの情報よりもわかりやすかった気がします。

あとは、大きい要因としては公式情報なので信用できるはずだからです。
発売されている本は、間違っていないか等をきちんと調査しているとは思いますが、動かなかった場合

  • 自分の環境・記述が悪い
  • 本の内容が間違えている
  • Rails、関連するライブラリのバグ

等々様々な要因が考えられるわけです。

たいていの場合、自分の環境や記述が間違えていることが多いですが、本の内容自体が間違えていることも意外と多くあります。
また、本の場合は情報の更新がされないので、本革のミスの場合は正誤表を確認しながら作業を進めないといけません。
これは面倒ですよね。

その点、Rails Guidesは(ほぼ)公式情報である上に、きちんと最新情報も書かれているようです。
安心感が違いますよね。
一応、公式サイトや定義を確認しようということもいわれたので、公式のものを使っていきます。

では、実際にガイドをもとに作業を進めていきます。


 

1. Railsとは何か

RailsはRubyでできたWebアプリケーションフレームワーク。
まぁそうですね。

Railsは、最善の開発方法というものを一つに定める、という思想の素設計されたフレームワーク。
(いわゆる、これがRails流のお作法の部分)

Railsの哲学には、以下2つのの基本理念があります。

  • 同じことを繰り返すな(DRY)
    • コピペするのではなく、部品を作っておきそれらを組み合わせてシステムを構築する
    • 部品を修正するだけで改修作業ができる、コードの編集や保守がしやすい
  • 設定より規約が優先される
    • 設定ファイルによるものではなく、最善の方法と考えられる思想の通りに全てが行われている
    • ファイルの命名規則、メソッド名、ルーティング等は全て規約に従う
      • ゴミかすのような設定ファイルを読み込まなくても、お作法にのっとればよい

Railsは設定がないのがわかりにくい要因として考えていましたが、そもそもが規約に準拠しているということ。
このお作法をきちんと把握していれば、戸惑うことはほぼないでしょう。
あとはRailsのお作法と、付随するライブラリやミドルウェアのお作法も押さえておくと強くなれそうですね。

1.1 Railsのインストール

RailsはGemとして配布されているので、導入自体はとても簡単。
基本的には、bundlerで管理していくことになります。

一応、ここでは今後進めていく上で重要になるかもしれない環境をメモしておきます。

  • OS:Windows10 Home Insider Preview Build1903
  • メモリ:16GB
  • Ruby:2.6.3
  • Rails:5.2.3
  • 備考:WSL2を導入し、WSL2上のUbuntuで作業を行う

ガイドと異なる部分としては、SQliteではなくMySQLを利用する点です。
MySQLのインストール手順は以下の通り。

1.1.1 MySQLのインストール

こちらも、MySQL公式サイトの手順をもとに進めていきます。

まずは、MySQLのリポジトリ情報を取得します。
URLはこちら:https://dev.mysql.com/downloads/repo/apt/

debファイルをダウンロードしたら、インストールします。
バージョン名は適宜読み替えてください。

[bash]
sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
[/bash]

 

リポジトリ情報をインストールしたら、あとは普段のインストール手順と同様です。
パッケージ情報の更新を行った後に、MySQLをインストールします。

[bash]
# パッケージ情報の更新
sudo apt update
# MySQLのインストール
sudo apt install mysql-server
# mysql2をインストールするために、以下のものも入れておくとよい
sudo apt install libmysqlclient-dev
[/bash]

 

MySQLには、5.7系と8.0系の2つが存在します。
個人的には最新のものを使って起きたので、今回は8.0系を使っていきます。
メジャーバージョンの切り替えは、以下のコマンドで行えます。

sudo dpkg-reconfigure mysql-apt-config

すると、以下のような画面が表示されます。

「MySQL Server & Cluster」を選択し、ほしい方のバージョンを選択するだけ。

選択後は「OK」を選択すると設定完了です。

今回は、上ですでに5.7系がインストールされているのでupgradeする必要があります。

[bash]
# 念のためアップデートしておく
sudo apt update
# MySQLのアップグレード
sudo apt upgrade
[/bash]

これにて、MySQLの導入は完了です。
ここからは、再びRails Guidesに沿って進めていきます。

2. プロジェクトの新規作成

ここでは、blogというプロジェクトを作っています。
操作は以下の通り。

[bash]
# MySQLを使うように明示している点に注意
bundle exec rails new blog -d mysql
# 作成されたプロジェクトディレクトリへ移動
cd blog
# 作成されたファイル群
tree . -L 1
├── Gemfile
├── Gemfile.lock
├── README.md
├── Rakefile
├── app
├── bin
├── config
├── config.ru
├── db
├── lib
├── log
├── package.json
├── public
├── storage
├── test
└── tmp
[/bash]

たったこれだけでたくさんのファイルが作成されていますね。

2.1 MySQLの設定

上記までで基本的なことは完了ですが、MySQLに接続することができません。
その設定を行っていきます。

まずは、MySQL自体の設定です。
Railsが扱うことができるDBとユーザを作成していきます。

[bash]
> create user rails_tutorial_blog identified by 'XXX’; # xxxというパスワードでログイン
> create database hoge; # hogeという名前のDBを作成
> grant all on *.* to rails_tutorial_blog; # 先ほど作成したユーザへ全ての権限を付与
> exit
[/bash]

これにて、ユーザの作成とDBの作成、ユーザへの権限付与が完了です。

次に、RailsがMySQLに接続できるようにするための設定を行います。

以前までは、機密情報はsecrets.ymlというファイルに記録していたようですが、最近は「config/credentials.yml.enc」に記録するようです。
ただし、このファイルは暗号化されており普通には開けません。
そこで、以下のコマンドから編集していきます。

[bash]
# Emacsを使って、ファイルを編集
EDITOR=emacs bundle exec rails credentials:edit

# 適宜、開いたファイルに必要項目をyml記法で追記
DB_USERNAME: rails_tutorial_blog
DB_PASSWORD: xxx
[/bash]

今回は、MySQLに接続するために必要なユーザ名とパスワードをここに記載しました。
他のツール等の接続情報や、外部に公開したくないけど必要な項目等はここに記載するとよいのではないかと思います。

2.2 Railsの設定

次に、RailsのDBに関する設定ファイルに必要項目を追記します。

[yaml]
# database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  socket: /var/run/mysqld/mysqld.sock
  username: <%= Rails.application.credentials[:DB_USERNAME] %>
  password: <%= Rails.application.credentials[:DB_PASSWORD] %>
 
development:
  <<: *default
  database: hoge
[/yaml]

「Rails.application.credentials[:DB_USERNAME]」という書き方でcredentials.yml.encにある情報を取得することができます。
忘れずに、DB名も設定しておきましょう。

これにて、MySQLへ接続するための設定は完了です。

3. Railsの実行

基本的なことはRailsさんが自動で生成してくれたファイルだけで終わりです。
これだけでサーバを起動させて動作させることができます。
動作を確認してみましょう。

[bash]bundle exec rails s -b 0.0.0.0[/bash]

本来は-bオプションは必要ありません。
しかし、WSL2からではWSL2のlocalhostにはアクセスすることができないようなので、どこからでもアクセスできるようにしています。

コマンドを実行してエラーが出なければ起動しています。
Windows側のブラウザから、WSL2のIPアドレスへ向けてアクセスしてみます。
なお、WSL2のIPアドレスはUbuntuのコマンドで「ifconfig」確認することができます。
確認したアドレスへ対してhttp://xxx.xxx.xxx.xxx:3000/と入力してアクセスしてみます。

無事にアクセスできました。
ひとまず、これにて環境の作成は完了です。
あとは、ここに機能を実装していくだけですね。

 

まとめ

長くなってしまったので、今回はここまで。
今回は、Rails Guidesにあるチュートリアルを進めました。

次回は、ガイドに沿って機能の実装を進めていきます。

 

今回は、ここまで。
おわり