---
title: Java/Kotlin コードを呼び出すためのベストプラクティス
product: Unity Editor
version: '6000.0'
latest_version: '7000.0'
status: This page documents version 6000.0. The latest version is 7000.0.
canonical: https://docs.unity.com/ja-jp/engine/6000.0/manual/platform-specific/android/developing/plugins-for/plugins-java-code-from-c-sharp/call-java-kotlin-code-best-practices
latest_url: https://docs.unity.com/ja-jp/engine/7000.0/manual/platform-specific/android/developing/plugins-for/plugins-java-code-from-c-sharp/call-java-kotlin-code-best-practices.md
last_updated: 2026-10-30
generated_at: 2026-11-13T01:44:41.621Z
locale: ja-jp
---

# Java/Kotlin コードを呼び出すためのベストプラクティス

> C# スクリプトから Java/Kotlin コードを呼び出すためのベストプラクティスについて説明します。

C# スクリプトから Java および Kotlin プラグインコードを呼び出して、アプリケーションのパフォーマンスを向上させるためのベストプラクティスを紹介します。

## JNI 呼び出しの最小化##minimize-jni-calls

JNI （Java ネイティブインターフェース） を高レベルまたは低レベルの C# API で使用すると、リソースに負荷がかかり、処理に時間がかかる場合があります。パフォーマンスを向上させ、コードの明確さを保つには、JNI 呼び出しの数を少なく抑えることがベストプラクティスです。

不要な JNI 呼び出しを避けるため、高レベル C# API は、呼び出した各 Java メソッドの [ID](/engine/6000.0/script-reference/unityengine/androidjni/getmethodid.md) をキャッシュします。つまり、同じメソッドの後続の呼び出しは、最初のコールほどリソースに負荷をかけません。コールは、同じフレーム内にある必要はなく、同じ`AndroidJavaObject`/`AndroidJavaClass` インスタンスから発信される必要もありません。低レベル API を使用してパフォーマンスを向上させる場合は、メソッド ID を手動でキャッシュする必要があります。そうでない場合は、高レベル API を使用するのがベスト プラクティスです。

> **Note:**
>
> Unity はアプリケーションを [閉じる](https://support.google.com/android/answer/9079646?hl=en-GB) までキャッシュを維持します。これには、アプリケーションが背景にある間も含まれます。

## ガベージコレクションの管理##manage-garbage-collection

`AndroidJavaObject`または`AndroidJavaClass`のインスタンスは、Unityができるだけ早く破棄できるように`using`ステートメントでラップするのがベスト プラクティスです。`using`を使用しない場合でも、Unityの[ガベージ コレクター](/engine/6000.0/manual/analysis/performance-memory/managed-memory/garbage-collector.md)は作成されたすべてのインスタンスをリリースしますが、これが発生するとコントロールできなくなります。

以下のコード例は、`using`文を使用して最適な方法でシステム言語にアクセスする方法を示しています。

```lang-cs
using UnityEngine;

public class LocaleExample :MonoBehaviour
{
    void Start()
    {
        using (AndroidJavaClass cls = new AndroidJavaClass("java.util.Locale"))
        using (AndroidJavaObject locale = cls.CallStatic<AndroidJavaObject>("getDefault"))
        {
            if (locale != null)
            {
                Debug.Log("current lang = " + locale.Call<string>("getDisplayLanguage"));
            }
        }
    }
}
```

## 追加リソース##additional-resources

* [コード例：C# スクリプト](/engine/6000.0/manual/platform-specific/android/developing/plugins-for/plugins-java-code-from-c-sharp/high-level-api-code-examples.md)からの Java/Kotlin コードのコール
* [Java/Kotlin および C# コードでサポートされるデータ型](/engine/6000.0/manual/platform-specific/android/developing/plugins-for/plugins-java-code-from-c-sharp/datatypes-java-kotlin-csharp.md)
* [例: Kotlin ソースプラグイン](/engine/6000.0/manual/platform-specific/android/developing/plugins-for/plugin-types/java-source-plugins.md#CreateUseKotlinSourcePlugin)の作成と使用
