ハローエンジニア!
駆け出しエンジニアといえばMacでしょといった空気感がある昨今、駆け出し御用達(?)のMacbook Pro。
とりあえずAppleのホームページ開いたら、めっちゃ安いMacbook Proあるじゃん!!!
、、、ちょっと待って下さい。
確かに、Macbook Proは別の記事でも推奨しています。
ただし M1 テメーはダメだ
ちなみに今回は若干専門外なので、事実と想像を織り交ぜつつお送りしています。
このページの目次
見出しの通りです。
そもそも、開発環境の構築ができません。
また、回避策もありません。
まずは前提となる部分について、順を追って解説(?)してみます。
人間の操作がハードウェアに命令を届けるまでの道のりは、様々な開発言語によって作られています。
また、ざっくりとした分類もあって、
より物理面に近いもの → 低級言語
より人間の居る側に近いもの → 高級言語
となっています。
普段私達がパソコン上で利用しているアプリなんかは、以下のような開発言語の層を介してCPUに命令を送って処理を行っています。
人間が直接操作をするアプリ
↓↑
高級言語
(RubyやJavascript、PHP等の一般的な開発言語)
↓↑
C言語
↓↑
(この辺から低級言語、、かな?)
アセンブラ語
↓↑
機械語
↓↑
CPUを始めとしたハードウェア
とりあえずこのざっくりした図だけ覚えておいてください。
先の図で示したとおり、CPUと開発言語の橋渡しをしているのは低級言語になります。
ちょっと話がそれますが。
ものづくりにおいては規格(ないし仕様)というものがあります。
形や使い方を取り決めておくことで、誰がどこで作っても同じように利用できるわけですね。便利。
例えばコンセントや電球のソケットがメーカーごとに違ってたら困りますよね?
(アップルはLightningケーブルでUSBに対抗していますが、、
同様に、CPUにも規格があるわけです。
「こういう形で、こういう機能を提供してくださいね」という感じのものですね。
そして、Appleは既存のCPUの規格であるARMアーキテクチャに則って独自実装をしたCPU、M1を世に送り出しました。
もちろん規格通りに実装されたCPUです。
MacOSにはHomebrewやMacPortsという強力なパッケージマネージャがあります。
パッケージマネージャとはアプリのインストールをコマンドで行えるツールで、アプリのインストール時に必要となる別のアプリも同時にインストールしてくれる(=依存性の解決もしてくれる)のです。
なので、環境構築の作業はコマンドを数回流すだけで準備が完了します。
今度はパッケージマネージャの話。
彼は何をしているのかというと、インストールを指示されたアプリのソースコードをダウンロードし、ビルドをすることでアプリケーションの実行ファイルを生成し、そのインストールを行います。
このとき、低級言語を介してCPUへの指示をおこないます。
環境構築と低級言語が繋がった一方で、よくわからない単語が増えましたね(笑
今の単語、料理に例えてみるとだいたいこんな感じです。
【パッケージマネージャ】 | 【料理】 |
ソースコード | レシピ&材料 |
ビルド | 調理 |
実行ファイル | レシピに記載された料理 |
インストール | テーブルに配膳 |
ビルドとは、材料を取り寄せてインストールしたいアプリを作るって感じです。
更に付け加えるなら、CPUは厨房、低級言語は絶対にレシピ通りにしか動けない調理師といった役割に近いです。
また、レシピには調理工程だけでなく、設備に対する事細かな指示も記載されているのです。
「正面向かって7段目の引き出しに入っている木べらを使って、左から3番目のコンロにかけて玉ねぎを炒めなさい」
みたいな。
さて、先程CPUは厨房と言いました。
そして、レシピは注文が多いのです。
これがポイント。
もしレシピの指示の中に、規格で取り決められていない設備を利用するよう指示があったらどうなるでしょうか?
指示通りにしか動くことができない調理師は手を止めてしまうわけです。
こうして、M1 Macでは開発に必要なアプリケーションをインストールできない状態になっているのです。
「ではレシピを更新すればいいじゃないか」って?
そもそも、レシピを作っているのは個人の有志の人たちが大半なんです。
開発ツールはオープンソースのものが多いですが、これらのソフトウェアは基本的に有志の人たちが無償でコードの更新&保守をしています。
更に、AppleはM1の厨房の内部事情を公開していません。
たくさんの有志の人たちが、無償で、手探りで厨房の設備を確認し、レシピを日々更新している状況なんです。
つまり、そのソフトウェアがいつM1 Macに対応できるか?はほぼ未知数なんです。
物によっては対応できないものだってあるかもしれません。
M1 Macとソフトウェアの関係は説明できたかと思っています。
追加で未経験者にM1 Macを勧められない理由があります。
未経験の方が開発環境構築に失敗したとき、自分の操作や環境に問題があるのか、M1 Macゆえの問題なのか、切り分けがつくでしょうか?
また、そのインストールできなかったソフトウェアがあなたが学びたい内容に必須のものだったら?
どこかにあるかもしれない代替策(もちろん、無いかも知れませんが、、)を探すことができるでしょうか?
前述の通り、M1 Macとソフトウェアの相性によるトラブルであった場合は、基本的に個人ができることはありません。
初心者の方がレシピの更新ができるでしょうか?
対応されるまで待つしかないんです。
いつ対応されるのか、本当に対応されるのか?もわからないまま。。
今回は調べながら書いているとはいえ、だいぶ自信がないコンテンツです、、
(普段はWebアプリ周りを開発しているので、組み込み系、C言語、機械言語をまともに触ったことが無いのです。
しかし、M1 Macの開発での利用は玄人向けすぎる上に販売価格が安いので、駆け出しエンジニアを目指す方がうっかり買ってしまわないように伝えたかったので、あえて公開しました。
この記事が目に留まった有識者の方がいらっしゃったら、お気づきの点がありましたら、ぜひご連絡いただきたいです。
こういった記事もあるので、併せて読んでみてください!
こんにちは、「けーいち」です!
普段はエンジニアとして、システムの設計や開発を行っています。
エンジニアをやっているからこその「質の高い情報発信」を目指してがんばります!
Twitter:@k1_searchbank