はじめに
先日、開発マシンを約3年ぶりに新しくしました。
最近発売された15インチのMacBook Proです。
TimeMachine + TimeCapsuleでバックアップを取っているので、そこから復旧させれば簡単に移行できるだろうと思いきや、思った以上に苦労しました。
今回のエントリではどのへんで困ったのかをざっくりとお伝えします。
2台並んだ新旧のMacBook Pro。(どっちが新しいマシンでしょうか?)
TimeCapsuleからデータを移行させるのにかかった時間
旧マシンに入っていたデータは200GBぐらいです。
これをTimeMachine + TimeCapsuleにバックアップして、新しいMacを起動する際に移行元のデータにしました。
無線LANよりも有線の方が速いかな?と思い、TimeCapsuleに有線でつないで復旧させました。
有線の方が速いのかどうかはわかりませんが、前の晩の21時ぐらいにスタートして移行が全部終わったのは翌朝の8時ぐらいでした。
なのでトータルで11時間ぐらいです。
ちなみに移行中は残り時間が表示されますが、あまりあてになりません。
3時に起きて確認したら「残り2時間」と表示されていたので「お、朝5時に完了するのか」と思ったんですが、前述の通り全部終わったのは8時からでしたからね。
TimeMachineに任せればすべて元通り・・・じゃない!!
さて、起動した直後のMacはあたかも完璧に移行を終わらせたかのように涼しい顔をしています。
「さーて、ちゃんと移行できてるか確認していきましょうかね♪」と操作を始めると・・・ん?なんか変です。
最初に気づいた異変は日本語入力ができなくなっていることです。
僕はATOK 2013を使っているのですが、メニューバーからIMEの切り替えをしようとしても英語のまま変更できません。
仕方がないので、Mac標準のIMEを使うようにしました。
それ以外でもChromeが突然数分間操作を受け付けなくなったり、「あれー、これ何かおかしいぞ??」という現象が次々に現れます。
開発マシンなので現在進行中のプロジェクトはちゃんと動くんだろうか?と思い、RSpecのテストを回そうとしますが、変なエラーが出て一つもテストが動きません。
ここでようやく「あらー、TimeMachineが何から何まで完璧に復旧してくれるんじゃないんだー」ということに気づきました。
長い長い「ヤクの毛刈り(yak shaving)」の始まりです。
成句
本来のより大きな問題を解決する為に必要となる副次的な問題を解決する為の、一見して無用な行為。
yak shaving - ウィクショナリー日本語版語源
縮れていて長くて太くて固いヤクの毛を刈ってウールとしての製品とする為には多くの準備的な活動が必要となることから。
ちなみにこれが本物の「ヤク」です。
Homebrew関連のミドルウェアはインストールし直す必要がある
僕が見る限り、Homebrewでインストールしていたミドルウェアは一通り使えなくなっていました。
なのでエラーが出るたびに必要なミドルウェアを再インストールしていました。
参考までに僕のマシンで "brew list" した結果を載せておきます。(でもこうやってみると全部再インストールしたわけでもないな。。。)
apple-gcc42 autoconf freetype git gmp imagemagick jpeg libgsf libiconv libpng libtiff libtool libxml2 libxslt mysql node openssl phantomjs198 pkg-config portaudio postgresql qt readline ruby-build terminal-notifier wget xz
Poltergeistを使っているRails開発者はPhantomJSのバージョンに注意
Poltergeist gemはPhantomJSのインストールが必要です。
しかし、PhantomJS 2.0を使うとファイルのアップロードができなくなるといった不具合があります。(2015.6.7現在)
何も考えずにPhantomJSをインストールすると最新版が入ってしまうので、1.9を入れるようにしましょう。
$ phantomjs -v 2.0.0 $ brew uninstall phantomjs $ brew install https://raw.githubusercontent.com/Homebrew/homebrew-versions/master/phantomjs198.rb $ phantomjs -v 1.9.8
とはいえ、1.9系も完璧ではありません。
Yosemiteとの相性が悪いらしく、たまにクラッシュしたり、変なエラーを吐いたりするときがあります。
このへんは今後しばらく状況を観察していった方が良さそうです。
libiconvのようなHomebrewから削除されたライブラリをインストールする
久々にHomebrewからインストールしようとすると、すでに削除されてしまったライブラリがあったりします。
その場合は "brew tap homebrew/dupes" するとインストールできるようになります。(これがベストかどうかはわかりませんが・・・)
詳しくはこちらの記事をご覧ください。
Rubyもrbenvで再インストールする必要がある
Homebrew関連のミドルウェアを再インストールしたので、Rubyもバージョンごとに再インストールする必要がありました。
コンパイル時にlibiconvやreadlineといったライブラリを参照しているからです。
僕はrbenvを使っています。
rbenvで再インストールする際は、単純に再インストールするのではなく、一度アンインストールしてから再インストールしないと問題が解決しませんでした。
Ruby再インストール時のBundlerのバージョンに注意
Bundlerは1.10以降、自動的に BUNDLED_WITH というキーワードが自動的にGemfile.lockに挿入されるようになっています。
これはgitのようなバージョン管理ツールと相性が悪いので、あえて1.9を入れるようにしました。
$ bundler -v 1.10.3 $ gem uninstall bundler $ gem install bundler -v '1.9.1' $ bundler -v 1.9.1
詳しくはこちらの記事を参照してください。
PostgreSQLやMySQLはデータのバックアップ&リストアが必要になる
HomebrewでPostgreSQLやMySQLをインストールしていたため、旧マシンに入っていた開発環境のデータもなくなってしまいました。(もしかしたらどこかにコピーされてるのかもしれませんが)
最初は「開発用のデータだからなくなってもいいかなー」と思ったんですが、そうはいってもゼロから開発用のデータをいちいち作るのもたぶん面倒だろうと思い、データベースのデータも移行させることにしました。
詳しい手順はここには書きませんが、それぞれのRDBMSで旧マシンのデータをすべてダンプし、新しいマシンでダンプデータをリストアする、といった作業が必要になります。
Karabinerを使っていると左コマンドボタンを空打ちしたときに「^P」のような変な文字が入る
僕はUSキーボードを使っています。
日本語と英数の切り替えはKarabinerを使って、左右のコマンドボタンを空打ちしたときに切り替わるようにしています。
ですが、新しいマシンに移行してから英数に切り替えようと思って左のコマンドボタンを空打ちすると「^P」のような変な文字が入るようになってしまいました。
この問題は 「"Hack for the bug of Mac OS X" のチェックを有効にする」という方法で解決できました。
詳しくはこちらの記事をごらんください。
Karabinerで英数をoption空打ちに割り当てたら不意にDLE文字が入力されて困った話
調子の悪いソフトウェアは再インストール
さて、冒頭に書いた全く動かないATOK 2013ですが、こちらはアンインストール&再インストールすると使えるようになりました。
他にもいくつかそうしないといけないソフトウェアがあった気がします。(すいません、いろいろ試行錯誤してたので細かいことは忘れてしまいました)
ネットの情報を探しても解決策が見つからず、にっちもさっちも行かなくなった場合は一度アンインストール&再インストールするのが解決策になったりするかもしれません。
Office for Mac 2008はシステム日時を変更しないとソフトウェアアップデートできない
旧マシンにインストールしていたOffice for Mac 2008も新しいマシンで調子が悪くなったソフトウェアの一つです。
なのでもう一度CD-ROMから再インストールしてみたのですが、インストール後の自動ソフトウェアアップデートがちゃんと動きません。
ネットを調べ回った結果、システム日時を2010年に戻せばインストールできるという驚きのハックが存在していました。
"Office 2008 SP1 Update (12.1.0) can't be installed because its digital signature is invalid."
古いソフトウェアなのでもう使っている人はほとんどいないと思いますが、もしいたら注意してください。
ただ、ソフトウェアアップデートを実行しても、Officeの調子はまだちょっとおかしいです。
ファイルを開く際にポップアップの左側に表示される「よく使う項目」からフォルダを選択すると、すぐにフォルダが切り替わりません。
一度ウインドウからフォーカスを外して、再度フォーカスを当てるとフォルダが切り替わるという、謎の挙動を示します。
この問題の解決策をご存知の方がいたら教えてください。(いないと思いますが。。)
その他、教訓など
解決までに苦労した作業はKobitoにメモしておこう
トラブル解決の際に参考にしたのはネットの情報だけでなく、手元にあったKobitoのメモも参考になりました。
Qiitaに公開するようなちゃんとした記事にしなくても、ざくざくっとターミナルで実行したコマンドや参考にしたweb記事のリンクを張っておくだけで十分参考になったりします。
同じようなトラブルは忘れた頃にやってくるものなので、備忘録としてちゃんとどこかにメモしておくことをオススメします。
下の図はKobitoに残している作業メモの例です。
移行のための時間をたっぷり取っておこう
TimeCapsuleからのデータ移行が終わったのは朝の8時でしたが、次々と発生するエラーをほぼ鎮圧したのは夜の10時頃でした。
これから分かる教訓は、「新しいマシンを買ったら移行作業用の時間をたっぷり取っておこう」ということです。
今回はたまたま金曜日に新しいマシンが届いたので土日の時間を使えましたが、これが平日のど真ん中だったりすると丸一日仕事にならない、ということがありえます。
開発マシンの移行はあまり楽観せずに構えておいた方が良さそうです。
2015.6.9追記:「ゼロから再構築する」という選択肢について
ブックマークコメントに「TimeMachineを使わずにゼロから再構築すれば良かったのでは?」という意見がちらほらありました。
もちろん、選択肢として「ゼロから再構築」も検討はしました。
ただ、「TimeMachineでリストア、はい終わり」で済めば一番コストがかからないので、それを期待してTimeMachineを選択しました。
結果としては「はい終わり」では済まなかったので当初のもくろみは外したのですが、「こうなることが初めからわかっていたらゼロから再構築したか?」というとそれもまた微妙です。
むしろ、こうなることがわかっていてもTimeMachineを使ってたんじゃないかと思います。
というのも、ゼロから再構築すると自分でも忘れているような設定やらアプリやらファイルやらを大量に自分の手で戻す必要が出てきます。
TimeMachineを使えば、(一部はきれいに戻らなかったものの)マシン全体を元通りにしてくれます。
イメージでいうと、TimeMachineは海の下に隠れている氷山までしっかりリストアしてくれる感じです。
"Iceberg" by Created by Uwe Kils (iceberg) and User:Wiska Bodo (sky). - (Work by Uwe Kils) http://www.ecoscope.com/iceberg/. Licensed under CC BY-SA 3.0 via Wikimedia Commons.
ゼロから再構築するとこの部分も自分で戻さなきゃいけないので、かえって時間がかかるのでは?と思ったりします。
いや、時間がかかるというよりむしろ、きれいに戻しきれないので「あれ?前のマシンとなんか動きが違う。ええっと、これってどこで設定したんだっけな・・・?」みたいなことが長期間にわたってポロポロ出てきそうな気がします。
(実際、アンインストール&再インストールしたATOKでは一部その状態になってます。。)
なので、TimeMachineでリストアは悪い選択肢ではないと思っています。
今回の件で経験値も上がったので、次回以降は精神的な余裕もアップしますしね。
まとめ
というわけで今回は「新しいMacへの開発環境移行が思った以上に大変だった話」を書いてみました。
いや~、これだけで土日がつぶれちゃいましたね。。。
ただ、現在進行形のプロジェクトについては一通りRSpecのテストがパスすることを確認したので、Railsの開発はおそらく普通に進められそうです。
なんとか仕事ができるようになって良かった良かった。
もし新しいマシンへの移行を考えている人がいたら今回の体験談を参考にしてみてください。
APPLE AirMac Time Capsule - 2TB ME177J/A
- 出版社/メーカー: アップル
- 発売日: 2013/06/11
- メディア: Personal Computers
- この商品を含むブログ (4件) を見る
謝辞:Special thanks to 株式会社ソニックガーデン
新しいマシンを購入していただき、どうもありがとうございました!!
速くなったマシンでガンガン開発していきます~!