開発者にとって重要なWindowsとMacの違いと向き不向き

総コンAdvent Calendar 2018 23日目です。
元々は16日目の予定だった記事となります。

adventar.org

最近、Macbook Proを買いました。
買った1ヶ月後に新モデル(2018)がこっそりリリースされて泣きましたけど。

私は小2ぐらいからWindows XPに触り始めて、14年ぐらいずっとWindowsユーザーでした。
もちろん開発もWindowsでやっていた訳ですが、周囲のMacユーザーを見てじわじわとMacに魅力を感じ移行を決意しました。

そこで今回は生粋のWindowsユーザー(だった)私がMacでプログラミングをしていて感じる

をまとめました。

前提条件

  • Mac
  • Windows
    • Windows 10 April 2018 Update 以降
    • 一般的なデスクトップ/ノートPC
  • 筆者
    • Windows歴: 14 / 22年
    • Mac歴: 半年
    • プログラミング歴: 3年半

知識の浅さ、プログラミング環境の違いによって内容に間違い、誤解、偏見を含む可能性があります。

WindowsMacの違い (ハード編)

お互いのOSの歴史や企業方針の相違により物理的に大きな違いがあります。

キーボード配列

最初にWindowsユーザーがMacを触ると困るのが、「⌘ commandって何?」「日本語入力ができない!」といった根本的な疑問です。

WindowsCtrl AltMacだと ⌘ command ⌥ option ⌃ control にあたります。
また、WindowsCtrl+c (コピー)は command+c に対応します。

Windows半角/全角キー で日本語と英語を切り替えますが、Macでは 英数 かな という独立したキーがあります。
最もややこしいのはWindowsBackspaceMacdelete に該当するところです。
ではWindowsDelete はというと、Mac(book)では fn+delete にあたります。

Touchbar搭載モデルではキーボードの一番上のファンクションキーあたりが液晶になっています。
そのため F1〜F12 キーを出すには fn を押しながらTouchbarに表示されるキーを打たないといけません。

他にも fn+delete のようにfnキーを使う場面は多いので、Macユーザーは command option control fn と4つの特殊キーを覚える必要があります。

ディスプレイ

MacのハイグレードモデルではRetinaディスプレイというとても綺麗な液晶が採用されています。
Macは画面が綺麗というのはだいたいRetinaのおかげです。iPhoneに搭載されているものと同じですね。

WindowsでもRetinaのようなHiDPI液晶を搭載したノートPCはあります。(Surfaceなど)
しかしWindowsは昔からフォントレンダリングが苦手で、フォントの綺麗さはMacに軍配が上がります。
ただ最近は改善傾向にあるようです。

またMacbookは画面がタッチ非対応です。
まあいらないだろって感じですが、私はSurface時代たまに使ってました。

マウス / タッチパッド

Macbookユーザーはマウスなんて使わない」と言われている通り、Macbookタッチパッド(トラックパッド)はかなり優秀です。

ではWindowsのノートにあるやつと何が違うのか、というとセンサの機能性カスタマイズ性です。

Macbookトラックパッドは3本、4本、5本指を同時に認識できます。
またタッチ、クリックだけでなくフォースクリックという力強く押すクリックという概念があります。
この時点で普通のタッチパッドより多くの組み合わせが作れることが想像できると思います。

また一般的なWindowsノートPCに比べてMacbookトラックパッドはバカでかいです。
それにより快適な操作性を生み出しています。

またMacにはBetterTouchToolという狂信的なファンが多い神アプリが存在します。
これはOSの設定より細かくトラックパッドをカスタマイズできるツールで、トラックパッドジェスチャーを任意のショートカットキーに割り当てられるなど、マウスジェスチャー的な能力があります。

入出力端子

最近のMacbookにはUSB Type-Cとヘッドホン端子しかありません。
充電ケーブルもTypeCに接続し、PCのどのポートに挿しても充電されます。

さすがにTypeCだけだと色々挿せないので変換アダプタが必須になりますが、私はそこまで不便に感じていません。
アダプタを使うのは映像出力ぐらいで、USBメモリクラウドを使っているので必要ないし、マウスも挿さないし割りかし不便とは思ってないです。

色々ケーブルを挿してPCを使っている方はかなり不便を感じると思います。

WindowsMacの違い (ソフト編)

見た目は似ていても仕様は大きく異なります。

WindowsUNIX

macOSUNIXOSといってWindowsと親が異なります。
LinuxUNIX系OSにあたります。
かなりざっくり言うと、macOSLinuxのようなシステム構成でWindowsのようなユーザーフレンドリーなUI、使い勝手を実現しています。
開発者にとってはUNIX系ということが大きな違いになります。

アプリのインストール方法

WindowsMacではアプリのインストール方法が大分違うので最初は戸惑います。

MaciPhoneと同じくApp Storeからアプリをインストールできます。
この辺はWindowsよりはるかに楽で、読みもしない規約を読まされたり、インストール場所を選択したりしないのでインストールの手間が減ります。
(Windowsにもストアがあるけど、あれはMicrosoftの失敗といっても過言ではない…)

Windowsと同じく、サイトからダウンロードをしてきてインストールする方法もあります。
その場合、だいたい dmg という形式で配布されています。
dmgファイルはisoファイルと同じく仮想ディスクイメージで、開くと自動的にマウントしてアプリを開くことができます。
インストールは表示されたアイコンをアプリケーションフォルダにD&Dするだけです。

開発者はよくHomebrewというパッケージマネージャを使ってインストールします。
Qiitaとかでよく見る brew install hoge という呪文がそれです。

パッケージマネージャとはCUIのアプリストアのようなものです。
Linuxでは aptyum というマネージャがあり、これらの使い勝手と似ていてMacのエンジニアはだいたいbrewを入れていると思います。
またHomebrew Caskというのを使うとChromeなどbrewにないアプリもコマンドでインストールできます。

改行コード

根本的な違いの一つに改行コードがあります。
Windowsでは CR+LF という形式を使うのに対し、MacなどのUNIX系は LF となります。

そもそもCR、LFとはなんぞやという話は、タイプライターの時代まで遡る必要があるので省略しますが、基本的にMacで作ったファイルは全てLF形式になります。
Windowsのメモ帳においてMacで生成したファイルの改行が反映されないのは改行コードの違いによるものです。
(近々メモ帳が大幅アップデートされ、ようやくLF形式を認識可能になるようです)

ターミナルとシェル

ターミナルとはいわゆる黒い画面と呼ばれるソフトウェアです。
カタカタとコマンドを打って文字が流れるやつで、UI側の部分のことです。
WindowsでもMacでも標準で搭載されていますが、iTerm2など外部で配布しているものもあります。

ターミナルの中身である、OSを操作する部分がシェルです。
ディレクトリの中身を覗いたり、プロセスを管理できます。
ほとんどのターミナルでシェルは切り替えることができます。

Windowsではcmd.exe (コマンドプロンプト)、PowerShellなどがあり、UNIX系ではBashが最も有名です。
UNIX系でないWindowsは独自のシェルを従来から採用しています。

ただ最近Windows Subsystem for Linux (WSL) というサブシステムにより、Linuxを仮想的にWindowsで動かせるようになったため、WindowsBashなどのシェルを叩けるようになりました。

WindowsMacの向き不向き

Mac: 環境構築が簡単

Macにおいて最初の環境構築がしやすい一番の理由は、前に述べた brew install hoge という呪文にあります。

なぜ多くの入門記事でこの呪文を見かけるかというと、それだけパッケージマネージャによるインストールが簡単だからです。
hoge の部分に python3 ruby node のように言語名を入れるだけで自動的にサーバーからダウンロードしてきてインストールされます。
(ちなみにMacにはデフォルトでgit、RubyPythonなどが入っています)

Windowsで環境構築するにはインストーラーをダウンロードし、色々なオプションの選択を迫られ、インストール後も別途設定をする必要がある…など複雑な工程を踏むため面倒です。

プログラミング初心者にとっては最初の環境構築が大きな壁になります。
しかしコマンドだけで構築ができないWindowsでは必然的につまずくポイントが多くなり、記事と同じ結果が得られずに挫折する可能性が高いです。

開発するアプリによって向き不向きがある

(この章に関しては一部、具体的な根拠が見当たらなかったので曖昧です)

当たり前ですが、.NET Frameworkなど使ってWindowsを対象としたアプリを開発する場合はWindowsが必須です。 また3Dゲーム開発ができるUnityUnreal Engineは基本的にWindowsで開発し、大半のゲームはWindowsでのみ動作します。

Web系開発者デザイナーの多くはMacを使用しています。
サーバーサイドの開発者はUNIX環境が必須のためMacLinuxを使います。
またAndroidアプリに使うJavaはどちらでも開発できますが、iOSアプリに使うSwiftMacでしか開発できません。

Mac: 対応するアプリが少ない

日本の中でも世界的にもWindowsは圧倒的なシェアを誇っています。
そのため必然的に対応するアプリはWindowsの方が多いです。

実際Windowsで使っていたアプリの中にはMacに対応していないものもあり、それと同等の機能を持つアプリを探してみても見つからないこともありました。
特に老舗や小規模なメーカー・個人のアプリはWindowsしか対応していないものが多いです。

まとめ

このようにWindowsMacでは見た目だけでなく根本的な違いがあります。
この大きな違いがOSの移行が難しい理由の一つです。
ただ個人的にはWindowsよりMacの方が仕組みが単純な気がするので、WindowsMacの方が移行しやすいように思えます。

結局開発者にとってどちらがいいのかは何を開発するか次第です。
基本的にはコマンドを多く使う人はMacをおすすめします。

私は開発環境をMacに移行して非常に満足しています。
ぬるぬるとした操作感、綺麗なディスプレイ、環境構築のしやすさ、快適なプログラミング生活を送っています。

Mac購入を考えているWindowsユーザーにとって参考になれば幸いです。

あとがき: 公平な Windows vs Mac 記事は難しい

あとがきは後で書きます。