Railsプロジェクトを新規作成した手順のまとめと学び

## この記事はなに？
1から環境構築をして新規Railsプロジェクトを立ち上げてみて、手順や学んだことをアウトプットするものです。

## 動作環境
- macOS Ventura 13.2.1
- Homebrew 4.1.11をインストール済み

## 手順
### Rubyのインストール
#### Rubyのバージョン確認
まずはターミナルを開いてRubyのバージョンを確認
```shell
$ ruby -v
```
RailsではRubyバージョン2.7.0以降が必須なので、これより古いバージョンが表示された場合は、Rubyの最新版をインストールする必要があります。
私の場合はバージョン2系だったので最新化が必要でした。

#### rbenvのインストール
Rubyのインストールにはrbenvというツールを使いました。rbenvはRubyのバージョン管理をするツールです。
```shell
$ brew install rbenv ruby-build
```

インストールできたら以下コマンドでrbenvの初期設定をします。
まずは現在使っているシェル名を確認します。
```shell
$ echo $SHELL
```
実行結果が```bin/zsh```だったので以下コマンドを実行して初期設定完了です。
```shell
$ echo 'eval "$(rbenv init -)"' >>  ~/.zshrc
$ source ~/.zshrc
```
#### Rubyのインストール
以下コマンドでインストールできるRubyのバージョン一覧を確認します。
```shell
$ rbenv install -l
```

最新版のRubyをインストールします。
```shell
$ rbenv install 3.2.2
```

そうすると以下のようなエラーが表示されました。
```shell
BUILD FAILED (macOS 13.2.1 using ruby-build 20230914.1)

Inspect or clean up the working tree at /var/folders/ks/1d8gcktx5cb3bb3m5hv19rfc0000gn/T/ruby-build.20230916165417.16799.uYlRrz
Results logged to /var/folders/ks/1d8gcktx5cb3bb3m5hv19rfc0000gn/T/ruby-build.20230916165417.16799.log

Last 10 log lines:
./vm_callinfo.h:218:16: error: use of undeclared identifier 'RUBY_FUNCTION_NAME_STRING'
    if (debug) rp(ci);
               ^
./internal.h:94:72: note: expanded from macro 'rp'
#define rp(obj) rb_obj_info_dump_loc((VALUE)(obj), __FILE__, __LINE__, RUBY_FUNCTION_NAME_STRING)
                                                                       ^
compiling cont.c
2 errors generated
```

`error: use of undeclared identifier 'RUBY_FUNCTION_NAME_STRING'`でググってみると以下の記事が見つかりました。Xcode Command Line Toolsが悪さをしているらしいです。
https://ama-tech.hatenablog.com/build-failed-when-rbenv-install-ruby-3-1-1

なので以下コマンドでXcode Command Line Toolsの削除＆インストールします。
```shell
$ sudo rm -rf /Library/Developer/CommandLineTools          
$ sudo xcode-select --install #ポップアップが表示されるので促されるままにインストール
```

もう一度Rubyのインストール
```shell
$ rbenv install 3.2.2
$ rbenv global 3.2.2
```
Rubyのバージョン確認
```shell
$ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-darwin22]
```

無事に最新版Rubyのインストールができました。

### SQLite3のインストール
バージョンが表示されればインストール不要です。
```shell
$ sqlite3 --version
3.32.3 2020-06-18 14:00:33 7ebdfa80be8e8e73324b8d66b3460222eb74c7e9dfd655b48d6ca7e1933calt2
```
### Railsプロジェクトの作成
今回はRailsプロジェクトごとにgemの管理をしていく方法を採ります。
まずはプロジェクトのディレクトリを作り、bundleの初期設定をします。
```shell
$ mkdir Desktop/test-app
$ cd Desktop/test-app
$ bundle init
Writing new Gemfile to /Users/username/Desktop/test-app/Gemfile
```

生成されたGemfileの以下の行のコメントアウトを外します。
```
# gem "rails"
```
vendor/bundleディレクトリにgemをインストールします。pathオプションをつけることによって、今後`bundle install`コマンドを実行したときに、こちらのディレクトリのgemに適応してくれます。
```
$ bundle install --path vendor/bundle
```
以下コマンドでRailsプロジェクトを立ち上げます。
```shell
$ bundle exec rails new . -B --skip-turbolinks --skip-test
```
Gemfileでコンフリクトして上書きするか聞かれるので、yesを入力して実行すると、Railsアプリに必要なファイルが作成されました。

### Webサーバーの立ち上げ
以下コマンドを実行するとWebサーバーが立ち上がります。
```
$ bundle exec rails s
```
以下URLにアクセスするとRails画面が表示されました！
http://localhost:3000/
![スクリーンショット 2023-09-16 19.43.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3559414/208227f9-b3f0-1322-e14b-5e490be940b7.png)

## 学び
### 環境構築について
- railsも1つのgemであること。
- railsをインストールすることで`rails s`を実行できるようになり、自分のPC上でWebサーバーを立ち上げてくれること。

### 用語
- シェル
人間からの入力をコンピュータに伝える役割。つまり入力とコンピューターのインターフェース。
`echo $SHELL`で使っているシェルの名前が分かる。
代表的なシェルは、bash、zshなどがある。
シェルはシンボリックリンクが使われていることもある。

- シンボリックリンク
実際のファイルの置き場所とは異なるパスでそのファイルを参照できる仕組み。エイリアスのようなイメージ。

- bundler
gemのバージョンやgemの依存関係を管理してくれるgemのこと。bundlerを使うことで、複数人での開発やgemのバージョンが上がってもエラーを起こさずに開発できる。

- Turbolinks
Railsで使われるJavaScriptライブラリで、ページ遷移を高速化するための仕組み。

### コマンド
- source
シェルの設定を反映させる。

- bundle exec {コマンド}
Gemfile内で指定されている全てのGemを適応して、 そのコマンドを実行する。

## 参考記事
- https://railsguides.jp/getting_started.html
- https://www.ruby-lang.org/ja/documentation/installation/#ruby-build
- https://qiita.com/yuitnnn/items/b45bba658d86eabdbb26
- https://pikawaka.com/rails/rails-s
- https://pikawaka.com/rails/bundler