貢献者ガイド

Difyに貢献したいと思っていることには素晴らしいと思います。私たちはあなたの貢献を心待ちにしております。スタッフも資金も限られた新興企業として、私たちはLLMアプリケーションの構築と管理のための最も直感的なワークフローを設計するという野心的な目標を持っています。そのため、コミュニティからのあらゆるサポートは貴重です。

我々の現状を考えると、柔軟かつ迅速に更新する必要がありますが、貢献者がスムーズに貢献できるようにしたいとも考えています。そのために、この貢献ガイドを作成しました。このガイドは、あなたがコードベースに慣れ、貢献者としての活動を迅速に開始できるようにすることを目的としています。

このガイドは、Dify自体と同様に、常に改善されています。時折プロジェクトの実態よりも遅れることがあるかもしれませんが、ご理解と改善のためのフィードバックを心から歓迎します。

ライセンスに関しては、時間を取って短いライセンスと貢献者協定を読んでください。また、コミュニティは行動規範にも従います。

始める前に

既存のイシューを探すか、新しいイシューを作成することができます。イシューは次の2つのカテゴリに分かれます:

機能リクエスト:

  • 新しい機能リクエストを行う場合は、提案する機能の目的を説明し、できるだけ詳細なコンテキストを提供してください。@perzeusssが作成した優れた機能リクエスト助手を使ってドラフトを作成することもできます。ぜひ試してみてください。

  • 既存のイシューから選びたい場合は、その下にコメントを残して意思を示してください。

関連するチームメンバーが関与します。うまくいけば、彼らがコーディングを開始することを承認します。それまでは、変更が提案される可能性があるため、作業を開始しないでください。

提案された機能が属する領域に応じて、異なるチームメンバーと連携する必要があります。以下は、各チームメンバーが現在取り組んでいる分野の概要です:

メンバー分野

エージェントの設計

RAGパイプライン設計

ワークフローオーケストレーションの構築

フロントエンドの使いやすさ向上

開発者体験、何でも相談窓口

全体的なプロダクト方向性とアーキテクチャ

優先順位の付け方:

機能タイプ優先度

チームメンバーが高優先度としてラベル付けした機能

高優先度

コミュニティフィードバックボードからの人気のある機能リクエスト

中優先度

コア機能でないものや小さな改善

低優先度

価値はあるが即時でないもの

将来の機能

その他(例えばバグ報告、パフォーマンス向上、タイポ修正):

  • すぐにコーディングを開始してください。

    優先順位の付け方:

    イシュータイプ優先度

    コア機能のバグ(ログインできない、アプリケーションが動作しない、セキュリティホール)

    クリティカル

    非クリティカルなバグ、パフォーマンス向上

    中優先度

    小さな修正(タイポ、混乱するが動作するUI)

    低優先度

インストール

以下はDifyを開発用に設定する手順です:

1. リポジトリをフォークする

2. リポジトリをクローンする

ターミナルからフォークしたリポジトリをクローンします:

git clone git@github.com:<github_username>/dify.git

3. 依存関係を確認する

Difyは以下のツールとライブラリに依存しています:

4. インストール

Difyはバックエンドとフロントエンドで構成されています。cd api/を使ってバックエンドディレクトリに移動し、次はバックエンドREADMEに従ってインストールして下さい。別のターミナルでcd web/を使ってフロントエンドディレクトリに移動し、そしてフロントエンドREADMEに従ってインストールして下さい。

一般的な問題とトラブルシューティングの手順についてはインストールFAQを参照してください。

5. ブラウザでDifyにアクセスする

設定を確認するため、ブラウザを開きhttp://localhost:3000(デフォルトまたはカスタムURLとポート)にアクセスします。これでDifyが動作しているはずです。

開発

モデルを追加提供する場合は、このガイドを参照してください。

エージェントやワークフローにツールを追加提供する場合は、このガイドを参照してください。

貢献する部分を迅速に理解できるように、以下にDifyのバックエンドとフロントエンドの簡単な注釈付きアウトラインを示します:

バックエンド

DifyのバックエンドはPythonで書かれており、Flaskフレームワークを使用しています。SQLAlchemyをORMとして使用し、Celeryをタスクキューとして使用しています。認証ロジックはFlask-loginで処理されます。

[api/]
├── constants             // コードベース全体で使用される定数設定。
├── controllers           // APIルート定義とリクエスト処理ロジック。           
├── core                  // コアアプリケーションオーケストレーション、モデル統合、ツール。
├── docker                // Dockerおよびコンテナ化関連の設定。
├── events                // イベント処理と処理
├── extensions            // サードパーティフレームワーク/プラットフォームとの拡張機能。
├── fields                // シリアライズ/マーシャリングのためのフィールド定義。
├── libs                  // 再利用可能なライブラリとヘルパー。
├── migrations            // データベース移行のためのスクリプト。
├── models                // データベースモデルとスキーマ定義。
├── services              // ビジネスロジックを指定。
├── storage               // 秘密鍵保管。      
├── tasks                 // 非同期タスクとバックグラウンドジョブの処理。
└── tests

フロントエンド

このウェブサイトはNext.jsテンプレートを使用しており、スタイリングにはTailwind CSSを使用しています。React-i18nextを国際化に使用しています。

[web/]
├── app                   // レイアウト、ページ、およびコンポーネント
│   ├── (commonLayout)    // アプリ全体で使用される共通レイアウト
│   ├── (shareLayout)     // トークン固有のセッション間で共有されるレイアウト 
│   ├── activate          // アクティベートページ
│   ├── components        // ページとレイアウトで共有されるコンポーネント
│   ├── install           // インストールページ
│   ├── signin            // サインインページ
│   └── styles            // グローバルに共有されるスタイル
├── assets                // 静的アセット
├── bin                   // ビルドステップで実行されるスクリプト
├── config                // 調整可能な設定とオプション 
├── context               // アプリの異なる部分で使用される共有コンテキスト
├── dictionaries          // 言語固有の翻訳ファイル 
├── docker                // コンテナ設定
├── hooks                 // 再利用可能なフック
├── i18n                  // 国際化設定
├── models                // データモデルとAPIレスポンスの形状を記述
├── public                // ファビコンなどのメタアセット
├── service               // APIアクションの形状を指定
├── test                  
├── types                 // 関数パラメータと戻り値の記述
└── utils                 // 共有ユーティリティ関数

PRを提出する

最後に、私たちのリポジトリにプルリクエスト(PR)を提出する時が来ました。重要な機能の場合、最初に deploy/dev ブランチにマージしてテストを行い、その後 main ブランチにマージします。マージコンフリクトが発生した場合や、プルリクエストの提出方法が分からない場合は、GitHubのプルリクエストチュートリアルを参照してください。

これで完了です!あなたのPRがマージされると、あなたは私たちのREADMEに貢献者として掲載されます。

ヘルプを求める

貢献の過程で困難に直面したり質問がある場合は、関連するGitHubのイシューで質問を提出するか、私たちのDiscordに参加して迅速なコミュニケーションを行ってください。

Last updated