アシアルの中の人が技術と思いのたけをつづるブログ

PHP開発で追加しておきたいEmacs Lisp 8選

タグ [  Tech  Emacs  PHP  ]
はじめまして、アシアルで働くようになってまだ三週間ほどの高橋と申します。
ブログを書くのもはじめてのことなので、何か至らないところがありましたら、ご指摘くださると助かります。

さて、皆さんはPHPで開発を行う際、エディタは何を使っていますか?
私はEmacsというエディタを使っています。Emacsは使いはじめこそとっつきにくいのですが、慣れてしまうと離れられない魅力が一杯詰まった素敵なエディタです。

今回はそんなEmacsでPHPの開発環境を作る場合に、追加しておくと開発がより便利になるelispを8個選んで紹介してみたいと思います。
なお、標準のEmacsに含まれているものは除外しています。


1. PHP mode for Emacs

EmacsでPHPのコードを書くなら、やはりこれが必須です。そのためか、追加インストールしなくても使えるようになってるディストリビューションも多いです。
このモードを使うと、コードの色付け、関数名の入力補完、PEARコーディング規約に準拠した編集などが行えます。

なお、入力補完を行うには、PHPのHTMLマニュアルをダウンロードして、/usr/local/share/php/docなどへ展開しておく必要があります。

  1. ; 設定例
  2. (autoload 'php-mode "php-mode")
  3. (setq auto-mode-alist
  4.       (cons '("\\.php\\'" . php-mode) auto-mode-alist))
  5. (setq php-mode-force-pear t)
  6. (add-hook 'php-mode-user-hook
  7.   '(lambda ()
  8.      (setq php-manual-path "/usr/local/share/php/doc/html")
  9.      (setq php-manual-url "http://www.phppro.jp/phpmanual/")))


2. A CSS editing mode for emacs

HTMLと一緒によく書くものといえば、スタイルシートですね。そのCSSを編集するためのモードです。
コードの色付けはもちろんのこと、M-TABでプロパティ名の補完ができるようになり、入力するのがとても楽になります。

  1. ; 設定例
  2. (autoload 'css-mode "css-mode")
  3. (setq auto-mode-alist
  4.       (cons '("\\.css\\'" . css-mode) auto-mode-alist))
  5. (setq cssm-indent-function #'cssm-c-style-indenter)


3. Major mode for editing JavaScript source code

Ajaxを使うサイト開発に必要なJavaScriptを編集するためのモードです。ただ、いつの間にか配布していたサイトが404 Not Foundになってました……。
一応こちらの方の記事によると、Internet Archiveからダウンロードできるようですが、何か問題でもあったんでしょうか?

※トラックバックで教えていただいたのですが、こちらのURLでサイトが復活したようです(2007年5月9日追記)

  1. ; 設定例
  2. (add-to-list 'auto-mode-alist (cons "\\.js\\'" 'javascript-mode))
  3. (autoload 'javascript-mode "javascript" nil t)
  4. (setq js-indent-level 4)


4. MMM Mode

例えば、HTMLファイルを編集する際、styleタグで囲まれているところはcss-mode、他はhtml-modeといったように、カーソルの位置にあわせて複数のモードを自動的に切り替えてくれます。

  1. ; 設定例
  2. (require 'mmm-auto)
  3. (setq mmm-global-mode 'maybe)
  4. ;(set-face-background 'mmm-default-submode-face nil) ;背景色が不要な場合
  5. (mmm-add-classes
  6.  '((embedded-css
  7.     :submode css-mode
  8.     :front "<style[^>]*>"
  9.     :back "</style>")))
  10. (mmm-add-mode-ext-class nil "\\.html\\'" 'embedded-css)


5. Mule-UCS

最近では、PHPのエンコーディングをUTF-8として開発している方も多いのではないでしょうか。
Mule-UCSをいれることで、UTF-8やJIS X 0213などの文字コードを扱えるようになります。

なお、現在オフィシャルサイトにアクセスできないのですが、Hideyuki SHIRAI's Web pageからダウンロードできます。

  1. ; 設定例
  2. (require 'jisx0213)
  3. (set-language-environment "Japanese")


6. Subversion Interface for emacs
PHP開発に限ったことではありませんが、ソースコードのバージョン管理は大切ですね。アシアルでもSubversionを使って管理しています。
psvnはそのSubversonのインターフェースとなり、手動でsvnコマンドを実行するよりも手軽な操作性を提供してくれます。
実際に操作する場合は、チェックアウトしたファイルのあるところでM-x svn-statusを実行します。

  1. ; 設定例
  2. (autoload 'svn-status "psvn" nil t)


7. ElScreen

バッファを複数に分割して作業をしていると、そのバッファの状態を保ったまま、別のバッファへ切り替えたくなることが多々あります。
window環境であれば別フレームを開くことで対応できますが、フレームが多くなると切り替えが大変ですし、ターミナル環境ではそうはいきません。

ElScreenを使えば、ひとつのフレーム内で複数のスクリーンを素早く切り替えることができ、慣れると手放せなくなります。

  1. ; 設定例
  2. (require 'elscreen)
  3. (if window-system
  4.     (define-key elscreen-map "\C-z" 'iconify-or-deiconify-frame)
  5.   (define-key elscreen-map "\C-z" 'suspend-emacs))


8. TRAMP

さて、これまで紹介してきたelispをインストールして快適な開発環境を構築したとしても、作業マシンが変わってしまったら、もうその環境は使えません。かといって、マシン毎に開発環境を構築するのは非常に手間がかかって面倒ですね。
TRAMPを使うと、

  1. C-x C-f /user@host:/path/to/remote/file
  2. C-x d   /user@host:/path/to/remote/dir

といった操作で、別のマシンにあるファイルを、まるでローカルマシンにあるかのように編集したり、diredで移動したりといったことができるため、お気に入りのEmacs環境をひとつ作るだけで大丈夫になります。

  1. ; 設定例
  2. (require 'tramp)


以上、駆け足の紹介となりましたが、如何だったでしょうか?
8個選ぶならこの8個のほうがいいとか、他にPHPの開発が便利になるelispをご存知でしたら、ぜひぜひお教えください。

コメント

    • 使ったことないので紹介するのもアレなんですが・・・.
      こんなのもあるみたいです.

      http://www.blik.it/2007/02/21/syntax-checking-for-php-in-emacs/
    • ありがとうございます!

      早速試してみたところ、リアルタイムで構文をチェックしてエラーを教えてくれるので、なかなか便利ですね。
      TRAMP経由だと動かなかったのと、ターミナルではポップアップが出ないので、そこが改善できたら常用したい一品ですね。
    • 参考にさせていただいています。
      これから使い始める感じなのですが、
      windows環境でgnu-emacs、meadowを利用する際にはcygwinという
      ものが必要だと色々な所で拝見したのですがcygwinの導入から
      詳しい方がいらっしゃれば方法などお聞かせ願いたいのですが。
      現在はemacs,meadow共にcygwinは入れていないのですが動いています。使い始め程度なのでこれから使っていく内にcygwinがない
      事から問題が出てきますか?
    • 私のつたない記事をご覧くださり、ありがとうございます。

      Cygwinは必須というわけではありませんので、Emacs/Meadowを動作させるだけでしたら、特に問題はありません。
      ただ、Cygwinを入れることでより便利になりますので、個人的には導入されることをオススメします。

      Meadowをお使いであれば、
       http://www.bookshelf.jp/soft/meadow_9.html#SEC50
      の解説が参考になりますので、ご覧いただければと思います。
    • お答えいただきありがとうございます。
      他いくつか疑問点があるのでお答え願えれば幸いです。
      "Cygwinを入れることでより便利に"というのは具体的には
      どういった恩恵が受けられますか?
      その際にはEmacs/Meadowはcygwin/home/...等のcygwin内に作る
      のですか?

      度々すみません。
    • 先ほどご紹介したページにも書かれていますが、複数のファイルから文字列を検索して見つかった行を一覧表示したり、二つのファイル内容を比較して違いを表示したりといったことができるようになります。

      これらの操作はCygwinが提供するコマンドと連携して動作するため、Cygwinを入れる必要がありますが、外部コマンドの不要な操作であれば問題なく動作しますので、とりあえずEmacsの基本的な操作に慣れるまではそのまま使ってみて、実際に必要な状況になってから導入されても遅くはないと思われます。

      また、Cygwinを導入しても、Emacs/MeadowをCygwinフォルダ内に作る必要はありません。それぞれ独立したフォルダで動作しますので、いつインストールしても大丈夫です。

      このあたりの設定方法についても先ほどのページに書かれていますので、一読していただけますと幸いです。
    • 質問に答えていただいたおかげで大分なれてきました。
      (初歩的な部分ですが)
      ありがとうございます。
      またいくつか疑問があったのでお時間ある時にでも答えていただけたらと思います。
      Emacsを使用していて且つCaps LockをCtrlに変更している皆さんはキーボードドライバーは英語になさっているんですか?
    • 私は日本語キーボードを使用していますので、ドライバも日本語です。
      その際、CapsLockキーはレジストリを書き換えてCtrlキーに変更しています。
      以上、ご参考まで。
    • 度々すみません。ご教授願います。
      mmm-modeなのですが、色々なサイトを拝見したところ導入時
      make install
      で、って書かれ方していたのですかunixシェルの知識が無いので
      うまく出来ませんでした。
      site-lispディレクトリに入れ、.elファイルをbyte-compileする
      だけではだめなのでしょうか。
      宜しくお願いいたします。
    • それで大丈夫だと思います。
      .elファイルをbyte-compileしてsite-lispディレクトリへ入れる作業を、make installを使って自動で行うか、手動で行うかの違いだけですので。
    • いろいろ質問させていただいたおかげでMeadowは仕事ではある程度使える様(使い方、setupの両方の意味で)になりました。
      ありがとうございます。
      Meadowは特に指定しなくても日本語が使えてUTF-8ファイルも操作出来てるみたいなのですが、emacsに関しては日本語が使える設定にいろいろ説明サイトを見てるますがよくわかっていません。
      Meadowが使えているんだし良いと言えば良いのですが。どのように設定なさっていますか?私はwindows環境なのですが...。
      教えていただけたら幸いです。
    • 申し訳ありません。
      私もWindows環境ではMeadowしか使ってませんので、ちょっとわかりません。

      ただ、
       http://homepage.mac.com/matsuan_tamachan/emacs/index.html#2
      にて公開されているNTEmacsは、はじめから日本語入力やフォントの設定がされているようですので、試してみてはいかがでしょうか?
    • いつもお答えいただきありがとうございます。
      教えていただくばかりですみません。
      こちらからも何か情報が提供できればなぁとは思っているのですが覚えることの方が多くて。。。
      また教えていただきたいのですが
      mmm-modeの設定でPHP開発で追加しておきたいEmacs Lisp 8選での設定例を参考に
      ;; mmm-mode 設定例
      (require 'mmm-auto)
      (setq mmm-global-mode 'maybe)
      ;;(set-face-background 'mmm-default-submode-face nil) ;背景色が不要な場合
      (mmm-add-classes
      '((embedded-css
      :submode css-mode
      :front "<style[^>]*>"
      :back "</style>")))
      (mmm-add-classes
      '((html-script
      :submode javascript
      :front "<script[^>]*>"
      :back "</script>")))
      (mmm-add-mode-ext-class nil "\\.html\\'" "\\.tpl\\'" '(embedded-css html-script))
      としてみました。
      つもりとしては<style>内はcss-mode,<script>内でもjavascript,で且つ.htmlファイルのみじゃなく.tplファイルでも
      と思ったんですがエラーになりました。
      いろいろ書き方を変えてみたんですがcss-modeの方まで効かなくなったりで。。。
      ご指摘いただけたらと思います。
      よろしくお願いいたします。
    • 例えば、引数が三つの関数に四つの引数を渡したり、文字列を受け取る引数に配列を渡してもうまく動かないように、mmm-add-mode-ext-classも正しい値を渡さなければエラーになります。

      ご希望の動作を行わせるには、単純に
      (mmm-add-mode-ext-class nil "\\.html\\'" 'embedded-css)
      (mmm-add-mode-ext-class nil "\\.html\\'" 'html-script)
      (mmm-add-mode-ext-class nil "\\.tpl\\'" 'embedded-css)
      (mmm-add-mode-ext-class nil "\\.tpl\\'" 'html-script)
      と記述すれば大丈夫かと思われます。

      また、auto-modeの設定を
      (setq auto-mode-alist
      (append '(("\\.html$" . html-helper-mode)
      ("\\.tpl$" . html-helper-mode))
      auto-mode-alist))
      のように行っている場合は、
      (add-to-list 'mmm-mode-ext-classes-alist
      '(html-helper-mode nil embedded-css))
      (add-to-list 'mmm-mode-ext-classes-alist
      '(html-helper-mode nil html-script))
      と記述しても動作すると思われます。
    • ありがとうございます。
      参考にしていろいろと試させていただきます。

      これまではgrepする際は別のエディタでやっていたんですが、
      調べたら、というか当然meadowからも行えるだろうと思ってたんですが、
      ここでcygwinが必要のようでいくつか設定の説明を行っているサイトを覗いたら
      pathを設定、とか autoexec.batの設定
      SET PATH=C:\cygwin\bin;C:\cygwin\sbin;C:\cygwin\usr\bin;%PATH%
      SET PATH=C:\cygwin\usr\sbin;C:\cygwin\usr\local\bin;%PATH%
      SET SHELL=bash.exe
      として、など書かれていたのですが、
      これは普通に読んで環境変数の変更からパスの設定を上記のようにすればいいのですか?
      autoexec.batが見当たらなかったので。。。
    • それでいいと思います。
      ただ、以前ご紹介したページにそのあたりのことも書いてあると思うのですが……。
    • 私もcygwin入れてます。
      (というか仕事先でもともと入っていたのでなんとなく触る程度なだけ)
      このcygwinでこれが便利!とかこれがあるから手放せない!とかってなんですか?
      私コマンドプロンプトと大して変わらない程度しか使えてません。上に書かれてるemacsも入ってなくてvimを使ってますけど何も色ついてないし...。
    • Cygwinの一番の利点は、Windows上でUNIX系のコマンドラインツールが使えることだと思われます。
      他の利点につきましては、
       http://pitecan.com/ASCII/diary0109.html
      の記事に良くまとまっていますので、ご覧くださいませ。

      ただ、私も基本的にMeadowとの連携で使用することが大半で、Cygwin単体で使うことは余りないですね。
      UNIX系の環境が必要な場合は、coLinuxやVMWareを使ってGNU/Linuxを稼動させますので。

      なお、Cygwinのvimはそのままでは何も設定されていませんので、ホームディレクトリへ次のような内容の「.vimrc」を作成すれば色が付くと思います。

      if &t_Co > 2 || has("gui_running")
      syntax on
      set hlsearch
      endif
    • はじめまして。
      私もcygwin入れてます。便利といえば便利ですがきちんとshellが使えているは微妙なのですが、、、。
      cygwinの導入時フルパッケージで入れていらっしゃいますか?私は普段自分が使うのはそれほどたいした物じゃないノートpcなので最小構成しか入れていません。
      また参考までに意見を伺いたいのですが、近々ではないけれどunixに慣れなければいけない時、unix環境を普通スペックのノートPCのwinXPを維持したままで使いたいとして、cygwin, coLinux, デュアルブートではどの方法を用いますか?
    • はじめまして。
      私もCygwinのパッケージを全部は導入していません。必要なもののみインストールするようにしています。

      あと、あくまで個人的な意見ですが、上記三つのなかであれば、coLinuxを選びます。WindowsとLinuxが同時に稼動でき、Cygwinよりも本格的な実行環境が構築できますので。

      また、UNIX系OSのインストール作業も覚えたいといった場合ですと、デュアルブートを選びます。ただ、デュアルブートはインストール時の操作ミスでWindows用のパーティションを壊してしまう可能性もありますので、選択肢にはありませんでしたが、VMWareが一番楽かも知れません。

      以上、ご参考まで。
    • colinux入れてみました。
      ちょうどwebDBpressで取り上げられていたので参考にして導入してみたのですが、、。
      colinux0.6.4でFedora7を入れたのですが、apache,php等が入っていない為ダウンロードしようと思いがんばってみたのですが、、。linuxでの諸々のダウンロードインストール経験がないので上記の本を参考にyum installでlistやらsudoをインストールしようとしたのですが、
      could not retrieve mirrorlist http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-7&arch=i386 error was [error 4] ioerror <urlopen error (-3, 'temporary failure in name resolution')> error: cannot open/read repomd.xml file for repository: redora
      となってインストールができませんでした。
      何か設定でミスがあったのでしょうか?

      お忙しいとは思いますが教えていただけたらとても助かります。
      失礼します。
    • 今はcoLinuxを使っていないので、あくまで推測ですが、coLinuxから外部ネットワークへ通信ができていないのではないでしょうか?

      $ ping mirrors.fedoraproject.org

      を実行してパケットが返ってこないようであれば、ネットワークの設定を見直してみるのがよろしいかと思われます。
    • こんにちは。
      windowsのfirewallを停止したら普通にインストール出来ました。
      お騒がせしました。

      ちなみにですがcolinuxをインストールする際fedoraかdebianのイメージを選べたのですがこの2種の場合どちらを選択しますか?
    • 私はDebianのほうが好きですが、もしお仕事などでRedHat系のディストリビューションをお使いになるのであれば、Fedoraでいいと思います。

トラックバック

  • Javascript-mode ver.2 from From a Far East Island
    もうみなさんご存知かもしれませんが、2006-12-26にhigeponさんの所で参照...

    2007年05月09日 12:19