A fork of Mastodon for small communities, including emoji-reaction, quote, antenna, circle and the truth of ohagi.
Find a file
2024-01-25 08:08:00 +09:00
.devcontainer Fix devcontainer by not forcing NODE_ENV (#28099) 2023-11-28 14:47:32 +00:00
.github Merge remote-tracking branch 'parent/main' into upstream-20230103 2024-01-03 19:15:01 +09:00
.husky Use Yarn instead of NPX for pre-commit hook (#24287) 2023-03-28 06:28:57 +02:00
.yarn Replace our custom compression-webpack-plugin patch with the fixed upstream version (#28510) 2023-12-29 09:33:06 +00:00
app Fix processing of compacted single-item JSON-LD collections (#28816) 2024-01-25 08:02:44 +09:00
bin Move the mastodon/*_cli files to mastodon/cli/* (#24139) 2023-05-23 16:08:26 +02:00
chart helm: cleanup helm chart, now in mastodon/chart (#21801) 2022-12-09 06:36:29 +01:00
config Add rate-limit of TOTP authentication attempts at controller level (#28801) 2024-01-25 08:00:45 +09:00
db Add: #437 ドメインブロックで「未ログインユーザーに非公開」の設定を「非公開」にコピーするマイグレーションコード (#439) 2024-01-09 16:19:23 +09:00
dist Remove forwarding http->https from conf file 2023-09-22 08:00:03 +09:00
install Fix: セットアップスクリプトのyarn installでエラーが出る (#292) 2023-11-14 12:24:15 +09:00
lib Change PostgreSQL version check to check for PostgreSQL 10+ 2024-01-25 08:06:42 +09:00
log Initial commit 2016-02-20 22:53:20 +01:00
public Add banning CCBot 2023-09-20 16:43:46 +09:00
spec Fix processing of compacted single-item JSON-LD collections (#28816) 2024-01-25 08:02:44 +09:00
streaming Merge remote-tracking branch 'parent/main' into upstream-20230105 2024-01-05 10:01:36 +09:00
vendor Increase files checked by ESLint (#9705) 2019-01-04 11:28:38 +01:00
.browserslistrc Add ES6 compatibility to browserslist (#18519) 2022-05-26 20:29:28 +02:00
.buildpacks Remove nodejs buildpack from buildpacks (#14364) 2020-07-20 09:48:10 +02:00
.bundler-audit.yml Ignore the devise-two-factor advisory as we have rate limits in place (#28733) 2024-01-25 08:06:36 +09:00
.dockerignore Do not copy public/packs-test into Docker (#27736) 2023-11-07 09:22:04 +00:00
.editorconfig Enable EditorConfig trailing whitespace trimming (#23543) 2023-02-12 08:34:17 +01:00
.env.production.sample fix: remove SMTP_SERVER (#21342) 2022-12-15 18:42:08 +01:00
.env.test Fix/elasticsearch plugin ci failure (#297) 2023-11-18 17:13:51 +09:00
.env.vagrant Add elastic search installation into Vagrantfile (#26512) 2023-08-23 15:46:14 +02:00
.eslintignore Increase files checked by ESLint (#9705) 2019-01-04 11:28:38 +01:00
.eslintrc.js Enable the eslint react/no-unknown-property rule (#28217) 2023-12-06 13:42:12 +00:00
.foreman Replace sprockets/browserify with Webpack (#2617) 2017-05-03 02:04:16 +02:00
.gitattributes Add .gitattributes file to avoid unwanted CRLF (#3954) 2017-06-26 13:15:24 +02:00
.gitignore Upgrade to Yarn 4, remove support for Node 16 (#27073) 2023-11-08 10:57:21 +00:00
.haml-lint.yml Update haml-lint line length configuration to match rubocop value (#27570) 2023-10-31 09:47:16 +00:00
.haml-lint_todo.yml Change: プロフィール設定画面の検索許可設定項目のテキスト (#431) 2024-01-08 09:49:30 +09:00
.nanoignore Remove Storybook (#4397) 2017-07-27 22:30:27 +02:00
.nvmrc Update dependency node to 20.10 (#28040) 2023-12-19 12:39:59 +00:00
.prettierignore Remove Capistrano (#27295) 2023-10-06 11:33:43 +02:00
.prettierrc.js Use Prettier for ESLint formatting TypeScript (#23631) 2023-05-09 19:02:12 +02:00
.profile Make it possible to upload audio and video to Heroku app (#24866) 2023-05-05 14:41:07 +02:00
.rspec Adding a Mention model, test stubs 2016-02-25 00:17:01 +01:00
.rubocop.yml Merge remote-tracking branch 'parent/main' into upstream-20230105 2024-01-05 10:01:36 +09:00
.rubocop_todo.yml Merge remote-tracking branch 'parent/main' into upstream-20230105 2024-01-05 10:01:36 +09:00
.ruby-gemset Make Mastodon use its own gemset (#17858) 2022-08-13 15:44:34 +02:00
.ruby-version Bump ruby version to 3.2.3 2024-01-25 08:06:28 +09:00
.simplecov Disable simplecov enable_coverage_for_eval option, move to standalone file (#27869) 2023-11-15 23:09:31 +00:00
.slugignore Remove Storybook (#4397) 2017-07-27 22:30:27 +02:00
.watchmanconfig Fix Jest config (#27834) 2023-11-13 12:19:41 +00:00
.yarnrc.yml Upgrade to Yarn 4, remove support for Node 16 (#27073) 2023-11-08 10:57:21 +00:00
app.json Make enable_starttls configurable by envvars (#20321) 2022-11-10 21:06:21 +01:00
Aptfile Make it possible to upload audio and video to Heroku app (#24866) 2023-05-05 14:41:07 +02:00
AUTHORS.md Update AUTHORS.md (#27018) 2023-09-21 14:42:15 +02:00
AUTHORS_KB.md Add: AUTHORS_KB.mdにFedibirdの記載 (#401) 2023-12-28 13:20:04 +09:00
babel.config.js Disable Babel polyfill injection in dev (#27691) 2023-11-06 10:24:41 +00:00
CHANGELOG.md Bump version to v4.2.4 2024-01-25 08:08:00 +09:00
CODE_OF_CONDUCT.md Update Contributor Covenant to 2.1 (#23980) 2023-04-23 23:11:50 +02:00
config.ru Autofix Rubocop remaining Layout rules (#23679) 2023-02-20 06:58:28 +01:00
CONTRIBUTING.md Update CONTRIBUTING.md with additional requirements for API additions (#28274) 2023-12-08 09:52:28 +00:00
crowdin.yml Add a Github Action to send translations to Crowdin for each merge in main (#25869) 2023-07-18 16:56:01 +02:00
docker-compose.yml Bump version to v4.2.4 2024-01-25 08:08:00 +09:00
Dockerfile Bump ruby version to 3.2.3 2024-01-25 08:06:28 +09:00
FEDERATION.md Update FEDERATION.md (#26819) 2023-09-06 16:28:31 +02:00
Gemfile Merge remote-tracking branch 'parent/main' into kb_development 2023-12-09 10:04:10 +09:00
Gemfile.lock Update dependency puma to v6.4.2 2024-01-25 08:05:30 +09:00
ide-helper.js Add JS IDE helper (#13012) 2020-04-27 17:19:53 +02:00
jest.config.js Fix Jest config (#27834) 2023-11-13 12:19:41 +00:00
jsconfig.json Correct prettier calls for YML/JSON (#21832) 2022-12-03 12:05:35 +09:00
LICENSE Fix #49 - License changed from GPL-2.0 to AGPL-3.0 2016-09-21 23:04:34 +02:00
package.json Merge remote-tracking branch 'parent/main' into upstream-20230105 2024-01-05 10:01:36 +09:00
postcss.config.js Update PostCSS dependencies (#23835) 2023-03-15 04:01:10 +01:00
priv-config TOR federation (#7875) 2018-06-26 20:34:12 +02:00
Procfile fix: make Procfile compatible with herokuish (#12685) 2020-08-29 19:00:30 +02:00
Procfile.dev Split streaming server from web server (#24702) 2023-11-14 17:43:20 +00:00
Rakefile Run Rubocop on Rakefile (#23871) 2023-07-12 09:47:54 +02:00
README.md Update copyright year to 2024 (#28550) 2024-01-01 19:08:01 +00:00
scalingo.json Add S3 region list reference to Scalingo config (#24152) 2023-04-26 16:46:19 +02:00
SECURITY.md Remove v3.5 branch from supported Mastodon versions (#28574) 2024-01-03 15:04:10 +00:00
stylelint.config.js Update Stylelint disable settings and ignores (#23776) 2023-04-23 22:47:57 +02:00
tsconfig.json Use the new JSX transform (#25064) 2023-05-23 10:52:27 +02:00
Vagrantfile Change Vagrant to install Node 20 (#28100) 2023-11-30 10:46:06 +00:00
yarn.lock Merge remote-tracking branch 'parent/main' into upstream-20230105 2024-01-05 10:01:36 +09:00

kmyblue icon kmyblue

Ruby Testing

kmyblueはMastodonのフォークです。創作作家のためのMastodonを目指して開発しました。

kmyblueはフォーク名であり、同時にサーバー名でもあります。以下は特に記述がない限り、フォークとしてのkmyblueをさします。

kmyblueは AGPL ライセンスで公開されているため、どなたでも自由にフォークし、このソースコードを元に自分でサーバーを立てて公開することができます。確かにサーバーkmyblueは創作作家向けのものですが、フォークとしてのkmyblueはAGPLでライセンスつけられており、ルールは全くの別物です。創作活動の一部エロ関係含むまたは全体を否定するコミュニティなどにも平等にお使いいただけます。サーバーkmyblueのルールを適用する必要もなく、「Anyone But Kmyblue」なルールを設定することすら許容されます。
kmyblueは、特に非収載投稿の検索が強化されているため、ローカルタイムラインに掲載されていない投稿も検索・購読することが可能な場合があります。閉鎖的なコミュニティ、あまり目立ちたくないコミュニティには特に強力な機能を提供します。それ以外のコミュニティに対しても、kmyblueはプライバシーを考慮したうえで強力な検索・購読機能を提供するため、汎用サーバーとして利用するにもある程度十分な機能が揃っています。

ただしkmyblueにおいてテストコードは飾りでしかありません。これはkmyblueを利用する人が本家Mastodonより圧倒的に少なく、バグやセキュリティインシデントを発見するだけの人数が足りないことを意味します。kmyblueは対策として自動テストを拡充しています。独自機能のテストを記述するだけでなく、本家のテストコードの補強も行っておりますが、確認漏れは必ず発生するものです。不具合が発生しても自己責任になります。既知のバグもいくつかありますし、直す予定のないものも含まれます。

テストコード、Lint どちらも動いています。

インストール方法

Wikiを参照してください。

開発への参加方法

CONTRIBUTING.mdを参照してください。

テスト

# デバッグ実行(以下のいずれか)
foreman start
DB_USER=postgres DB_PASS=password foreman start

# 一部を除く全てのテストを行う
RAILS_ENV=test bundle exec rspec spec

# ElasticSearch連携テストを行う
新
RAILS_ENV=test ES_ENABLED=true bundle exec rspec --tag search
旧
RAILS_ENV=test ES_ENABLED=true RUN_SEARCH_SPECS=true bundle exec rspec spec/search

kmyblueのブランチ

  • main - 管理者が本家MastodonにPRするときに使うことがあります
  • kb_development - 開発中の最新のソースコードです。メジャーバージョンアップデートは通常このブランチから公開されます
  • kb_lts - LTSの管理に使います。LTSはこのブランチから公開されます
  • kb_patch - 修正パッチの管理に使います。マイナーバージョンアップデートは通常このブランチから公開されます

kmyblueの強み

追加の詳細は下記記事もご覧ください。

https://note.com/kmycode/n/n5fd5e823ed40

以下に書いているもの以外にも多数の機能が存在します。

本家Mastodonへの積極的追従

kmyblueは、追加機能を控えめにする代わりに本家Mastodonに積極的に追従を行います。kmyblueの追加機能そのままに、Mastodonの新機能も利用できるよう調整を行います。

ゆるやかな内輪での運用

kmyblueは同人向けサーバーとして出発したため、同人作家に需要のある「内輪リを外部にできるだけもらさない」という部分に特化しています。

「ローカル公開」という機能によって、「ローカルタイムラインに流すが他のサーバーの連合タイムラインに流さない」投稿が可能です。ただしMisskeyのローカル限定とは異なり、他のサーバーのフォロワーのタイムラインにも投稿は流れます。自分のサーバーの中で内輪で盛り上がって、他のサーバーの連合タイムラインには外面だけの投稿を流すことも可能です。

「サークル」という機能によって、特定のフォロワーにだけ見える投稿を行うことも可能です。その投稿に返信することで、相手サークルの会話に参加することも可能です。ただしサークル投稿を正常に処理できるソフトウェアは現在、kmyblue・Fedibirdに限ります。

また、通常のMastodonでは公開投稿を他のサーバーの人に自由に検索できるようにすることも可能ですが、kmyblueでは非収載投稿に対して同様の設定が可能です。つまり、ローカルタイムラインにも連合タイムラインにも流れない、誰かの目に自然に触れることはない、でも特定キーワードを使った検索では引っかかりたい、そのような需要に対応できます。

内輪とは自分のサーバーに限ったものではありません。内輪同士で複数のサーバーを運営するとき、お互いが深く繋がれるフレンドサーバーというシステムも用意しています。

ただしkmyblueは、同時に連合も重視しています。ローカル限定投稿など、連合を大きく制限させるような機能は作る予定はありません。

少人数サーバーでの運用

kmyblueは、人の少ないサーバーでの運用を考慮して設計しています。そのため、他のサーバーのアカウントの購読機能はFedibirdほど発達していませんし、人の多いサーバー向けの独自改造もほとんど存在しません。

ただしサーバーの負荷については一部度外視している部分があります。たとえばスタンプ機能はサーバーへ著しい負荷をかける場合があります。スタンプ機能そのものを無効にする管理者オプションも存在します。

もちろん人の多いサーバーでの運用が不便になるような修正は行っていません。人の多いサーバーでもそのままお使いいただけます。

比較的高い防御力

kmyblueでは、「Fediverseは将来的に荒むのではないか」「Fediverseは将来的にスパムに溢れるのではないか」を念頭に設計している部分があります。

個別ユーザー向けの設定項目が複数あります。

  • Misskeyは、たとえMastodonの投稿であっても非収載投稿を自由に検索できますが、kmyblueではそれをブロックできるユーザー設定が存在します
  • 他の人からのスタンプの受け入れを制限する設定も可能であり、例えば他のサーバーから好ましくないスタンプを受け取ることを防止できます
  • 公開タイムラインの引用表示はデフォルトで無効になっています。不快な投稿を引用したものが公開タイムラインに流れても、ある程度は防止できます
    • フィルター(ワードミュート)は、引用された投稿の内容にも適用されます。この場合、引用投稿そのものが表示されなくなります
  • 自分のフォローしている相手の投稿をフィルターから除外する設定が存在します。防御を上げすぎると不便な箇所が出てくるので、そちらも緩和できるよう可能な限り配慮しています

管理者向けには、スパムへの利用を前提とした正規表現可能なNGワード設定、細かい指定が可能な拡張ドメインブロック機能を用意しています。

ただし防御力の高さは自由を犠牲にします。例えばkmyblueは、絵文字リアクションの表示サイズ調整機能など、MisskeyやFedibirdには当たり前のようにある表示設定は存在しません。騒がしくなるようなものはあまり作りたいとは考えていません。

その他の主な機能

  • スタンプ(絵文字リアクション)による手軽な交流
  • 絵文字デッキによる頻繁に使用する絵文字の登録・選択
  • 検索機能の強化(検索許可)
  • 投稿の引用
  • ブックマークの分類

kmyblueは何でないか

kmyblueは、Misskeyではありません。絵文字リアクションなどMisskeyと同様の機能はありますが、根本的にUIの使い勝手が違う他にも、例えばブックマークを分類できてもそれを公開する機能を作っていません。Misskeyは「楽しむ」をコンセプトにしていますが、kmyblueはMastodonの思想を受け継ぎ、炎上や喧騒を避けることのできる落ち着いた場所を目指しています。そのため、思想に合わない機能は実装しないか、大幅に弱体化しています。

kmyblueは、Fedibirdではありません。確かにローカルタイムラインを無効にしFedibirdのような運営を可能にする設定は存在します。しかしkmyblueは本家追従を優先する観点からWebで対応する範囲をある程度絞り込んでいるため、Fedibirdにあるような豊富な表示設定は作っていません。絵文字の大きさすら調整することはできません。また、Fedibirdではアカウントの購読機能があります。kmyblueにも同様の機能はあるものの、Fedibirdのように一発ですぐできるようなUIではありません。購読機能は相手のフォローを伴わないため、特に利用者に擬似的なフォロー体験を与えるアカウント購読は、人の少ない小規模サーバーには向いていません。これは、小規模サーバーの運用を想定しているkmyblueがあえて作っていない部分です。

kmyblueは、企業・政府機関向けに開発されたものではありません。そもそも管理者はセキュリティに関する資格や専門知識を有しておらず、高度なセキュリティの求められる機関向けのソフトウェアを制作する能力はありません。kmyblueは確かに本家Mastodonに対して大幅に機能を追加していますが、そもそも個人によるフォークは、開発者が飽きたらそこで終わりというリスクも伴います。高い信頼性・安全性を保証することはできないので、導入の際はご自身で安全を十分に確認してからお使いになることを強くおすすめします。