Lingma は、コード補完のためにナレッジベースに基づくコンテキスト分析を提供します。開発者が Lingma を使用すると、企業がアップロードしたコードリポジトリをコンテキストとして組み込みます。これにより、コード補完が企業のコーディング標準とビジネス特性により厳密に一致するようになります。このトピックでは、管理者向けの高品質な企業コードリポジトリを構築する方法について説明し、バックエンド開発者とフロントエンド開発者のためのベストプラクティスを提供します。
サポートされているエディションと言語
エディション | バックエンド | フロントエンド |
Enterprise Dedicated Edition | Java、C#、C/C++、Go、Python | JavaScript、TypeScript、Vue、React |
管理者向け: 高品質な企業コードリポジトリを構築する方法
コードデータが適切に処理されるように、コードリポジトリを準備するためのこれらの手順に従ってください。これにより、取得がより迅速かつ正確になります。
コードリポジトリの選択と準備のガイドライン
このセクションでは、コードリポジトリの準備の 2 つのシナリオについて説明します。
シナリオ 1: 日常の開発における効率の向上
取得のパフォーマンスを向上させるために、企業開発中に複数のコードリポジトリを使用します。これにより、コードをすばやく見つけて簡単に再利用し、効率的に作業できます。ガイドラインを以下に示します。
バックエンドのシナリオ
[推奨] 高頻度のコードスニペットまたはファイルを選択する: 現在のプロジェクトで頻繁に表示されるか、再利用されるコードスニペットを選択します。これらのスニペットは再利用性が高く、ナレッジベースに含めるのに適しています。これらのスニペットを別のリポジトリに整理し、管理と取得を容易にするために別のナレッジベースにアップロードします。
現在のプロジェクトのコード: 取得を包括的に行うために、現在のプロジェクト全体をナレッジベースにアップロードすることもできます。これにより、コードの再利用性と開発効率が向上します。ただし、プロジェクトに干渉するコードや低品質のコードが含まれている場合、コード補完機能強化のパフォーマンスに影響を与える可能性があります。
フロントエンドのシナリオ
コンポーネントのソースコードリポジトリではなく、コンポーネントライブラリを使用するコードリポジトリをアップロードします。リポジトリができるだけ多くの使用シナリオをカバーしていることを確認してください。
[推奨] フロントエンドテンプレートページコードリポジトリ: 企業カスタムコンポーネントを、ログイン、登録、アカウント表示、送金ページなどの再利用性の高いフロントエンドページのテンプレートに組み立てます。企業にテンプレートライブラリがある場合は、企業コードナレッジベースにアップロードすることをお勧めします。
現在のプロジェクトのコードリポジトリ: 適切に構造化され、高品質のプロジェクトコードを企業ナレッジベースにアップロードして、包括的な取得を行います。リポジトリ内の低品質または干渉するコードは、コード補完のパフォーマンスに影響を与える可能性があります。
シナリオ 2: 特定のビジネスシナリオにおけるコードの一貫性を確保し、反復開発を削減する
エンタープライズレベルのアプリケーションを構築する場合は、システムの安定性と保守の容易さを維持するために、ビジネスルールが同じであることを確認してください。共通の標準がない場合、開発者によって異なる方法が使用される可能性があります。これにより、ビジネスルールが異なり、コードの修正が難しくなり、システムの安定性が低下する可能性があります。
特定のビジネスシナリオのユースケースを以下に示します。
ケース 1: 企業フレームワークとミドルウェアロジックの再利用
企業は、在庫管理システムに統一された分散ロックメカニズムを必要としています。これは、ビジネスフレームワークをコードナレッジベースに統合することで実現できます。開発者は、IDE で新しいコードを記述するときに、これらのコードスニペットを簡単に使用できます。これにより、開発効率が向上し、反復開発が削減され、コード品質が向上し、ビジネスロジックの一貫性が確保されます。
コードリポジトリを選択して準備するためのヒントを以下に示します。
必要なビジネスニーズと実装を把握します。
在庫管理、注文処理、支払いシステムなど、システムで統一された実装が必要な主要なビジネスモジュールを特定します。
特定のビジネスシナリオの処理方法を設定します。たとえば、在庫システムには、在庫の削減、在庫レベルの確認、在庫のロックなど、さまざまなタスクがあり、各タスクには異なる実装メカニズムが必要です。
ビジネスフレームワークのコードファイルを選択し、コードナレッジベースにアップロードします。
ビジネスフレームワークをフィルタリングして、主要なビジネスロジックを処理するコアコードを見つけ、整理して、別のコードナレッジベースにアップロードします。たとえば、更新中に安全に保つために分散ロックが必要な場合は、このロックを実装するメインコードを見つけます。
/** * 企業が開発した分散ロックメカニズムを使用して、同時実行制御を実装します */ @Service public class InventoryService { @Autowired private DistributedLockFramework lockFramework; @Autowired private InventoryRepository inventoryRepository; /** * 分散ロックメカニズムを使用して、在庫控除中の同時実行セキュリティを確保します * @param productId 製品 ID を指定します。 * @param quantity 控除数量を指定します。 * @return 控除が成功したかどうかを指定します。 */ public boolean deductInventory(Long productId, int quantity) { String lockKey = "inventory:" + productId; return lockFramework.withLock(lockKey, 30, TimeUnit.SECONDS, () -> { Inventory inventory = inventoryRepository.findByProductId(productId); if (inventory == null || inventory.getQuantity() < quantity) { return false; } inventory.setQuantity(inventory.getQuantity() - quantity); inventoryRepository.save(inventory); return true; }); } }
ケース 2: コアエンタープライズビジネスロジックの再利用
企業は、製品に単一のパーソナライズされた推奨ポリシーを設定したいと考えています。この場合、企業が開発したビジネスフレームワークを企業のコードナレッジベースに統合できます。その後、開発者は IDE でビジネスロジックを記述するときに、標準化されたコードスニペットを簡単に呼び出して再利用できます。これにより、開発効率が向上し、反復開発が削減され、コード品質が向上し、ビジネスロジックの一貫性と安定性が確保されます。
コードリポジトリを選択して準備するためのヒントを以下に示します。
必要なビジネスモジュールと実装を決定します。
主要なビジネスモジュールを特定します。商品推奨システムなど、システムで統一された実装が必要なビジネスの部分を見つけます。
ビジネスアクションと主な手順を定義します。たとえば、パーソナライズされた推奨ポリシーには、ユーザー行動データの収集、ユーザーの興味のある機能の把握、可能性のある製品のリストの取得、これらの製品のスコアリングとランク付け、上位の選択肢の表示などの手順が含まれます。事前に記述されたコードを使用して、これらの手順を実装できます。
ビジネスフレームワークのコードファイルを選択し、コードナレッジベースにアップロードします。
主要なビジネスロジックを処理するメインコードを見つけ、整理して、別のコードナレッジベースにアップロードします。パーソナライズされた推奨ポリシーの例を次に示します。
/** * 推奨エンジンサービス * ユーザーの行動と商品の特性に基づいてパーソナライズされた推奨を実装します */ @Service public class RecommendationService { @Autowired private UserBehaviorRepository userBehaviorRepo; @Autowired private ProductRepository productRepo; /** * 指定されたユーザーの推奨リストを生成します * @param userId ユーザー ID を指定します。 * @param limit 推奨できる商品の最大数を指定します。 * @return 推奨商品の ID を指定します。 */ public List generateRecommendations(Long userId, int limit) { // ユーザー行動データを取得します List behaviors = userBehaviorRepo.findRecentByUserId(userId, 100); // ユーザーの興味のある機能を抽出します Map userInterests = extractUserInterests(behaviors); // 候補商品プールを取得します List candidateProducts = productRepo.findRecentlyActive(1000); // 商品スコアを計算してランク付けします List scoredProducts = candidateProducts.stream() .map(product -> new ScoredProduct(product, calculateScore(product, userInterests))) .sorted(Comparator.comparing(ScoredProduct::getScore).reversed()) .collect(Collectors.toList()); // スコアの高い商品を返します return scoredProducts.stream() .limit(limit) .map(sp -> sp.getProduct().getId()) .collect(Collectors.toList()); } // その他の補助メソッド }
メイン関数のコードにコメントを追加します。これにより、開発者は IDE でコードを記述するときにコードスニペットを思い出すことができます。
ケース 3: 既存のプロジェクトを参照して新しいプロジェクトの効率を向上させる
企業が新しいプロジェクトを開始する場合、既存のプロジェクトの類似のコアモジュールのコードを使用できます。これにより、時間と費用が節約され、新しいプロジェクトの品質と安定性が向上します。
コードリポジトリを選択して準備するためのヒントを以下に示します。
必要なビジネスとシナリオに基づいて主要なビジネスモジュールを特定します。
類似の関数またはメソッドを特定します。たとえば、新規プロジェクトと古いプロジェクトの両方に、ユーザー管理、商品表示、注文処理などの関数がある場合は、関連するモジュールをリストします。
コード品質を確認します。既存のプロジェクトコードが完全にテストされており、安定していて信頼できることを確認します。コードをクリーンで使いやすくするために、余分なファイルと構成を削除します。
特定のビジネスアクションとコアアクションを定義します。
コア関数を抽出します。既存のプロジェクトから、再利用できる主要な機能モジュールのコードを抽出します。例:
ユーザー管理: ユーザー登録、ログイン、情報変更
商品表示: 商品リスト、詳細ページ、検索機能
注文処理: 注文、支払い処理、注文ステータスの更新
メイン関数のコードにコメントを追加します。これにより、開発者は IDE でコードを記述するときにコードスニペットを思い出すことができます。
関連するビジネスフレームワークのコードファイルを選択し、コードナレッジベースにアップロードします。モジュール構造を使用して既存のプロジェクトのコードを再編成します。これにより、新しいプロジェクトの特定のモジュールを担当する異なるチームのコードが分離されます。モジュールごとに個別のコードリポジトリを作成します。
コードナレッジベースの分離: 既存のプロジェクトのコードを適切なナレッジベースにアップロードします。たとえば、ユーザー管理、商品表示、注文処理モジュールのコードを個別のナレッジベースにアップロードします。
権限管理: 適切なチームのみが特定のコードにアクセスできるように権限を設定します。これにより、IDE でのコード補完中の干渉を防ぎます。
コードファイルの仕様
サポートされている言語とフレームワーク:
バックエンド: Java、Python、Go、C#、および C/C++
フロントエンド: TypeScript、JavaScript、React、および Vue
アップロード制限: ソースコードファイルのみをアップロードできます。たとえば、Java の場合は
.javaファイル、C# の場合は.csファイル、JavaScript の場合は.jsファイルまたは.jsxファイルをアップロードします。以下のアップロードは避けてください:
テストデータとコード。たとえば、テストスクリプト、テストケース、またはビジネスロジックを含まないテスト関連のコードなどです。
特定のビジネスロジックが含まれていない限り、モックメソッド。
ビルドアーティファクト:
フロントエンド: Webpack や Gulp などのビルドツールによって生成されたファイル。これらのファイルは通常、
distディレクトリまたはbuildディレクトリに保存されます。バックエンド: コンパイルされた DLL ファイルとその他すべてのコンパイル出力。
コメントのガイドライン:
関数のヘッダーに詳細なコメントを追加します。
関数を区別するために、コメントが有益であることを確認します。コメントテンプレートまたは企業の仕様に基づいてコメントを調整します。
/** * 指定された注文のステータスを更新します。 * * @param orderId 注文の一意の ID を指定します。 * @param newStatus 注文の新しいステータスを指定します。 * @return boolean 更新が成功したかどうかを指定します。 */
関数命名規則:
関数名が有益であることを確認します。
func1ではなく、exportOrdersToPDFやupdateOrderStatusなどの明確でわかりやすい名前を使用します。
アップロードのガイドライン
ファイルを
.zip、.gz、または.tar.gz形式に圧縮します。各パッケージが 100 MB を超えないようにしてください。
開発者向け: コード補完のコンテキストとしてナレッジベースを使用する方法
バックエンドのシナリオ
コメントからコードへ
Lingma は、自然言語のコメントを使用してコードを生成できます。バックエンド開発のベストプラクティスを以下に示します。
企業コードリポジトリにコードをアップロードする: 必要な機能コードを zip ファイルに入れて、コードリポジトリにアップロードします。関数がコメントの仕様に従っていることを確認します。関数の前にコメントを追加します。詳細については、「管理者向け: 高品質な企業コードリポジトリを構築する」を参照してください。Snowflake アルゴリズムのコメントを例にとります。
/** * Snowflake アルゴリズムを使用して一意の ID を生成します * @param workerId * @return */ public synchronized Long getSnowFlowerId(long workerId){ long id = -1L; if (workerId < 0 || workerId > snowFlowerProperties.getMaxWorkerId()) { throw new IllegalArgumentException( String.valueOf("workerID は 0 以上 " + snowFlowerProperties.getMaxWorkerId() + " 以下である必要があります")); } // アルゴリズム実装コード return id; }コメントを入力する: IDE で Java クラスを見つけ、呼び出す関数に一致するコメントを追加します。説明が明確で、スタイルが一貫していることを確認します。
スタイル 1
//Snowflake アルゴリズムを使用して一意の ID を生成し、生成された ID を返すコードを生成してくださいスタイル 2
/** * Snowflake アルゴリズムを使用して一意の ID を生成します * @param wId * @return */コメントの仕様:
コメントの長さ: コーディングするときは、短いコメントを使用しないでください。少なくとも 15 文字を目指してください。コメントが短すぎると、呼び出しがトリガーされません。
コメントの意味: コメントが明確で正確であることを確認します。Lingma がコードをより正確に理解できるように、キーワードと戻り値の説明を含めます。
多言語サポート: 英語と中国語の両方のコメントがサポートされています。リポジトリコメントで使用される言語は、コードで使用される言語と異なる場合があります。
パラメーター名: 柔軟なパラメーター名を使用できます。Lingma は、呼び出されたコードに一致するようにパラメーターを調整します。
悪い例を以下に示します。
//Snowflake アルゴリズム問題: コメントが短すぎて詳細が不十分です。//一意の ID を生成する問題: コメントにキーワードがなく、混乱を招く可能性があります。
コード生成: Enter キーを初めて押すと、Lingma はコメントに基づいてコードを提案します。もう一度押すと、Lingma は企業コードリポジトリを使用してコードを完成させます。

関数シグネチャを使用してコードを生成する
企業コードリポジトリにコードをアップロードします。
関数シグネチャを入力する: IDE で Java クラスを見つけ、関連する関数のシグネチャを入力します。柔軟なパラメーター名を使用できます。Lingma は、呼び出されたコードに一致するようにパラメーターを変更します。
public List nextList(String name, int size)関数シグネチャの説明:
関数名: 類似の意味を一致させるために、明確で意味のある関数名を使用します。
パラメーターと戻り値: 型と順序はターゲット関数と一致する必要がありますが、パラメーター名は変更できます。Lingma は、呼び出されたコードに一致するようにパラメーターを自動的に調整します。パラメーター名の悪い例を次に示します。
public List func1(String name, int size): 関数名が不明確で、関数を正確に反映していません。public List nextList(int orderId): パラメーター型と戻り値型がターゲット関数と一致しません。
コード補完: Enter キーを初めて押すと、Lingma はコード補完の提案を提供します。もう一度押すと、Lingma は企業コードリポジトリのコードに基づいてコードを自動的に完成させます。


フロントエンドのシナリオ
タグを使用してフロントエンドカスタムコンポーネントコードを完成させる
Lingma は、フロントエンドカスタムコンポーネントのタグを使用してコードを生成できます。ベストプラクティスを以下に示します。
企業コードリポジトリにコードをアップロードする: 開始する前に、必要なフロントエンドコンポーネントのすべてのコードがコードリポジトリにアップロードされていることを確認します。React フレームワークの例を次に示します。
New } formItems={formItems} formRef={formRef} columns={columns} request={async (params, requestType) => { const res: Record = await apiGetUserList(params); return { data: res.data, total: res.total, }; }} />コンポーネントコードを記述する: IDE で
.jsxファイルを開き、コーディングを開始します。<LTable />などの基本的な HTML タグまたはカスタムコンポーネントタグを使用します。コード補完を有効にする: ライブラリで一致をトリガーするのに十分なコードを入力すると、IDE は完全なコンポーネントコードを生成します。[Enter] キーを押して、コードを手動で完成させることもできます。
重要完全なコンポーネントラベル内でコード補完をトリガーします。
コメントからコードへ
Lingma は、自然言語のコメントを使用してコードを生成できます。ベストプラクティスを以下に示します。
企業コードリポジトリにコードをアップロードする: 必要な機能コードを zip ファイルに入れて、コードリポジトリにアップロードします。関数がコメントの仕様に従っており、上部にコメントがあることを確認します。詳細については、「管理者向け: 高品質な企業コードリポジトリを構築する」を参照してください。例:
/** * エラーメッセージに基づいて、id をキー値とするオブジェクトを生成します * @param {Array} results * @return {Record} */ function getErrObj(results) { // 関数実装コード }コメントを入力する: IDE で必要な JavaScript ファイルを開き、コメントを追加します。例を次に示します。
//エラーメッセージに基づいて、id をキー値とするオブジェクトを生成しますコメントの仕様:
コメントの長さ: コーディングするときは、短いコメントを使用しないでください。少なくとも 15 文字を目指してください。コメントが短すぎると、呼び出しがトリガーされません。
コメントの意味: コメントが明確で正確であることを確認します。Lingma がコードをより正確に理解できるように、キーワードと戻り値の説明を含めます。
多言語サポート: 英語と中国語の両方のコメントがサポートされています。リポジトリコメントで使用される言語は、コードで使用される言語と異なる場合があります。
パラメーター名: 柔軟なパラメーター名を使用できます。Lingma は、呼び出されたコードに一致するようにパラメーターを調整します。
コード生成: Enter キーを初めて押すと、Lingma はコメントに基づいてコードを提案します。Enter キーをもう一度押すと、Lingma は企業コードリポジトリを使用してコードを完成させます。

コメントまたは関数シグネチャにパラメーターがある場合、Lingma は、命名の一貫性を確保するために、生成されたコードのパラメーター名を自動的に変更します。
最新のデータを取得するには、キャッシュをリフレッシュします。 macOS では
⌥(option)Pキーを、Windows ではAltPキーを押して、コード補完を手動でトリガーします。
FAQ: コードを呼び出せないのはなぜですか?
Lingma をインストールした後、コードの呼び出しに問題がある場合は、次の手順を実行します。
macOS: Lingma プロセスを再起動し、関連するキャッシュをクリアします。
ps -ef|grep lingma|grep start|awk '{print $2}'|xargs -I {} kill -9 {}Windows: [タスク マネージャー] で Lingma プロセスを終了します。