Lexicon: カスタマイズ可能なネイティブモバイルアプリ Discourseサイト向け

みなさん、こんにちは。

少しお時間をいただき、同僚たちと共にオープンソース化したプロジェクト「Lexicon」をご紹介させてください。

これは Discourse API を基盤とした、事前構築済みかつカスタマイズ可能なネイティブモバイルアプリです。他のネイティブモバイルプロジェクトに、ディスカッションやメッセージ機能を手早く統合できるよう開発しました。

このプロジェクトの構築は非常に楽しく、それは長年にわたり Discore コアチームとコミュニティが積み重ねてきた多大な努力のおかげです。

スクリーンショットは 導入ページ でご覧いただけます。

技術的な方はこちらのクイックスタートをチェックしてみてください。アプリを試しながら、この Discourse サイトを閲覧することができます!

ご質問、ご意見、フィードバックがございましたら、遠慮なくご連絡ください。

よろしくお願いいたします。
ライアン

P.S. どのカテゴリに投稿すべきか迷いましたが、もし適切なカテゴリがあれば、自由に振り替えてください。

「いいね!」 58

明確なドキュメント、特にアーキテクチャに関する部分に感謝します。ローカルで確認するのが待ちきれません!

プッシュ通知 | :cross_mark::hammer: 開発中

これについてのタイムラインはありますか?

「いいね!」 8

素晴らしいですね、@RyanKF!新規の開発者がまず何から手をつけるべきでしょうか?私はReactを使ったモバイルアプリの経験があります。

「いいね!」 3

これはとても素晴らしいですね。MIT ライセンスの下にあるようですか?

「いいね!」 1

あ、これはネイティブの Discourse クライアント(Fig のようなもの)ということでしょうか?もしそうなら、とても気に入りました!:grinning:

「いいね!」 4

Fig は素敵ですね!Discourse 向けのネイティブ iOS 体験を本当に完璧に作り上げているようです。

いくつかの違いが見受けられます…

タブレット対応

Fig はタブレット対応が非常に優れています。私たちはまだこの課題に取り掛かっていません。

シングルサイトアプリ

Discourse Mobile と同様に、Fig は「サイト管理者」アプローチを採用しており、複数の Discourse サイトを追加して閲覧できます。一方、Lexicon は特定の Discourse サイト向けの個別の、場合によってはホワイトラベル化されたアプリの作成に焦点を当てています。

Lexicon 自体はアプリではない

さらに、Lexicon は「アプリテンプレート」の側面が強く、これをカスタマイズしてご自身で App Store や Play ストアに公開することができます。Fig はすでに公開済みのアプリを提供しています。

プレミアムオファー

Fig は一部の機能に対してプレミアムオファーを用意しています。Lexicon にはそのようなプレミアムオファーはありません。

お金が関わる可能性があるのは、Lexicon の統合、カスタマイズ、または公開を支援してくれる人がいない場合のみです。その場合は、どのように私たちと協力できるかについて喜んでご相談いたします。

ただし、このサイトの多くのユーザーは技術者または準技術者であることを知っていますので、追加のサポートなしでも多くの方がそのプロセスを完了できるよう、ドキュメントが十分に詳細であることを願っています。

技術とデバイス対応

推測になりますが、Fig は Swift を使用してアプリを構築したようです。つまり、真のネイティブアプリであり、素晴らしいことです。

一方、私たちは React Native を使用して Lexicon を構築しました(このアプローチが好きなわけではない人もいらっしゃることは理解しています)。

React Native を使用している利点の一つは、Android と iOS の両方の公開可能なアプリを最初から自動的に提供でき、コードの再利用率が高いことです。

私たちのコードベースにおける Android と iOS の違いのほとんどは、外観や操作性に関する詳細です。例えば、Android ではフローティングアクションボタンを使用するのに対し、iOS ではヘッダーボタンを使用します。

「いいね!」 11

MIT です。また、この発表に関するその他の詳細において、リポジトリに LICENSE ファイルを追加するのを忘れていました。指摘いただきありがとうございます!

「いいね!」 6

@4ong さん、すでに貢献したいとおっしゃっていただき、ありがとうございます!あなたは素晴らしいです!

フロントエンド

フロントエンド側では、投稿の生コンテンツに埋め込まれた機能のサポートを強化したいと考えています。

投稿の通常の Markdown コンテンツを処理するだけでなく、Discourse のカスタムマークアップが提供するいくつかの機能もサポートできます。

すでにご存知かもしれませんが、Discourse は引用、トグル、日付、さらには投票などの機能に対してカスタム構文をサポートしています。

比較的典型的なアプローチとして、コード埋め込みなどの基本的な機能に対する初期のサポートを確立し、まだ実装されていない機能については「<機能> は現在サポートされていません」というブロックを用意しています。

このアプリから「サポートされていません」というブロックを完全に排除したいと考えています。特に投票とトグルのサポートを実現できれば素晴らしいです。

また、Lexicon は投稿の生コンテンツを基に動作するため、OneBox のサポートはバイパスされます。そのため、少なくともリンクプレビューの基本的なサポートを実装することが望ましいです。

バックエンド

将来的に実装したいとワクワクしている機能の一つに、メールからのディープリンクがあります。これはおそらく実装が容易ではない機能で、Ruby で Discourse プラグインを構築する必要があるでしょう。

基本的に、Discourse からのメールで投稿へのリンクをタップすると、アプリ(インストールされている場合)がその特定の投稿にディープリンクを通じて開くようになります。

アプリがインストールされていない場合、またはユーザーがモバイルデバイスでない場合は、通常通りサイトにリダイレクトされます。

もしこの機能に取り組んでいただける方がいれば、ぜひご連絡ください。これが実現すれば非常に大きな進歩となります。


追記: また、サポートされていない機能を確認し、ぜひ取り組んでいただけるよう、ドキュメントの サポートされている Discourse 機能ページ もご覧ください(プッシュ通知は既に作業中のため除く)。

「いいね!」 7

楽観的には、今後数週間以内に実現できる見込みですが、現時点では確約はいたしかねます。

すでに概念実証(PoC)の段階は通過していますが、いくつかの未整理な部分を整理する必要があります。

また、この機能のサポートには、お客様のサイトに当社の Discourse プラグインをインストールしていただく必要があります。

詳細を申し上げますと、Lexicon モバイルアプリは Expo を使用して構築しました。Expo は React Native アプリ向けの優れたビルドツールとサービスのセットであり、プッシュ通知のサポートも含まれています。

しかし、Expo のプッシュサービスと連携する既存の Discourse プラグインが見つからなかったため、独自にプラグインを開発する必要がありました。幸いにも、既存のオープンソースの統合プロジェクトである OneSignal が私たちの必要とするものと非常に類似していたため、彼らのプロジェクトを出発点として利用することができました(pmusaraj さんには心から感謝しています :folded_hands:)。

このプラグインの公開とモバイルアプリとの統合に加えて、もちろんドキュメントの更新も行います。Lexicon を使用すると、お客様ご自身のアプリを公開できるため、App Store や Play Store 上の単一のアプリ向けにプッシュ通知を設定するだけではありません。

したがって、プロジェクトの利用者が設定プロセスを適切に案内され、スムーズに動作するように導かれるよう、万全を期したいと考えています。

「いいね!」 7

みなさまからの貴重なフィードバック、誠にありがとうございます。他にもご質問がございましたら、お気軽にお知らせください。

そういえば、付け加えるのを忘れていましたが、本日 ProductHunt にも投稿しており、非常に好調です。ご支援いただけるようでしたら、ぜひご覧ください!

https://www.producthunt.com/posts/lexicon-2

「いいね!」 1

ああ、なるほど。ありがとうございます!Lexicon はとても興味深そうですね。タブレット対応を楽しみにしています!

もし Discourse をベースにソーシャルメディアプラットフォームを構築したい場合、Lexicon はその目的に最適でしょうか?将来的に Lexicon がデスクトッププラットフォームに対応しない場合、デスクトップ対応が課題になるかもしれません。

「いいね!」 1

とてもエキサイティングですね!

いくつかのコメントと質問があります:

  1. DiscourseConnect がサポートされているかどうか明確ではありません。サポート機能のページに追加すると良いかもしれません。

  2. プロローグ(Prose)のインストール方法として、チュートリアルとドキュメントの両方で多くの選択肢が用意されています。この資料はより整理された方が良いと思われます。特に、Docker イメージを使ってできるだけシンプルに設定する場合の SSL 設定の仕組みについて、私は混乱しました。

  3. 試してみたいのですが、それを明確に行う方法がありません。もしメタ(Meta)向けにアプリを公開してくだされば、試せるのですが :slight_smile:

  4. おっしゃるプッシュ通知やディープリンクは、私にとって非常に重要な機能です。

  5. アップデート、アプリのデプロイ、Prose などの複雑さを考えると、すぐに「すべてを管理してくれる有料のターンキー型ホスティング/サポート付きサービス」に興味を持ちます。提供を検討していただければと思います。価格設定がどのようになるのか気になります。

「いいね!」 5

タブレットサポートもそうですね?:wink:

「いいね!」 1

素晴らしいお仕事をありがとうございます。

「いいね!」 4

Lexicon には独自の Discourse コミュニティはありますか?GitHub は素晴らしいですが、そこで Lexicon について適切に議論するのは難しいですよね。

「いいね!」 5

こんにちは、非英語の文字(例:中国語の文字 中文)を含む投稿を読み込む際に、アプリケーションで何らかの問題が発生しているようです。Discourse の Unicode 名機能(https://meta.discourse.org/t/unicode-usernames-and-group-names/117737)に関連しているのではないかと推測しました。詳細なエラーログを GitHub リポジトリに提出するため、Issue を作成しました:

「いいね!」 1

素晴らしいですね!自動モデレーションソリューションは導入されましたか?一部のフォーラムで見られる悪用やスパムを減らしたいと考えています。

Lexicon モバイルアプリを、Lexicon に掲載されているチュートリアルに従って設定しようとしました。すべての手順を完了し、無料の Discourse インスタンス(https://meta.discourse.org/)に対してモバイルアプリを起動したところ、スマートフォンとターミナルのログにそれぞれ以下のエラーが表示されます。

ターミナルエラー:

以下のファイルは存在しません:

\generated\server\globalTypes(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg)

src\generated\server\globalTypes\index(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg)
 5 | import { DEFAULT_CHANNEL } from '../constants';
  6 | import { Text } from '../core-ui';
\u003e  7 | import { TopicsSortEnum } from '../generated/server/globalTypes';
    |                                 ^
   8 | import {
  9 |   anchorToMarkdown,
 10 |   errorHandler,
「いいね!」 2

プロジェクトのセットアップ後、以下のエラーが繰り返し発生しています。

MOBILE_HOST_PRONE に http:// を指定しましたが、それでもスマートフォンでアプリを実行するとエラーが表示されます。

「いいね!」 1

また、以下のエラーも発生しています:
アプリケーションを起動できません:登録されたアプリケーションがありません。

「いいね!」 1