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

この記事は[MicroPython Advent Calendar 2017](https://qiita.com/advent-calendar/2017/micropython)の23日目の投稿です。昨日は [@tshimizu8](https://qiita.com/tshimizu8/items/70aa601f5deda7fb2d8d) さん投稿の[LOLIN ESP32 OLED ボードの MicroPython で マルチスレッド とタイマー割り込み](https://qiita.com/tshimizu8/items/70aa601f5deda7fb2d8d)でした。MicroPythonでも1.9から一部ボードでマルチスレッドがサポートされました。この _thread を元にした [threading.Thread](https://github.com/micropython/micropython-lib/blob/master/threading/threading.py)もあります。

# Mu エディタ

micro:bit用MicroPythonのオフラインエディタに[Mu](https://codewith.mu/)があります。[公式ドキュメント](http://microbit-micropython.readthedocs.io/ja/latest/tutorials/introduction.html)でも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](https://qiita.com/sugita45)さんの[20日目の投稿](http://electricsheep.hatenadiary.jp/entry/2017/12/20/000717)にもあるとおり、以下で簡単にインストールできます。依存ライブラリも自動で入るので、インストールして mu コマンドを実行すれば起動します。私が入れてみたときのバージョンは1.0.0beta8になっていました。

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

![Mu起動画面.png](https://qiita-image-store.s3.amazonaws.com/0/106817/fd987be2-bcd0-8a67-f055-700edb3b751b.png)

# Mu の日本語化

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

https://github.com/MinoruInachi/mu

[オリジナルソース]( https://github.com/mu-editor/mu)に対して以下を追加しています。

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

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

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

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

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

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

![日本語化Mu起動画面](https://qiita-image-store.s3.amazonaws.com/0/106817/ddc6f8e6-a391-60ff-a6a7-d9b017319117.png)

# Mu の便利なところ

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

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

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

![チェックの例](https://qiita-image-store.s3.amazonaws.com/0/106817/c50564c7-bf41-7133-59b6-fda4aa018fa5.png)

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

![REPLを起動したところ](https://qiita-image-store.s3.amazonaws.com/0/106817/43632183-ed4b-77d2-1120-949f3dba221e.png)

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

![ファイル起動画面](https://qiita-image-store.s3.amazonaws.com/0/106817/291d56f2-8427-2b26-ecdb-a31912b9e226.png)

# Adafruit CircuitPythonモード

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

![CircuitPythonモード](https://qiita-image-store.s3.amazonaws.com/0/106817/b4c2e019-fef9-f2e3-b0a7-ad40a6fdea99.png)

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

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

# オマケ： Pythonモード

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

![Pythonモード画面](https://qiita-image-store.s3.amazonaws.com/0/106817/330f82b3-37c0-a316-6459-ebead264fee0.png)

# オマケその２： PyGame Zero モード

【2018/4/8 追記】

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

![スクリーンショット 2018-04-08 12.31.58.png](https://qiita-image-store.s3.amazonaws.com/0/106817/837950e3-ad08-38e2-126f-32ec408a6337.png)

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

![スクリーンショット 2018-04-08 12.20.59.png](https://qiita-image-store.s3.amazonaws.com/0/106817/2d86de81-9999-fe99-c345-0a201fa33801.png)

# おまけその３：　1.0.0 リリース

【2018/7/24　追記】

2018/7/20 についに 1.0.0 がリリースされました。WindowsとmacOSにはパッケージ化されたものも出ています。私の日本語化も取り込まれています。

ただしmacOS用では、Mu をFinderから起動するとOSのロケール設定が Mu に渡らないため、日本語環境でも Mu に日本語が表示されません。この問題については issue を発行していますが、暫定対処は以下のとおりです。


mu-editor.app のコンテキストメニュー「パッケージの内容を表示」して出てくる、/Applications/mu-editor.app/Contents/MacOS/mu-editor に以下の修正を入れれば、日本語表示できます。

```
--- mu-editor.org	2018-07-20 21:18:29.000000000 +0900
+++ mu-editor	2018-07-21 09:32:55.000000000 +0900
@@ -1,4 +1,5 @@
 #!/bin/sh
+"eval" "export LC_ALL=`defaults read -g AppleLocale | sed 's/@.*$//g'`.UTF-8"
 "exec" "`dirname $0`/../Resources/python/bin/python3" "$0" "$@"
 # EASY-INSTALL-ENTRY-SCRIPT: 'mu-editor==1.0.0','console_scripts','mu-editor'
 __requires__ = 'mu-editor==1.0.0'
```

【2019/5/17　追記】　issue は close となり、macOS でも日本語が表示されるようになりました。