この記事は GMOアドマーケティング Advent Calendar 2020 6日目の記事です。
はじめに
GMOアドマーケティングの吉岡です。
今回は2020-11-17発売の新型MacBookAirでRails開発環境を構築したので、その手順を共有したいと思います。
この記事は2020-11-30に執筆したもので、対応アプリが増えるにつれて環境構築手順も簡単になっていくと思いますが、今動かしたい人のための記事となっています。
CPUについて
これまで、AppleのPCはインテルやAMDのCPUが使われていましたが、今回は独自開発のM1チップが使われ、8コアTDP10wを実現しており、かなりの高性能となっています。
しかしながら、既存のアプリはintel/AMDのCPU用に作られているものが多く、M1チップに対応していないアプリはほぼ動作しません。
これでは流石に厳しいので、AppleからRosetta2というIntelのチップセット向けにコンパイルされたアプリの実行をエミュレートする環境が準備されています。
とはいえ、ネイティブ対応しているものと比べると遅いので、今回はこちらを使わずに対応していきたいと思います。
開発環境
Visual Studio CodeはApple Silicon用バイナリに対応しているので、こちらのエディタを使います。
https://code.visualstudio.com/insiders/#
赤丸で囲ったARM64 ExperimentalをクリックするとApple Silicon用バイナリがダウンロードできます。
MacPortsインストール
パッケージ管理にはMacPortsを使っていきます。
理由としては、現状、MacPortsのみで取得できるarm64バイナリが存在することと、homebrewでは現在arm64とx86_64のバイナリが混在しており、将来的に移行に苦労する可能性があるためです。
homebrew環境がある程度整備されてから移行したいです。
arm64版のRubyとnodejsをインストールするために必要なパッケージをMacPortsで追加します。
基本的にはこちらのQuickstartを参考にインストールします。
https://www.macports.org/install.php
- Xcodeインストール
Appストアからインストール - コマンドラインツール・ライセンス確認
12xcode-select --installsudo xcodebuild -license - MacPortsパッケージインストール
リンク先の[macOS Big Sur v11]用MacPortsパッケージをダウンロードしてインストール - ~/.zshrcに追記
12export PATH=/opt/local/bin:/opt/local/sbin/:$PATHexport MANPATH=/opt/local/man:$MANPATH - 動作確認
12source ~/.zshrcsudo port -v
Rubyインストール
初期状態ではRuby2.6.2がインストールされていますが、最新のRubyを使いたいため、rbenvを使ってインストールします。
今回はbrewを使わないため、GitHubからインストールします。
https://github.com/rbenv/rbenv
1 2 3 4 5 6 |
git clone https://github.com/rbenv/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc ~/.rbenv/bin/rbenv init source ~/.zshrc mkdir -p "$(rbenv root)"/plugins git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build |
opensslとreadlineをインストールして、build用のオプションを設定します。
1 2 |
sudo port install openssl readline export RUBY_CONFIGURE_OPTS="--with-openssl-dir=/opt/local --with-readline-dir=/opt/local" |
Rubyをインストールします。
1 2 |
rbenv install 2.7.2 rbenv global 2.7.2 |
動作確認
1 2 |
$ ruby -v ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [arm64-darwin20] |
Railsインストール
Railsのサンプルアプリを作成します。
DBですが、MySQL、MariaDBの対応が進んでいないため、今回はsqlite3を使います。
現状では開発環境はsqlite3、本番ではMySQL、MariaDBなどで対応していくと良さそうです。
Rails用フォルダ作成
1 2 3 |
mkdir rails cd rails bundle init |
1 2 3 4 5 |
rails ├── Gemfile ├── Gemfile.lock ├── sample_app └── vendor |
rails/Gemfileを開き、#gem “rails”のコメントを外してbundle install
1 |
gem "rails" |
railsフォルダにRailsをインストール後、そのRailsを使ってsample_appを作成
1 2 3 |
bundle install --path=vendor/bundle --jobs=8 bundle exec rails new ./sample_app -B -d sqlite3 --skip-test --skip-webpack-install cd sample_app |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
sample_app ├── Gemfile ├── Gemfile.lock ├── README.md ├── Rakefile ├── app ├── babel.config.js ├── bin ├── config ├── config.ru ├── db ├── lib ├── log ├── node_modules ├── package.json ├── postcss.config.js ├── public ├── storage ├── tmp ├── vendor └── yarn.lock |
開発のみsqlite3を使う場合はsample_app/Gemfileを以下のように変更します。
1 2 3 4 5 6 |
group :development, :test do gem 'sqlite3', '~> 1.4' end group :production do gem 'mysql2', '>= 0.4.4' end |
MacPortsからsqlite3をインストール
1 |
sudo port install sqlite3 |
productionを除いてbundle install
1 |
bundle install --path=vendor/bundle --jobs=8 --without production |
DBを作成し、Rails起動
1 2 3 |
bin/rails db:create bin/rails db:migrate bin/rails s |
TypeError: unable to resolve type ‘size_t’
sassで使われているffiが対応していないためエラーになってしまうようです。
ffi公式へのPull requestレビュー中ブランチで解消できてそうなのでこちらを使いたいのですが、直接指定しても動作しないため、ffiリポジトリをForkして以下の変更をマージしたブランチを使います。
https://github.com/ffi/ffi/compare/master…Watson1978:fix-crash-on-apple-silicon
Gemfileに以下追記。公式が対応したら不要。
1 |
gem 'ffi', git: 'https://github.com/yoshishin/ffi', branch: 'fix-crash-on-apple-silicon' |
再度railsコマンドを実行します。
1 2 3 |
bin/rails db:create bin/rails db:migrate bin/rails s |
Railsの問題は解消しましたが、このまま起動すると今度はwebpacker関連のエラーが出るため、次はこちらに対応していきます。
Webpacker configuration file not found
Webpack対応
まずはwebpackerをインストールしてみます。
1 |
$ bin/rails webpacker:install |
次のような警告が表示されます。nodejsをインストールする必要がありそうです。
sh: node: command not found
sh: nodejs: command not found
Node.js not installed. Please download and install Node.js https://nodejs.org/en/download/
MacPortsからnodejsをインストールしてもうまくいかないため、nvmをインストールします。
nvmとはnodejsのバージョン管理ツールです。
nvmにnodejs version15をインストールし、npmでyarnをインストールします。
詳細はこちら
https://github.com/nvm-sh/nvm
install.shでzshrcにnvmの設定が追加されます。
1 2 3 4 |
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash source ~/.zshrc sudo port install git curl automake nvm install v15 |
yarnをインストールします。
1 2 |
npm install -g yarn bin/rails webpacker:install |
yarnコマンドが使えるようになったらwebpackerをインストールしてRailsを起動します。
localhost:3000にアクセスして画面を確認。
1 2 |
bin/rails webpacker:install bin/rails s |
無事画面が表示できました。ちゃんとarm64で動作しているようです。
まとめ
アプリの対応が完全ではなく、いろいろはまりどころは多いですが、無事動作させることができました。
新型MacBookAirを使ってみた感想ですが、高性能でバッテリー持ちも良いので、アプリ側の対応が進むと一気に置き換えが進んでくるのではないでしょうか。
現状、初心者に厳しい状況ではありますが、開発環境を整える上で勉強になることも多く、整えてしまえば高性能マシンでの開発が可能になるので、この機会に一新するのも良いかもしれません。
以上、新型MacBookAirでRails開発環境を構築した話でした。
明日は、KONCEさんによる「PHPとYouTube Data APIで急上昇ランクを取ってみる」です。
引き続き、GMOアドマーケティング Advent Calendar 2020 をお楽しみください!