PhpStorm 2026.1 Help

一般的な使用箇所

プラグインの使い方はシンプルでわかりやすいですが、非常に柔軟です。 提供されているアノテーションセットをプロジェクトに追加して使用を開始するか、プラグインをカスタムアノテーションセットで構成するか、または UI 構成を使って例えば Pattern.compile() の文字列引数を正規表現として扱うことを PhpStorm に学習させてください。

アノテーションの使用

IntelliLang は、 @Language@パターン@Subst という 3 つの基本アノテーションを利用します。

  • @Language は言語インジェクション機能を担当しています。

  • @パターン は、特定の正規表現パターンに対して文字列を検証するために使用されます。

  • @Subst は、非コンパイル時定数式を固定値で置き換えるために使用されます。 これにより、ランタイム中に特定の種類の値を含むことが知られている非定数式の場合でも、パターンを検証し、インジェクションされた言語の接頭辞 / 接尾辞を構築できます(下記参照)。

IntelliLang で提供されているアノテーションは、 %product_home%/plugins/IntelliLang/lib にあるファイル annotations.jar にあります。

@Language

@Language アノテーションは、String フィールド、ローカル変数、メソッドパラメーター、String を返すメソッドにアノテーションを付けるために使用できます。 これにより、フィールド / 変数に割り当てられ、パラメーターとして渡されるか、メソッドの戻り値として使用されて指定された言語として解釈される文字列リテラルが発生します。

さらに、フィールド / 変数が割り当てられるとき、またはメソッドから値が返されるときに、 予期される言語実際の言語の間の衝突をチェックする 言語不一致 インスペクションがあります。

このプラグインは、 直接および 間接的なアノテーションをサポートしています。 つまり、次のようにアノテーションを直接使用できます。

@Language("JavaScript") String code = "var x = 1 + 2";

次のように別のアノテーションクラスにアノテーションを付ける:

@Language("XPath") public @interface XPath { }

それを単純に @XPath として要素にアノテーションを付けるために使用することができます。

アノテーションの値属性として指定する必要がある language-id を取得するのはとても簡単です。IntelliLang では、通常のコード補完アクションで利用可能な言語一覧を提供します。 ctrl-space のポップアップから適切な言語を選択してください:

lang-completion.png

@パターン

@パターン アノテーションは、特定の正規表現を満たす必要がある文字列をマークするために使用され、 @Language アノテーションと同じ方法で使用できます。 つまり、たとえば @Number アノテーションのように、文字列が 1 つ以上の桁数で構成されている必要がある派生アノテーションを作成することも可能です:

@Pattern("\\d+") public @interface Number { }

実際、あらかじめ定義されたアノテーションには、そのような派生アノテーションが 2 つ含まれています。最初の @PrintFormatjava.util.Formatter で使われる printf ライクなパターンに一致し、もう 1 つの @Identifier は有効な Java 識別子を表します。 これらは追加のパターンを指定しなくてもすぐに利用できます。

@Subst

@Subst アノテーションは、コンパイル時定数でない参照を置き換えるために使用され、置き換えられた値が実行時に期待される値と互換性があると仮定してプラグインによる パターン検証 の有効化を可能にします。 値が期待されるパターンと一致しない場合、プラグインが警告します。

また、言語インジェクション機能の接頭辞 / 接尾辞(次のセクションを参照)の有効なコンテキストを構築できます。 この例を考えてみましょう:

@Subst("Tahoma") final String font = new JLabel().getFont().getName(); @Language("HTML") String message = "<html><span style='font: " + font + "; font-size:smaller'>" + ... + "</span></html>";

変数 フォント の値を値 Tahoma (実際にはここでは単一の文字である可能性があります) で置き換えないと、挿入されたフラグメントは構文的に正しくなくなり、「フォント: 」命令の後に表示される はずの用語でエラーが発生します。

コンテキストの提供: 接頭辞と接尾辞

要素にアノテーションを付ける場合、言語フラグメントが解析されるときに先頭や末尾に追加されるプレフィックスとサフィックスを指定できます。 これは文脈情報を提供するために使えます。たとえば、JavaScript インジェクション用のプレフィックスが「var someContextVariable;」の場合、PhpStorm は someContextVariable という変数が宣言されていることを認識し、使用時に未宣言という警告を表示しません。

接頭辞と接尾辞を手動で提供する機能とは別に、IntelliLang は文字列リテラルが使用されているコンテキストからこれらの値を動的に決定します。

@Language(value =JavaScript, prefix = "function doSomethingElse(a){ }") String code = "function doSomething() {\n" + " var x = 1;\n" + " doSomethingElse(x);\n" + "}";

この例では、JavaScript 言語が 3 つの文字列リテラルのそれぞれに挿入され、それぞれの接頭辞と接尾辞が前後の式から計算され、結果として解析されるテキストが有効な JavaScript 構文になります。

  • 「missing '}』」エラーは表示されません。右波括弧は最初のリテラルのサフィックスに含まれているためです。

  • doSomethingElse(a); で使用されている変数 x は宣言されます。宣言はリテラルの 2 番目のプレフィックスの一部です。

  • 関数 doSomethingElse() も同様に認識されます。静的に指定されたプレフィックスで定義されているためです。

注意事項

  • PhpStorm 言語インジェクション API には、インジェクションされた言語フラグメントのプレフィックス/サフィックスに特定の制限を課すいくつかの問題があります。 たとえば、言語のトークンが要素の接頭辞 / 接尾辞にまたがることは許されません。 これは、たとえば、接頭辞が空白文字で終わり、フラグメントが空白で始まる場合に起こります。

    この特別な状況では、プラグインがプレフィックス/サフィックスをトリムし、区切り文字としてちょうど 1 つのスペース文字を挿入することで対応します。 ただし、スペース文字がトークン区切りでない場合、たとえば JavaScript の文字列リテラルにおいては、この方法は機能しません。

    このようなケースは自動的に処理できず、PhpStorm コアがアサーションを生成します。

  • 動的な接頭辞 / 接尾辞の計算によって言語フラグメントの適切なコンテキストが提供される場合でも、一部のことは期待どおりに動作しない可能性があります。 最も注目すべきは、リファクタリング (名前変更) 機能とナビゲーション機能です。

2026 年 5 月 22 日