Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
13
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@crifff

PhpStormで他の言語を埋め込む

PhpStormには、PHPのコード中の一部をPHP以外の言語として扱えるLanguage Injectionという機能があります。

文字列の中にHTMLやSQLを書いたときに自然とハイライトされるアレです。

スクリーンショット 2013-12-10 22.19.29.png

ちなみにSQLはPhpStormでDBの接続設定を行うとテーブルやカラム名の補完やチェックも行ってくれます。すごい。(実際の設定は割愛します)

通常の文字列中で、自動的に言語の判別をしてくれるのはHTMLやSQLの一部の言語だけで、それら以外は手動でLanguage Injectionを設定することが出来ます。alt + Enterで現れるコンテキストメニューからLanguage Injectionを選択し、候補から選ぶことが出来ます。

スクリーンショット 2013-12-10 22.27.45.png

スクリーンショット 2013-12-10 22.28.00.png

スクリーンショット 2013-12-10 22.31.45.png

シンタックスチェックが行われるのでプレーンテキストではわかりにくかったシンタックスエラーが一目瞭然です。文字列中にHTMLやjavascriptを埋め込むのは若干気が引けますが使わざるを得ないケースは往々にしてあるのでその時は有効活用しましょう。

また、ヒアドキュメントでは終端IDを特定の文字列にすることで自動でLanguage Injectionが行われます。

スクリーンショット 2013-12-10 22.37.45.png

終端IDを言語名にすることでその内側はすべてその言語として扱われます。
文字列中では直接指定できないjavascriptや正規表現も直接指定できるので便利(?)です。あと何気にSQLはPDOやmysqliのプレースホルダに対応しています。

またHTML上でもLanguage Injectionが利用できます。styleタグの中はcss、scriptタグの中はjavascriptとして扱われるのは当然ですが、それ以外の特殊なケースもあります。

スクリーンショット 2013-12-10 22.46.54.png

javascriptのexecuteSql中の文字列はSQLとして扱われます。
またscriptタグでは中身がtypeで指定されたファイルタイプに応じた言語として扱われます。HTML中にjavascriptで利用するテンプレートを置く際等に利用できます。(ただしテンプレートの種別までは指定できないので物によってはエラーで見苦しいことになります…)

直接利用するシーンはそれほど多くはないと思いますが、埋め込まれたコードの可読性が良くなるので、利用法を覚えておくと役に立つこともあるかもしれません。
個人的にSQLはAcriveRecordを利用しないプロダクトでとても重宝しています。

ということでPhpStormの変態機能Inject Languageでした。
明日からはまたVexus2先生のオンステージです!がんばってください!

13
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
13
Help us understand the problem. What is going on with this article?