🪴

Flutterの検証で使う DeployGate がサクッとM1に入らなかった話

2022/02/27に公開約8,000字

こちらの記事は、マイブログからの転載です。

Flutterアプリつくってます。

アプリのテストは、TestFlight というのもありますが、普段テスターとして deploygate を使っているので、自分のプロジェクトでもこちらを導入してみることにしました。

deploygateのインストール

前提

deploygateを使うには以下を済ましておきます。

  • xcodeのコマンドラインツールがインストールされていること
  • ライセンスに同意ししていること
% xcode-select --install
% sudo xcodebuild -license accept
  • Ruby2.6.9 がインストールされていること

digコマンドのインストール

公式サイトに書かれているインストールコマンドを実行します。

何やらfetchとinstallが大量におこなわれますが、よく見るとエラーがでています。

% curl -sSL https://deploygate.com/cli/install | bash
Welcome to DeployGate!

         _            _                       _
        | |          | |                     | |
      __| | ___  ___ | | ___ _   ,____   ___ | |_ ___
     / _` |/ _ \' _ \| |/ _ \ \ / / _ \ / _ `| __/ _ \
    | (_| |  __/ |_) | | (_) \ v / (_| | (_| | |_' __/
     \___, \___| .__/|_|\___/ ` / \__, |\__,_|\__\___`
               |_|           /_/  |___/
 :
 :
ERROR:  Error installing deploygate:
	ERROR: Failed to build gem native extension.

    current directory: /Library/Ruby/Gems/2.6.0/gems/unf_ext-0.0.8/ext/unf_ext
/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 ./siteconf20220127-16548-44pb41.rb extconf.rb
checking for -lstdc++... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.
 :
 :
  /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-20/2.6.0/unf_ext-0.0.8/mkmf.log

extconf failed, exit code 1

ログ /Library/Ruby/Gems/2.6.0/extensions/universal-darwin-20/2.6.0/unf_ext-0.0.8/mkmf.log をみるとエラーが出ています。

fatal error: 'ruby/config.h' file not found

Rubyをいれんかい、という雰囲気なので、brewでRubyのバージョン管理ツールを入れます。

M1なので arch -arm64 をつけるのよ。

% arch -arm64 brew install rbenv ruby-build

rbenv で初期化します。

% rbenv init                                         
# Load rbenv automatically by appending
# the following to ~/.zshrc:

eval "$(rbenv init - zsh)"

ターミナル起動時に rbenv が自動で読み込まれる設定をしてね、といっているので仰せのままにします。

% vim ~/.zshrc

以下を書き込む。

# ターミナル起動時に rbenv を読み込む
eval "$(rbenv init - zsh)"

詳しくは公式サイトにあります。

以下、最新バージョンを確認します。

% rbenv install --list
2.6.9
2.7.5
3.0.3
3.1.0
jruby-9.3.3.0
mruby-3.0.0
rbx-5.0
truffleruby-22.0.0.2
truffleruby+graalvm-22.0.0.2

3.1.0 でいいのかな?これをインストールします。

% rbenv install 3.1.0
 :
Installing ruby-3.1.0...
ruby-build: using readline from homebrew

BUILD FAILED (macOS 11.6 using ruby-build 20220125)

Inspect or clean up the working tree at /var/folders/3w/5c6wl2t57j5bykr2gzdp4g4m0000gn/T/ruby-build.20220127122622.34584.J2QZtx
Results logged to /var/folders/3w/5c6wl2t57j5bykr2gzdp4g4m0000gn/T/ruby-build.20220127122622.34584.log

またエラー🥺

ログをみる。 /var/folders/3w/5c6wl2t57j5bykr2gzdp4g4m0000gn/T/ruby-build.20220127122622.34584.log でエラー箇所を探します。

readline.c:1903:37: error: use of undeclared identifier 'username_completion_function'; did you mean 'rl_username_completion_function'?
                                    rl_username_completion_function);
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                    rl_username_completion_function
readline.c:79:42: note: expanded from macro 'rl_username_completion_function'
# define rl_username_completion_function username_completion_function
                                         ^
/opt/homebrew/opt/readline/include/readline/readline.h:485:14: note: 'rl_username_completion_function' declared here
extern char *rl_username_completion_function PARAMS((const char *, int));
             ^
compiling stringio.c
1 error generated.

ここをみると、M1 で rbenv 使おうとしてみんな苦しめられている様子。arch -arm64 をつけて仕切り直し。

% arch -arm64 rbenv install 3.1.0
Downloading openssl-1.1.1l.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/0b7a3e5e59c34827fe0c3a74b7ec8baef302b98fa80088d7f9153aa16fa76bd1
Installing openssl-1.1.1l...
Installed openssl-1.1.1l to /Users/hoge/.rbenv/versions/3.1.0

Downloading ruby-3.1.0.tar.gz...
-> https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0.tar.gz
Installing ruby-3.1.0...
ruby-build: using readline from homebrew
Installed ruby-3.1.0 to /Users/hoge/.rbenv/versions/3.1.0

入ったよ!

仕切り直しまして、dgのインストール。

% curl -sSL https://deploygate.com/cli/install | bash
 :
Building native extensions. This could take a while...
ERROR:  Error installing deploygate:
	ERROR: Failed to build gem native extension.

    current directory: /Library/Ruby/Gems/2.6.0/gems/unf_ext-0.0.8/ext/unf_ext
/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 ./siteconf20220127-25087-1v9dfpn.rb extconf.rb
checking for -lstdc++... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.
 :

ぐはー。まだだめ。さっきとメッセージ違うけど、ログを見る。

lude/ruby-2.6.0/ruby/ruby.h:24:10: fatal error: 'ruby/config.h' file not found
#include "ruby/config.h"
         ^~~~~~~~~~~~~~~

fatal error: 'ruby/config.h' file not found

まだこれがでている。検討違ったかな。

バージョンを確認すると、3.1.0 が有効になっていない? global オプションを付けて切り替え。

% rbenv versions
* system
  3.1.0
% rbenv global 3.1.0
% rbenv versions    
  system
* 3.1.0 (set by /Users/hoge/.rbenv/version)

むむ...

ふと、ターミナル再起動したらどうかなーと思ったので、再起動してもう一度トライ。

% curl -sSL https://deploygate.com/cli/install | bash
Welcome to DeployGate!
 :
uccessfully installed commander-4.4.6

dg installed! To get started fast:

  $ dg deploy

Successfully installed deploygate-0.6.1
76 gems installed

わーーー。入ったよ!

dg コマンドが動かない

% dg --version
<internal:/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- webrick (LoadError)
	from <internal:/Users/hoge/.rbenv/versions/3.1.0/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
 :

webrick というのがないらしい。

webrickをインストールする

bundle add を使って webrick を入れます。

% bundle add webrick
Could not locate Gemfile

ぐはーーー(2回目)

Gemfileというのがないみたい。このファイルがあるところで、bundle add webrick すると良いらしい。

探す。

% find /Users/hoge -name Gemfile

めっっちゃでてくる Gemfile !

deploygateで使われているところを探して移動、もう一度 bundle add webrick 実行します。

% cd /Users/hoge/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/deploygate-0.6.1/
% bundle add webrick
rbenv: version `2.2.0' is not installed (set by /Users/wagtail/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/deploygate-0.6.1/.ruby-version)

2.2.0 が必要らしいけど、rbenv install --list するとそのバージョンがない。2.6.9 を入れてみる

% arch -arm64 rbenv install 2.6.9
% rbenv versions                 
  system
  2.6.9
* 3.1.0 (set by /Users/wagtail/.rbenv/version)
% rbenv global 2.6.9
18:16:33 mst.local [~]
% rbenv versions    
  system
* 2.6.9 (set by /Users/wagtail/.rbenv/version)
  3.1.0

dgコマンドを実行すると、3.1.0のバージョンしかないと言われるので

% dg --version
rbenv: dg: command not found

The `dg' command exists in these Ruby versions:
  3.1.0

ターミナルを再起動して、インストールしなおします。(3.1.0版のdgコマンドはどうやってアンインストールするのかな。フォルダごと削除?🤔 )

% curl -sSL https://deploygate.com/cli/install | bash
% dg --version
dg 0.8.4

できましたーーーー😭🎊

まとめ

一連の流れ

  • xcodeのコマンドラインツールが入っていること
    • xcode-select --install
    • sudo xcodebuild -license accept
  • 2.6.9のRubyがインストールされていること(2.6.9と3.1.0以外はためしてない)
    • arch -arm64 brew install rbenv ruby-build でRubyのバージョン管理ツール入れる
    • rbenv init して、~/.zsheval "$(rbenv init - zsh)" を追加する
    • rbenv install --list でインストール可能なバージョンを確認する
    • arch -arm64 rbenv install 2.6.9 を実行。最新バージョンだと動かないよー
    • rbenv global 2.6.9 でシステム全体でこのバージョンを使うようにする
    • ターミナルを再起動する
  • dgコマンドをインストールする
    • curl -sSL https://deploygate.com/cli/install | bash を実行する
    • dg --version ができればOK

Discussion

ログインするとコメントできます