今までAWSのcloud9でRubyの勉強を行なっていたのですが、そろそろローカルでもRubyを扱ってみたいと思い、M1チップ搭載のMacbookAirでRubyの環境設定をしてみたのですが、案の定エラーや不明な点が多発したため同じところで躓いた方に少しでも参考になればと備忘録を残しておきます。
環境
- OS:macOS Big Sur(Ver.11.2.2)
- マシン:Macbook Air
- CPU:Apple M1チップ
参考書籍
「現場で使えるRuby on Rails 5 速習実践ガイド5.2対応」
(最新の書籍ではないですが良書だと思います。)
rbenvのインストール
まずrbenvをインストールします。rbenvとはRubyのバージョン管理ツールです。そのインストールのためにHomebrewを使います。HomebrewとはmacOSやLinux上などで動作するパッケージ管理ツールです。このHomebrewを使うためにはXcodeに付随してある?「Command Line Tools for Xcode(CLT)」が必要です。
この際どうやらXcode自体は必須ではなく、CLTだけでHomebrewは利用できるそうです。参考にさせていただいたサイトを下に載せさせていただきます。
https://techracho.bpsinc.jp/wingdoor/2021_04_09/104821
$ xcode-select --install
次に、インストールが成功しているか確認するためにバージョンを確認します。
$ xcodebuild -version
本来、このコマンドでバージョンが表示されるはずなのですが、私の環境では次のようなエラーが出てしまいました。
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
Xcode自体は必須ではなく、CLTだけでHomebrewは利用できるという情報に矛盾するような''requires Xcode"という文面が見えますがひとまず次の行程に進みます。
Homebrewのインストール
公式サイトからインストールスクリプトをコピーし、ターミナルで実行します。
2021年12月時点でのインストールスクリプトを示しますが、実行する際は公式サイトのインストールスクリプトを使ってください。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
そして正常にインストールが完了したかどうか確認するために次のコマンドを実行します。
$ brew doctor
私の環境だとこのコマンドもエラーを出してしまい、次のような文面が出ました。
zsh: command not found: brew
この問題はこの方の記事を参考にして解決しました。
https://qiita.com/___fff_/items/17655df4e80ebadd8fc3
要はターミナルをRosseta2を使用して開いていないと問題が起きる場合があるということでしょうか。
そしてまたHomebrewが正常にインストールできているかのコマンドを打ち込んだのですが、すんなりとうまくはいってはくれないようでして、このような文面が出ました。
何やらまたCLTについてWarnigが出たりしていますが、ここでもとりあえず先に進みます。
念のために補足として書きますが、平気で"run: sudo rm -rf /Library/Developer/CommandLineTools"とか表記されていますが「rm」は削除のコマンドで「-rf」をつけると問答無用でディレクトリが削除されます。
大事なファイルには絶対に行わないようにしてください。
(私は解決するかも...とおもってやらかしました。消えたのが/Library/Developer/CommandLineToolsでよかった...)
Homebrewがインストールできているならば、rbenvの入手に移ります。
$ brew install rbenv
次にパス設定と初期化処理を.bash_profileに追加するそうなのですが、おそらくM1チップ搭載のmacbookは初期設定でzshを使うように設定されていると思います。
zshやbashとはシェルのことでシェル自体の説明はインターネット上に転がっていますがここの説明がわかりやすく表現されていてわかりやすいと感じました。
https://wa3.i-3-i.info/word11219.html
話がそれましたが、パス設定と初期化処理を追加するところに戻ります。しかし、先ほど言った通りzshを使っている場合はbash_profileに追加するという工程はおそらく不要なのではないでしょうか。参考までにパス設定と初期化処理を.bash_profileに追加するコマンドを表記しておきます。
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
おそらくbashを使っていたならばこれでバージョンを表示させるための次のコマンドがうまくいくのではないかと思うのですが私の環境ではzshを使っていたせいかおそらくうまくいかなかったと思います。(申し訳ないのですが、ここはうろ覚えで私の環境で次のコマンドがどう動作したかはっきり覚えていません。バージョンが表示されたら正しくインストールできているはずなのでご自身の環境がどうか確かめてみてください。)
$ rbenv -v
Rubyのインストール
次にrbenvを使ってRubyをインストールします。最新版のバージョンを公式サイトから確認してください。参考までに2021年12月時点の安定版は3.0.3です。
https://www.ruby-lang.org/ja/downloads/
$ rbenv install 3.0.3
インストールしたRubyのバージョンを環境全体に適用させます。
$ rbenv global 3.0.3
この方の記事も参考になると思います。
https://qiita.com/jiko797torayo/items/0cf40f100b5e3354fd67
正しくインストールしたRubyのバージョンが利用できるか確認します。(Rubyのバージョンは私の環境では2.6.3を利用しています。理由はその当時の最新バージョン3.0.3を利用したのですがrailsコマンドでエラーが出てしまったためです。原因を調査中です。)
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-darwin20]
$ which ruby
/Users/[username]/.rbenv/shims/ruby
ここで$ which rubyの結果が上記の通りに返ってこない場合があると思います。私の環境では最初このように出力されました。
(最初の私の環境)
$ which ruby
/usr/bin/ruby
これだと後々に影響が出てくるのでこの方の記事を参考にパスを通します。
https://qiita.com/nishina555/items/63ebd4a508a09c481150
つまり、シェルの設定ファイルに以下を追加すれば良いのですが、私はシェルの設定ファイルがどこにあるかということとファイル操作の権限で詰まってしまったのでその解決方法を示します。
まず、シェルの設定ファイルですがルートディレクトリの隠しファイルに存在します。
ルートディレクトリを参照するにはFinderからMacintosh HDに遷移することで参照ができます。
ルートディレクトリに移動したら隠しファイルを表示します。MacOSの場合は「command」+「shift」+「.」を同時に押すことで隠しファイルが表示/非表示されます。その後「private」→「etc」と階層を辿っていって「zshrc」というファイルを編集します。
その際ファイル編集の権限で書き込みができない場合は、「zshrc」を選択する際に右クリックして「情報を見る」から下の方にある「共有とアクセス権」より「アクセス権」を変更します。編集を行いたいユーザーのアクセス権を書き込みができるように読み/書きに変更します。
なお、/etc(ルートディレクトリ直下のetcフォルダ)がショートカットとして存在している場合があると思うのですがそのショートカットののetcフォルダからは編集行為ができないと思いますので注意してください。
zshrcファイルに以下のコードを追加します。
[[ -d ~/.rbenv ]] && \
export PATH=${HOME}/.rbenv/bin:${PATH} && \
eval "$(rbenv init -)"
ファイルの変更と保存を行ったらもう一度$ which rubyを行います。
(パスを通した後)
$ which ruby
/Users/[username]/.rbenv/shims/ruby
このように表示されていれば正しくRubyが使用可能になっていると思います。
これを行うことによってgemコマンドを正しく認識してくれるようになります。「RubyGems」の最新バージョンを使用するために次のコマンドを入力します。
$ gem update --system
私の環境では上に示したパスを通す作業を行っていないとここでエラーが出ました。
現在のRubyGemsのバージョンを確認するためには以下のコマンドを実行します。
$ gem -v
次に、どのgemを、どのバージョンで利用するのかを管理するために「Bundler」を利用します。gemコマンドでインストールを行います。
$ gem install bundler
Railsのインストール
今回は教材本に乗っ取り「5.2.1」のRailsをインストールします。必要なバージョンがある方は指定を「-v」コマンドで行ってください。
$ gem install rails -v 5.2.1
正しくインストールされているか確認します。
$ rails -v
Rails 5.2.1
次にNode.jsをインストールします。Homebrewを使用します。
$ brew install node
データベースのセットアップ
今回はPostgresqlを利用します。これもHomebrewを使用します。
$ brew install postgresql
バージョンを確認します。Vは大文字なので注意してください。
$ postgres -V
postgres (PostgreSQL) 14.1
Postgresqlを起動します。
$ brew services start postgresql
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)
停止する際は次のコマンドを実行します。
$ brew services stop postgresql
Stopping `postgresql`... (might take a while)
==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)
動作確認をします。正常に動作していることが確認できたら「\q」を入力して終了します。
$ psql postgres
psql (14.1)
Type "help" for help.
postgres-# \q
まとめ
これで環境構築作業は終了です。お疲れ様でした。この後はローカル環境で実際にアプリケーションを作って行くなりができるはずです。
この記事は私がRubyの環境構築をM1チップ搭載Macbookで行った際の記録なのでご自身の環境で行った際にうまくいかないことが出てくることも珍しくないと思います。(私もこの環境構築作業でかなり苦労しました。)そのような時は諦めずに調べ続ければ時間はかかってしまうでしょうが、いつか必ず解決するはずです。
この記事はその時間を少しでも短くできるようにと書いたものになります。途中必要最低限しか記述していない所や乱雑な部分、さらに間違っている部分もあると思いますので参考にできる所だけを参考にしていただけたらと思います。(画像はつける余裕があればつけたいとは思っています。)
以上です、ありがとうございました。