Pythonの35000倍速い新言語 Mojo🔥 を使ってみた【セットアップ編】

# 自己紹介
こういう者です。

https://twitter.com/A7_data

詳しくは固定ツイートをご覧ください。

# Mojo🔥とは
PythonのシンプルさとRustのスピードとメモリの安全性を組み合わせた、新しいプログラミング言語。

https://www.modular.com/mojo

Pythonの35000倍速いとされており、Pythonの弱点である「遅さ」を補うと期待されている。また、書き方もPythonと似ているので移行もしやすいです。

そんな言語が2023年10月19日より、Appleシリコン搭載Macに対応したとのことで、早速触ってみました。

https://www.modular.com/blog/mojo-is-now-available-on-mac?hss_channel=tw-1483918307484848132

:::note info
個人的には速さどうこうよりも、拡張子が「.🔥」な遊び心が大好きです。
:::

# Mojoのセットアップ

https://developer.modular.com/download

このページの案内に沿って進めるだけです。
ここでは僕が詰まった箇所も加えて解説します。

あ、環境構築にはそんなに詳しくないのでChatGPT大先生に聞きながら進めました。いつもありがとう。

## ターミナルで使えるようにする
### 1. Homebrewのインストール
HomebrewとはMacOS上で動作するパッケージ管理ツールです。

詳しく知りたい方はこちら

https://zenn.dev/sawao/articles/e7e90d43f2c7f9

インストールしていない方は以下のページ案内に従ってインストールしましょう

https://brew.sh/

### 2. Modular CLIをインストール
以下のコマンドを実行すればできるはずです。

```
curl https://get.modular.com | sh - && \
modular auth {YOUR_TOKEN}
```
<details><summary>僕はエラーが出ました。</summary>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/eaab1383-15b7-4e06-b89c-63fde0745c82.png)

コマンドラインツールが古いと発生するらしい。

・解決方法：
```
sudo rm -rf /Library/Developer/CommandLineTools
```
↑Macのシステムにおいて/Library/Developer/CommandLineToolsディレクトリとその中にあるすべてのファイルとサブディレクトリを削除するものです。このディレクトリは、Xcodeのコマンドラインツールがインストールされる場所です。

このコマンドは非常に注意して使用する必要があります。この操作は取り返しのつかない削除を行い、それによってシステムが不安定になる可能性があります。通常は、コマンドラインツールのインストールが何らかの理由で壊れていて、それを完全に削除した後で再インストールする必要がある場合にのみ実行されます。ただし、このコマンドを実行する前には、必ずその必要性と影響をよく理解してください。

ChatGPT大先生がこう言ってました。

```
sudo xcode-select --install
```
Mac OS X（または macOS）上で Xcode コマンドラインツールをインストールするためのコマンドです。Xcode コマンドラインツールは、Appleの統合開発環境（IDE）である Xcode の一部ですが、このコマンドによってコマンドラインツールだけを別途インストールすることができます。

らしいです。

これでインストールが完了しました。
</details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/68345f6b-f68e-981f-252a-9e0be6c770e1.png)

こんな画面が途中で出てきたらうまく行ってると思います。1, 2分で完了しました。

### 3. Mojo SDKをインストール
SDKとは、Software Development Kitの略で、ソフトウェア開発キットのことです。ソフトウェア開発に必要なプログラムやAPI,、文章、サンプルなどをまとめてパッケージ化したものになります。

こっちは数分かかりました。ただ待つだけ。
```
modular install mojo
```
以下のような画面が出たら大丈夫そう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/98a7ab5e-06ea-1142-af78-bfe92734ae2e.png)

これの下にbashだと〜とかzshだと〜とか出ていました。んー、なんかtest全部FAILになってるけど大丈夫そ？

この後は🔥Mojo installed!🔥の下にある指示に従って実行するだけ。僕はzshなので以下のコマンドを実行しました。

```
echo 'export MODULAR_HOME="/Users/{username}/.modular"' >> ~/.zshrc
```
```
echo 'export PATH="/Users/{username}/.modular/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.zshrc
```
```
source ~/.zshrc
```
※{username}はご自身のものに置き換えてください。

とりあえず言われた通りにコピペして実行したら、ターミナルでMojoが使えるようになってました。

右も左もわからずMacの環境構築やり直した時にたくさん見たコマンドですね、懐かしいです。

インストール待ちで暇な方はぜひ

https://qiita.com/mohki7/items/88e3f5f3428744ff3473

### 4. Mojoをターミナルで使えるかテスト
「mojo」とだけ打てばターミナル上でプログラムできるモードになります。

```
print('Hello Mojo🔥')
```
pythonとほぼ同じなのでこのコードを入力すれば以下のような出力が得られます。
空白行が実行を意味するので、入力したらEnterを2回押すだけ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/6d255981-6d75-6c71-a260-f4605affb5c6.png)

↑'Hello Mojo🔥'と出力するコード

```
:q
```
コードの書き込みを終了するにはこのコマンドでできます。

簡単ですね。

## VSCodeで使えるようにする（オプション）
公式ページにはVSCodeにインストールする方法も案内されています。

https://marketplace.visualstudio.com/items?itemName=modular-mojotools.vscode-mojo

### Mojo🔥の拡張機能をインストール
VSCodeでMojoの拡張機能を検索し、インストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/b1b476ff-37a4-4c2d-e96a-72fd6edc3f13.png)

インストール後、Mojoファイルを作成。

拡張子は「.mojo」か「.🔥」。.🔥が斬新で好き。笑

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/c99b1947-0018-83ae-5425-2f3500ad3608.png)


試しにこのコードを実行してみました。

実行するにはこのコマンド。mojo　{ファイル名}で実行できます。
```
mojo practice.mojo
```

```
fn main():
    for i in range(10):
        print(i)
```
↓実行結果
```
0
1
2
3
4
5
6
7
8
9
```

ちゃんと実行できている。めでたしめでたし。

### 注意
関数の形で書かないとエラーになる。ノートブックのノリでやると受け付けてくれない

このような書き方はfirst scope levelというらしい。へー。

```
print('Hello Mojo🔥')
```
これを実行すると、
```
mototsuguohki@M2-Mototsugu-Air Mojo % mojo practice.mojo
/Users/mototsuguohki/Downloads/DataScience/Mojo/practice.mojo:1:1: error: TODO: expressions are not yet supported at the file scope level
print("Hello Mojo🔥")
mojo: error: failed to parse the provided Mojo
```

これはMojo🔥がコンパイル型の言語だかららしい。pythonはスクリプト型だからファーストスコープでもいけた

ChatGPTの解説↓

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3179677/f96856d9-5b36-6763-bd5f-dec756711523.png)

Mojo🔥はコンパイル型言語だからPythonよりも圧倒的に速いんですね。

# 終わりに
今回はMojoが10/19よりApple シリコン搭載Macで使えるようになったということで、いち早く試してみました。

書き方もpythonに似ているのですぐに慣れそうですね。

今後もPythonとの比較の記事やMojoで深層学習プログラムを実行してみる記事を書こうと思っているので、読んでもらえたら嬉しいです。

基礎文法を試した記事は書きました！

https://qiita.com/mohki7/items/c511274aeb7fe23d3737

また、X(Twitter)では日々データサイエンスやAIに関する勉強記録・情報発信をしています。フォロワーはもうすぐ5500人に到達します。

https://twitter.com/A7_data

少しでも刺激になるようなことを発信できたらいいなと思っているので、気になった方は見てみてください🔥

では👋