概要
Webブラウザ上で動作するFM音源MMLコンパイラ「IAM.mml」をリリースしたため報告します。 IAM.mmlの概要・使い方を知りたい方はIAM.mml Docsを参照してください。
動機
IAM.mmlを開発した動機は「DAWを使いたくないから」であり「簡単に使えるコンパイラがないから」です。
CakewalkなりStudio Oneなり使ったことはありますが、以下のような不満を持ってしまいました。 思想や文化が違うために発生する不満であるので、一般客を相手取っているDAW側にとってはどうしようもない問題でしょう。 従って、一客である私が変わらないといけません。
- 画面が見づらい
- いちいち重いアプリを起動しなくちゃいけない
- 作業データがバイナリ
- キーボードやMIDIキーボードから非リアルタイムで打ち込みたい
- 音源が多すぎてよくわからない
- ガチろうとすると有料
さて、私がMMLコンパイラを使えば良いのですが、そう一筋縄ではいきませんでした。 そもそもDAWよりも歴史の古い分野ですから、MMLコンパイラなんて既に沢山あります。 PMD、MSXplay、mml2midi、サクラ……。 しかし、これらに対しても以下のような不満を持ってしまいました。
- MIDIだとしょぼい (後からDAWを使うことになる)
- 開発環境構築がとても難しい
- 何らかのエミュレータ
- まともに動かない
以上のことから、仕方なく作ったのがIAM.mmlです。 決して褒められた開発動機ではありませんが、仕方ないのです。 舌の肥えた人が外食では味が合わないからと自炊しかしないように。 ニッチな好みを持った絵師が供給が少な過ぎるからと自ら畑を耕すように。 「自分の望むものがないなら自分で生み出すしかない」というのは、仕方ないのです。 思想の強い人間の宿命なのです。 ……なんの話?
当然ながら、IAM.mmlにも欠点が沢山あります。 IAM.mmlよりもずっと私好みのコンパイラを誰かが作るまでは、メンテナンスするつもりです。
苦労話
開発当初は関数指向パラダイムで開発しようと思っていました。 しかし、機能が複雑化するほどに、どうしても煩わしさを感じてしまいました。 結局のところ、問題をオブジェクトに分割して、各オブジェクトにプログラムを委譲した方が思考がスッキリしたのです。 今後は、綺麗なフローを持つような簡単な計算プログラムを組むとき以外は、オブジェクト指向パラダイムで開発しようと思います。
これは今後も続く苦労ですが、ドキュメント作業・デバッグ作業が個人開発最大級の敵だと思います。 開発者が自作のソフトウェアを使う分には、使い方を熟知しているし、不備を熟知しているし、バグへの対処も熟知しているため、ドキュメントなんて要らないし、デバッグなんてできません。 実際に「文法がよくわからなくて使えませんでした」という報告を受けたほどです。 個人的には、v0.2.0に上がるタイミングでわかりやすいドキュメントになっていると思い込んでいますが、ユーザにとってはまだ不十分かもしれません。 定期的にフィードバックが欲しいものですね。
参考文献
■