emacsでPHPの開発

2005/02/13

はじめに

最近、emacsでPHPの開発を始めました。ここにたどり着くまで色々な環境を使ってみました。 そして、どれも一長一短なことがわかりました。

私が「理想のエディタ環境」だと思っている機能を書いておきます。

  • EUC-JP, SJISでファイル編集でき、日本語が通る。
  • PHP構文、HTMLのカラー表示ができる。
  • 1つのファイルで複数のエリアを同時に参照・編集できる。
  • 瞬時に関数やクラス定義へジャンプできる。
  • 安定しており、軽いこと。
  • 関数、クラス、メソッド、プロパティが一覧表示可能。

最後の一覧表示はまだ出来ていませんが、それ以外はemacsですべて可能だとわかりましたので、emacsを使い始めました。

以下ではWindows環境でemacsを使ってファイル編集し、Linuxへftpするような私の環境を想定して書きますが、emacs関係はLinux上でも可能だと思います。

なお、このページのほとんどの内容は、参考サイトの寄せ集めばかりです。ここに書いてあること以外にも参考サイトには有益な情報がたくさんありますので、そちらも見ていただくとより良いかと思います。
また、まだ私も試行錯誤しながらやってます。したがって、今後、このページは変更するかもしれません。


Windows版emacs = Meadow

Windows用のemacsにも色々あるようですが、情報が多いのでMeadowに決めました。

インストールは次のようにしました。

  1. Meadow Wikiからsetup-ja.exeをダウンロードします。
  2. インストールは簡単で、指示に従うだけです。
  3. 初期設定も同サイトの「初期設定」に詳しくかかれています。難しい作業はないと思います。

Meadowの基本設定

HOME環境変数に設定したフォルダに「.emacs」というテキスト・ファイルを作成して設定を行います。設定例を以下に書きます。

;; 言語環境の設定 = 日本語
(set-language-environment "Japanese")

;; IMEの設定
(mw32-ime-initialize)
 (setq default-input-method "MW32-IME")

;; EUC-JPをデフォルト文字コードに設定(改行はLF)
;(set-default-coding-systems     'euc-jp-unix)
;(set-buffer-file-coding-system  'euc-jp-unix)
;(set-terminal-coding-system	'euc-jp-unix)

;; フォントの設定
(create-fontset-from-request "private-fontset"
                             '((width . 8)
                               (height . 16)
                               (fixed . t)
                               (italic . nil))
                             '((family . "MS ゴシック")
                               (family . "Courier New")))
(setq default-frame-alist
      (append (list '(font . "private-fontset"))
               default-frame-alist))



;; F8 で toggle-truncate-lines (折り返しのトグル)
;; PHPスクリプトを編集する場合、折り返ししないほうが使いやすいと思います。
(global-set-key [f8] 'toggle-truncate-lines)

;; バックアップファイルを作らない
(setq make-backup-files nil)

;; 行番号を指定して移動する機能をM-zに割り当て
(global-set-key "\M-z" 'goto-line)

;; Win環境のようにShift+矢印キーで選択動作させる
(pc-selection-mode)

;;; mark領域に色付け(お好みにより有効に)
;(setq transient-mark-mode t)

;;;mode-line の“Encoded-kbd”を消す
(let ((elem (assq 'encoded-kbd-mode minor-mode-alist)))
  (when elem
    (setcar (cdr elem) "")))

;;;フォントの色を変える
(if window-system (progn
  (require 'font-lock)
  (global-font-lock-mode t)
))

参考サイト

なお、私は「emacs」とキーボード入力するのが習慣になってしまっているので、次のようなemacs.batというバッチファイルを作ってます。このファイルをPATHが通ったフォルダに保存しています。
C:\Meadow\2.00\bin\RunMW32.exe %1 %2 %3 %4 %5 %6 %7 %8 %9


php-modeについて

php-modeを使うと、*.phpファイルを編集するとき、PHP構文のカラー表示ができるようになりますし、オートインデントされるようになります。

php-modeをインストールしたら次のようにカラー表示されるようになります。
(なお、下のほうで書いているカラー・テーマを利用すると、さらにオシャレにできます)

php-modeインストール前

php-modeインストール後

とっても便利なので、Windows環境とVine Linux環境にそれぞれインストールしてみました。以下はそのメモです。ご自身の環境にあわせてどちらか一方をインストールしてみましょう。


php-modeをMeadowへインストール

  1. Project: PHP mode for Emacs: Summaryからphp-mode-1.1.0.zipをダウンロードします。
  2. php-mode-1.1.0.zipを解凍します。するとphp-mode.elができます。
  3. php-mode.elをC:\Meadow\site-lispへコピーします。
  4. Meadowを起動して「Alt+x」入力後「byte-compile-file」と入力します。
  5. Byte compile file: とファイルを聞いてくるので「\Meadow\site-lisp\php-mode.el」と入力します。

php-modeをVine3.1へインストール

Vine3.1ではVine本家からモジュールが出ています。ただし、これはバージョンが古いのでソース・インストールしてみました。

Vineのパッケージを利用する場合は「apt-get install php-mode」でインストールできますので.emacs.elを編集すると使えます。

  1. Project: PHP mode for Emacs: Summaryからphp-mode-1.1.0.zipをダウンロードします。
  2. php-mode-1.1.0.zipを解凍します。するとphp-mode.elができます。
    $ unzip php-mode-1.1.0.zip
  3. php-mode.elをsite-lispへコピーします。
    $ su
    # cp php-mode.el /usr/share/emacs/site-lisp
  4. emacsを起動して「Alt+x」入力後「byte-compile-file」と入力します。
  5. Byte compile file:とファイルを聞いてくるので「/usr/share/emacs/site-lisp/php-mode.el」と入力します。

php-modeの設定

.emacs(~/.emacs.el)に次の行を追加します。

;;php-mode
(load-library "php-mode")
(require 'php-mode)
;;;php-mode時のタブの調整
(add-hook 'php-mode-hook '(lambda () (setq tab-width 2)))
;; 拡張子が*.tplと*.incはphp-modeにする
(add-to-list 'auto-mode-alist '("\\.tpl$" . php-mode))
(add-to-list 'auto-mode-alist '("\\.inc$" . php-mode))
;;;php-modeの時は文字コードをEUC-JPにする
(add-hook 'php-mode-hook '(lambda () (set-default-coding-systems     'euc-jp-unix)))
(add-hook 'php-mode-hook '(lambda () (set-buffer-file-coding-system  'euc-jp-unix)))
(add-hook 'php-mode-hook '(lambda () (set-terminal-coding-system     'euc-jp-unix)))

タブの調整の設定はお好みでどうぞ。この設定をするとTabキーでインデントされ、必ずTAB文字でファイルへ保存されるようになります。 この設定をしなければスペースとTAB文字で混在して保存されます。

php-mode参考サイト


文字列の補完

たとえばPHPで次のようなソースがある場合を考えます。

<?php
function my_data {
    return $_POST['data'];
}

function my_func($str) {
    return htmlspecialchars($str);
}

echo my_func($_POST['str']);
?>

emacsでは「Alt+/」を押すと、この行位置からさかのぼって文字列補完をしてくれるようです。
上記の例では「my」とだけ入力し、「Alt+/」を押すと「my_func」と自動的に入力されます。

また、続けて「Alt+/」を押すと「my_data」が表示されます。上にさかのぼって検索し、自動補完してくれるようです。

スクリプト作成時、非常に便利です。

参考サイト


ctagsを使う

タグ・ジャンプとは、関数やクラスの記述部分へ瞬時にジャンプする機能です。

MeadowやemacsでPHPスクリプトのタグ・ジャンプを行うためにはTAGSファイル(インデックス)が必要です。
そして、ctagsやetagsというプログラムで「TAGS」ファイルが生成できます。

ctagsはviとemacs用のタグを生成できます。etagsはemacs用のタグを生成します。

以下ではVine LinuxとWindows環境でctagsをインストールしたときのメモです。
ご自身の環境に合わせて、どれか1つインストールすればctagsを利用できます。


Vine3.1でctagsをインストール

Vine3.1ではctagsがVineから配布されています。
# apt-get install ctags
これでインストールできます。

emacs用のTAGSファイルを生成するときは「ctags -e -R *」のように「-e」をつけてetagsモードで実行しましょう。


MeadowでPHP4向け日本語対応ctagsをインストール

Meadowでは、etagsが最初からついていますが日本語が混じった文章ではうまくいかないようです。

そこで、exuberant ctags 日本語対応版からWin32版をダウンロードして使います。

解凍するだけでctags.exeが出てくるので、PATHが通ったディレクトリへコピーして使います。

なお、コピー後「etags.exe」へファイル名を変更するとetags互換で動作するようです。もちろん、ctags.exeのままで-eオプションを付けても大丈夫です。


MeadowでPHP5向け日本語対応ctagsをインストール

上の方法ではPHP4用のemacs(vi)向けタグが作られます。 PHP5向けのタグまで対応し、かつ、日本語対応版のctagsも探してみました。 パッチは以下にありましたがWin版バイナリが見つかりませんでしたので、自分でコンパイルしました。

  • ctags.lzh ← Windows用ctagsバイナリ(日本語対応版, PHP5対応版) ec553j1w32.zipにPHP5用パッチを当ててBorland C++ 5.5でコンパイルしました。
  • ご自身でコンパイルされる方がいるかもしれないので、変更したソース(php.c)も公開しておきます。
    ctags553j-php.lzh ← ec553j1w32.zip付属のphp.cにパッチを当てたものです。
  • PHP5用パッチは、Project: Exuberant Ctags: Mailing Listsで公開している方がいます。

インストールはctags.exeをPATHが通ったディレクトリへコピーします。
なお、コピー後「etags.exe」へファイル名を変更するとetags互換で動作するようです。


ctagsの使い方

Win環境では、DOSプロンプトを起動して、「cd xxx」でカレント・ディレクトリをPHP保存ディレクトリに変更しておきます。そして、
> etags -R *
これでTAGSファイルが出来ます。

Linux環境ではカレント・ディレクトリをPHP保存ディレクトリにしてから
> ctags -e -R *
これでTAGSファイルが出来ます。

あとはemacsを起動しているときに、「Alt+.(Altを押しながらドットを押す)」でタグ・ジャンプができます。
具体的には次のようにします。

<?php
include "my_func.php";  // my_functionを含む、いろいろな関数の定義ファイル

$str = my_function("関数パラメータ");
?>

上記ではmy_functionの「u」にカーソルがあります。ここで「Alt+.」を押すと、「Find tag」と聞いてくるのでEnterし、あとはctagsで生成したTAGSファイルを指定します。すると「my_func.php」を開いて定義した位置へジャンプしてくれます。

TAGSファイルの指定は、最初の1回だけでOKです。

なお、emacsからctagsを呼び出すには「Alt+Shift+!」と押し、「Shell command:」の問いに「ctags -e -R PATH」と指定すると実行できます。


行位置の保存

秀丸ではマークという機能で行の位置が保存できました。emacsでもこれに近いことが出来ます。

この機能も私はよく使うので、キーに割り付けています。.emacs(Linuxでは.emacs.el)に次のを追加します。

;;; F3に位置の保存を割り当て, F4に位置の呼び出しを割り当て
(global-set-key [f3] 'point-to-register)
(global-set-key [f4] 'jump-to-register)

この設定では、F3キーを押した後、何か1文字入力します。するとその文字を識別子にして位置を保存してくれます。
後から、この位置へジャンプするときにはF4キーを押した後、さきほど入力した1文字を入力します。すると、先ほど保存した位置にジャンプしてくれます。

このようにして、位置の保存は入力された文字で識別されます。


カラー・テーマ

普段、Win系のエディタを使っているとemacsの色があまりにさびしく思っていました。それで探してみるとテーマを選択して色を変更できるものがあるのがわかりました。

以下は参考サイトのままですが、自分のメモ用として残しておきます。

  1. color-theme.el.gzをダウンロードします。
  2. Meadowの場合、 C:\Meadow\site-lisp に color-theme.el.gz をコピーします。これでインストールは完了です。
  3. Vineの場合、ダウンロードしたcolor-theme.el.gzを/usr/share/emacs/site-lisp/へコピーします。これでインストールは完了です。
  4. .emacs(Vineでは~/.emacs.el)に次の行を追加します。
    ;;; 表示色をテーマで切り替える
    ;;;M-x color-theme-selectでテーマの一覧表示
    (load "color-theme")

テーマはこれを書いている時点では90種類ありました。とてもすべて見られないほどです。

テーマは「Alt+x」を押してから「color-theme-select」と入力してEnterします。するとテーマ一覧が出てくるので↑↓で選択してEnterします。

テーマを決めたら起動時からお気に入りのテーマが選択されるようにしておきましょう。
私の場合、Gray30というテーマがお気に入りなので、次の行を.emacsに追加しました。
;;;デフォルト・カラーテーマ
(color-theme-gray30)

Gray30で表示したときのPHPスクリプトは以下のようになりました。


文字コードの変更

PHPでスクリプトを書いているとHTMLファイルも同時に編集したくなることがあります。 私は*.htmlを書くときにはSJISにしているのですが、上記設定からemacsのデフォルト文字コードをEUC-JPにしてしまっているために文字コード変更が必要になってしまいます。

そこで、emacs上で文字コードの変更をしてしまいましょう。

  1. 「Ctrl-X」「Enter」「f」と押すと変換する文字コードを聞いてきます。
  2. 「sjis-dos」と入力します。

これで、SJISで改行コード=CRLFにしてくれます。

Copyright©2001-2008 釣ったよ! All Right Reserved.    sg@tsuttayo.sytes.net