2008-08-10
Kansai.pm 第10回ミーティングで発表してきたお
Kansai.pmの第10会ミーティングで、「EmacsでPerlプログラミングする上で必須な設定」というタイトルでお話してきました。初トーク!!1しかし結果は……という感じでしたが、ともあれ楽しかった。参加されたみなさま、どうもありがとうございました & お疲れさまでした!!1また次回もよろしくお願いします!!1
以下、発表資料です。
EmacsでPerlプログラミングする上で必須な設定
- 自己紹介
- いろいろツール紹介
- まとめ
自己紹介
- 名前: 栗林健太郎 kentaro a.k.a. id:antipop
- 所属: 株式会社はてな(エンジニア)
- はてなダイアリーとかの開発
- 出身: 奄美大島
- 5月から転職して京都に移住
- 属性: BDD/℃DD
Perler活動
- http://search.cpan.org/~kentaro/
- Acme::MorningMusume
- WWW::HatenaDiary
- WebService::Hatena::Graph
- WebService::Hatena::Fotolife
- あとなんかいろいろ適当に
Emacser(えまくさ)活動
elispはそんなに書けませんが……。
- simple-hatena-mode
- auto-save-buffers-enhanced
- emacs-ditz
- taskpaper
- .emacs
- http://planet.emacsen.org/
- 購読対象にされて迷惑してます
Emacsの設定
- Emacsを使うこと自体において必須な設定ってのはたくさんあるけど……
- anything.el
- minibuf-isearch
- migemo
- etc.
- キリがないので、Perlプログラミングをする上で必須、というものに絞って紹介
Ack
- grepの代替を目指しているツール
- Ack is designed as a replacement for 99% of the uses of grep
- 拡張子によってファイルタイプを判別していい感じに検索
- バックアップファイルや.svnやblib等を除外して検索
- 詳細はperldoc ackで
Ackデモ
- 適当に検索してみるよ
AckをEmacsから使う
- App::Ackをcpanでインストール
- .emacsに以下の設定を追加
- grep-find-commandをackでおきかえているだけ
- M-x ackで実行
(defun ack () (interactive) (let ((grep-find-command "ack --nocolor --nogroup ")) (call-interactively 'grep-find)))
- ack.elってのもあるよ(使ってないけど)
- VCSにGitを使っているなら、git grepの方がいい(らしい)
color-moccur
- http://www.bookshelf.jp/soft/meadow_50.html#SEC736
- 単に検索するだけならackが速いし素敵なんだけど
- color-moccurを使うといろいろできる
- moccur: ファイルバッファのみを検索
- dmoccur: 指定したディレクトリ下のファイルを検索
- moccur-grep: grep のようにファイルを検索
- moccur-grep-find: grep + find のようにファイルを検索
- search-buffers: すべてのバッファを全文検索
- grep-buffers: 開いているファイルを対象に grep
moccur-editのデモ
- MoCoをPoCoに変更したい!!1
color-moccur/moccur-editの設定
- なんかいろいろオプションあるけど、これだけしか設定してない。
(require 'color-moccur) (require 'moccur-edit) ;; ~, .svnを無視 (setq dmoccur-exclusion-mask (append '("\\~$" "\\.svn\\/\*") dmoccur-exclusion-mask))
flymake
- 動的にシンタックスチェックを行うツール
- Perlだけでなく、汎用のシンタックスチェックツール
- Emacs22から標準添付
- すぐにミスがわかるので、typoでハマったりすることが減る
flymakeデモ
- なんか適当に書いてみるよ
flymakeの設定
- プロジェクトのlibディレクトリをPERL5LIBに追加する必要がある
- set-perl5libを使えばいい
- 設定長い。後でブログに張っておくのでそちらで。
(require 'flymake) ;; set-perl5lib ;; 開いたスクリプトのパスに応じて、PERL5LIBにlibを追加してくれる ;; http://svn.coderepos.org/share/lang/elisp/set-perl5lib/set-perl5lib.el (require 'set-perl5lib) ;; エラー、ウォーニング時のフェイス (set-face-background 'flymake-errline "red4") (set-face-foreground 'flymake-errline "black") (set-face-background 'flymake-warnline "yellow") (set-face-foreground 'flymake-warnline "black") ;; エラーをミニバッファに表示 ;; http://d.hatena.ne.jp/xcezx/20080314/1205475020 (defun flymake-display-err-minibuf () "Displays the error/warning for the current line in the minibuffer" (interactive) (let** ((line-no (flymake-current-line-no)) (line-err-info-list (nth 0 (flymake-find-err-info flymake-err-info line-no))) (count (length line-err-info-list))) (while (> count 0) (when line-err-info-list (let** ((file (flymake-ler-file (nth (1- count) line-err-info-list))) (full-file (flymake-ler-full-file (nth (1- count) line-err-info-list))) (text (flymake-ler-text (nth (1- count) line-err-info-list))) (line (flymake-ler-line (nth (1- count) line-err-info-list)))) (message "[%s] %s" line text))) (setq count (1- count))))) ;; Perl用設定 ;; http://unknownplace.org/memo/2007/12/21#e001 (defvar flymake-perl-err-line-patterns '(("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1))) (defconst flymake-allowed-perl-file-name-masks '(("\\.pl$" flymake-perl-init) ("\\.pm$" flymake-perl-init) ("\\.t$" flymake-perl-init))) (defun flymake-perl-init () (let** ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (list "perl" (list "-wc" local-file)))) (defun flymake-perl-load () (interactive) (defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted) (setq flymake-check-was-interrupted t)) (ad-activate 'flymake-post-syntax-check) (setq flymake-allowed-file-name-masks (append flymake-allowed-file-name-masks flymake-allowed-perl-file-name-masks)) (setq flymake-err-line-patterns flymake-perl-err-line-patterns) (set-perl5lib) (flymake-mode t)) (add-hook 'cperl-mode-hook 'flymake-perl-load)
perly-sense
- http://search.cpan.org/dist/Devel-PerlySense/
- EmacsをPerl IDEにすることを目論んでいるらしい
- IntelliSenseとかよく知りませんが
- よく使う機能
- クラスのOverviewを見る
- useしているモジュールへ移動
- 親クラスへ移動
- テストファイル実行
perly-senseのデモ
- overview
- ブックマークも出るよ
- 重いのであんま使わない
- モジュールへ移動
- テストファイル実行
perly-senseを使ってみる
- 設定はドキュメントの通り
- まずはperly_senseコマンドで準備。
- .PerlySenseProjectディレクトリが作成される
- 必要ならば、その中のproject.ymlを編集
$ perly_sense create_project MyProject
.PerlySenseProject/project.ymlの、重要なポイント
- @INCに含めたいパスを指定
- 外部モジュールを利用してる時に便利
project: moniker: 'The Project Without a Name' inc_dir: - modules/foo/lib - modules/bar/lib
- メモを書く書式を設定しておくと、overviewに一覧される
bookmark: - moniker: Todo rex: - qr/\# \s** TODO \s** : \s** (.+?) \s*$/x
- "--nocolor"オプションをつけておかないと、Emacs内でテストファイルを実行した後の結果がおかしくなる。
run_file: - command: "prove -v ${INC} --nocolor \"${SOURCE_FILE}\"" moniker: Test rex: \.t$ run_from: source_root_directory
perly-senseの設定
- 設定長い。後でブログに張っておくのでそちらで。
- 詳しくは、ドキュメントを参照のこと。
(setq ps/key-prefix "\C-c\C-c") ;; perly-sense-flymake ;; flymakeは自分で設定する (setq ps/load-flymake nil) ;; load perly-sense (setq ps/external-dir (shell-command-to-string "perly_sense external_dir")) (if (string-match "Devel.PerlySense.external" ps/external-dir) (progn (message "PerlySense elisp files at (%s) according to perly_sense, loading..." ps/external-dir) (setq load-path (cons (expand-file-name (format "%s/%s" ps/external-dir "emacs") ) load-path)) (load "perly-sense") ) (message "Could not identify PerlySense install dir. Is Devel::PerlySense installed properly? Does 'perly_sense external_dir' give you a proper directory? (%s)" ps/external-dir))
perl-completion
- id:IMAKADOさん作
- anything.elを利用して、Perlプログラミングに必要なあれこれを絞り込み
- ってか、anything.elって何?
- Emacs界のPlaggerのようなもの
- リストで入力されたものを
- 絞り込みをかけて
- いろんな形式でもって出力
- 最近、メンテナがRuby/Emacs界で有名な日本人id:rubikitchさんに移管されたので、期待!!1
- Emacs界のPlaggerのようなもの
perl-completionでできること
- 組み込み変数/関数の補完入力
- モジュールの補完入力
- それらのドキュメント閲覧
- 他にもなんかあるかも
perl-completionデモ
- 関数/変数補完
- モジュール補完
- 補完画面での動作
perl-completionの設定
- 設定については後で(ry
(setq plcmp-buffer-dabbrev-expansions-number 0) (add-hook 'cperl-mode-hook (lambda () (require 'perl-completion) (perl-completion-mode t) (define-key plcmp-mode-map "\C-\M-f" 'plcmp-builtin-function-complete) (define-key plcmp-mode-map "\C-\M-v" 'plcmp-builtin-variables-complete) (define-key plcmp-mode-map "\C-\M-u" 'plcmp-installed-modules-complete) (define-key plcmp-mode-map "\C-\M-s" 'plcmp-search-word-at-point) (define-key plcmp-mode-map "\C-\M-c" 'plcmp-clear-all-cache)))
まとめ
- ちょっとツールを導入するだけで、とっても便利に
- http://d.hatena.ne.jp/antipop/20080729/1217336517
We are Hiring!
- インターン2回目: 2008年9月1日〜9月26日(平日のみ。全18日)
おしまい
- ご清聴ありがとうございました。
玄光社
購入: 1人 クリック: 123回
購入: 1人 クリック: 123回
トラックバック - http://d.hatena.ne.jp/antipop/20080810/1218369556
リンク元
- 219 http://reader.livedoor.com/reader/
- 117 http://secure.ddo.jp/~kaku/tdiary/
- 89 http://d.hatena.ne.jp/diarylist?mode=staff
- 80 http://kansai.pm.org/cgi-bin/wiki.cgi?page=イベント/第10回ミーティング報告
- 63 http://b.hatena.ne.jp/naoya/rss
- 48 http://b.hatena.ne.jp/hotentry
- 31 http://www.google.com/reader/view/
- 30 http://b.hatena.ne.jp/
- 29 http://b.hatena.ne.jp/hotentry?cname=elec
- 29 http://fastladder.com/reader/



