Playdate の開発を通じて開発環境を自ら拡張する

Nature で iOS/Android あと Firmware チョットデキル亀田 @Gemmbu です。 これは Nature Engineering Blog祭 の一日目の記事です。

祭り

モバイルエンジニアにとっては Google I/O 2022WWDC22 も終わり、アプリ対応スケジュールをもやもやと考えているころかと思います。 が、そろそろ日本にも Playdate の発送が始まるころだと思います。みなさんモバイルエンジニアとしてもちろんあの厳しい予約戦争を勝ち取りましたよね?

Playdate

Playdate をご存知だとは思いますが、軽く説明しますと。初代ゲームボーイを横長にして薄くして、ビビットイエローに塗って、何故か釣りコンが悪魔合体した素敵なデバイスです。 この説明だとあれなので公式へのリンクを貼っておきます。

play.date

おもしろいのが

  • 2 週間毎に新しいゲームリリースされ、デバイスに自動でダウンロードされて遊べるようになること
  • SDK が公開されていること

ってことは、ネットワークにつながるしこれで Nature Remo を Playdate に移植すれば面白そうということで早速試してみました。

Playdate SDK

インストール

play.date

のページ従って、自身の環境にあった SDK をインストールしましょう。 ちなみにこの Playdate を作っているところは mac ユーザのようで、 mac 環境が手厚いみたいです。

Nova

Playdate の公式が開発環境として進めているのがこの Nova とよばれるエディタです

nova.app

このエディタに拡張を入れると開発環境は完成です。かんたん

Hello Box...?

ということで早速動かしてみましょう。 Playdate を動かすためには Lua か c 言語か選べるのですが、今日は Lua を使いましょうと思ったのですが... ここで Playdate ドキュメント にはネットワーク API が存在しないことに気が付きました。 ネットワークにつながるのにそんな馬鹿なと調べてみると、先人の調査のあとや

zenn.dev

フォーラムでの回答がみつかります

devforum.play.date

釣りコンクランクを回してエアコンの温度調整をする素敵 UI を作りたかったのに残念です。

Emacs

とうとつに Emacs です。エンジニアはちょっと隙ができると Emacs について話したがるものです。僕もそうです。 先程ちょっと話した公式が勧めている Nova というエディタですが、これに拡張を入れることでエディタ上から直接ビルドして実行ができます。 まるで XcodeAndroid Studio のようですね。 それはそれはいい環境なのですが、 Emacs 使いはすぐ Emacs からやりたくなるものです。

Re: Hello Box

その前に矩形を表示するプログラムを書いて、それをコマンドラインからコンパイルし Playdate シミュレータで実行してみましょう。

矩形を表示するプログラムは以下のように書けます。

-- HelloBox/main.lua

function playdate.update()
    playdate.graphics.setColor(playdate.graphics.kColorBlack)
    playdate.graphics.drawRect(40, 40, 80, 80)
end

次にターミナルを開き、これをコンパイルして Playdate シミュレータで実行します

# プロジェクトの親ディレクトリに移動
$ cd </path/to/your/project/parent>

# HelloBox プロジェクトが見えることを確認
$ ls
HelloBox

# コンパイル
$ pdc HelloBox HelloBox.pdx

# Playdate シミュレータで動かす
$ open HelloBox.pdx

run HelloBox

かわいいですね

もし pdc が動かない場合は PATH が通っているか確認してください。 pdc は通常 $HOME/Developer/PlaydateSDK/bin/pdc にインストールされていますので $HOME/Developer/PlaydateSDK/binPATH に追加してください。 Playdate シミュレータは $HOME/Developer/PlaydateSDK/bin/Playdate\ Simulator.app です。

Emacs から実行

プロジェクトをコマンドラインから実行できることを確認したので、それを Emacs から実行できるようにしましょう。 Emacs から実行するには様々な方法がありますが順番にやっていきましょう

playdate-run-hello-box-project

Emacs を起動したら新しく適当な buffer を新たに開きましょう。そして M-x emacs-lisp-mode にしてモードを elisp 編集用にしましょう。

playdate-run-hello-box-project を実装します。この関数は HelloBox プロジェクトの親フォルダに移動し、先程のターミナルのコマンドを実行するものです。

(defun playdate-run-hello-box-project ()
  "HelloBox プロジェクトをコンパイルして Playdate シミュレータで実行する"
  (interactive)
  (let ((project-parent "</path/to/your/project/parent>"))
    (async-shell-command
     (format "cd %s && pdc HelloBox HelloBox.pdx && open HelloBox.pdx"
             project-parent))))

カッコが多く見やすいですね。

emacs-lisp-mode では C-xC-e を実行することで buffer に書かれた式を評価することができます。わかりやすくいうと自分で書いた処理を Emacs で実行します。おっと、 C-xC-e っていうのがそもそもどういう操作かわからないですね。まず、これは2つのショートカットキーの連続する操作で一つは C-x、もう一つは C-e です。で、 C ってなにかというと Ctrl のことです。次に - ですが、これは同時に押すことを意味します。最後の xe はそのまま、キーボードの xe です。つまり C-xC-e と書かれたときは Ctrl+x をして Ctrl+e をすることを意味します。わかってしまえばかんたんですね。

それをやってみた様子がこれです。評価した式がかっこよくハイライトされてわかりやすいですね。

C-xC-e

で、これは playdate-run-hello-box-project という処理を Emacs に追加しています。これを実行するわけですが M-x playdate-run-hello-box-project ってやるとできます。おっと、今度は M-xM ってなにかというと Emacs の世界では Meta キー とよばれるもので、たいていの mac 環境では option に割り当てられています。playdate-run-hello-box-project はまさしくそのまま、打って最後に return をすると、おぉ、 Playdate のシミュレータが立ち上がります。その様子がこちら

M-x playdate-run-hello-box-project

ショートカットキーを登録して実行

さて、これでどこからでも M-x playdate-run-hello-box-project を行うことでコンパイルして、実行することができるようになりました。 でも、毎度毎度 M-x playdate-run-hello-box-project って打つのは大変ですよね? なのでショートカットキーを登録してみましょう。

(global-set-key "\C-c\C-p" 'playdate-run-hello-box-project)

で、まずはこれを忘れず C-xC-e で評価して使えるようにします。次に C-cC-p をすると playdate-run-hello-box-project が実行されます。すごい。

C-cC-p

次は?

さあ、これで Emacs に好きに機能を追加できるようになりました。 しかしながら HelloBox 以外のものを動かすにはどうするか?や、いまは Playdate のプロジェクトで作業してないからショートカットキーは別のに割り当てたい!! むしろ、 Playdate のプロジェクトで作業しているときにだけ自動でいい感じにいろいろやってほしい!!みたいな気持ちになると思います。 そうなったら是非 Emacs lisp を勉強してカスタマイズして、愛おしい自分だけの Emacs 環境を構築してみてください。 Happy Hacking!!

明日は mash (@maaash) | Twitter さんが Golang Generics について楽しい話を用意しているようですよ。

参考図書: GNU Emacs拡張ガイド―Emacs Lispプログラミング | ボブ グリックステイン, Glickstein,Bob, 嗣智, 榎並 |本 | 通販 | Amazon

エンジニア積極採用中です

Natureでは Emacs が好きでも好きじゃなくても、自分の開発環境を好きにカスタマイズして一緒に開発してくれる仲間を募集しています。

herp.careers

カジュアル面談も歓迎なので、ぜひお申し込みください。

herp.careers

Natureのミッション、サービス、組織や文化、福利厚生についてご興味のある方は、ぜひCulture Deckをご覧ください。

speakerdeck.com