https://adventar.org/calendars/8742 (1枠目はこちら)
https://adventar.org/calendars/8755 (2枠目はこちら)
ゆずりょーです。
今年もMisskey Advent Calendarがやってきました。今回も主宰させていただきます。
なんか記事の内容が反省点だらけで、今年は参加しないかもって思ってましたが、せっかくMisskey.pyの開発を再開したので、その進捗を発表するいい機会と思ったので急遽参加することにしました。
主宰が参加しなくてどうするんだという感じです。
さて、Misskey.pyとはなんぞやという人も多いので軽く説明させていただきます。
Misskey.pyはMisskeyのHTTP APIをPythonで簡単に使うことができるライブラリです。一応2018年ぐらいからあるプロジェクトです。
ただモチベーションなどに問題があって、2022年3月ぐらいから1年半以上放置してしまっていました。
そこで立ち上げたのが「v5プロジェクト」です。「v5プロジェクト」の詳細については、 📄 Misskey.pyに関する今後の展開について に掲載しておりますのでそちらも是非ご覧ください。
とりあえず今やれていることをここに挙げてみました。
返り値にデータクラスを採用
各MisskeyクラスのAPIメソッドの返答時に、データクラスを使って、プロパティを明確にすることで、データの受け渡しを円滑にする方法を採用しました。
IDEなどでもプロパティがわかるよう、各メソッドには対応するデータクラスを返すことを明記しています。
取得したデータをデータクラス化するための仲介ライブラリとして、「marshmallow」を使用しています。
各データクラスのプロパティ名はPythonの命名規則に基づいて、スネークケースを採用しています。Misskeyの実際のAPIプロパティはキャメルケースのため、命名が変わる場合はmarshmallowのスキーマクラスのフィールドで変換するように定義しています。
将来的にMisskeyのAPIが変わり、APIの項目が増えることになった場合は、定義されてないものは各データクラスの_extra
プロパティに、辞書として生のデータが格納されます。
メソッドには引数名を明確にするように
Misskeyクラスの各APIメソッドには、引数名を明確に定義するような形式にしています。
こうすることで、後にソースコードを確認することになったときに、どの引数であるかが明確になるのと、後にMisskey API仕様が変わって、引数が追加になっても、対応がしやすくなる設計にしました。
非同期処理対応のクラスが追加
Misskey.py v5から、非同期処理に対応したクラスが追加予定です。
非同期処理のMisskeyクラスには、非同期でHTTP通信ができるライブラリ、「aiohttp」を採用し、非同期でAPI処理をできるようにします。
非同期処理じゃなくてもいい、という方もいると思いますので、Misskey.py導入時にエクストラで選択できるように設計しています。
ライブラリ管理をPoetryに変更
Misskey.pyの依存ライブラリの管理方法を「Pipenv」から「Poetry」に変更しました。
setup.pyを作る必要がなくなるのと、メタ情報を集約できるかな、といったところです。
ID生成器も定義中
Misskeyで使用されているID生成器も一応定義してはいます。
本当に実装するかは分かりませんが、使えるようにはしてます。
Misskeyサーバーによって使っているID生成器は違うので、Misskeyクラスのメソッドで返ってくるIDはただの文字列にしています。
基礎部分はほぼ決まりました
Misskey.py v5の基礎部分はほぼ決まり、あとはMisskeyで使用できるAPIの実装に務める形です。ただ一から作り直しているため、全部の実装にはまだまだ時間がかかる予定です。
v5はまだアルファ版であるため、まだ本番プロジェクトで使用することは想定されていませんし、仕様はまた変更される可能性は十分にありえます。
Misskey.pyは私個人で開発しているプロジェクトであるため、リリースにはまだまだ時間がかかります。
あとは自身の精神的な体調があんまり良くないと自覚しているので、さらに時間がかかってしまいそうです。改善したい…
とにかく、開発できるタイミングで作業は続けていく予定ですので、気長にお待ちいただけると幸いです。
Misskey.pyに関する話題やフィードバックは、Discordサーバー「yuzulia.work」や本GitHubリポジトリのIssuesやディスカッションなどへお寄せください。