本連載は分散型マイクロブログ用ソフトウェアMisskeyの開発に関する紹介と、関連するWeb技術について解説を行っていきます。第1回はMisskey、ひいては分散型SNSの簡単な紹介とその内部実装の概略を説明します。
はじめまして!
はじめまして、Misskey
この度連載の機会をいただきましたので、ちょっと仰々しい気もしますが
今回はMisskey、ひいては分散型SNSの簡単な紹介とその内部実装の概略を説明します。
対象読者は、後半の実装解説の部分においてはある程度のWeb開発の知識がある人を想定しています。
Misskeyとは、そして分散型とは
Misskeyは、オープンソースの分散型マイクロブログサービスを実現するソフトウェアです。
注意:
2014年から開発していて、来年で10周年になります。下手の横好きかもしれませんが、Misskeyの開発は私のライフワークと言っても過言ではありません。
昨今のTwitter情勢の変化に伴い、Misskeyの認知度、ユーザー数ともにかなり増加傾向にあります。また、開発者も当初は私だけでしたが、今では複数のメンバーによってメンテナンスが行われています。
Misskeyは
他にも、AiScriptという独自のスクリプト言語を使用してMisskey内で様々なコンテンツやウィジェット、プラグインなどを作ることもできるという他にはなかなかない機能もあります。詳しくは以下のサイトを見てみてください。
インスタンス
2023年3月追記:インスタンスという名称は、分かりやすさや他のソフトウェアと名称を合わせるために
まず基本的な用語として、インスタンスというものがあります
インスタンスは、
そのため、ユーザーはまず自分の好みのインスタンスを選び、そこにアカウントを作成します。基本的にどのインスタンスを選んでも、後述のようにMisskeyは分散型なため他のインスタンスのユーザーとやり取りすることができます。
Misskeyを実際に試してみたい方は、joinmisskeyなどでインスタンスを探せます。なお、Misskey最大のインスタンスはmisskey.
もちろん、自身でインスタンスを作成し運営する選択肢もあります。
分散型とは何か
分散型とは、前述したそれぞれのインスタンスが、相互にコミュニケーション可能になっていることです。
例えば、AというインスタンスのユーザーがBというインスタンスのユーザーをフォローしたり、インスタンスBがインスタンスCにいるユーザーの投稿にリアクションしたりすることができます。
インスタンスとインスタンスが繋がることをFederation
このFediverseにおいて特定のユーザーを指し示すときは、Twitterのように@alice
といったアットマークで始まるユーザー名だけでなく、メールアドレスのようにそのユーザーが属するインスタンスのドメインも併記する必要があり、例えば@alice@mi.
のようにして表されます。ユーザー名はインスタンス間で一意ではないため、ドメインの併記は基本的に必須です。
なお、
FediverseとActivityPub
どのように分散型を実現しているかですが、MisskeyはActivityPub
具体的なケースで言うと、@alice@mi.
に対して@bob@mi2.
や@carol@mi3.
がフォロワーにいるとします
この
このようにアクティビティの配送はMisskeyにおいて大きなウェイトを占める処理です。そのため、ジョブキューを使って配送が管理されます。このジョブキューについては改めて解説する予定です。
また、プロトコルが標準化されているので、このプロトコルを実装しさえすればどのようなソフトウェアでもMisskeyとやり取りすることができます。実際にActivityPubを実装した他のソフトウェアとしてはMastodonやPleromaなどがあります。ただし、ActivityPubは基本的な部分しか規定しておらず、そこから拡張された個々のソフトウェアの機能は必ずしも互換性があるわけではありません。例えば、リアクション機能はActivityPubにあるものではなく基本的にMisskeyにしか存在しません。
Misskeyの技術スタックの変遷
あるソフトウェアを開発するのに利用される一連の技術、ライブラリ、ソフトウェアのことを技術スタックと言いますが、Misskeyは開発がもうすぐ10年目になることもあり、変遷の歴史を辿ってきました。
常に新陳代謝をしているため、
Misskeyの開発をスタートした時点
次にデータベースがMySQLになり、フロントエンドがRiot.
そして最終的には、PostgreSQL + Fastify + Vue.
この分野では、こういった技術スタックの組み合わせ方で有名なものがいくつかあります。例えばMongoDB + Express + Angular + Node.
また開発環境についても、メモ帳→サクラエディタ→Brackets→Atom→VSCodeと変化しています。Misskey開発の歴史は筆者の歴史でもあるわけです。
新しいもの好き
先ほど
最新の技術なので、もちろんブラウザのバージョンが少し古いだけでも動作しません。しかし最新の技術を取り入れることによるメリット
主な技術とその紹介
Misskeyがオープンソースであり、誰でも簡単にインスタンスを作成できるようにするため、使用する技術もすべてオープンソースのものにしています。細かなライブラリも含めれば数は非常に多いため、ここでは重要だと思われるものをピックアップして紹介します。
なお、以下で紹介する各技術は今後の連載でも取り上げて深掘りする予定です。
TypeScript
TypeScript: JavaScript With Syntax For Types.
TypeScriptはJavaScriptに型を導入した言語で、Misskeyではバックエンド/フロントエンド共に採用しています。
TypeScriptを直接解釈できるランタイムはほとんどないため、実際に動かす際はJavaScriptにコンパイルして使用します。
この
Node.js
Node.
js® is an open-source, cross-platform JavaScript runtime environment.
Node.
V8と呼ばれるGoogle Chromeで使われているのと同じJavaScriptエンジンで動いているため、高速に動作するのが特徴です。
最近では、DenoやBunといった後発のプロジェクトもいくつか出ていますが、Misskeyは今のところNode.
MisskeyではソースコードをTypeScriptを用いて記述していますが、Node.
PostgreSQL
PostgreSQL: The World's Most Advanced Open Source Relational Database
PostgreSQLはリレーショナルデータベースで、通称ポスグレと略されます。Node.
以前はMongoDBを使用していたことは前述しましたが、NoSQLから従来のリレーショナルなデータベースに移行したのはよりスキーマに則ったデータ管理をしたくなったためです。
Redis
The open source, in-memory data store used by millions of developers as a database, cache, streaming engine, and message broker.
Redisは、Key/
処理が集中しボトルネックになりがちなデータベースの負担を軽減するため、Redisのさらなる活用を今後予定しています。
Bull
Premium Queue package for handling distributed jobs and messages in NodeJS.
Bullはジョブキューと呼ばれるソフトウェアで、Node.
このジョブキューの処理は
Nest.js
A progressive Node.
js framework for building efficient, reliable and scalable server-side applications.
Nest.
この分野はNext.
Fastify
Fast and low overhead web framework, for Node.
js
FastifyはバックエンドのWebフレームワークで、HTTPリクエストを受け付ける役割を持ちます。この分野では他にexpressなどが有名ですが、expressは長い間開発が停滞しており、未だにHTTP/
MisskeyのNode.
Vue.js
An approachable, performant and versatile framework for building web user interfaces.
Vue.
全体的なフレームワークの完成度としてはライバルであるReactのほうが優れている気もしますが、データのリアクティビティの実現方法はVueのほうが使用感が優れていると感じます。
Vite
Next generation frontend tooling. It's fast!
Vite
webpack同様、単にアプリケーションのビルドだけでなく、Hot Module Replacement
Vueの作者と同じEvan Youが始めたプロジェクトで、もちろんVueとの相性も良いです。
Misskeyの今後
Misskeyの今後について触れておきます。
Misskeyはまだまだ試したい技術があるため、今後はさらに開発を加速させ、進化を続けたいと考えています。一例を挙げるとOAuth2の導入などがあります。
そのためには、ドキュメントの整備、ソフトウェアとしての安定性、メンテナンスの行いやすさ
また、より多くのユーザーに利用してもらうためには、プロジェクトだけでなくインスタンス運営の面でもマネタイズし易くする必要があり、先日リリースしたMisskey v13ではロール機能の導入なども行っています。
ロードマップも公開していますので、興味があれば見てみてください。
まとめ
この連載初回では、Misskey、ひいては分散型SNSの紹介と仕組みを掘り下げ、その使用技術について簡単な説明を行いました。
Web技術は群雄割拠の様相を呈しており、なかなかキャッチアップも大変に感じるかもしれませんが、今後の連載で少しずつ解説していく予定ですのでご期待ください。
また冒頭でも触れましたが、最近はTwitterを取り巻く情勢が大きく変化しつつあり、先行きの不安からMisskeyやMastodonの利用が非常に増えています。分散型SNSはこれからますます発展していくと予想されるため、ぜひお好きなMisskeyやMastodonインスタンスでFediverseを体験してみてください。
そして宣伝のようになってしまい恐縮ですが、Misskeyでは随時プロジェクトへの寄付を受け付けています。Misskeyはフリーソフト
次回は今回紹介した技術の中から一つピックアップして、詳細な解説を例を交えながら行う予定です。
またMisskeyの開発に伴い、Misskey HubやAiScriptといったサイドプロジェクトも生まれているので、そちらの紹介も機会があれば行いたいと思います。
Stay tuned!