仕事用のPCをMacからThinkpadに変えてUbuntuを入れた

Web系の会社にいると,仕事用のPCとしてMacを支給されることが多いと感じている.例にもれず俺も会社ではMacBook Proを使っていたのだけれど,最近Macが使い物にならないくらい遅くなってきた. そもそもそんなに新しいMacではないというのはあるんだけれど.

もはやローカルでの開発はほぼDocker化してしまっているので,なにをするにもDockerを起動する必要がある. しかし,Docker for Macは遅い.とくにvolume mountが遅すぎて,webpackなんか走らせたらお茶を入れに行くくらいの猶予が発生する.

---追記---

webpackだけならdockerじゃなくていいじゃんと言われたので,一応弁明しておくと,webpack以外もあります. DjangoとかElasticsearchとかElasticsearchとかlocalstackとかredisとかDjangoとかDjangoとかDjangoとか.

マイクロっていうほど小さくはないけど,サービスを分割しているため,開発環境で動かさなきゃいけないコンテナ数が結構多くて,結果Docker for Macのプロセスがハングして全滅する,みたいなことが頻発するようになってきました.

---追記終わり---

もちろんcachedは指定しているが,それでも遅い.

qiita.com

というかcachedオプションができてから2年以上経って,未だにこのレベルで遅いというのはどうなの.

volume mountが遅いだけなら,まだ待ち時間が増えるだけなのだが,この上Docker for Macは常時メモリを10GB近く奪っていく.こんな状態だと,そもそもswapが頻繁に発生してマトモに開発なんてできない.

というわけで,MacBook Proを捨ててLinuxマシンを買うことにした.

買ったもの

Thinkpad X1 Extreme.

付属でWindows10がついてきたけど,まったく使わないうちにUbuntuを入れてしまった.

メモリは16GBにしたけれど,スロットが2つあるので,16GB * 1にしておいた. 使ってみた感じ,そこまで困りはしないが32GBは魅力的.

NVMeは初体験だけれど,SATASSDとそこまで体感変わらない感じがする.OS起動程度では,むしろ別の場所がボトルネックになっている感じがある. もっとでかいファイルを動かしてみないと実感できないかもしれない.

元のMacIntel Core i7-4750HQだったので,実に4世代一気に進んだ. デスクトップならRyzenを買いたいところだけど,ノート用のCPUで出ているRyzenは,Zen+アーキテクチャだし,そこまで良さそうなモデルが売っていなかった. あと,結局X1 Carbon等のモデルだとCPUがCore i7-8565Uみたいな,ノートPC用のCPUになってしまう. これをH系にしたかったので,X1 Extremeという選択になった.そういうわけで15インチしか選べなかったわけだが.

Linuxを入れる

LiveUSBを作成し,SecureBootを無効化し,Windowsが入っていたパーティションをフォーマットしてまるごとUbuntu 18.04 LTSを入れた. Ubuntuを選択したのは,ただの俺の趣味だ.

ただし,インストール後にちょっとトラブルがあった.

  • 電源ボタンを押すと起動はする,ちゃんとgrubが読み込まれUbuntuが起動する
  • ログイン画面まではいくのだが,ログイン後,画面が真っ暗で何も動いている様子がない
  • Ctrl+Alt+F3でCUIに入ろうとしても入れない,画面は暗いまま
  • Wylandに変えたら一度だげログインできたが,すぐにフリーズした

おそらくグラフィックボードのドライバだろうと踏んで,nvidiaのドライバを入れたところ無事復活した.

起動時にESCを押し,grubのメニューに入る.

起動オプションに,systemd.unit=multi-user.target として,CUIで起動させる. これで無事ログインしてCUIに入れるようになった.

あとはドライバをインストールするだけなのだが,インターネット接続が必要になる. 一度有線接続でLANケーブルを繋いだ後,

$ sudo update-drivers autoinstall

で無事必要なドライバがインストールできる.便利になったものだ.

また,ThinkpadUbuntu入れるとバッテリーの持ちが悪くなるという話があったので,

blog.r3it.com

これに習って,

  • BIOSでThunderbolt BIOS Assist Mode をEnabledに
  • /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULTacpi.ec_no_wakeup=1 を追記

しておいた.

で,Docker

これはもう文句ないレベルでありとあらゆるものが速くなった. これはもうPCのスペックというより,Linuxカーネルであることが最も大きい.

webpackによるコンパイルも3倍以上速くなっている. コンパイル速度より嬉しいのは,watchしたときの変更差分検知&差分コンパイルの速さだ.Macのときは,そもそも変更検知自体にラグがあり,そこから重いコンパイルが走るので,コードを書き換えたあと,コンパイル終了まで待たなければならなかった. これが劇的に改善され,コードを保存してブラウザに切り替える頃にはコンパイルが終了している.

Linuxで使うツール群

デスクトップ環境

元々GNOME2が結構好きだったんだけど,Ubuntu18.04だとデフォルトがGNOME3になる. 悪くはないんだけど,これがあまり好きではないのでCinnamonを入れた.

懐かしいGNOME2っぽくてとても良い.

f:id:h3poteto:20190711174407p:plain

GNOME3はいろんなものを削ってシンプルにはなっているけど,削りすぎていて設定項目がどこにあるのかわからない.いや,設定項目自体が存在しないものも結構ある. あと,タイル操作が不便な感じがする.

この辺はCinnamonによりすべて解決する. そういうわけなのでファイラもNemoを使っている.Nautilusより良い.

IME

最近のUbuntuはインストールした時点でiBusの上にMozcが入っているので,そのまま日本語入力ができる.

ただEmacs上でだけは,emacs-mozcを使っている.これは好みの問題.

ターミナル

Linuxでは元々Terminator愛好者だったので,Terminatorを使っている. ターミナル自身が,タブ機能を持ち,背景透過できるので愛用している.

といっても最近はtmuxを使ってしまうので,タブ機能はいらないのだが.

エディタ

俺のEmacsは元々Linuxに最適化されている.

ランチャー

MacではAlfredを使うことが多いが,LinuxならAlbertを使うのが良い.だいたい同じ感じで使える上に,AlberならFirefoxのbookmarkも検索対象にできるので,なんならこっちのほうが高機能である.

albertlauncher.github.io

ただ,Albertは公式でppaを用意してくれていないので,ソースからビルドするか,

https://launchpad.net/~nilarimogard/+archive/ubuntu/webupd8

この辺を使ってaptから入れるのが良い.

スニペット

Macでは,よくDashのsnippetsを使っていた.だいたい, $(aws ecr get-login --no-include-email --region ap-northeast-1) とかを頻繁に使う割にぜんぜん覚えられないので記憶させてたんだけど. これの代替として,texpanderを入れた.Autokeyも割と良かったのだが,

ので辞めた.texpanderは,DashやAutokeyのように入力に対して文字列置換を走らせてはくれないが,使用感としては十分だ.

  • $HOME/bin/texpander.sh あたりにシェルを置く
  • カスタムショートカットで↑を呼び出す
  • ショートカットを押すことでスニペット一覧が表示され,選択するとそれが入力される

というような動作を提供してくれる.

設定ファイルとしては,~/.texpander 内のファイルを自動的に読むようになっているので,このディレクトリをDropbox等のディレクトリのシンボリックリンクとすることで,複数OS間でスニペットの共有ができる.

全体的な使用感

とにかくDockerがサクサク動くのは最高である.

そもそも家ではRyzen + 32GBメモの上にUbuntuを入れて使っているので,仕事とプライベートで使うOS・ツール群が完全に一致しているのは非常に良い. そういうわけなので,もともとLinuxで使えないツールは,ほとんど使っていなかったため,困ることがない.むしろなんでもっと早くLinuxにしなかったし.

よく1Passwordが動かなくて困るという話を聞いたが,そもそもパスワードマネージャはBitWardenなので何も困ることがなかった. iTunesは一切使っていなかったし,iCloud同期も,キーチェーンアクセスくらいしか入れてなかった.

とりあえず何をするにも快適な速さになったので文句は何一つない.