目次
背景
- 10年以上プログラマーをやると開発環境も色々と遷移してきた
- 最初はWindowsから入り、Linuxに移行し、Macに移行し、その後Linuxを使い続け、またWindowsに帰ってきた
- つまり、OSをぐるぐる数年単位で移動しているのである
- そして、先月、ついに約束の地へ来れた
- おそらく自分と同じように自由を追い求めてPCのOSを彷徨う人がいるだろう
- これは10年それを続けてマルチOSを使いこなすに到った記録である
結論
- 今、最終的に、複数のOSを組み合わせたの開発環境こそ、最強の開発環境という結論に到った
- つまり、開発環境も、Client-Server方式で複数台用意する事こそ至高事である
- 具体的には、FEはWindows、Mac、BEはUbuntu(LAN, AWS)という構成である
- 流浪の民としてここに到るまでに時間がかかった
なぜ開発環境にこだわったのか?
- それはプログラマーの性、自由の為である
- OSSでFreeでHackableなソースコードこそ最も自由と考えていた時期があったからである
- タイル型ウィンドウマネージャーを使い、Terminalで黒い背景に緑の文字を打ち、キーボードで生きる事が至高と考えていた
- マウスを使う事は外道であり、全てがコントローラブルな決定的な世界こそ自由と考えていた
- 有料のソフトを使い、非公開コードを使ったら負けと考えていた
今の自由に対する考え
目的は自由なのは変わらないが意味が変わった。
- 昔
- OSS、FLOSS、つまり「無料でオープンな物こそ自由」
- 今
- OSS、FLOSSはいいが、「利用できる事こそ自由」
つまり、「Modificationの幅」から「Choiceの幅」こそ真の自由だと気が付いた。
人間は時間の制限があるので、直ぐできる事が多い道具程、自由という事である。
自由とは何か
Linuxを使う事によって自由を追い求めてきたが、本当の自由について10年かけて知ることとなった。
- これまで、大まかに開発用PCはWindows -> Mac -> Linux -> Windowsとループしていた
- 背景には、OSS上で開発したいというマインドがあった
- 最初の仕事の開発でWindowsとVisual Studioを使ってC#で開発をしていた反動から、反MSの反骨心があったのかもしれない
- そこで、自由を追い求めてLinux、とりわけGentooやArchに走った
- しかし、途中で、自由を得るために、自由を失っている矛盾に気が付いた
- なぜなら、KindleアプリもExcelもPowerPointも動かないLinuxで、不便な環境で作業をしていたからである
- つまり、LibreOfficeやWineで無理やり必要なソフトウェアを動かしていたのである
- 自由の為にLinuxを使っているのに、全然自由になっていなかった
- そして、自己目的化していた事に気が付いた
- また、そのころに、WindowsのローカルでWSLが動くようになった
- つまり、LinuxとTerminalの設定(dotfiles)が、cygwinなしでちゃんと動くようになった
- つまり、無料でOSSでソフトウェアを使うより、多少おカネを払ってでもWindowsで動かした方が、色々なソフトウェアが動くので真に自由だったのである
- そのため、Windows + WSLに移行する事にした
- しかし、WSL2でも、Hyper-Vの問題が発生し完璧ではないと気が付いた
- 結果的に、Client-Server方式で、BEはLinux、FEはWindows / Macという方式になった
まとめ
- 1つの機器で完全性と無矛盾性を求める事はできない
- 結局、アクターにRole(FE, BE)を当てて、協調して使うのが良い
- 何でも一つのSilver Bulletでできるという考えは間違い
- プラグマティズム的に、マルチOSでいいものやいいところを利用するのが正解
あとがき
OS遍歴
- Mac
- 長らく開発機として愛用したが、Appleの殿様商売に嫌気が差した
- MacBookが壊れた際に、外国での修理費が日本の2倍になった
- なぜなら、発展途上国だとAppleの認定がなく、ぼったくり価格で直すしかないため
- Gentoo
- アプリをインストールするたびにコンパイルをする必要があり不便だった
- 特にC++系のコンパイルはかなり長く、intelのCPUのバイナリをDLするArchに移行した
- Fedora / Redhat
- 1年は使ったが、バージョンアップデートが速く遊び用とだった
- Puppy Linux
- UIが貧弱だったので、そこまで節約する必要がなかった
- Arch
- インストールするのがめんどくさく、ロングタームリリースなのでpacmanのコマンドをミスると全部やり直しになり、現実的ではなかった
- 特に新しいソフトをローカル(ホスト環境)で動かす際に問題が色々発生した
- Manjaro
- 長く開発用PCとして利用した
- しかし、KindleやPrinterなどWindowsにしか動かないアプリケーションに嫌気が差した
- Ubuntu
- 長らく利用している、Ubuntu 8の頃からCompiz Fusionで遊んでいたし、今でもWSLで愛用のOS
- Windows
- 長らく利用しているが、WSL2とHyper-Vの問題のため、クライアント機として利用している
他にもNVIDIA Jetsonや色々なLinux派生のOSがあるが、ここでは全ては述べない。
マウスレスへのこだわり
結論、マウスを使わない事へのこだわりの間違いだった。
- 上の画像はキーボード至上主義時代のThinkpad上のArch Linuxとi3の画面
- 一時期、タイル型ウィンドウマネージャのi3やxmonad、polybarの設定にこだわっていた
- これらのマウスレス開発のLess is more的な思想はおそらくVIMがきっかけだろう
- しかし、生産性が著しく低く、キーボードのみで開発するのは断念した
- 特にタイル型ウィンドウマネージャーはその特性上複数のウィンドウを重ねて使わない
- 重ねるには自分で調整する必要があり、あまりに煩わしかった
- そして、画面が小さいノートPCとのタイル型ウィンドウマネージャーとの相性は最悪だった
- また、MacやWindowsでもAlt + Tabでアプリケーション一覧をでき、タイルはこれで十分という結論に至った
- 最終的には今は、トラックパッドを愛用している
ターミナルへのこだわり
ターミナルのこだわりは大正解だった
- Tmux, Screen, Vim, Emacs, Zsh, Fish, Bash, Fzfなどを10年以上利用している
- またエディタにもこだわった
- 1行の編集はEmacs、複数行の編集はVimという使い分けが最強である
- 最近はVSCodeがないと生きていけない体になってしまった
- ターミナルマルチプレクサもこだわっている
- prefix
- Ctrl-qはTmux
- Ctrl-zはScreenに捧げている
- fish in tmux in screenで上にtmux下screenのタブを出している
- prefix
- shellのこだわり
- 煩わしいZshは最近は捨ててしまった
- Posix互換がないものの今はFishで快適Lifeを送っている
- 必要に応じてBashも使っている
- このTerminalやDotfilesの設定はWSLでも十分に生きている
- なお、FontはEmoji付きのHack Nerdを愛用している
IDEの移り変わり
- 元々はVimとZsh、i3やxmonadなどで完全キーボード生活に入ろうとした時期があった
- しかし、現実的に、タイル型ウィンドウに対しては使いづらさがあった
- 画面を重ねられないので、情報量が制限されるという問題である
- その後、MacのMission ControlやWindowのAlt+Ctrlこそ、このタイルの真の継承者だと悟った
- 結果、DesktopのOSにおいてタイル型ウィンドウを使う執着からは離れた
- また、VimやTerminalで簡潔する環境から、VSCodeの方が圧倒的に使いやすいので、最近はVScodeをもっぱら使っている