3月の開発記録 (2024)

あっという間にQ1が終わってしまいましたが進捗どうでしょうか? うちは完全にダメです(時候の挨拶)

今月は開発記録として出せるものが全然無くて自分でも驚きなのですが、主に4月のM3 2024春・5月の技術書典16向けに準備している新刊の作業ばかり進めていました。そして半分くらい台湾で過ごしていて、その半分くらい風邪でダウンしていて(と言っても寝込んでいたのは3日くらいなのですが)、その間は全然執筆が進まなかったので、執筆合宿(?)としてもイマイチでした。ですが、まあ執筆とそのための調査を主な作業にしていたので、それなりの密度のものが書けているとは思います。

新刊は「MIDI 2.0 MIDI-CIガイドブック」の予定です。「MIDI 2.0 UMPガイドブック」と対を成す内容で、当然のように(?)世界初のMIDI-CIに関する書籍になる予定ですが、4月のうちに世界のどこかで誰かが先を越す可能性は0ではないです。まだ「3/32までには初稿が終わるかも?」というレベルですが、現時点で90ページあるので、図版のTODOなどを消化していくと最終的には100ページ超えくらいにはなるでしょう。

仕様の解説をしている「仕様編」と、MIDI-CI実装の使い方についてまとめた「実装編」から成る予定です。

現時点でコードは1行も出てきていないので、一応非プログラマー向けの技術書と言えなくもない内容です。とはいえMIDI-CIの長いSysExバイトストリームを直接編集できるミュージシャンが多いとも思えず、MIDI-CI自体もエンドユーザー向けの技術とは言い難いので、「MIDI 2.0を使いこなしたい人向け」になるとは思えず、「MIDI 2.0をきちんと理解したい人向け」みたいな位置付けの本になりそうです。

1月の時点でMIDI-CI Property Exchangeに関する覚書を公開しましたが、当時は割といろいろ調べてそれなりの量の情報をまとめて書いたつもりだったのが、この本の関連章を書き終えてみると「MMA/AMEI定義プロパティは何も調べてなかったな」とか「だいぶ表層的なところだけまとめているな」といった印象になったので、だいぶ情報の多い内容になったと思います。実装編は、2月に英語でまとめたJUCE CapabilityInquiryDemoと自分のktmidi-ci-toolをベースに、すでに仕様編で解説した部分を削ぎ落としつつ書き直しています(スクショだけ使いまわしていますが)。英語のまとめでも書いているのですが、JUCEにはMIDI Message Reportの機能がサポートされていないので、自分の実装だけが頼り…みたいな部分もありました。

それと2月末には「勉強会をやる予定です」と書いていたのですが、勉強会の企画を動かしていたのが、自分以外全く動きがなくなってしまい、自分の独断ではコミュニティとしては何も進められないので、多分何もやらないと思います。何かやるなら自分の独断で動かせるコミュニティとして作り直すべきだと思いますが、自分にはそこまでコミュニティ活動をやるインセンティブは無いので、やらないと思います。

ktmidi-ci improvements

今月の開発作業のほとんどはktmidi-ciの細かい改善部分です。

  • MIDI 2.0 UMP対応: 今までMIDI 1.0レベルでのみ実装していたのですが、MIDI 2.0 UMPプロトコルでも意味のある実装になるように手を加えました。といってもUMPのグループに対応しただけです。
  • APIの整備: ktmidi-ciのAPIはこれまでktmidi-ci-toolの機能の際限ない拡張に対応しながら設計をひっちゃかめっちゃかにしつつ成長してきたのですが、ライブラリとして使えるようにまともなAPIにしないと実用性が無い(ktmidi-ci-toolとして終わってしまう)ので、APIと内部実装を整備しました。特にまともなテストが書ける状態になったのが大きな改善点です。
  • JSONSchema対応: まだ「スキーマを定義できる」のレベルでしかないですが、JSONスキーマの設定項目が増えました。今後MMA/AMEI定義のプロパティなどに対応する日が来たら有用でしょう。

今月はProfile Configurationまわりの関連仕様をいくつか読み込んだこともあって、ProfileHost/ProfileClientにはもう少しCommon RulesのためにAPIを仕込める余地があるなあとか、ktmidiもjuce_midi_ciもProperty Exchange APIには特にresIdまわりで根本的な欠陥があるなあとか、いろいろ考えることがあったのですが、まだ具体的にAPIやktmidi-ci-toolをどう変えていくかというところまでは考えがまとまっていないところです。どちらかといえばMIDI-CI仕様そのものに手が加えられるべきと思っているので、いわゆるembrace and extendするしかないか…? みたいなことを考えています。

この辺が実現するかは未定です。MIDI-CIはだいぶ実利に乏しいというか「Manufacturer IDを持たない開発者に対して十分に開かれておらず、クローズド仕様のゆえに不備も少なくないMMAの仕様よりは、まだMIDNAMみたいな既存仕様のほうが良いのでは…?」みたいなことを思っています。