アーキテクトがチェックすべきオープンソースのWebサービス一覧
実装の参考の当たり
前口上: オープンソースの実装を読もう
普段Web開発をしているとこの書き方は普通か、実装の方向性はよさそうか不安になることがあります。そういった際、同じリポジトリの既存実装や会社の他のリポジトリ、技術ブログや本、過去の経験、他のメンバーの意見などを参考にしつつ当たりをつけるわけですが、リファレンスが増えるに越したことはないです。
有名な言語、フレームワークではオープンソースのWebサービスがGitHub、GitLab上などにあがっていることがあり、参考になります。
それぞれライセンスがあり、とりわけGPL汚染などは要注意ですが、収集した一覧が溜まってきたのでまとめておきます。ある程度有名なものメインでスクリプト言語+Go。
Ruby
Ruby on Railsは有名なので採用しているWebサービスが多数あります。
Redmine
イシュー、プロジェクト管理ソフトのRedmine。
Rails製では一番有名なんじゃないでしょうか。最近はクラウドのSaaSを使う企業も増えてきているので、自力でホストするケースは少なくなっているかもしれません。
MySQL/PostgreSQL/Microsoft SQL Server/SQLite 3(本番非推奨)互換でDBの種類を問わないつくり。
Mastodon
SNS、マイクロブログサービスのMastodon。Twitter買収の混乱から一時期ユーザーがぐっと伸びたりしましたね。
DBはPostgreSQLでSidekiqをかなり活用している。他言語でActivityPubの取り回しを見るのにも参考になります。
AGPL。
Forem
dev.toの中身で有名なForem。
DBはPostgreSQL。Railsリポジトリはフロントエンドのやる気がないことも多いですが、ForemはReactでStorybookを使ってCypressでテストしているのでまあまあモダン。
モニタリングのツールが入っていたり、dev.toに内部実装の解説記事があがっていることもあるので、負荷対策面では参考になる部分も多いかもしれません。
AGPL。
Discourse
討論フォーラムのDiscourse。
DBはPostgreSQL。フロントがEmber.js 。ReactやVueと比べると採用事例減ってきている気もしますね。
DiscourseにはTrust Levelsという概念があり、信用スコアの実装見てみると面白いかもしれないです。
GitLab
GitホスティングのGitLab。上場企業で時価総額が3600億円。
DBは昔はMySQLもサポートしていたがPostgreSQL限定に移行。Rubyの他にGit操作にGitalyを使っている関係でGoも必要になっている。
オープンソースのRailsリポジトリの中ではかなり巨大でElasticsearchやGraphQLを使っている部分は設計の参考になるかもしれない。フロントはVue(2023/05現在2系)でStorybookもある。
PHP
PHPだとLaravelが最近は人気ですが、LaravelのベースのSymfonyの方が実例は多いですね。ただモジュール製の高いフレームワークも多いのでつまみ食いも多い。
LAMPスタックというくらいDBはMySQL一択。CMS、Wiki、EC構築などに強み。
WordPress
WordPressは世界で一番使われるブログ構築ソフト。MVCフレームワークに載っているわけではないですがPHP製で一番有名なんじゃないでしょうか。
エンジニアで自作ブログだと最近はStatic Site Generatorの方が人気があるイメージがありますが、非エンジニアで自力ホストだと第一選択肢になると思います。
WordPress5.0から搭載のブロックエディタGutenbergではReactを使っているようです。
Magento
ECプラットフォームのMagento。2018年にAdobeが買収。
Laminas Project(旧Zend Framework)の上にできている。
EC-CUBE
日本製のEC構築ソフト。Symfony製。
Drupal
CMSのDrupal。依存にSymfony。
フロントはjQueryでBackbone.jsを使っていて、CKEditorを使用している。
Joomla
CMSのJoomla。依存にSymfonyがありますがjoomla/applicationを見るに独自フレームワーク成分も多いですね。
Concrete5
CMSのConcrete5 。Laminas Project(旧Zend Framework)の上にできつつLaravelをつまみ食いしている。
フロントはVueを使っている箇所がある。
MediaWiki
WikiソフトのMediaWiki。Wikipediaで使われていることで有名。
PukiWiki
WikiソフトのPukiWiki。
Python
Airflow
ワークフロー管理のApache Airflow。
Flask製でORMはSQLAlchemy。Djangoのプロジェクトでも組み込みのORMでなくSQLAlchemyを使っている会社はありますね。
DBはPostgreSQL/MySQL/MSSQL(実験的)/SQLiteをサポート。
Zulip
チャットアプリのZulip。コミュニティーSlackの制限が増えた関係でZulipに移行した例はあります。
Dropboxに買収された後にオープンソース化された異色の歴史。
Django製で組み込みのORMを使用。フロントはzodを使用しているがjQueryとhandlebars。
node.js
歴史的にはNoSQL(特にMongoDB)と密結合したスタックが強み。ただ最近はRDBベースのものも増えてきている。
APIの型以外は共用しない方がいい説はありますが、クライアントとサーバーで言語が統一できるのでモノリポの知見も多いです。
Ghost
ブログ用CMSのGhost。
一時期WordPressの代替最有力と言われていた時期があります。細かくモジュールが切られてモノリポ構成。
Express製でDBはMySQL。Knex.js経由で使用。AdminのフロントはEmber.jsにReact。
Strapi
Headless CMSのStrapi。
Koa製。モノリポ管理ツールのNxを使用している。DBはKnex.js経由でMySQL/MariaDB/PostgreSQL/SQLiteをサポート。
AdminのフロントはReact+Redux。
Misskey
SNS、マイクロブログのMisskey。
JavaScript製が多い中TypeScript製。NestJS on FastifyでTypeORMを使用。DBはPostgreSQL。
フロントはVue3を使用。Storybookもある。
AGPL。
GROWI
WikiソフトのGROWI。
コードの半分がTypeScriptでDBはMongoDB。Viteを使用。
フロントはReactを使用。
他のnode.js参考実装
他にもnode.jsは参考実装が多数ありますが、必ずしもTypeScriptに移行できているわけではないです。
- Unleash: フィーチャーフラグ管理
- APITable: ローコードプラットフォーム
- draw.io: 図作成
- Overleaf: LaTeXエディタ
- Rocket.Chat : チャットツール
Go
Goの強みの一つはマイクロサービスでProtocol Buffers+gRPCですが、誰かにインストールしてもらう前提だとモノリスの方が有利で参考実装が少ないのがつらいところ。
Grafana
モニタリングツールのGrafana。
DBはSQLite、MySQL、PostgreSQLをサポート。Managedサービス用にパブリッククラウドのパッケージが結構依存に入っていますね。
フロントはLernaを使って管理。TypeScriptでAngularとReact。
Mattermost
チャットプラットフォームのMattermost。
DBはMySQLとPostgreSQLをサポート。Goのフレームワークはnet/httpで十分派も結構いますね。
フロントはReact。
最後に
他にもあれば&間違いあれば教えて下さい。RustやJVM、C#系も気になるところ。
Discussion