オレオレPC交換ログ

# この記事について
> 入社して4年目にして、3度PC交換をしました。
> この記事では、再度交換作業が発生しないことを祈りつつ万が一またPC交換が発生したときのために、PCのデータやソフトウェア、ライセンス等の移行で行った作業を雑多にメモしていきます。

…… という書き出しで書いた社内向け記事を、せっかくなので外部公開できる範囲で公開してみます。

## whoami

Macbookにてスマートフォンゲームのサーバーエンジニア的な仕事をしており、Google Cloudをよく触ります。
たまにUnity Editorを使って動作確認することもあります。

# 準備

## PCリプレイスを社内IT室に依頼する
（Qiita版記事では割愛します）

## インストール済みソフトウェアの確認
現在Macにインストールしてあるソフトウェアを書き出しておく

```bash
# 普通のアプリケーション
ls -l /Applications/
# Homebrewで入れたツール類
brew bundle dump
# pipでグローバルに入れたツール類
pip freeze
# npmでグローバルに入れたツール類
npm list -g  # 大したものが入ってなかったので何も移行しなかった
```

## 各種dotfile等のバックアップ

Mackupが便利
- https://github.com/lra/mackup
- 各種設定ファイル（ `.bash_profile` とか）をクラウド（Google Drive等）にアップロードして、任意のMacにリストアしてくれる。
- `.bigqueryrc` などのMackup側で対応していないdotfileや、 `.ssh/`  等のセキュリティ上意図的に対応していないファイルもあるので、注意が必要（後述）
    - https://github.com/lra/mackup#supported-applications

```bash
# Install Mackup
brew install mackup

vi ~/.mackup.cfg 
# ↓を見ながら設定ファイルを書く
# https://github.com/lra/mackup/blob/master/doc/README.md

# Launch it and back up your files
mackup backup
```

## MS Officeのライセンス
https://portal.office.com/account/#installs → デバイスの部分にあるMicrosoft Officeのインストール済み端末一覧から、旧PCを削除する必要がある

![31232b09-01ba-4033-bbae-9e19a6493044-1920x1327r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54305/6256b669-e6a4-f3aa-305c-8a376ab95822.png)



# 移行
## Applicationのインストール
- 1. Mac App Storeからインストールしたものは、App Storeが購入済みアプリを覚えてくれているので、購入済みアプリリストから再インストールする。

![7bd38f0f-21d3-40ea-b6a0-ad51810cf66b-1920x1243r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54305/7f772c4a-962e-0f7f-d7f5-687662bbcb68.png)


- 2. Mac App Storeを通さず手動で入れたものは、
[#インストール済みソフトウェアの確認](#インストール済みソフトウェアの確認)で出したApplicationリストを見ながら地道にインストールする。

## Homebrew
[#インストール済みソフトウェアの確認](#インストール済みソフトウェアの確認)で出したHomebrewのBrewfileを用いて、以下を実行する
https://brew.sh/index_ja
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew bundle
```

## mackup
Homebrewでmackupはインストール済み
```bash
vi ~/.mackup.cfg 
# ↓を見ながら設定ファイルを書く
# https://github.com/lra/mackup/blob/master/doc/README.md

mackup restore
```

## starship
brewや.zprofileを移行後、 ~~ターミナル上でNerdFontを指定する必要がある~~ と思っていたのですが、移行後何もしなくてもNerdFont(Inconsolata Regular Nerd Font)が指定されていたので何もする必要がなかった。
- mackupが旧PCから設定＆フォント本体を移行してくれたっぽい？

## asdf

```
# 公式プラグインを雑に入れる
cut -d' ' -f1 .tool-versions | xargs -I{} asdf plugin add {}
# 公式でないプラグインも入れる↓
asdf plugin-add docker-compose https://github.com/virtualstaticvoid/asdf-docker-compose.git
```

- 作業ログ： pythonは、M1対応の入ったバージョンにあげておく必要があった。
  - https://github.com/pyenv/pyenv/issues/2143#issuecomment-1070640288
  - gcloud をインストールする場合は3.8系以下のpythonが要るので、3.8.13を指定すれば良い。

## pip
Homebrewと同様に
```
pip install -r pip.txt
```

## MacVim
MacVim-KaoriYa ( https://github.com/splhack/macvim-kaoriya )は更新が止まっててアレなので、MacVim + vim-kaoriyaをインストールする。

https://qiita.com/watagashi/items/8f3c01cb37ecf9eb5ce0 を参考にする。

## Vundle
( `.vimrc` はmackupでリストア済み)
```
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
vim +PluginInstall +qall
```

## gcloud 
~~(`~/.config/gcloud/` はmackupでリストア済み)~~ リストアされてなかった。
移行が必要なのは `~/.config/gcloud/configurations` フォルダ以下のファイルだけのはず（多分）なので、これだけ手で持ってくる。

```bash
asdf install gcloud latest

cd ~/.config/gcloud/configurations/ sftp 12345678n.local
> cd .config/gcloud/configurations/
> get *

# configgurationsが見えるか確認
gcloud config configurations list

# ログイン
gcloud auth login

# terraform 等で使う認証鍵の取得
gcloud auth application-default login

# gsutil syncで必要
pip install -U crcmod

# なんだかんだ必要
gcloud components install beta

# k8s（cloud composerで必要になった）
gcloud components install kubectl
```

## SSH鍵
SSH鍵はそっくりそのまま新PCに持ってくることにする

[Macのリモートログイン設定](https://support.apple.com/ja-jp/guide/mac-help/mchlp1066/mac)をON（自分のみ）にして、新旧PCを同一ネットワーク上に置いて、旧PCで以下を実行する

```bash
sftp 12345678.local # 新PCのhost
> cd ~/.ssh/ 
> lcd ~/.ssh/
> put *
```

## slack-ruby-client
業務上 https://github.com/slack-ruby/slack-ruby-client を使っているので認証を通す

```
$ slack init
Enter Slack API token: [ここにAPIトークンを書く]
```

## Unity
Unity Hubのインストール
https://unity3d.com/jp/get-unity/download/archive

その後、↓から必要なUnityのバージョンをUnity Hubのリンクからインストールすれば良い。
https://unity3d.com/jp/get-unity/download/archive

なお、ライセンスは1ライセンス1マシンのため、↓の下の方にある"Activation"の項目で、旧PCのアクティベーションを外し、新PCでアクティベーションコードを入力する必要がある。
https://id.unity.com/en/subscriptions

![0e1ff8d0-9632-4731-999e-10d843707634-1920x877r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54305/b16c2bde-289a-24e2-bfe1-0a6768532bf1.png)


## Slack

https://slack.com/intl/ja-jp/help/articles/212681477 の、「メールでサインインする」の手順でログインすると、メールアドレスに紐づくアカウントにログインできて便利。


## その他のファイル
例として、 `git` フォルダを移す場合
- `git` フォルダをzipアーカイブ化
    - ファイル数に依存して転送時間が増えるので、フォルダをそのまま転送するのではなく、アーカイブ化して転送ファイル数を減らすのをオススメします
- 新PCのファイル共有を有効にする
- Finderを使ってファイルを転送
    - 社内ネットワークだと3GBを5分くらいで転送できる
- アーカイブを解凍


## Jetbrainsのライセンス
- Intellij IDEAを起動時にJetbrains Accountを聞かれるのでログインすればライセンスが通る
- 旧PCのライセンス返却とかは要らないらしい
    - 同時に1PCでしか起動できない制約があるので同一ユーザー複数マシンでのライセンス返却の概念がないっぽい…？

## 移行し忘れたdotfileがないか確認
Mackupでほとんどのdotfileは移行できているはずだが、漏れているものを探す。
- 実際 .bigqueryrcや.pg_service.conf、.gitignore_global, .sqliterc, .bazelrcが移行できていなかった


[Macのリモートログイン設定](https://support.apple.com/ja-jp/guide/mac-help/mchlp1066/mac)をON（自分のみ）にして、新旧PCを同一ネットワーク上に置いて、以下を実行する
```bash
# 移行先でホームディレクトリのpathが全く同じであることを仮定している
diff <(ssh 12345678.local ls -a ~) <(ls -a ~)  

# ~/Library/Application\ Support/ 下のファイルなど、手で書いた記憶がない（アプリが勝手に書いた）設定ファイル等は最悪新PCで再度設定すればいいかの気持ち
```

## ファイル拡張子のアプリケーション紐付け

前回のPC移行では、ファイル拡張子のアプリケーション紐付けが新Macに移行できておらず、全部吹き飛んでしまった。
ファイル拡張子の対応関係は `~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist` というファイルに保存してあるので、これを忘れずに移行する。
`com.apple.launchservices.secure.plist` を旧PCのもので上書きしたあと、 **PC再起動することで** 、ファイル拡張子とアプリの対応が移行できた。
- 新PCのもとの `com.apple.launchservices.secure.plist`  は、バックアップを取っておいたほうが良さそう。

https://apple.stackexchange.com/questions/91522/change-file-association-in-terminal



## Macの辞書アプリの辞書ソース
手軽に英語の意味を調べるとき等に、[3本指で辞書を起動する](https://support.apple.com/ja-jp/guide/mac-help/mchl3983326c/mac)のが便利です。

![ec79668c-458d-4714-8050-9cfecb946b45-1920x2242r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54305/b4ce2dc4-f8cf-5f26-6d8e-e23a237e15c3.png)


日本語設定のMacでは標準で以下の4つの辞書が入っていますが、この設定はApple ID等では保存されず、端末を変えるごとに毎回設定変更しないといけないようです。
- 英英辞典とか英中時点とか使う人は毎回設定しないといけない。

![1ada42a3-04d6-4f34-9852-96bedd27fbc0-1920x1901r.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54305/26f6fa74-9f51-8b73-f14e-5cf88ad871ae.png)


移行方法を調べようかと思ったが、手で移行したほうが楽そうなため、PC交換のたびに手動で設定している。


# 余談： PC交換の原因
- 1回目： バッテリー膨張&バタフライキーの爪折れ&リモートワーク直前だったため早めに交換
- 2回目： 特定のキーでチャタリング（2重入力）と無反応が10回に1回くらい発生した&導入から時間の経過した備品だったため交換
- 3回目: バッテリー不良（2時間ほどで放電する）、高負荷時に電源ケーブルをつけていても再起動することがある、同一スペックのMacbook Intel PCと比べてビルド速度が2〜3倍くらい遅い（ため、しょっちゅうタイムアウトしてテストが通らない）