Featured image of post 最強の開発環境

最強の開発環境

目次

背景

  • 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があるが、ここでは全ては述べない。

ハマグリ状態のMac

マウスレスへのこだわり

結論、マウスを使わない事へのこだわりの間違いだった。

Linux+キーボード至上主義時代のi3

  • 上の画像はキーボード至上主義時代の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のタブを出している
  • shellのこだわり
    • 煩わしいZshは最近は捨ててしまった
    • Posix互換がないものの今はFishで快適Lifeを送っている
    • 必要に応じてBashも使っている
  • このTerminalやDotfilesの設定はWSLでも十分に生きている
  • なお、FontはEmoji付きのHack Nerdを愛用している

Fish in Tmux in Screen in WSL on Windows

IDEの移り変わり

  • 元々はVimとZsh、i3やxmonadなどで完全キーボード生活に入ろうとした時期があった
  • しかし、現実的に、タイル型ウィンドウに対しては使いづらさがあった
  • 画面を重ねられないので、情報量が制限されるという問題である
  • その後、MacのMission ControlやWindowのAlt+Ctrlこそ、このタイルの真の継承者だと悟った
  • 結果、DesktopのOSにおいてタイル型ウィンドウを使う執着からは離れた
  • また、VimやTerminalで簡潔する環境から、VSCodeの方が圧倒的に使いやすいので、最近はVScodeをもっぱら使っている
Built with Hugo
テーマ StackJimmy によって設計されています。