動機・きっかけ
表題の通りMacが高すぎるためです。
新品の一番安いMacBook Proが24万8000円です。仕事で使うならまだしも、プライベート利用では全く費用対効果が見込めません。
それはWindowsであっても同じなのですが、Windowsの場合はMacと比べてリセールが極端に悪く、4,5年前のモデルがわずか2万円台で入手できる場合があります。
MacBook Proであれば同条件でも平気で10万円以上はするので、この差は大きいと考えています。
Macのリセールがいいのは良いことですが、それにしても高すぎる!
Webエンジニアとして必要なツールは基本的にはLinuxでも動くというか、むしろそちらが本家なところもあるので、Macは捨ててLinuxでやっていこうじゃないかというのがこの記事の趣旨です。
DockerなどはMacやWindowsと比べてかなり軽快に動きますし、OSそのものもかなり軽いのでヤフオクやメルカリで安く仕入れたパソコンであっても実用上問題ない程度には利用できると思っています。
メリット・デメリット
個人的なメリット・デメリットをまとめると以下になります。
- メリット
- (Mac等に比べ) 安く調達できる
- Linuxに(強制的に)詳しくなれる
- 動作が軽快
- 本物のエンジニアという感じがする (個人の感想です)
- デメリット
- Mac・Windowsしか対応していないツール・アプリがある
- TouchIDやWindows Hello的なものが使えない(対応させるOSSはある)
- Macと比べてリセールは皆無(しかしその分安く買える)
- iPhoneやApple Watchとの連携は無理 (自動テザリングとかロック解除とかカメラ連携とか...)
- Macのパスキーも無理
- Macのトラックパッドが恋しくなる(Mac以外のトラックパッドはあまり...)
- ThinkPadのトラックポイントはいいぞ
- Macのバッテリ持ちが恋しくなる
- Macのスピーカーの音質が恋しくなる
こうしてみるとデメリットの方が多いですね。確かに万人におすすめできるわけではないですが、住めば都ということわざもありますし、たとえ問題があったとしても許容できる範囲であるのがほとんどではないかと思います。
要は慣れです。慣れは大抵のものを解決します。
パソコンを調達
基本的にどんなPCでもLinuxは動きますが、ドライバの関係などで微妙に何かが動かない場合があります。
個人的にはUbuntuのプリインストールモデルが存在するとされるLenovoかThinkPadがおすすめです。
インストールしたいLinuxのディストリビューションで動作確認が取れているPCを事前に探すとよいでしょう。
私はThinkPad X1 Carbon Gen4 (メモリ8GB) をヤフオクで1万円ほどで落札したのを使っていました。
しかしメモリ8GBだとAntigravityなどのIDEや各種ツールを動かすとみるみるスワップを消費してしまったり、ビルドが遅かったり、また充電がType-Cではなく専用コネクタのもので不便でした。
そこで、今回はDellのLatitude 7390 (メモリ16GB)をメルカリから17,000円で購入し、セットアップがてらこの記事を書いています。
消耗・故障品の交換
今回メルカリで購入したLatitudeはバッテリーが完全にお亡くなりになっている個体でした。
ちゃんとラップトップとして使えるよう、新品の互換バッテリーをネットで4,000円程で仕入れて自分で交換します。
Macなどはバッテリーを自分で交換するのはかなり大変ですが、今回のパソコンはドライバー一本で交換できるので良かったです。もちろんThinkPadでも簡単に交換できると思います。直す権利っていいですね。
# before
$ upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -E "capacity"
capacity-level: Full
capacity: 10.6406%
# after
$ upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -E "capacity"
capacity-level: Normal
capacity: 100%
場合によってはバッテリーの他にキーボードやその他部品を交換したくなるかもしれません。
中古パーツ探せば意外とありますし、交換手順もネットで探せば出てきます。
ThinkPadのようにマニュアルが公式で提供されている場合もあります。
手間は掛かりますがその分安く済み、何よりハードウェアにも少し強くなれます。
お金ではなく知識と経験で解決していきましょう。
OSのインストール
私は仕事でずっとRHEL系を扱ってきたので、今回はFedoraをインストールします。
他のディストリビューションであってもほぼ同じ手順で行けるはずです。
基本的にはUSBメモリにLinuxイメージを焼き、そこからLinuxをインストールするという流れになります。
UbuntuやFedoraなどの有名どころのディストリビューションであれば、USBメモリ等にイメージを書き込むための専用のソフトウェアが用意されているので、それを利用するとよいでしょう。
Fedora Image Writerは2回やって2回正常なイメージが焼けなかったので普通にddコマンドを使いました。
私は念の為Windowsとのデュアルブートにしますが、 Windowsの領域は完全に削除したとしても、あとからWindowsを入れ直せるので (プロダクトキーもちゃんと入る。らしい) どちらでも良いかなと思います。
Windowsと共存させる気でしたがbitlockerが掛かっており面倒だったのでWindowsは消しました。まあ問題ないはず...
余程硬派なディストリビューションでない限り、OSのインストール自体はGUIの指示に従っていれば問題なく終わるはずです。
環境構築
いよいよ本題の環境構築です。人それぞれ好みはありますが一般的に必要だろうと思われるツール・アプリの導入手順を記載します。
必須ツール
dnf install vim-enhanced
dnf copr enable scottames/ghostty
dnf install ghostty
日本語入力
dnf install fcitx5-mozc google-noto-sans-cjk-fonts
export LC_CTYPE=en_US.UTF-8
以下ページからインストール
https://extensions.gnome.org/extension/261/kimpanel/
fcitx5-remote -n
fcitx5-configtool
# Available Input Methodの検索欄にJapaneseと入力、出てきたMozcを選択し、左矢印を押して保存
# 以降はControl + Spaceで日本語、英語の切り替えができる
XMODIFIERS='@im=fcitx'
exec --no-startup-id fcitx5 -dr
dnf install fcitx5-autostart
以降は自動で立ち上がります
HDMIを認識できるようにする
HDMIの認識についてはThinkPad X1 Gen4は問題なかったのですが、Latitude 7390では認識しませんでした。
以下手順でHDMIの外部ディスプレイが映るようにします。
- BIOS
- Intel SGX: Disabled
- Secure Boot: Disabled
- Thunderbolt Security: No Security
- Dell Type-C Dock Config: Always Enabled
- USB PowerShare: Enabled
- Fastboot: Thorough
また以下カーネルパラメータを追加します(スリープの復帰も問題なくできるようになります)。
/etc/default/grub の GRUB_CMDLINE_LINUXの最後に以下を追加
i915.modeset=1 intel_iommu=off i915.enable_dc=0
以下コマンドで設定を反映してから再起動
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
キーマップ設定
Macのように、Control+A, E, B, Fでカーソルが動かせるようにします。
以下URLから拡張機能をインストール
https://extensions.gnome.org/extension/5060/xremap/
git clone https://github.com/RedBearAK/Toshy
cd Toshy
./setup_toshy.py install
~/.config/toshy/toshy_config.py の user_custom_modmaps セクションに以下を追加
# ---------------------------------------------------------
# 1. 物理的な入れ替え
# ---------------------------------------------------------
define_modmap({
Key.CAPSLOCK: Key.LEFT_CTRL, # CapsLock -> Control(左)
Key.LEFT_META: Key.RIGHT_CTRL, # Win -> Control(右/Command役)
Key.LEFT_ALT: Key.LEFT_META, # Alt -> Meta(Option役)
})
# ---------------------------------------------------------
# アプリケーション判定用正規表現
# ---------------------------------------------------------
# ターミナル:カーソル移動もCommand系もすべて除外(アプリ側で制御)
term_regex = r"^(gnome-terminal|gnome-shells|konsole|Alacritty|kitty|xfce4-terminal|com\.mitchellh\.ghostty|wezterm)$"
# IDE (VSCodeなど):カーソル移動のみ除外、Command系は有効
ide_regex = r"^(code|Code|VSCodium|code-oss|antigravity)$"
# カーソル移動から除外するアプリの合体リスト(ターミナル + IDE)
cursor_exclude_regex = r"^(gnome-terminal|gnome-shells|konsole|Alacritty|kitty|xfce4-terminal|com\.mitchellh\.ghostty|wezterm|code|Code|VSCodium|code-oss|antigravity)$"
# ---------------------------------------------------------
# 2. ショートカットの定義
# ---------------------------------------------------------
# A. Command(元Winキー)系ショートカット
# 【ターミナル以外】のすべてのアプリ(VSCode、Chrome、ファイル管理等)で有効
keymap("User Command Shortcuts", {
K("RC-f"): K("C-f"), # Cmd + F -> 検索
K("RC-a"): K("C-a"), # Cmd + A -> 全選択
K("RC-c"): K("C-c"), # Cmd + C -> コピー
K("RC-v"): K("C-v"), # Cmd + V -> 貼り付け
K("RC-x"): K("C-x"), # Cmd + X -> 切り取り
K("RC-z"): K("C-z"), # Cmd + Z -> 元に戻す
K("RC-s"): K("C-s"), # Cmd + S -> 保存
K("RC-t"): K("C-t"), # Cmd + T -> 新しいタブ
K("RC-w"): K("C-w"), # Cmd + W -> タブを閉じる
K("RC-l"): K("C-l"), # Cmd + L -> アドレスバーを選択
K("RC-r"): K("C-r"), # Cmd + R -> 更新
}, when = matchProps(not_clas=term_regex))
# B. Mac風カーソル移動(元CapsLock)系
# 【ターミナルおよびIDE以外】のアプリ(Chrome、Slack、設定画面等)で有効
keymap("User Mac-like Cursor Movement", {
K("C-a"): K("home"),
K("C-e"): K("end"),
K("C-f"): K("right"),
K("C-b"): K("left"),
K("C-p"): K("up"),
K("C-n"): K("down"),
K("C-d"): K("delete"),
K("C-h"): K("backspace"),
}, when = matchProps(not_clas=cursor_exclude_regex))
# C. IME切り替え:全アプリ共通
keymap("System Global", {
K("C-Space"): K("C-Space"),
})
またGNOME の「設定」>「キーボード」>「ショートカットを表示とカスタマイズ」を開き、「入力」セクションにある 「次の入力ソースへ切り替える」 をバックスペースキーで無効化します。
さらに「ランチャー」セクションにある「検索」をAlt+Spaceに変更します。
先の手順で入れたToshyは仮想キーボードデバイスと振る舞い、libinputによってトラックパッドとは別グループと認識されます。したがってキーボード入力中トラックパッドに腕が当たることによってカーソルがズレてしまい、文字入力に支障が出ます。
そこで以下の手順で同じグループに設定します。
[Toshy XWayKeyz DWT Fix]
MatchName=XWayKeyz (virtual) Keyboard
# このデバイスを「内蔵キーボード」としてタグ付けする
AttrKeyboardIntegration=internal
設定後は再起動します。
Window Manager
sudo dnf install @sway-desktop-environment
ブラウザ (Chrome)
ソフトウェア開発に必要なツールやランタイム等
- ソフトウェア部門
- ツール部門
- Claude Code
- Mac同様インストール用シェルスクリプトが公開されているので、ここからインストール
- Docker
- リポジトリが公開されているのでパッケージマネージャーからインストール・アップデートできる
- 以下コマンドで実行
sudo dnf config-manager addrepo --from-repofile https://download.docker.com/linux/fedora/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo systemctl enable --now docker
- Claude Code
- ランタイム部門
- miseで管理します。詳細はmise入門を参照してください
その他
-
ssh-keygenでキーペアを作成し、GitHub等に登録 - Battery Health Chargingを入れて、充電しきい値を細かく設定できるようにする
最後に
いかがでしたでしょうか。
動画をバリバリ編集したりでもしない限り、2,3万円のパソコンでもLinuxであれば結構実用になるな、というのが自分の印象です。
もちろん仕事用のパソコンは作業効率が割と生産性に直結する部分があったりしますが、個人利用であればそれ自体がお金を生むわけではないので、なるべく安く済ませたいですよね。
それではみなさんもぜひ楽しいLinuxライフをお過ごしください。では