【Rails5】Railsで新規アプリを作る【初心者】

#概要

『どうも皆さん、おはこんばんにちは』

（…一度言ってみたかった）

筆者は最近RoRアプリを作り始めた、思いっっきり初心者です。
Qiita初投稿という事で、めちゃくちゃ初歩的な「Railsで新規アプリを作る過程」について投稿したいと思います！:writing_hand:

#前提条件

* OS: MacOS
* Rubyバージョン: 2.5.1
* Railsバージョン: 5.2.3
* データベース: MySQL
* Rubyバージョン管理: rbenv
* IDE: VisualStudioCode

上記の環境でアプリを作っていきます！:fist:

#Railsで新規アプリを作る

ターミナル上で
`rbenv local 2.5.1`
`rails _5.2.3_ new app_name --database=mysql --skip-bundle`
を実行します。

##何を行っているのか

* `rbenv` rbenvコマンド実行の宣言
* `local 2.5.1` このプロジェクトで使用するRubyのバージョン指定（今回はver.2.5.1）
* `rails`
railsコマンド実行の宣言
* `_5.2.3_`
rubyのバージョン指定（今回はver.5.2.3）
* `new`
新しいアプリの作成コマンド
* `app_name`
作りたいアプリの名前の定義
* `--database=mysql`
使いたいデータベースの指定（今回はmysql）<br>
* `--skip-bundle`
`bundle install`をスキップする指示

> * `app_name` _を_`.`_とすると、カレントディレクトリ上に作られる_
> * `--database=mysql` _は、_`-d mysql`_でもOK_:ok_hand:
> * `--skip-bundle` _は、_`-B`_でもOK_:ok_hand:

rbenvの使い方と仕組みについては、以下の記事がわかりやすいので参照してください。
[rbenvの使い方と仕組みについて - Qiita](https://qiita.com/Kodak_tmo/items/73147ed4f0eec54d6e94)

#アプリ内のファイル

上記のようにターミナル上で`rails new`をすると、たくさんのフォルダやファイルが作られます。中身は以下のようになっているはずです。

####app

アプリケーションのコントローラ、モデル、ビュー、ヘルパー、メイラー、チャンネル、ジョブズ、アセットが置かれています。

####bin

アプリケーションを起動・アップデート・デプロイするためのRailsスクリプト等のスクリプトファイルが置かれています。

####config

アプリケーションの設定ファイル (ルーティング、データベース等) がここに置かれています。

####db

現時点のデータベーススキーマと、データベースマイグレーションファイルが置かれています。

####lib

アプリケーションで使う拡張モジュールが置かれています。

####log

アプリケーションのログファイルが置かれています。

####public

このフォルダの下にあるファイルは外部 (インターネット) からそのまま参照できます。静的なファイルやコンパイル済みアセットをここに置きます。

####storage

Diskサービスで用いるActive Storageファイルが置かれています。

####test

Unitテスト、フィクスチャなどのテスト関連ファイルをここに置きます。

####tmp

キャッシュ、pidなどの一時ファイルが置かれます。

####vendor

サードパーティによって書かれたコードはすべてここに置きます。通常のRailsアプリケーションの場合、外部からのgemファイルをここに置きます。

####.gitignore

Gitに登録しないファイル（またはパターン）をこのファイルで指定します。

####.ruby-version

デフォルトのRubyバージョンがこのファイルで指定されています。

####config.ru

アプリケーションの起動に必要となる、Rackベースのサーバー用のRack設定ファイルです。

####Gemfile

Railsアプリケーションで必要となるgemの依存関係を記述します。このファイルはBundler gemで使われます。

####package.json

Railsアプリケーションで必要なnpm依存関係をこのファイルで指定できます。このファイルはYarnで使われます。

####Rakefile

このファイルには、コマンドラインから実行できるタスクを記述します。ここでのタスク定義は、Rails全体のコンポーネントに対して定義されます。

> 独自のRakeタスクを定義したい場合は、Rakefileに直接書くと権限が強すぎるので、なるべくlib/tasksフォルダの下にRake用のファイルを追加するようにしましょう。

####README.md

アプリケーションの概要を説明するマニュアルをここに記入します。このファイルにはアプリケーションの設定方法などを記入し、これさえ読めば誰でもアプリケーションを構築できるようにしておく必要があります。

#gemのインストール

Rubyにおけるgemは、下記2つの役割を持ちます。

1. パッケージ
1. パッケージ管理ツール

パッケージを使うことで開発を効率的に進めることができるので、実際の現場でも使用されることが多いようです。
簡単にパッケージをインストール可能なので、Ruby on Rails 初心者でも素早く本格的なアプリ機能を装備することができるんですね。:relaxed:

アプリ内で使いたい機能を持つgemを Gemfileに、

```rb:Gemfile
gem 'gem名'
```

のように記述します。（ここでは、具体的なgemの種類については割愛します。）

また、Gemfile内のrailsの記述を、

```:Gemfile
~
gem 'rails', '5.2.3'
~
```
のように使いたいバージョン（今回はver.5.2.3）で固定します。

先ほど`--skip-bundle`コマンドでgemのインストールをスキップしたので、ターミナル上で
`bundle install`
を実行します。

##何を行っているのか
* `bundle install`
bundler というgemを使って、Gemfileの記載内容に従ってgemをインストールするためのコマンド

#サーバーの立ち上げ

実際にサーバーを立ち上げてみましょう！ターミナル上で
`rails server`
を実行します。

##何を行っているのか

* `rails server` 
`rails new`コマンド で作ったRailsアプリケーションを、local環境でサーバーに繋ぐ指示

> * `rails server` _は、_`rails s` _でもOK_:ok_hand:

ターミナル上で以下のようなログが流れればサーバーとの接続が完了です！

```
=> Booting Puma
=> Rails 5.2.3 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.6 (ruby 2.5.1-p57), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop

```

ブラウザ上で確認してみましょう！
[localhost:3000](http://localhost:3000) にアクセスします。

![Yay!](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687538/9cce406b-289a-6ba8-5744-b6ae16e68f7e.jpeg)

無事にサーバーへ接続できました！:sunglasses:

#終わりに

最後までご覧いただきありがとうございました。
今後はdeviseでのユーザー登録方法、Docker上でのRoR環境構築なども記事にしたいなあと考えています（いつになるかは未定）。

また、この記事に関して不明な点等ありましたら、お知らせくださると幸いです。
早くエンジニアとして「駆け出したい」ですね。:walking_tone1::walking_tone1::walking_tone1:
それでは！

#参考にしたWebサイト

[Railsガイド](https://railsguides.jp/getting_started.html)
[CodeCampus](https://blog.codecamp.jp/rails-gem)