職業選択の自由

職業を選択するまでの過程。

古い Mac で Ruby を 2.4.1 にしようとした話

背景

Mastodon が流行中だ。ソースコードGitHub で公開されている、 Ruby on Rails を採用しているとのことで私も動かしてみることにした。インスタンスを立てる前に、まずは localhost で動かすことを目指す。

リポジトリを手元に Fork & Clone して bundle install したところ

「 Ruby2.4.1 を使え。古事記 (.ruby-version) にもそう書かれている」

しまった。 Ruby 自体のバージョンアップなんてそういえば数ヶ月していなかった。まずここから修正する必要がある。

筆者の端末は MacBook Pro (Retina, 13-inch, Late 2013) である。それまで携帯端末向けにしか搭載されていなかった Retina ディスプレイが Mac に採用された最初の機種だ。買った当初は「 Retina なのに大画面!しかも薄い!」と感動していたものだが、時は流れ「年季の入った」と呼んでも差し支えない状態になってしまった。

そんな状態でも手続きを踏めば最新のプログラムを動かすことはできる。こういう時は

  1. brew update する
  2. brew upgrade ruby-build で最新の Rubyrbenv に入れる
  3. rbenv install 2.4.1 でインストー

とする。途中までは順調に進み、最後の rbenv install 2.4.1 しようとしたところ

BUILD FAILED

何か…コンパイル自体に失敗している…? こうなったらログを読むしかない。どうやら ossl_x509store.cコンパイルエラーを起こしている。こういう時は何かしら環境がマズいはず。エラーメッセージでググればどうにかなるだろう。

Sierra にアップデート

エラーメッセージで検索するとこんな記事が出てきた→ 年季が入ったmac(笑)にrbenvでruby 2.4.0をインストールしようとしたらハマったのでメモ - Uyama.coffee

おそらく同じエラー、環境も似通っているので参考になる。記事によると以下の5点を試したところ正常にインストールできたとのこと。

  • rbenvをHomebrew版から本家Github版からインストールしなおし
  • macOSを10.11 El Capitanから10.12 Sierraにアップグレード
  • Xcodeバージョンアップ&一回起動
  • xcode-select –install」を実行
  • brew doctorのワーニングを全部つぶす <- これが一番有力かも

最初のは怖いので Sierra にアップデートを最初に試してみることにした。時間がかかるしネットで遊ぶ分には不自由しないので El Capitan のまま放置していたがいい機会だ。アップデートスクリプトを走らせてその日は就寝。翌朝、初期設定を済ませたあと改めて rbenv install 2.4.1 を実行したところ

BUILD FAILED

Xcode を更新

いや、一発でそんなにうまくいくはずがない。 Xcode は開発環境に加えてC言語関係のバイナリコマンドも付属する。バージョンアップは iTunes Store から行うがこれがまた長い。しかしこれでコンパイラも無事更新されたことだろう。

BUILD FAILED

いや待て、さっきの記事にはもう1個コマンドが紹介されていた。 xcode-select –install だ。試すとダイアログが出て、いかにも仕事してくれそうな感じだ。よくなったと思いまたコマンドを叩くと

BUILD FAILED

Homebrew を更新

やっぱりねー使うの Homebrew なんだからそっちも更新しないとねー Homebrew 自体の更新 (brew update) は直近で行ったので、各 brew の更新を試す。 brew upgrade の後に brew 名を入力しないと全ての brew が更新される。これもコマンドによっては何年も更新していなかったりしたので一晩レベルで時間がかかるが、その方がよりしっかり効いている実感がある。翌日改めて rbenv install 2.4.1 を実行!

BUILD FAILED

迷走…

正解を求めて様々な資料を調査したが、一つ学んだのは手当たり次第に試すべきでないということ。某所の「この記事は公開から1年以上が経過しています」の表示がある記事の信憑性は非常に低い。英語の記事もしかり。見つかった記事には

  • rbenv をダウングレード
  • Homebrew を GitHub から直接インストー

など、リスクが高かったり一時的だったりする手法がある。エンジニアには記事の内容が本当に効くか判断できる目が必要である。

ここまでやってダメだったとするとアレしかないか…

brew doctor

実行パスの警告を表示してくれる brew doctor コマンド。実行すると尋常でない数の警告が表示された。 こんなことになっていたのか… そういえばこの Mac, マシン自体もそんなに新しくない上にデータ自体はそれ以前に使っていた MacBook (2008年購入) を引き継いだので、内部はもっと荒れていたと推測される。

とった対策は大体以下の通り ↓

  • シンボリックリンクがあるべきディレクトリにバイナリが入っていた→削除
  • コマンドが重複 (python関係) →片方削除 (多分今回関係ないと思うが念のため)
  • 期待されていない設定ファイル→削除

ちなみにシンボリックリンクと通常のファイルが混在するディレクトリから通常のファイルのみを削除するにはこのワンライナーが使える。

ls -l path/to/delete/* | grep '^l' | awk '{print $NF}' | xargs rm

全部ではないもののある程度警告を潰して改めて rbenv install 2.4.1 を実行!

Successfully installed

😂😂😂😂😂

結論

brew doctor 先生の言うことはちゃんと聞こう。

以上、ボロボロの Mac に最新の開発環境を乗せようとして苦労した話でした。