Rails で作られた OSSプロジェクト紹介 (Alaveteli, chatwoot, ciao, discourse, Feedbin)

便利なOSSプロジェクトが存在しているのに、類似機能を提供する有料サービスにお金を払っていたり、あるいは知らないことでわざわざ機能が劣るソフトウェアを再開発しているかもしれません。

「有料が悪」というつもりは全くなく、目的に応じて必要経費としてお金を使うことは当然あるべき選択肢でしょう。個人で利用する場合や、仕事で利用する場合など、それぞれがおかれている状況において判断軸は全く異なります。

ですが、OSSの存在を知っているかどうかによって、とれる選択肢が変わってきますよね。1円でもランニングコストを節約したければOSSをセットアップしてしまうのも有益な手段でしょう。(但し、多くの場合はカスタマイズをすればするほど人件費の方が高くつきますね😁)

この記事は、Rails により開発されたオープンソースプロジェクトを紹介するシリーズです。

紹介するプロジェクトの前提

この記事で紹介するプロジェクトは独断と偏見で選定しています。

自身の勉強の目的も兼ねているため、選定にジャンルは限定しません。Rails で開発されてさえいれば選定対象になります。ただし、実用性が低いものを選定してもその後に続きませんので、ある程度の選定基準は設けています。

GitHubの最終更新(最終コミット)が古すぎて開発が停滞しているように見えるプロジェクトは除外し、現在でも活発に開発されているようなものを選びました。挙げ続けるとキリがないことから、1記事あたり5つのプロジェクトを目安として、今後も不定期で執筆したいと思っています。

選定基準

  • 最終コミットは、1ヶ月以内の更新があること
    • 開発が盛んで継続されているものであれば1ヶ月以内のコミットが無いことは考えづらいため。
  • オープンソースであり、無償利用が可能なプロジェクトであること
    • プロジェクトによっては、有償の商用サービス化されているものもあります。ライセンスも記載しているのであわせて参照してください。
  • Rails バージョンが 6 以上で開発されていること
    • 記事執筆時点での Rails 最新バージョンが 7.x であるため、1世代前よりも以前である場合は開発が盛んでないと判断します。
  • GitHub 以外のプロジェクトサイトあるいはドキュメンテーションが存在していること
    • 開発が盛んであることや、品質が高いことと、ドキュメンテーションの充実度にはある程度の相関がありますので、ドキュメントの存在も重要視しています。
  • 有名・無名といった知名度は考慮しない
    • この記事では「へー、そんなものもあるのか」という存在の認知も目的としているためです。とはいえ超有名プロジェクトも興味がある範囲で扱います。

1. Alaveteli

世界中のさまざまな国で情報公開 (FOI: Freedom of Information) の要求を行うためのプラットフォームを作成するオープンソースプロジェクトです。英国で FOI 要求を行うために mySociety によって作成された Web サイト “WhatDoTheyKnow” として誕生しました。mySociety はイングランドとウェールズで登録された慈善団体のようです。

Alaveteli

https://alaveteli.org/docs/getting_started/ から画像引用

市民が持っている疑問を「Make request」として作成し、それに対して回答する、チケット的な運用を集中的に行うためのプラットフォームのようですね。システム的には「国」や「地域」のような立場が提供することを想定されており、それに特化した用語設計が多いものと思いますが、サービスの性質的には「質問を受けて回答し、ナレッジとして公開する」ものでシンプルなので、使う場面の応用はきくかもしれませんね。

説明(2022/12/04調査時点)
プロジェクトWeb [Welcome
GitHub GitHub - mysociety/alaveteli: Provide a Freedom of Information request system for your jurisdiction
(GitHub) 最終コミット 1ヶ月以内
ライセンス 独自 ( https://github.com/mysociety/alaveteli/blob/develop/LICENSE.txt)

2. chatwoot

chatwoot logo

chatwoot は、Intercom、Zendesk、Salesforce Service Cloud などに代わるカスタマーサポートのプロジェクトです。

chatwoot

https://github.com/chatwoot/chatwoot から画像引用

画像を見ただけでもワクワクするような、とても美しいアプリケーションですね。

有償サービスも提供されていますが、セルフホスティングのための手順もしっかり整っています。手順を見る限りは Rails のお作法通りで、Docker の定番操作のみで手軽に使えるように感じます。

Self-hosted installation guide | Chatwoot

提供機能

  • Website: ライブ チャットを使用して顧客と話し、SDK を使用してユーザーを識別し、状況に応じたサポートを提供する
  • Social: Facebook, Instagram, Twitter, LINEなどの アカウントを接続して、ダイレクトメッセージで回答できる
  • SMSやEmailと連携する
  • CRM: すべてのユーザー情報を Chatwoot 内に直接保存し、連絡先メモを使用してメール、電話、会議メモを記録する
  • Custom Attributes: カスタム属性属性を定義して、連絡先または会話に関する情報を保存し、ワークフローに合わせて機能を拡張する
  • Auto assignment: 担当者の負荷に応じてチケットを賢く割り当てる
  • Conversation continuity: ユーザーがチャットを介してメール アドレスを提供した場合、Chatwoot は担当者名でユーザーにメールを送信し、ユーザーがメールで会話を続ける
  • Powerful API & Webhooks: Chatwoot の Webhook と API を使用して、ソフトウェアの機能を拡張する
  • Integrations: Chatwoot は Slack とネイティブに統合されており、 ダッシュボードにログインしなくても Slack で会話を管理できる
  • その他様々な機能提供…
説明(2022/12/04調査時点)
プロジェクトWeb [Find answers on Chatwoot Help Center
GitHub GitHub - chatwoot/chatwoot: Open-source customer engagement suite, an alternative to Intercom, Zendesk, Salesforce Service Cloud etc. 🔥💬
(GitHub) 最終コミット 1ヶ月以内
ライセンス MITライセンスに基づく一部独自条項 ( https://github.com/chatwoot/chatwoot/blob/develop/LICENSE)

3. ciao

ciao は、HTTP(S) サイトURLの HTTP ステータス コード (または下位の TCP スタックのエラー) をチェックし、メールまたは Webhook を介してステータス変化を通知します。Cron 構文を使用してチェックのアクションをスケジュール化し、それらを確認するための Web UI や RESTful JSON API を備えています。

ciao

https://github.com/brotandgames/ciao から画像引用

大規模サービスであれば監視用のソフトウェアをインストールしているでしょうが、小規模チームや個人プロジェクトでは、監視を整備するよりも他の仕事を優先してしまい、そして故障があったときに後悔をしがちです。

その点、 ciao はシンプルかつ必要十分で、使いやすそうなプロジェクトですね。Cronの記法で更新間隔を設定でき、異常を検出したら E-Mail または WebHook (Slack等) に通知できます。

Docker でのお手軽インストールのほか、Kubernetes のデプロイ手順も記載されているし、 Helm Chart も用意されているのが好印象ですね。ただし、 Kubernetes のデプロイ手順に用いられているリソースが apps/v1beta1 になっているなど、Kubernetes の現状からすると一部古い部分もあるので、インストールの際は各自の環境に読み替える必要がありそうです。

提供機能

  • 一定間隔で HTTP/S エンドポイントを確認する
  • Cron syntax を利用できる: * * * * (every minute), /15 * * * * (every 15 minutes), @hourly or @daily etc.
  • Web UI
  • RESTful JSON API
  • E-Mail で変化の通知を受け取る(eg. Gmail, Sendgrid, MailChimp etc. )
  • Webhooks で変化の通知を受け取る(eg. Rocket.Chat, Slack etc.)
  • 環境変数で大部分の設定ができる
  • Prometheus メトリクスを取得するためのエンドポイント /metrics を提供
  • Basic認証によるアクセス保護
  • 様々なデプロイ方法(Docker ImageHelm ChartTerraform Provider
説明(2022/12/04調査時点)
プロジェクトWeb [ciao
GitHub GitHub - brotandgames/ciao: HTTP checks & tests (private & public) monitoring - check the status of your URL
(GitHub) 最終コミット 1ヶ月以内
ライセンス MIT ( https://github.com/brotandgames/ciao/blob/master/LICENSE)

4. discourse

100% オープン ソースのディスカッション プラットフォームです。例えば、メーリングリスト、ディスカッションフォーラムの用途で利用できます。

Discourse

https://www.discourse.org/ から画像引用

約10年程の歴史を持つビッグプロジェクトです。Twitter Developers のフォーラムで利用されていることでも有名ですね。

採用実績は抜群なのですがインストール手順が複雑です。数年前から Docker イメージは存在していたのですが、いくつかの初期コマンドを叩かなければインストールが完了しない手順でした。その傾向はドキュメントを見る限り今でも変わっていないようで、最近流行りの Docker Run してちょっと試すとはいかないです。

フォーラムという観点では、本記事の趣旨から逸れてしまいますが WordPress によるプラグイン bbPress による構築もお手軽さでは魅力的でしょう。Discourse は 中規模〜大規模フォーラムを構築したい場合に検討するのがよいのではないでしょうか。

説明(2022/12/04調査時点)
プロジェクトWeb [Discourse is the place to build civilized communities
GitHub GitHub - discourse/discourse: A platform for community discussion. Free, open, simple.
(GitHub) 最終コミット 1ヶ月以内(2022/12/04調査時点)
ライセンス GNU General Public License v2.0 ( https://github.com/discourse/discourse/blob/main/LICENSE.txt)

5. Feedbin

Feedbin は Web ベースの RSS リーダーです。 フィードを読み取って管理するためのユーザー インターフェースと、クライアントが接続するための REST-style API を提供します。

Feedbin

https://github.com/feedbin/feedbin から画像引用

Feedbin を動かすためには構成要素が複数あり、例えば Elasticsearch を動かす必要がある等、自身でセットアップするのは少々手間がかかりそうです。公式にも Feedbin を適切に構成するための十分な時間がない限り、本番環境で Feedbin を実行することはお勧めしませんといった趣旨の文章が書かれています。確かに、ソーシャルメディアの普及によりRSSリーダーの存在意義は昔(2010年前後)に比べると弱まっているので、余程の理由がなければインターネット上のRSSリーダーサービスを使えばよい印象ではありますね。

説明(2022/12/04調査時点)
プロジェクトWeb Feedbin (商用サービスのサイト)
GitHub GitHub - feedbin/feedbin: A nice place to read on the web.
(GitHub) 最終コミット 1ヶ月以内(2022/12/04調査時点)
ライセンス MIT ( https://github.com/feedbin/feedbin/blob/main/LICENSE.md)

まとめ

この記事では Rails で作られた OSSプロジェクト紹介シリーズのとして5つのプロジェクト (Alaveteli, chatwoot, ciao, discourse, Feedbin) を紹介しました。

各ソフトウェアの存在目的やジャンルはまちまちですが、技術スタックなどの学びがあるため、今後も継続的に調査したいと思います。