メイン著者記事としてはご無沙汰しておりますmorimorihogeです。

今年もTechRachoではアドベントカレンダー特集ということで、普段あまり記事を書く機会がなくて表に出ないメンバーにも記事を書いてもらえる運びとなりました。クリスマスまではアドベントカレンダー特集進行のTechRachoをお楽しみ下さい。

今回は最近メイン開発環境をMacからWindowsに移行したので、そのあたりの感想や設定の勘所などをまとめてみたいと思います。

なぜMacから移行するのか？

僕はOS XのIntel Macが出たころからのMacユーザー（当時はまだRosettaとかがありました）で、かれこれ10年以上Macを使い続けてきました。多分Webシステム開発用途でMacを使い始めたという人の中では古参の方なのではないでしょうか。

というわけで、なんで移行するの？という話からぽえみーに綴ってみようと思います。

なお、僕のメイン開発領域はWeb開発（Rails / PHP / JavaScript）ですが、開発・提案資料のためにOfficeやAdobe製品もちょくちょく利用します。また、業務ポジション的に外に出ることも多いため、モバイル性はそれなりに重視しています（多少重くてもいいから外にいても普段通り開発できる環境が欲しい）。

そもそもMacを使い続けていた理由

Macをメイン開発端末として10年間使い続けてきた理由はいくつかあります。

僕は基本的に年に1回はメイン端末を最新に更新するというポリシに従って使ってきましたが、その中での私見です。

ハード面 時によって賛否や人柱バージョンなどもないわけではないが、概ねデザイン・強度的に満足していた それまでずっと買い続けていたThinkPadがLenovoに買収 され、品質面がどうなるか怪しかったので受け皿を探していた Genius Bar に持ち込むことを前提とするのであれば 、サポート面はとてもよかった（預かり修理でも1週間かかったことがなかったし、不具合の発生した動画や写真を見せればごねずに数分で修理交換手続きをしてくれた） 他メーカーだとThinkPad以外は修理に現物発送が必要なだけでなく、不具合が直らず返ってくる事例ばかりだったのでメイン収入を稼ぐ手段を預けるには怖すぎた ※ThinkPad利用時代は壊れたら自分でパーツ取り寄せして修理してました 価格的にはスペックに対して多少割高なこともあったが、同等スペックのWindows機と対して変わらない時期もあり、 サポート体制などを考えれば許容範囲 だった

ソフトウェア面 Web開発ではOSがUNIX系OSであることが都合が良かった（VMは色々もっさりするので嫌いだった） 文字がきれいで読みやすく、一度慣れるとWindowsに戻りづらかった 必要なものはそれなりにシェアウェアにも投資して揃えてしまったので「Windowsならフリーソフトでできるのに」という点は特に不満にならなかった Web系エンジニアを中心にMacが勢力を盛り返していく世の中の流れに乗れたため、諸々トラブルシューティングも簡単だった 業務エンジニアにはありがたい機能があった。例えばTime Machineの「 ある日突然メインマシンが復元不可能な壊れ方をした時に、端末購入を含めて概ね24時間以内に満足のいく開発環境を復元できる 」という要素はかなり強かった。



というわけで、その他の不満がないわけではないですがそれなりに満足していました。

Macへの不満蓄積とWindowsの誘い

しかし、ここ数年はMacに対して以下のような不満を感じるようになっていました。

ハード面 「これが欲しい」と思わせるモデルが出なくなった ため、不満が気になるようになってきた TouchBarは嫌いじゃないけど別にいらない（むしろないほうがうれしい。🍣を並べる 以外に実用的な価値を見いだせなかった） USB-C推したいのはわかるけど、ちょっとUSB機器つなぎたい時にたまたま変換アダプタがないと積むのは純粋に不便（変換アダプタはあちこちに配置していたけど、それでもたまたま忘れることはある）。 欲しいスペックのマシンを買おうとすると、 同等のWindows機に比べてあまりにも値段が高くなる ケースが目立つようになってきた メモリ32GB、SSD 2TBとかにしようとするとつらい。フルスペックなんてとてもとても・・・ AppleCareも+になって値上げしたし「とりあえず念の為入っておこう」というノリでポチるのに抵抗が・・・ MacBook Proの高いBTOモデルでも、 WindowsノートPCにスペックで負ける 要素が出てきた 4kディスプレイがない。どうしたApple！MacBook Proは常に市場に対してハイエンドモデルが用意されていると信じてたのに・・・ HDMIケーブルが直接接続できないので、本体だけ持ち歩くと仕事に支障が出るケースがある

ソフトウェア面 特に追加の不満はないが、Windows 10あたりから「Windowsもそんなに悪くないんじゃない？」と思うことが増えた



一方、Windows機についての状況も色々変わってきているなと感じました。

そんなわけで、不満を持ちながらも惰性でMacを使い続けるよりはもっと良い環境になる可能性のある方向を目指す方が生産的だよねということで、試しにいっちょWindows機に移行してみるか、ということにしました。

なお、100%開発にしか使わないのであれば（ぶっちゃけゲームが動かなくていいなら）、ホストOSはLinuxにした方が苦労は少ないと思います。後述するGUI重い問題もホストOSインストールなら気にならないと思いますし、何より無駄な仮想化レイヤがないぶん早いしシンプルです。

Linuxを使う選択肢についてはjoker1007さんの以下の記事あたりを読むと良いと思います。2016年の記事ですが、今も大して事情は変わらないというか、よりMacを使い続ける理由は減っていると感じます。

MacBook Proからの移行機選び

MacBook Pro 15（2017）からの移行ですが、とりあえず以下の条件で探しました。

本体がそれなりに堅牢で、 多少ぶつけても壊れない こと

こと 英語キーボード が選択できること

が選択できること USB PDから充電できる こと

こと メモリ16GB以上

SSD 1TB以上、もっと載せられるならなお良い

nVIDIAのGPU が乗っていること（Steam積みゲーを消化したい）

が乗っていること（Steam積みゲーを消化したい） MacBook Proと同程度にはバッテリーが持続すること

色々検討した結果、 Dell New XPS 15、Razer Blade 15を眺めつつ「うーん」と半年くらい悩んでいたのですが、先日ThinkPad X1 Extremeが発表されて即決しました。

決め手はすでにサブマシンとしてThinkPad X1 Carbon（2017）を持っていたため、キーボードとタッチパッド（＋トラックポイント）の使用感にそこそこの信頼が置けた点です。

New XPS 15は当時店頭で触れる店が近くに見当たらなかったですし、Razer Blade 15は日本向けには英語キーボード版を販売していない（ひどすぎる）ので、必然海外からの個人輸入になる関係から実機を事前に触ることができませんでした。

＃ エイヤで買って打鍵相性の悪いキーボードや操作にストレスを感じるポインティングデバイスだったら流石に嫌すぎるので、そこは冒険する勇気がありませんでした

なお、X1 ExtremeはM.2 2280のスロットが2つあるため、BTOでは1TBを購入し、別途もう一枚買って2TB構成にしています。



ThinkPad X1 Extremeの背面M.2スロット。普通のM.2 Type 2280が刺せます。ユーザーがメンテできるって素晴らしい。

移行先PCの構成

移行後PCの構成ですが、下図のような設計にしました。

主な要点を解説すると・・・

業務作業環境はHyper-Vの業務Windows環境及び業務Linux内に全て閉じ込める

ホストOSは業務関連じゃない個人的な作業やあれこれに使う

開発用プログラムの実行環境（Rails/PHP/JavaScript等）は全て業務Linuxに置き、Sambaで業務Windows環境に公開する（Hyper-V内のプライベートネットワークなので、外部には公開されない）

通常業務はリモートデスクトップクライアント経由の業務Windows環境で生活する

という感じです。

業務環境（Windows / Linux）は全部VMに入れる

業務系を全てHyper-Vに入れたのは、バックアップと復元の容易さを重視したためです。

よくDropboxやGoogle Driveに共有すればバックアップは終わりという文脈を見ますが、OSの環境変数や設定、レジストリ書き込みを必要とするソフトウェアなどはファイルバックアップだけでは環境が保存されません（専用のソフトを使えばできますが）。

そして、ファイルバックアップしかない場合、ファイルの復元ができても「開発環境」の復元には数日かかってしまいます。

VMレベルでのバックアップであれば設定ごとバックアップできるので、新しく買ってきたマシンのHyper-Vさえ有効にすれば、あとはVMファイルを復元するだけで直ちに作業可能になります。

MacのときにはTimeMachineを使っていたので、それの代替ですね。

なお、ホストOSとは別にゲストOSである業務Windowsのライセンスも必要になります。ホストOSはHyper-Vを使う関係でPro化必須です。

業務開発環境をLinux VMにする理由

Dockerをなんの面倒もなく使いたいし、面倒な環境依存に巻き込まれたくないからに尽きます。

前記しましたが、Docker for Windowsは主にVolume共有あたりの挙動が怪しく（特にPermission周り）、体感ですがたまにFactory Resetせざるを得なくなることがしばしばありました。

Docker for Macはファイルアクセスが遅い以外は同じUNIX系OSということもあってか実用レベルなのですが、Docker for Windowsはまだちょっと怖いかなと感じています。

※個人趣味開発なら良いのですが、業務開発では環境クラッシュにより無駄な時間を取られたくない

また、Gitではファイルパーミッションも差分情報として扱いますが、このあたりをきちんと扱いたい場合もWindowsだと不便なので、Linux環境はどちらにしても必要になるでしょう。

業務作業環境をWindows VMにする理由

昔より良くなったとはいえ、Linux VMのデスクトップにVNCやRDPで接続して作業するもっさり感に耐えられないというのが主です。

また、純粋に実装作業しかしないということであればLinux環境でも構わないのですが、OfficeやAdobe系のファイルを開いたりと、Linuxの完全互換版がないソフトウェアはどうしてもあるため、様々な案件に関わることの多い現状ではWindowsの方が都合がよいなあというところ。

なお、Windows環境にして極めて良くなったのはOffice環境で、ExcelがMacに比べて極限にまともに使えるようになりました。起動も早くてクラッシュもしないExcelはすばらしい :)

移行に必要なものたち

Mac -> Windows環境に移行するにあたり、別途購入・整備・注意しないといけないものをまとめてみました。

ハード面

ハード周りでいくつか気になったのは以下でした。

ソフトウェア面

ソフトウェア周りについてはそれほど投資し直さずとも揃いました。マルチプラットフォームに理解のある世の中になったのはすばらしい。

VMとして使うWindowsのライセンス: ホストOSはPC本体付属のライセンスで良いが、Hyper-Vで動作させるクライアントWindowsのライセンスは別途必要

個別に買わなくても良かったもの OfficeはOffice 365であれば購入不要 Adobe CCも同上 Jetbrains IDE（InteliJ IDEA、DataGrip等）も同上 Sublime Text 3も同上



環境構築における試行錯誤

環境構築にあたり、いくつか試行錯誤した点をまとめます。

Hyper-VへのVMインストール・設定周りでの注意

「Hyper-Vクイック作成」という簡単インストール機能でUbuntuがインストールできますが、JP版が欲しい場合はおとなしくISOを落としてきてインストールするのが良いと思います。

Linux側のGUIを使わざるを得ないケースがある場合、日本語入力ができないと不便＆日本語用の設定をあとから入れるのは地味に面倒なので注意です。

また、Hyper-Vの動的メモリ機能はデフォルト設定だと最大RAM値がかなり大きな値になっているのですが、大した作業もしてないのに動的メモリ設定の最大RAM値に近い値までメモリを使い切るケースがありました。

そのため、最大RAM値は割当RAM値と同じくらいにしておくのが無難だと思います。

また、Linux環境にはHyper-V向けのLIS（Linux Integration Services for Hyper-V and Azure）をインストールすることで、CPUその他デバイス周りの効率化が行われるようなので、入れておきましょう。

※VMWare系におけるVMWare Tools、VirtualBoxにおけるGuest Additionsに相当するものという認識です

ホストOS -> 業務Windows VMへの接続はHyper-Vの拡張セッションではなくRDPで

ホストOSで動かすHyper-VマネージャにはクライアントOSのデスクトップ閲覧をするための画面接続機能がついています。

これには基本セッションと拡張セッションがあり、以下のようになっています。

基本セッション : 恐らく内部的に仮想ディスプレイドライバを通したもの。クライアントOS側がどんな状態でも表示できるが、UIがもっさりして重い

: 恐らく内部的に仮想ディスプレイドライバを通したもの。クライアントOS側がどんな状態でも表示できるが、UIがもっさりして重い 拡張セッション: 恐らく内部的にRDP（ネットワークごしのリモートデスクトップ用のプロトコル）を通して画面共有したもの。クライアントOS側に対応設定が必要だが、UIが軽い

拡張セッションはそこそこキビキビ動きますし、これで問題ないように思えるのですが、致命的な欠点としてホストOSからのデバイス共有が行えません。

このままだと困るのが遠隔会議で、カメラデバイスをクライアントOS側の業務Windowsで利用できないため遠隔会議周りだけはホストOSで使うことになってしまい具合が悪いです。

これを解決するには、Hyper-V拡張セッションではなく、クライアントWindowsでリモートデスクトップ接続を有効にし、ホストOSからリモートデスクトップクライアントで接続します。

リモートデスクトップクライアントの設定には接続元マシンのデバイスを共有する設定があるので、ここからカメラデバイスの共有をONにすれば、クライアントWindowsでも本体カメラを利用できます。

Linux環境のデスクトップも非常用に準備したほうが無難

これはまだ良い落とし所が見つかっていない話なのですが、Linux環境のファイル領域をWindowsにSambaでマウントし、Windows側でInteliJ IDEAを使う場合、プライベートネットワーク越しのファイルアクセスとなるためファイルアクセス系がとても重くなります。

特に致命的なのはGit周りの挙動で、permission周りなのかなんなのか、IDEA経由のGitサポートがうまく動いてくれません。

Jetbrains IDEの持つSmart Checkoutなどの超絶便利機能が使えないのではとてもつらいので、そういった場合には苦し紛れですがLinux側にインストールしたIDEAを起動し、そちらでGit周りの操作だけ行うようにしています。

LinuxデスクトップへのアクセスはHyper-Vマネージャからデスクトップにアクセスするのでも良いのですが、それだとクライアントWindows側のアプリケーションと並べて動的にサイズ変更が出来なかったり、Linuxデスクトップ自体のサイズを動的変更できないため外付けディスプレイを抜き差ししてホスト側の画面解像度が変化するような環境では大きすぎたり小さすぎたりになって不便です。

結局試行錯誤の末落ち着いたのは、クライアントWindowsにVcXsrvというX Serverソフトをインストールし、クライアントLinuxからX転送でLinux側のIDEA画面を共有するという形でした。

正直イケてないと感じているのですが、とりあえず他にスマートな回避策が見つかるまではこれで我慢するか、という感じです。つらい



※左がWindows、右がX転送したLinux版IDEA

Macで使ってたあのソフトの代替は？

Mac時代によく使ってたツールの代替についてまとめます。まだ試行錯誤中ですがよく使うものを中心に。

画面（部分）スクリーンショット: Snipping Tool（Windowsプリインストール） Mac時代はOS標準ショートカットを使っていました 選定条件はファイル保存とクリップボード保存の両方に対応しており、かつショートカット一発で呼び出せること もう新しいWindowsからはなくなると言われているSnipping Toolですが、必要最低限の機能があって便利なので未だに使っています。 Windows + Shift + S もいいのですが、ファイルに保存する時に一度ペイント（これもなくなるらしい・・・）などに貼り付けないといけないのが地味に不便です。Macなら Command + Shift + 4 で部分スクリーンショット＆デスクトップ保存、 Command + Shift + Control + 4 で部分スクリーンショットのクリップボード保存という使い分けができたので、これが便利だったんですけどね。



図の作成: draw.io （一部不満あり） Mac時代はワイヤーフレームや画面設計、インフラ・システム設計図作成にOmniGraffle を使っていました 選定条件はレイヤ対応、あんまり気を使わなくてもそこそこ縦横が揃えられる、Stencilのような簡単に呼び出せるアイコン機能（AWS Iconなど）の充実 基本的な図の作成については必要十分。ただ、開くブラウザ環境・OSによってはNoteとして書いた文章がはみ出たりなどの問題はある 一点とても困っているのが大きな画像を貼り付けると「Image too big」というエラーで貼れない点で、Webページのスクリーンショットを貼り付けて上から指摘事項を書き込むような使い方をしていた自分にとっては割と致命的だったりします。とはいえいまさらVisio を有料で買うのもなあ・・・という感じ。PowerPointはレイヤ機能がないので使う気は（ないです） この辺はまだ試行錯誤しそうです



まとめ

そんなわけで、長々と最近の試行錯誤の経歴を書いてみました。念の為以前のMacも準備はしてありますが、今の所Macがないとできない作業というのはないです。

何より会議室に移動するたびにHDMI出力用のしっぽを持ち歩かなくて良くなったのは忘れ物率が下がってありがたいです。Appleは最近開発者向けに魅力的な製品を出してくれないので、ささやかな反抗をしてみたい人はこの記事を見て参考にしてみていただければと思います。