🎐

【Mojo🔥】ColaboratoryはPythonからMojoへ

2024/06/15に公開

ColabでもMojoを使役致しましょう

Googleの提供するColaboratoryでは、Pythonを使用することが通常です。優良な環境を無償で使われるとあって、愛用せられる方は数多、もはや算えることを得ないでしょう。しかし、何もプログラミング言語は唯一ではなし、Colaboratoryでも多様な言語を使用できることは、諸賢の既に確認するところです。

現在、Mojoは未だWindowsに対応していません。WSL(仮想環境)には対応しているようですね。私のようにWindowsを使っている場合、現状は仮想環境にわざわざ導入するしかないわけですから、Colaboratoryのような外部サービスで使えるならば、その方が手軽です。

Colab活用例

一に、数値計算で好まれているJuliaの例を示します。

https://colab.research.google.com/github/ageron/julia_notebooks/blob/master/Julia_Colab_Notebook_Template.ipynb

こちらは、Pythonと同じようにしてJuliaを記述できるようになる代物です。初めて拝見した時の驚嘆は、それは忘れがたいものです。

また、間接的ながらもRustやMojoを実行されている方がいらっしゃいます。

https://qiita.com/YutaroOgawa2/items/ce6bf46eebc901f68dde#手順2-google-colabでmojoを使用できるように設定する

「間接的」と言いますのは、「ファイルを作り」、「コマンドを実行する」という手順を踏まねばならないということです。無償版Colaboratoryの性質上、放縦にコマンドを実行するとはゆきません。少しの制約がありますから、理想としては、先に示したJuliaの例が如く、コマンドを要せずして実行したいものであります。

本題

Mojoの実行にコマンドは避けられぬかと思って居りましたが、偶然にも理想とする形を実現することができました。加えて、どうやら当時と現在とではMojoを取り巻く事情が変わったようで、先例とは手順を異にします。今後の移ろい次第では本記事の手法が無用になるやもしれませんことを、ここにお断りいたします。

今回作成したipynb型式のファイルは、以下で共有しております。

https://github.com/amenaruya/Mojo_in_GoogleColab/tree/main

インストール

手順は次の二つです。

  1. modularの導入
  2. modularによるmojoの導入

そもそもMojoを導入するには、先んじてModularというものが必要になります。Modularについて、本記事では特に述べませんが、現状Mojo取得に不可避の存在となっているようですのでご注意下さい。

modularをダウンロードする
curl -s https://get.modular.com | sh -

次に、Mojoを導入します。

mojoをインストールする
modular install mojo
公式手順を無視していることについて

上に「手順は二つ」と申しましたが、公式には四つの手順を踏めとあります。

https://docs.modular.com/mojo/manual/get-started

  1. modularの導入(全く同じ)
  2. pythonの仮想環境を作成し、作動させる
    python3 -m venv mojo-venv && source mojo-venv/bin/activate
    
  3. (仮想環境内で)modularによるmojoの導入(同じ)
  4. 環境変数を設定する
    MOJO_PATH=$(modular config mojo.path) \
      && BASHRC=$( [ -f "$HOME/.bash_profile" ] && echo "$HOME/.bash_profile" || echo "$HOME/.bashrc" ) \
      && echo 'export MODULAR_HOME="'$HOME'/.modular"' >> "$BASHRC" \
      && echo 'export PATH="'$MOJO_PATH'/bin:$PATH"' >> "$BASHRC" \
      && source "$BASHRC"
    

これを無視した理由は幾つかありますが、最も深刻なものは、「環境変数を設定できない」点です。こちらは、先駆者も確認している問題のようでした。即ち、mojoコマンドを素直に実行できないのです。対処としては、コマンド実行時に毎度環境変数を設定するか、mojo本体を直接実行するかのいずれかでしょう。
本記事ではコマンドが使えずとも構わないため、手順を無視して直ぐにmojoを導入しています。

ランタイム

通常Colaboratoryでは、Python以外のプログラムを記述しても実行できませんが、これは「ランタイム」がPythonとなっているからです。

ランタイムの確認方法
ランタイム設定の開き方

「ランタイムのタイプを変更」とあるのを選択すると、次の画面が出てきます。

ランタイム設定画面
ランタイムを確認・変更できる

候補に見えます通り、Rも初めから選択できるようになっており、また導入したMojoも選択肢に追加されています。

以上で準備を終えました。最後に、実際に試作してみたものを例に、実行の仕方について述べておきます。

セルで実行

実行例
実行例

コピーはこちら
fn print_mojo(number: UInt8):
    for _ in range(number):
        print("🔥", end="")
print_mojo(2)

指定回数分だけ🔥を表示するだけの、無味乾燥なプログラムです。本来エラーを示す波線が残ってしまうものの、実行を確認できています。

実行ファイルを生成する

Mojoは実行ファイルを生成することができます。その手法として、一例を示します。

新規ファイルを作成する際は、%%file ファイル名から始めて記述します。

ファイルを作る
ファイルを作る(拡張子は.mojoか.🔥)

コピーはこちら
%%file print_mojo.mojo
from sys import argv

fn print_mojo(number: UInt8):
    for _ in range(number):
        print("🔥", end="")

fn main():
    var args = argv()
    var n: UInt8

    try:
        n = atol(args[1])
    except:
        n = 1

    print_mojo(n)

実行ファイルを生成し、実行します。

生成と実行
実行ファイルを生成(上)、実行(下)

コピーはこちら
!/root/.modular/pkg/packages.modular.com_mojo/bin/mojo build print_mojo.mojo -o print_mojo.out
!./print_mojo.out 5
/root/.modular/pkg/packages.modular.com_mojo/bin/mojo とは

※この註釈では、OSであるLinuxに関する話題を扱っています。Linuxを学んでいない方はご注意下さい。


/root/.modular/pkg/packages.modular.com_mojo/bin/mojoは、mojoの本体が存在する場所に外なりません。Colaboratoryは一応OS(Ubuntu)上の環境となっているらしく、当然ユーザーが存在します。!whoamiで確認すると、吾人がログインしているのはrootユーザーであることが確認できます。

Modularを導入した際に、rootユーザーのhome directory/rootに.modularが生成されています。更にその配下pkg/packages.modular.com_mojo/binにmojoがインストールされます。ユーザーが異なれば、当然各ユーザーのhome directory/home/ユーザー名以下にこれらが存在します。

当初、home directoryを示す環境変数$HOMEを用いて次のようにしていました。

!$HOME/.modular/pkg/packages.modular.com_mojo/bin/mojo

コマンドライン引数を与えるときは次のようになります。

!$HOME/.modular/pkg/packages.modular.com_mojo/bin/mojo xxx.mojo $引数

この時、なぜか$引数が無視されてしまったため、$HOMEを使用しないようにしています。
今後、仕様変更によってこのパスが変化した場合には、適切なものに修正して下さい。

補

以上がColaboratoryでMojoを使用するための概説となります。Pythonの上位互換とさえ評される言語ですから、今後益益使用する方も増加してゆくかもしれません。殊更、Windowsユーザーとしては暫くこの方法が重宝しそうです。
しかし、Colaboratoryはとかく制約が多く、時折不便を覚えることもありました。そこで、本記事を全否定する話題に触れ、筆を置くこととします。(Linuxを学んでいない方はご注意下さい)


上位互換

Google APIと検索すると、このページに到達するはずです。

https://console.cloud.google.com/apis/library?hl=ja

初回は利用規約に同意するよう求められるようですので、同意して続行します。

利用規約
同意しなければ先に進めない

「無料トライアル」の開始はご自由に。

プロジェクト作成

既に作成している方は次へ

「プロジェクトの選択」という項目を確認します。

プロジェクトの選択

プロジェクトを一覧しますが、この時点では何も作成していないので何も表示されません。「新しいプロジェクト」を選択します。

プロジェクト一覧

作成するプロジェクト名を決定します。拘りが無ければそのままで作成します。

プロジェクト名

作成後、プロジェクトを選択します。


Cloud Shell

先ほどから右上にあるアイコンに注目。

Cloud Shell
一番左がCloud Shell

左のアイコンを選択すると、画面下が占領されます。ここではメッセージがでできたので、続行します。

shell

接続中の画面が表示されている間、少し待ちます。

接続中

接続が完了すると、次のような画面に切り替わります。この画面には個人情報が含まれるので、スクリーンショットなどはするべきでありません。

Welcome to Cloud Shell! Type "help" to get started.
Your Cloud Platform project in this session is set to プロジェクト名.
Use “gcloud config set project [PROJECT_ID]” to change to a different project.
ユーザー名@cloudshell:~ (プロジェクト名)$ 

Cloud Shellと名を冠する通り、この画面は端末そのものです。こちらであれば、環境変数が無効になることもないため、Mojoを公式の手順で導入することができます。しかし、Colaboratoryよりも自由であるが故に、専門の知識・経験が無い方には不親切です。どちらを選ぶかは、用途も併せてご検討下さい。

作成したファイルは保持され、失われません。ただし、自身のhome directory外のものは失われるそうですから、避けましょう。それに起因してか、\sout{Mojo}等のインストールしたアプリケーションは、次回起動時に喪失していることがあります。(Mojoはhome directory下.modular/pkg/packages.modular.com_mojo/binにあれば即ち永続し、従て特別の対処を経ずして使用し得た)

ところで、「エディタを開く」を選択すると、Visual Studio Codeのような画面に移行します。同一のものではないため、一方にある拡張機能が、他方にはないこともあります。使うか否かは好みの問題でしょう。(ありました。表示が遅いだけだったのかもしれません。)

エディター
個人的にとてもありがたい

Discussion