- IT Tips
READ MORE
メイン著者記事としてはご無沙汰しておりますmorimorihogeです。
今年もTechRachoではアドベントカレンダー特集ということで、普段あまり記事を書く機会がなくて表に出ないメンバーにも記事を書いてもらえる運びとなりました。クリスマスまではアドベントカレンダー特集進行のTechRachoをお楽しみ下さい。
今回は最近メイン開発環境をMacからWindowsに移行したので、そのあたりの感想や設定の勘所などをまとめてみたいと思います。
僕はOS XのIntel Macが出たころからのMacユーザー(当時はまだRosettaとかがありました)で、かれこれ10年以上Macを使い続けてきました。多分Webシステム開発用途でMacを使い始めたという人の中では古参の方なのではないでしょうか。
というわけで、なんで移行するの?という話からぽえみーに綴ってみようと思います。
なお、僕のメイン開発領域はWeb開発(Rails / PHP / JavaScript)ですが、開発・提案資料のためにOfficeやAdobe製品もちょくちょく利用します。また、業務ポジション的に外に出ることも多いため、モバイル性はそれなりに重視しています(多少重くてもいいから外にいても普段通り開発できる環境が欲しい)。
Macをメイン開発端末として10年間使い続けてきた理由はいくつかあります。
僕は基本的に年に1回はメイン端末を最新に更新するというポリシに従って使ってきましたが、その中での私見です。
というわけで、その他の不満がないわけではないですがそれなりに満足していました。
しかし、ここ数年はMacに対して以下のような不満を感じるようになっていました。
一方、Windows機についての状況も色々変わってきているなと感じました。
そんなわけで、不満を持ちながらも惰性でMacを使い続けるよりはもっと良い環境になる可能性のある方向を目指す方が生産的だよねということで、試しにいっちょWindows機に移行してみるか、ということにしました。
なお、100%開発にしか使わないのであれば(ぶっちゃけゲームが動かなくていいなら)、ホストOSはLinuxにした方が苦労は少ないと思います。後述するGUI重い問題もホストOSインストールなら気にならないと思いますし、何より無駄な仮想化レイヤがないぶん早いしシンプルです。
Linuxを使う選択肢についてはjoker1007さんの以下の記事あたりを読むと良いと思います。2016年の記事ですが、今も大して事情は変わらないというか、よりMacを使い続ける理由は減っていると感じます。
MacBook Pro 15(2017)からの移行ですが、とりあえず以下の条件で探しました。
色々検討した結果、 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の構成ですが、下図のような設計にしました。
主な要点を解説すると・・・
という感じです。
業務系を全てHyper-Vに入れたのは、バックアップと復元の容易さを重視したためです。
よくDropboxやGoogle Driveに共有すればバックアップは終わりという文脈を見ますが、OSの環境変数や設定、レジストリ書き込みを必要とするソフトウェアなどはファイルバックアップだけでは環境が保存されません(専用のソフトを使えばできますが)。
そして、ファイルバックアップしかない場合、ファイルの復元ができても「開発環境」の復元には数日かかってしまいます。
VMレベルでのバックアップであれば設定ごとバックアップできるので、新しく買ってきたマシンのHyper-Vさえ有効にすれば、あとはVMファイルを復元するだけで直ちに作業可能になります。
MacのときにはTimeMachineを使っていたので、それの代替ですね。
なお、ホストOSとは別にゲストOSである業務Windowsのライセンスも必要になります。ホストOSはHyper-Vを使う関係でPro化必須です。
Dockerをなんの面倒もなく使いたいし、面倒な環境依存に巻き込まれたくないからに尽きます。
前記しましたが、Docker for Windowsは主にVolume共有あたりの挙動が怪しく(特にPermission周り)、体感ですがたまにFactory Resetせざるを得なくなることがしばしばありました。
Docker for Macはファイルアクセスが遅い以外は同じUNIX系OSということもあってか実用レベルなのですが、Docker for Windowsはまだちょっと怖いかなと感じています。
※個人趣味開発なら良いのですが、業務開発では環境クラッシュにより無駄な時間を取られたくない
また、Gitではファイルパーミッションも差分情報として扱いますが、このあたりをきちんと扱いたい場合もWindowsだと不便なので、Linux環境はどちらにしても必要になるでしょう。
昔より良くなったとはいえ、Linux VMのデスクトップにVNCやRDPで接続して作業するもっさり感に耐えられないというのが主です。
また、純粋に実装作業しかしないということであればLinux環境でも構わないのですが、OfficeやAdobe系のファイルを開いたりと、Linuxの完全互換版がないソフトウェアはどうしてもあるため、様々な案件に関わることの多い現状ではWindowsの方が都合がよいなあというところ。
なお、Windows環境にして極めて良くなったのはOffice環境で、ExcelがMacに比べて極限にまともに使えるようになりました。起動も早くてクラッシュもしないExcelはすばらしい :)
Mac -> Windows環境に移行するにあたり、別途購入・整備・注意しないといけないものをまとめてみました。
ハード周りでいくつか気になったのは以下でした。
ソフトウェア周りについてはそれほど投資し直さずとも揃いました。マルチプラットフォームに理解のある世の中になったのはすばらしい。
環境構築にあたり、いくつか試行錯誤した点をまとめます。
「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で動かすHyper-VマネージャにはクライアントOSのデスクトップ閲覧をするための画面接続機能がついています。
これには基本セッションと拡張セッションがあり、以下のようになっています。
拡張セッションはそこそこキビキビ動きますし、これで問題ないように思えるのですが、致命的な欠点としてホストOSからのデバイス共有が行えません。
このままだと困るのが遠隔会議で、カメラデバイスをクライアントOS側の業務Windowsで利用できないため遠隔会議周りだけはホストOSで使うことになってしまい具合が悪いです。
これを解決するには、Hyper-V拡張セッションではなく、クライアントWindowsでリモートデスクトップ接続を有効にし、ホストOSからリモートデスクトップクライアントで接続します。
リモートデスクトップクライアントの設定には接続元マシンのデバイスを共有する設定があるので、ここからカメラデバイスの共有をONにすれば、クライアントWindowsでも本体カメラを利用できます。
これはまだ良い落とし所が見つかっていない話なのですが、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画面を共有するという形でした。
正直イケてないと感じているのですが、とりあえず他にスマートな回避策が見つかるまではこれで我慢するか、という感じです。つらい
Mac時代によく使ってたツールの代替についてまとめます。まだ試行錯誤中ですがよく使うものを中心に。
Windows + Shift + S
もいいのですが、ファイルに保存する時に一度ペイント(これもなくなるらしい・・・)などに貼り付けないといけないのが地味に不便です。MacならCommand + Shift + 4
で部分スクリーンショット&デスクトップ保存、Command + Shift + Control + 4
で部分スクリーンショットのクリップボード保存という使い分けができたので、これが便利だったんですけどね。そんなわけで、長々と最近の試行錯誤の経歴を書いてみました。念の為以前のMacも準備はしてありますが、今の所Macがないとできない作業というのはないです。
何より会議室に移動するたびにHDMI出力用のしっぽを持ち歩かなくて良くなったのは忘れ物率が下がってありがたいです。Appleは最近開発者向けに魅力的な製品を出してくれないので、ささやかな反抗をしてみたい人はこの記事を見て参考にしてみていただければと思います。
結局どんなスペックにしたの?という声が聞こえてきたので補足すると、メモリ32GB、4kタッチパネルディスプレイモデルになります。メモリ割当は今の所以下で落ち着いています。
* ホストWindows: 12GB
* 業務Windows: 8GB
* 業務Linux: 12GB
ディスプレイは4kモデルを選ぶと自動的にタッチパネルモデルになり、非光沢は選択できません。発色はかなり良く、昔のThinkPad特有のあのやる気のないくすんだ液晶ではなく、Macと比べてもそれほど遜色ないように見えました(僕の目が節穴という説もありますが、Adobe RGB対応を謳ってるのでそこまでひどくないはずです)。