Online 3GX Builderの実装
はじめに
Online 3GX Builderは、3gx(Nintendo 3DS向け拡張プラグイン)をオンラインでビルドできるツール。この記事ではどのように実装したかをざっくりと説明。
入力処理
Online 3GX BuilderはHerokuでホスティングしている。普段Herokuで公開するサービスはGitHubからデプロイしていたが、某事件(詳しくはHeroku GitHub インシデント
で検索)の影響でGitHubと連携できなくなったため、現在はHeroku単体でGit管理している。
サーバー処理にはFlaskを使用している。特に理由はないが、以前にFlask+PyGithubでGitHub APIを使用したことがあったので、移植しやすいと考え採用。
処理は以下のように行っている。
- ユーザーの入力からリポジトリのリンクを取得。
- リンクを解析し、有効なリポジトリのURLであるかどうか確認する。
- ビルド用のGitHub ActionsにPOSTリクエストを送信。パラメータとして
ユーザー名/リポジトリ名
を渡す。 - GitHub Actionsのページに遷移。
ビルド処理
ビルドはGitHub Actionsで行う。作成当初、トリガー条件にはworkflow_dispatch
を使用する予定だった。workflow_dispatch
を使用すると、上記のようなHerokuのサイトを用意せずとも、GitHub Actionsのページで直接URLを入力してビルドを開始することができる。だがどうやらこの方法、リポジトリへの書き込み権限がある人でないと使えないらしい。つまり、一般の人がサービスとして利用することはできない。というわけで、外部からのPOSTリクエストで実行できるrepository_dispatch
を使用。
次にぶち当たった問題が、どのように3gxファイルをビルドするか。3gxのビルドには多くの依存関係があるため、自分でスクリプトを書くことはできなくはないが面倒だ。実はありがたいことに、PabloMK7氏が3gxビルド用Dockerイメージを公開してくれている。これは使うしか無い!というわけで、内部ではこのイメージを使用することにした。
ビルドが正常に終了すると、成果物としてzipファイルに格納された3gxがアップロードされる。成果物はビルド画面の下部からダウンロードできる。
最後に
需要は限定的だけど、こういうことができるとちょっと面白いよね。