microbit
micropython

日本語化してみたMuエディタ

この記事はMicroPython Advent Calendar 2017の23日目の投稿です。昨日は @tshimizu8 さん投稿のLOLIN ESP32 OLED ボードの MicroPython で マルチスレッド とタイマー割り込みでした。MicroPythonでも1.9から一部ボードでマルチスレッドがサポートされました。この _thread を元にした threading.Threadもあります。

Mu エディタ

micro:bit用MicroPythonのオフラインエディタにMuがあります。公式ドキュメントでもmuの利用を勧めています。この記事を書いている時点で一般にインストールパッケージとして配布されているものは0.9.3です。

Muは元々micro:bit用MicroPython専用エディタとして作られました。現在はバージョン1.0リリースに向けて改良が重ねられるとともにAdafruit CircitPythonボードためのモードやCPythonのモードを追加しています。MicroPythonのバージョンも1.9.2にアップしています。

ここでは Raspberry Pi の Raspbian stretch で Mu を使う方法を説明します。Raspbian stretchには1.0betaのMuパッケージが用意されているので、最新に近いものが利用できます。
@sugita45さんの20日目の投稿にもあるとおり、以下で簡単にインストールできます。依存ライブラリも自動で入るので、インストールして mu コマンドを実行すれば起動します。私が入れてみたときのバージョンは1.0.0beta8になっていました。

$ sudo apt-get update && sudo apt-get install mu -y
$ mu &

Mu起動画面.png

Mu の日本語化

Muエディタ1.0では多言語にも対応しやすいよう改良され、メニューやメッセージの日本語化がやりやすくなっています。そこで日本語化してみたものをgithubに置いてみました。以下からクローンできます。

https://github.com/MinoruInachi/mu

オリジナルソースに対して以下を追加しています。

  • メニューやダイアログメッセージの日本語化
  • chibi:bit を使った場合でもプログラムを転送できるように修正(CHIBIBIT ドライブ対応)
  • Adafruit CircuitPythonモードで使えるボードとしてArduino M0を追加
  • 起動時に編集画面に現れるコメント「# Write your code here :-)」を日本語化した際に文字化けする問題の修正
  • MicroPython のランタイムをより新しいものに変更

将来的には以下も対応するつもりです。

  • ドキュメントの和訳
  • パッケージ化

パッケージ化がまだなので、お手軽にインストールというわけにはいきませんが、Muをインストール済みのRaspbian stretchであれば依存ライブラリもすべて入っているので、クローンしてきて run.py を実行するだけで起動できます。

$ git clone https://github.com/MinoruInachi/mu
$ cd mu-ja
$ ./run.py

日本語化した Mu エディタの起動画面です。

日本語化Mu起動画面

Mu の便利なところ

以下、日本語化してMuエディタを使って、Muのmicro:bitモードの機能をざっくり説明します。

BBC micro:bit モードでプログラムを作成し、「転送」アイコンをクリックすると、MicroPythonランタイムとプログラムをくっつけたhexファイルを自動でMICROBITドライブに送ってくれます。公式オンラインエディタのように一度ダウンロードしてkらMICROBITドライブにコピーするといった煩わしさがありません。

MicroPythonではボードに転送して実行するまで文法エラーが出ないから面倒という話もたびたび聴きますが、MicroPythonとCPythonの構文は同じなので、静的なチェックツールで転送前に静的チェックツールで文法エラーはかなり発見できます。Muでは「チェック」アイコンをクリックすることにより、pycodestyleとpyflakesによるチェックが可能です。以下は変数名を間違えた場合のチェックの例です(外部ツールに頼っている都合、チェックのメッセージは日本語化できていません)。

チェックの例

「REPL」アイコンをクリックすることで、シリアル経由でREPLも使えます。これはmicro:bitで実行中のプログラムのprint()文デバッグにも便利ですし、エラーメッセージの確認にも便利です(個人的には
5x5 LEDマトリクスに流れるエラーメッセージを読むのは苦痛)。

REPLを起動したところ

「ファイル」アイコンをクリックすると、ホストとmicro:bitのファイルシステム間でファイルのやりとりができる画面が現れます。この機能、少し前まではランタイムのみを転送したmicro:bitで使わないとMuが落ちたり、無限ループプログラムが動いているMuで使うとストールしたりと問題の多いものだったのですが、今はそのような問題も無くなっています。

ファイル起動画面

Adafruit CircuitPythonモード

Adafruit CircuitPythonは、元々MicroPythonをAdafruit社のマイコンボード(主にsamd21を載せたもの)に移植する試みでした。何かAdafruit社の気に入らないことが多々あったのか、標準ライブラリをオリジナルから変えてしまい、CircuitPythonという名前でリリースしました。バージョン1系はMicroPython1.8.7ベース、バージョン2系はMicroPython1.9.2ベースです。

CircuitPythonモード

MuのCircuitPythonモードは、以下を除いて micro:bit モードとほぼ同じです。

  • 「ファイル」アイコンが無い。micro:bitと違い、CIRCUITPY ドライブは CircuitPythonのファイルシステムをマウントしているので、ファイルのやりとりにはこれを使えばいいでしょ? ということでしょう
  • 「転送」アイコンが無い。上記と同じ理由
  • 「保存」での保存先はデフォルトで CIRCUITPY ドライブ

オマケ: Pythonモード

いちおうCPythonの編集モードもあります。ブレークポイントを設定して変数値をトレースしながら実行できます。まあ、初心者用といいましても、CPythonで使うならThonnyエディタあたりを使ったほうが便利でしょう。

Pythonモード画面

オマケその2: PyGame Zero モード

【2018/4/8 追記】

そろそろいいかげんに 日本語化の成果をプルリクしようと、ひさびさに日本語 .po ファイルのメンテをしていたら、Pygame Zero なんてまた新しいモード追加されてたことに気づきました。

スクリーンショット 2018-04-08 12.31.58.png

Pygame Zero というものを知らなかったので、ちょっと調べていじってみました。教育用に Pygame の API とかイベントループとか面倒くさい説明をなるべくしなくてもよいようにしたものとのこと。14行でエイリアンを動かせました。

スクリーンショット 2018-04-08 12.20.59.png