Linuxを開発(その他)のために導入する価値について
Linuxと開発環境
開発=プログラミングは多くの場合Windowsでも可能です。 Windows上で動作するプログラムをLinuxで書くことはいささか困難である場合もありますが、それよりはLinux上で動くプログラムをWindowsで書くことのハードルは低いといえるでしょう。
しかし、様々な理由で開発環境はLinuxが好ましい場合もあります。
そのメリットはいくつもありますが、環境的にLinuxのほうが充実しているという面がまず大きいでしょう。 それは、Linuxのほうがプログラミングなどとの距離感が近い文化であるということが大きな要因として言えます。
プログラミングをこれから勉強しようという人であれば、Windows上で開発環境を構築するよりも、Linuxをインストールするほうが容易に勉強に適した環境が手に入るということもあるはずです。
さらにWindowsよりもシンプルな改行コードと文字エンコーディングの問題、柔軟で統一的なファイルパス、優れたターミナルエミュレータの充実、優れた様々なユーティリティなど、それぞれ大きくないものの理由そのものは色々と存在します。
こうした点を踏まえてLinuxを使うと決めたのであればこの記事で言うべきことはありません。 この記事では、「果たしてそのためにLinuxを入れるべきかどうか」という点について述べたいと思います。
ネイティブLinux
まず、仮にLinuxを必要とするとして、それはOSの入れ替え、あるいはデュアルブートなどによってネイティブ環境を構築する必要があるでしょうか?
答えは、ほとんどの場合noです。
Linuxのネイティブ環境が必要なのは、あくまでもLinuxそのものに関わるような開発(たとえばハードウェアやデバイスドライバなど)であるか、Linux上で動作し、なおかつ性能が非常に重要なものなどに限られます。
もっとも、必要性がないとしてもLinuxネイティブに動作させることは悪い考えではありません。 快適なLinux環境が手に入り、快適に開発できるからです。
非ネイティブLinux
では非ネイティブにLinuxを動作させる方法があるでしょうか。
有力な候補はまず仮想マシンを使う方法でしょう。実際にWindows上でVirtualBoxを動かし、その上で動いているLinuxで開発するというのは比較的よくある方法です。
同様にエミュレータを利用する方法としてはWSLもあります。 Microsoftが公式に用意する方法であり、有力な選択肢ではありますが、WSL v1は性能的な問題と制限が問題となる可能性があり、WSL v2はまだリリースされていません。 利用環境はまだ十分に整っていない(もうすぐ整う)と言えるかもしれません。
少し変わった方法として、Linuxサーバーを借りてSSH経由で利用するという方法もあります。
VPSなどにLinuxをインストールし、それを開発環境として利用します。
コマンドライン環境に限られますがSSHで利用することができるほか、VSCode
Remoteを使うことでエディタはローカルにあるものを使用できます。
(あるいは、SSHFSのようなテクノロジーを使えばファイルの操作はローカルにある方法で行うことができるでしょう。)
Windows
10にはOpenSSHが標準採用されており、標準の端末(例えばCMD.EXE
)から利用可能です。あるいは、Windows
Terminalを使う方法や、後述するCygwin/MSYS2を用いる場合でも利用可能です。
もっとも有力なのがCygwin、あるいはMSYS2を使う方法です。これは、Windows上で動くLinuxを実現するのではなく、WindowsにUnixライクな環境を構築します。 近年はMSYS2のほうが有力視されているようですが、Cygwinのほうがより多くのソフトウェアをWindows上で実現することを目標としており、方向性がいささか違います。
Cygwin/MSYS2をインストールすることで、Windows上で動作するUnixライクなターミナルエミュレータ環境を手に入れることができます。 どちらもターミナルエミュレータが付属しており(MSYS2のものはMinTTYと言います)、この中でBashが動作します。それぞれのシステムが構築したUnixライクなパス上に存在するプログラムが実行可能なほか、Windowsのプログラムを実行することもできます。
この方法の良いところとして、開発に不可欠なGit for Windowsを導入するとMSYS2環境がインストールされるということが挙げられます。 これは、Git for WindowsそのものがMSYS2上で動作するためで、Gitを操作するためのGit BashはMSYS2+MinTTY上で動作するBashです。
Git for Windowsで導入されるMSYS2は通常のMSYS2とは独立です。
特に大きな点として、Git for
WindowsのMSYS2環境には、MSYS向けのソフトウェアを導入するpacman
が導入されていません。
Linuxを導入するべき?
例えば、サーバープログラムなどでLinuxをターゲット環境とするようなケースにおいては、Linux環境があったほうが良いと言えるでしょう。 ターゲットプラットフォームがLinuxであるケースにおいてはLinuxで開発することで無用なトラブルを避けることができます。 これは、MSYS2を使うようなケースにおいても解消されるものではありません。ターゲットプラットフォームがLinuxであるならば本物のLinuxを導入するほうが良いかもしれません。
ではプログラミングを学習しようとする人の場合はどうでしょう? プログラミングを学ぶにあたってLinuxを使用することを推奨する方もいますが、一方で一般的にはそれは過剰であると考えられています。
個人的な意見になりますが、Unix系プラットフォームを想定したプログラミング言語処理系を利用する場合はLinuxを導入したほうが良いかもしれないと考えます。 これは、例えばMSYS2を使うRubyや、Windowsシステムへの対応が完全ではないPerlなど、そしてC言語でgccを想定してプログラミングする場合もそうです。
しかし、Unixプラットフォーム向けの処理系でない場合はその必要性はあまりないでしょう。 例えばJavaScript(ウェブブラウザでも、Node.jsでも)です。
それ以外のケースにおいては本物のLinuxを必要とするケースはあまりないでしょう。 ただ、Linux環境のツール郡やcoreutilが便利であることに変わりはありませんから、まずはGit for Windowsを導入することでMSYS2/minttyを使えるようにし、さらにCygwinやMSYS2を導入することを検討すると良いのではないでしょうか。
ただ、それでもLinuxを導入することには一定の価値があります。 根本的な生産性の高さとプログラミングとの親和性の高さを活かすこということを考えれば、これを機にLinuxをはじめてみる、という選択肢もあると思います。SSHなど、便利に使えば、より捗ることでしょう。 そうしなければならないわけではありませんが、そういう選択肢も「アリ」だと思います。