Emacs PHP Mode(php-mode
)はEmacsでのPHPスクリプトの編集のためのメジャーモードです。
あと、この記事は書きかけです。
インストール方法
php-mode
は開発の歴史的経緯から、Emacs本体に標準添付されていません。しかし、標準のパッケージ機能を使ってMELPAから簡単にインストールできます。
package / use-package を使ったインストール
~/.emacs.d/init.el
に以下のような記述(どちらか、または両方)があることを確認してください。
(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
その上で、use-packageが導入済みであればインストールは簡単です。
(use-package php-mode :ensure t)
Emacsでinit.el
を編集しているなら、 (use-package php-mode :ensure t)
の直後にカーソルを移動してキーボードでC-x C-e
(control+e control+xを順に押す)と、その場でPHP Modeのインストールが始まります。
packageまたはuse-packageでインストールしたパッケージは、通常~/.emacs.d/elpa/
に配置されます。もし.emacs.d
ディレクトリをGitで管理しているなら、このファイルは.gitignore
で管理の対象外にすることを推奨します。
Lispパッケージは継続的な更新によって改善されているので、よりよいユーザー体験を求めるにはインストールよりも定期的にアップデートすることが重要です。Emacs標準のパッケージ機能またはuse-packageでインストールした場合、以下の手順でパッケージを更新できます。
-
M-x list-packages
でパッケージ一覧を表示する - このリスト上でキーボードの
U
(Shift + u)を押して、更新されたパッケージをマークする - 続いてキーボードの
x
を押して更新を実行する - Emacsを再起動する
MELPA版のPHP Modeには実験的な実装が含まれていることがあります。より安定性を求める場合は :pin melpa-stable
を設定することで、正式なバージョンリリース版がインストールされるようになります。
(use-package php-mode :ensure t :pin melpa-stable)
手動インストール
emacs-php/php-modeを git clone
するか、Releases · emacs-php/php-modeからzipまたはtarをダウンロードして展開してください。展開したあと make
コマンドを実行すると、Lispファイルのバイトコンパイルとphp-mode-autoloads.el
が生成されます。
(when (file-directory-p "~/path/to/php-mode")
(load "~/path/to/php-mode/php-mode-autoloads.el"))
;; 通常、以下のコードはどれも書く必要がありません
;; (require 'php-mode)
;; (add-to-list 'load-path (expand-file-name "~/path/to/php-mode"))
;; (add-to-list 'auto-mode-alist '("\\.php\\'" . php-mode))
OSのパッケージシステムからのインストール
Debian 10(Buster)またはUbuntu 19.04(Disco Dingo)以降では、 apt install elpa-php-mode
でインストールすることができます。しかしこれらのパッケージは少々古いため注意が必要です。Emacsの個人設定を持ち込めないサーバー運用作業での一時的な利用などには利用できますが、それ以外の環境ではEmacsのパッケージ機能などで最新バージョンの利用を強く推奨します。
以前のDebianおよびUbuntuにはPHP Modeは
php-elisp
というパッケージ名で収録されていました。しかしこのパッケージは2014年から更新されていなかったため問題が多く、強く非推奨です。
関連パッケージの導入
- editorconfig-emacs - プロジェクト単位でのインデント設定はEditorConfigでの設定を推奨
- exec-path-from-shell - シェルから環境変数を引き継ぐ
- Flycheck - 編集中のファイルの構文エラーなどをオンザフライでチェックする
- flycheck-phpstan - PHPStanを使った静的解析
- composer.el - EmacsからComposerを操作するインターフェイス
PHPStanを適切に設定することで、PhpStormなどの商用製品を上回る精度のコーディング時エラーチェックが可能になります。PHPで開発が捗るリアルタイムエラーチェックに書きました。
カスタマイズ
設定例
(defun my-php-mode-setup ()
"My PHP-mode hook."
(subword-mode 1)
(setq show-trailing-whitespace t)
(setq-local page-delimiter "\\_<\\(class\\|function\\|namespace\\)\\_>.+$")
(require 'flycheck-phpstan)
(flycheck-mode t)
(add-to-list 'flycheck-disabled-checkers 'php-phpmd)
(add-to-list 'flycheck-disabled-checkers 'php-phpcs))
(use-package php-mode
:hook ((php-mode . my-php-mode-setup))
:custom
(php-manual-url 'ja)
(php-mode-coding-style 'psr2)
(php-mode-template-compatibility nil)
:config
(bind-key "[" (smartchr "[]" "array()" "[[]]") php-mode-map)
(bind-key "]" (smartchr "array " "]" "]]") php-mode-map)
;; (bind-key "C-}" 'cedit-barf php-mode-map)
;; (bind-key "C-)" 'cedit-slurp php-mode-map)
(bind-key "C-c C-c" 'psysh-eval-region php-mode-map)
(bind-key "<f6>" 'phpunit-current-project php-mode-map)
(bind-key "C-c C--" 'php-current-class php-mode-map)
(bind-key "C-c C-=" 'php-current-namespace php-mode-map))