「Ruby on Rails チュートリアル」でローカル環境を構築して「git push」まで実施する方法・前編

## はじめに

こんにちは、@kosei-matsubaraです。

Web系エンジニアの転職を目指して「Ruby on Rails チュートリアル」の学習を始めました。

「Ruby on Rails チュートリアル」の第一章を後半まで進んだところ「GitHub Codespaces」の自動ログアウトおよび再接続が手間だと感じるようになりました。

「Ruby on Rails チュートリアル」ではクラウド環境での開発を推奨しております。

ですが今後ポートフォリオを作り、Web系開発企業ではローカル環境での開発が前提になると想定しています。

したがって最初からローカル環境で開発を行い、早々に今後の作業環境に慣れた方がいいと考えローカルで開発構築することにしました。

ローカル環境構築までの手順を公開することで、同じく「Ruby on Rails チュートリアル」をローカル環境を構築する方のご参考になればと思い記事を投稿しました。

なお、当該記事はゼロからRailsインストールまで、[次回投稿記事](https://qiita.com/kosei-matsubara/items/47873d5fed428e2e9a25)でRails以降から「git push」までを投稿予定です。

## ローカル環境構築

ローカル環境構築のため、必要となる各ソフトウェアをインストールします。

### 【前提・構築環境】

- macOS Sonoma 14.3.1
- MacBook Pro 16インチ 2021
- Apple M1 Pro
- Homebrew ※環境構築のためバージョン記載対象外
- rbenv ※環境構築のためバージョン記載対象外
- Ruby ※環境構築のためバージョン記載対象外
- Ruby on Rails 「7.0.4.3」※1
- Bundler ※環境構築のためバージョン記載対象外

※1　YassLab社.　“Ruby on Rails チュートリアル”.
https://railstutorial.jp/chapters/beginning?version=7.0#sec-bundler,
(参照 2024/3/12).

### 【事前インストール】

まず始めに下記ソフトウェアをインストールしました。
- VSCode
- Git

ひとまずエディッターは早々に必要になると思い最初にインストールしました。

Gitは構成管理ツールのため、多少インストールを劣後しても問題ないと思いましたがちょうどGitの書籍学習を終えて手順が明確になっていたためインストールしました。

いずれもインターネットでキーワード検索して、ダウンロードページからインストールしました。

### 【Railsをインストールその1・エラーで失敗】

「Ruby on Rails チュートリアル」ではローカル環境構築の最初の手順がRailsインストールコマンド実行のため、Railsのインストールコマンドを実行します。

```
% gem install rails -v 7.0.4.3

ERROR:  While executing gem ... (Errno::EACCES)
    Permission denied @ rb_sysopen - /Library/Ruby/Gems/2.6.0/cache/i18n-1.14.1.gem
```

権限に関連したエラーメッセージが出力されました。

インストールコマンドを実行したがインストールファイルの書き込み権限が無く、インストールが正常に終了しなかったと思いました。

インターネットで調べると対処法として`sudo`を付与してコマンド実行とあったため、`sudo`を付与してインストールコマンドを再実行します。
<font color=red>後々この判断に後悔することに…</font>

```
sudo gem install rails -v 7.0.4.3

Password:
Fetching thor-1.3.1.gem
Fetching racc-1.7.3.gem
Fetching method_source-1.0.0.gem
.
.
.
Successfully installed zeitwerk-2.6.13
Successfully installed method_source-1.0.0
Successfully installed thor-1.3.1
Building native extensions. This could take a while...
ERROR:  Error installing rails:
	ERROR: Failed to build gem native extension.

    current directory: /Library/Ruby/Gems/2.6.0/gems/racc-1.7.3/ext/racc/cparse
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/bin/ruby -I /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0 -r ./siteconf20240302-5154-1hpvhih.rb extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/include/ruby.h

You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.

extconf failed, exit code 1

Gem files will remain installed in /Library/Ruby/Gems/2.6.0/gems/racc-1.7.3 for inspection.
Results logged to /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-23/2.6.0/racc-1.7.3/gem_make.out
```

途中まで「Fetching」や「Successfully」などの単語があるので、正常にインストール出来ていると思ったのですが終了コードが正常ではありません。

ひとまず、エラーメッセージをキーワードに原因を調査しました。

下記記事などを参考にした結果どうやらCLTをインストールしていないことが原因だと思われます。

https://qiita.com/yumura826/items/4c1b25e511284f20e102

参考記事を掲載頂きました@jnchito氏、@yumura826氏に感謝いたします。

エラーメッセージの一部に「have to install separate package」と出力しており、「何らかのパッケージが不足している」という意味だったと後から気づきました。

### 【xcodeをインストール】

原因に基づき下記の通り、インストールコマンドを実行します。

```
% xcode-select --install
xcode-select: note: install requested for command line developer tools
```

特に問題なくインストールが終了しました。

### 【Railsをインストールその2・エラーで失敗】

改めてRailsをインストールします。

再度、Railsのインストールコマンドを実行します。

```
% sudo gem install rails -v 7.0.4.3
Password:
Fetching nokogiri-1.16.2-x86_64-darwin.gem
Building native extensions. This could take a while...
Successfully installed racc-1.7.3
ERROR:  Error installing rails:
	There are no versions of nokogiri (~> 1.14) compatible with your Ruby & RubyGems. Maybe try installing an older version of the gem you're looking for?
	nokogiri requires Ruby version >= 3.0, < 3.4.dev. The current ruby version is 2.6.10.210.
```

ERRORになりました…

パッと見「nokogiri」と「Ruby」のバージョンに互換性がなさそうなメッセージです。

エラーメッセージをキーワードにインターネットで調べるとRubyのバージョンが原因であることが分かりました。

https://qiita.com/murata0705/items/dfa2fed6c773f925a975

参考記事を掲載頂きました@murata0705氏に感謝いたします。

### 【Rubyインストールに伴うバージョーン選定】

「Ruby on Rails チュートリアル」でRailsをインストールする際、Rubyのバージョンがなかったため、ゼロベースでRubyのバージョンを選定します。
（後々、GemfileにRubyのバージョンが指定されている事に気付きました）

下記記事を参照すると「Rails 7: Ruby 2.7.0以降が必須」のようです。
（今回はRails 7をインストールします）

https://railsguides.jp/upgrading_ruby_on_rails.html

また、下記記事を参照するとRubyの安定版は3.3.0とあります。
※記事投稿タイミングである2024/3/14時点の情報です。
※インストールするバージョンは、作業タイミングや状況に応じて選定して下さい。

https://www.ruby-lang.org/ja/downloads/

最新バージョンは過去バージョンに比べ新機能が追加されているなどメリットがあるものの、バージョンアップに伴う潜在バグが存在する可能性はあるので、安定版である「Ruby 3.3.0」をインストールします。　

Rubyのインストール方法をインターネットで調べ下記記事を参考にさせて頂きました。

https://www.sejuku.net/blog/3958

参考記事を掲載頂きました城戸健太氏に感謝いたします。

### 【Homebrewをインストール】

インストールするソフトウェア管理パッケージ（Homebrew）を準備します。

事前にHomebrewをインストールしていない事を確認するためバージョン確認コマンドを実行します。

```
% brew -v
zsh: command not found: brew
```

ソフトウェアをインストールしていない事を確認できたため、Homebrewのインストールコマンドを実行します。

```
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

==> Checking for `sudo` access (which may request your password)...
Password:
==> This script will install:
/opt/homebrew/bin/brew
/opt/homebrew/share/doc/homebrew
/opt/homebrew/share/man/man1/brew.1
.
.
.
==> Pouring portable-ruby-3.1.4.arm64_big_sur.bottle.tar.gz
Warning: /opt/homebrew/bin is not in your PATH.
  Instructions on how to configure your shell for Homebrew
  can be found in the 'Next steps' section below.
==> Installation successful!

==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics
No analytics data has been sent yet (nor will any be during this install run).

==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
  https://github.com/Homebrew/brew#donations

==> Next steps:
- Run these two commands in your terminal to add Homebrew to your PATH:
    (echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/matsubarakyousei/.zprofile
    eval "$(/opt/homebrew/bin/brew shellenv)"
- Run brew help to get started
- Further documentation:
    https://docs.brew.sh

```

「Warning...」を出力している。

警告メッセージをキーワードにインターネットで調べると下記記事の通りMacのM１チップに起因することが分かりました。

https://chikinmasa.org/homebrew_install/

参考記事を掲載頂きましたちきんまさ氏に感謝いたします。

記事を参考にターミナルの設定を行い、再度Homebrewのインストールコマンドを実行します。

```
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

==> Checking for `sudo` access (which may request your password)...
Password:
==> This script will install:
.
.
.
==> Pouring portable-ruby-3.1.4.el_capitan.bottle.tar.gz
==> Installation successful!

==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
  https://docs.brew.sh/Analytics
No analytics data has been sent yet (nor will any be during this install run).

==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
  https://github.com/Homebrew/brew#donations

==> Next steps:
- Run these two commands in your terminal to add Homebrew to your PATH:
    (echo; echo 'eval "$(/usr/local/bin/brew shellenv)"') >> /Users/matsubarakyousei/.zprofile
    eval "$(/usr/local/bin/brew shellenv)"
- Run brew help to get started
- Further documentation:
    https://docs.brew.sh

```

「Warning」を出力せず特に問題なくインストールが終了しました。

事後確認としてHomebrewのバージョン確認コマンドを実行します。

```
% brew -v        
Homebrew 4.2.10
```

特に問題なくHomebrewのバージョンを確認できました。

### 【rbenvのインストール】

事前にrbenvをインストールしていない事を確認するためバージョン確認コマンドを実行します。

```
% rbenv -v
zsh: command not found: rbenv
```

ソフトウェアをインストールしていない事を確認できたため、rbenvのインストールコマンドを実行します。

```
 % brew install rbenv ruby-build


==> Downloading https://ghcr.io/v2/homebrew/core/rbenv/manifests/1.2.0
############################################################################################################################################################################################################################################## 100.0%
==> Fetching dependencies for rbenv: m4, autoconf, libyaml, pkg-config, readline, ca-certificates, openssl@3 and ruby-build
.
.
.
1: 602 files, 317.2KB
==> Installing rbenv
==> Pouring rbenv--1.2.0.sonoma.bottle.tar.gz
🍺  /usr/local/Cellar/rbenv/1.2.0: 35 files, 108KB
==> Running `brew cleanup rbenv`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Running `brew cleanup ruby-build`...
```

特に問題なくインストールが終了しました。

事後確認としてrbenvのバージョン確認コマンドを実行します。

```
% rbenv -v
rbenv 1.2.0
```

問題なくrbenvのバージョンを確認できました。

次にrbenvのパスを設定をします。

実行結果は以下の通りになります。

```
% echo $SHELL

/bin/zsh
matsubarakyousei@matsubarakyouseinonotopasokon ~ % echo 'eval "$(rbenv init -)"' >>  ~/.zshrc

matsubarakyousei@matsubarakyouseinonotopasokon ~ % source ~/.zshrc
```

詳細の手順を知りたい方は先述したリンク先記事をご確認ください。

https://www.sejuku.net/blog/3958

## 【Rubyをインストール】

いよいよRubyをインストールします。

インストール可能なバージョン一覧を表示するコマンドを実行します。

```
rbenv install --list

3.0.6
3.1.4
3.2.3
3.3.0
jruby-9.4.6.0
mruby-3.3.0
picoruby-3.0.0
truffleruby-23.1.2
truffleruby+graalvm-23.1.2

Only latest stable releases for each Ruby implementation are shown.
Use `rbenv install --list-all' to show all local versions.
```

先述した通り、安定版バージョンの「3.3.0」をインストールします。
※記事投稿タイミングである2024/3/14時点の情報になります。
※インストールするバージョンは、作業タイミングや状況に応じて選定して下さい。

Rubyバージョーンを指定して、インストールコマンドを実行します。

```
% rbenv install 3.3.0 

ruby-build: using openssl@3 from homebrew
==> Downloading ruby-3.3.0.tar.gz...
-> curl -q -fL -o ruby-3.3.0.tar.gz https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 21.0M  100 21.0M    0     0  5993k      0  0:00:03  0:00:03 --:--:-- 5994k
==> Installing ruby-3.3.0...
ruby-build: using libyaml from homebrew
-> ./configure "--prefix=$HOME/.rbenv/versions/3.3.0" --with-openssl-dir=/usr/local/opt/openssl@3 --enable-shared --with-libyaml-dir=/usr/local/opt/libyaml --with-ext=openssl,psych,+
-> make -j 10
-> make install
==> Installed ruby-3.3.0 to /Users/ユーザー名/.rbenv/versions/3.3.0

NOTE: to activate this Ruby version as the new default, run: rbenv global 3.3.0
```

特に問題なくインストールが終了しました。

Rubyのバージョン設定を先ほどインストールした「3.3.0」に設定します。

```
rbenv global 3.3.0
```

rbenvコマンドでバージョン設定結果を確認します。

```
% rbenv versions

  system
* 3.3.0 (set by /Users/matsubarakyousei/.rbenv/version)
```

「*」の位置がsystemから「3.3.0」に切り替わりました。
（使用バージョンが「3.3.0」に切り替わりました。）

続いてRubyコマンドでバージョン設定結果を確認します。

```
% ruby -v           
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin23]
```

…Rubyバージョンが切り替わっていない。。。

失念していたPCとターミナルの再起動を実施しました。

再度、Rubyバージョンの確認をします。

```
% ruby -v
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin23]

% rbenv versions
  system
* 3.3.0 (set by /Users/matsubarakyousei/.rbenv/version)
```

Rubyバージョンが「3.3.0」に切り替わりました。

### 【Railsをインストールその3・（最初実施しようと思っていた事）】

三度目の正直でRailsをインストールします。

再度、Railsのインストールコマンドを実行します。

```
% gem install rails -v 7.0.4.3     

Fetching zeitwerk-2.6.13.gem
Fetching thor-1.3.1.gem
Fetching method_source-1.0.0.gem
.
.
.
Successfully installed nio4r-2.7.0
Successfully installed actioncable-7.0.4.3
Successfully installed rails-7.0.4.3
36 gems installed

A new release of RubyGems is available: 3.5.3 → 3.5.6!
Run `gem update --system 3.5.6` to update your installation.
```

特に問題なくインストールが終了しました。

事後確認としてRailsのバージョン確認コマンドを実行します。

```
% rails -v
Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

You can then rerun your "rails" command.
```

先ほど「Successfully installed」と出力していたのにRailsが存在していない…

エラーメッセージをキーワードにインターネットで調べると下記記事の通りターミナルを再起動していない事が原因でした。

https://qiita.com/jnchito/items/e4872ff5c70a4c2219f1

@jnchito氏に感謝いたします。

ターミナルを再起動後、再度Railsのバージョン確認コマンドを実行します。

```
% rails -v      
Rails 7.0.4.3
```

Railsが「Ruby on Rails チュートリアル」指定のバージョンである事を確認できました。

### 【Railsのインストールは終わったが新たな問題】

ひとまずRailsのインストールまで終了しました。

ただ…先程参考にした記事では「`sudo gem install rails`を実行しないで下さい」と書いてあります。

直前では`sudo`を付与せずRailsのインストールコマンドを実行しましたが最初にインストールコマンドを実行した際は、`sudo`を付与してコマンドを実行しました。。。

「どうしよう…最終的にはコマンド実行は失敗した」

「中途半端に一部インストールが終了している可能性を否定できる根拠がない」

結論は一部ソフトウェアをアンインストールして再インストールする事にしました。

【再インストールする理由】
- 今後追加でソフトウェアをインストールする、開発作業を実施するなど、要素が増加するほど今後発生する問題の原因究明が困難になる。
- 固有オペレーションを実施した事により、固有環境特有のエラーに遭遇する可能性がある。
- 固有環境起因の発生事例が少ないエラーに遭遇した場合、未知のエラーもしくは解決手段の確立が不充分である可能性がある。
- 標準的なオペレーションを実施する、大多数のエンジニアが通る道を意図的に通る事で、既に多数のエンジニアが遭遇するであろうエラーに遭遇して、解決手段が確立されていないエラーに遭遇する事を回避する。

## まとめ

「Ruby on Rails チュートリアル」でローカル環境を構築するため、ゼロからRailsインストールまでを記載いたしました。

作業全体を通じて反省点をまとめました。

【反省点】
- 結果論だが対処療法的な対応に終始してしまった。最終的に自身が実施したい事は、対処療法的な対応で事足りるのか実態は全体からみて、局所的・部分的な作業をモグラたたきのように実施していないのか判断すべきだった。
- 初動から自身の作業内容を把握するため、Ruby・Rails・rbenvなどの関係性などを事前に理解するべきだった。
- 対処療法な作業・エラー調査の往復を繰り返し、ECRSの原則に反した非効率な作業に終始した。
（エラーメッセージから対処方法を調べるのではなく、初動からRubyインストール方法で調査した方が効率的だった）

何をどこまで実施したのか後追いできるようにするため、scriptの自動実行などでターミナルの結果をテキスト形式に保存する事をお薦めします。

[次回投稿記事](https://qiita.com/kosei-matsubara/items/47873d5fed428e2e9a25)でRails以降から「git push」までを投稿予定です。

同じく「Ruby on Rails チュートリアル」を学習する際、ローカル環境を構築する方のご参考になれば幸いです。

最後までお読み頂きありがとうございます。