Emacs Application  Development     kiwanami
自己紹介●    kiwanami●    さくらいまさし●    福岡で医療系のソフトウエア研究開発●    ユーザーインタフェースに注目
過去●    kansai-emacs #2 : deferred.el●    kansai-emacs #3 : 3D demo●    kansai-emacs #4 : Emacs and async●    fukuoka-emacs...
Emacsでのアプリケーション開発とは?
Emacs Levels●    使う、設定、カスタマイズ●    自前関数・コマンド      << 壁 >>●    メジャーモード●    Emacsアプリ
Emacsアプリ開発の難しさ●    そもそもエディタである    ●        スタートラインがはるか後方●    データの持ち方、部品がすこし独特    ●        Emacs World に慣れる●    エディタのオブジェクト...
トピック    Emacsアプリ開発のとりかかり●    スコープ    ●        データはどこへ保存するべきか●    作り方・設計    ●        エディタの上でどう作るか
データはどこへ保存するべきか?
言語的スコープ●    ローカル変数●    グローバル変数●    レキシカルスコープ●    ダイナミックスコープ    → 変数がどう見えるか
Emacsの主要オブジェクト●    バッファ                     A   B   C        → ファイル、データ●    フレーム(端末)    ●        ウインドウ    →それぞれにデータをひも付けるこ...
アプリにとってのスコープ●    セッションデータ    ●        Emacsでアプリ動作中に保持しているデータ●    永続データ    ●        Emacsが終了しても残るデータ
永続データ●    アプリ起動時に読み込みたい     → ローカルファイル     例:recentf, anything, ac, elmo など多数●    ネットワーク経由で読み込みたい     → ネットワーク     例:navi2...
セッションデータ●    バッファにひもつけたい場合     →バッファローカル●    バッファにまたがる場合     →グローバル
セッションデータ(続)●    グローバルは避けてなるべく狭いスコープ    ●        複数起動、組み合わせ        → バッファローカル、クロージャ●    グローバルに置く場合    ●        単なる変数アクセスでなく...
データの置き方はわかった。  次は、どう作るか。
Emacsの自然な形式●    アプリケーションの境界がバッファ●    バッファローカル変数 → model●    バッファ → view●    keymap/コマンド → controller    → ほとんどがこの形
問題●    バッファごとに独立している    ●        たくさんviewを組み合わせたい時は?        例:ECB, gdb●    バッファ間の関係    ●        独立か親子関係か、全員killするべきか●    バ...
UI部品:低レベル●   ボタン    ●   形(face)、キー・マウス(keymap)    ●   action-lock●   レイアウト    ●   固定幅フォント、ウインドウ幅・高さ    ●   右寄せ、左寄せ、中央寄せ●  ...
UI部品:高レベル●    テーブル    ●        みんな自前実装:dired, list-processes, list-buffers    ●        ctable.el●    ツリー    ●        tree-...
フォームライブラリ widget●    Emacs標準添付●    歴史が古く、かなり独特の世界●    作り手にとってはかなりつらい    ●        必要なコード量多すぎ    ●        融通が効かない    ●      ...
Emacs Lisp 言語方面●    GUIはOOPによる設計が自然でノウハウも多い●    Emacsでのオブジェクトシステム    ●        defstruct, eieio(CLOS)    ●        独自OOP実装多い...
現状のまとめ●    バッファをまたぐ場合は、データのスコープや    バッファ間の関係が重要●    CLOS知らなくても作れるが、後で便利●    Emacs上でのUI構築はまだまだ発展途上●    フォーム作る場合は widget しかな...
既視感●    画面遷移をまたぐ場合は、データのスコープや    画面間の関係が重要●    prototype知らなくても作れるが、後で便利●    ブラウザ上でのUI構築はまだまだ発展途上●    UI作る場合はDOMの理解が重要    →...
JSによるアプリ開発と現状そんなに変わらない!!!
Emacsで幸せ実現!!!
Upcoming SlideShare
Loading in …5
×

Emacsアプリケーション開発入門

3,032 views

Published on

2012/04/28 kansai-emacs #5

Emacsアプリケーション開発入門

  1. 1. Emacs Application Development kiwanami
  2. 2. 自己紹介● kiwanami● さくらいまさし● 福岡で医療系のソフトウエア研究開発● ユーザーインタフェースに注目
  3. 3. 過去● kansai-emacs #2 : deferred.el● kansai-emacs #3 : 3D demo● kansai-emacs #4 : Emacs and async● fukuoka-emacs #2 : skype.el● fukuoka-emacs #3 : world cafe● YAPC Asia 2011 : Emacs and DBI
  4. 4. Emacsでのアプリケーション開発とは?
  5. 5. Emacs Levels● 使う、設定、カスタマイズ● 自前関数・コマンド   << 壁 >>● メジャーモード● Emacsアプリ
  6. 6. Emacsアプリ開発の難しさ● そもそもエディタである ● スタートラインがはるか後方● データの持ち方、部品がすこし独特 ● Emacs World に慣れる● エディタのオブジェクトとスコープの理解 → 霧を抜けると別世界
  7. 7. トピック Emacsアプリ開発のとりかかり● スコープ ● データはどこへ保存するべきか● 作り方・設計 ● エディタの上でどう作るか
  8. 8. データはどこへ保存するべきか?
  9. 9. 言語的スコープ● ローカル変数● グローバル変数● レキシカルスコープ● ダイナミックスコープ → 変数がどう見えるか
  10. 10. Emacsの主要オブジェクト● バッファ A B C → ファイル、データ● フレーム(端末) ● ウインドウ →それぞれにデータをひも付けることが出来る
  11. 11. アプリにとってのスコープ● セッションデータ ● Emacsでアプリ動作中に保持しているデータ● 永続データ ● Emacsが終了しても残るデータ
  12. 12. 永続データ● アプリ起動時に読み込みたい → ローカルファイル 例:recentf, anything, ac, elmo など多数● ネットワーク経由で読み込みたい → ネットワーク 例:navi2ch, cacoo, calfw-ical など● データベース → 外部プログラム(ほとんど無いに等しい)
  13. 13. セッションデータ● バッファにひもつけたい場合 →バッファローカル● バッファにまたがる場合 →グローバル
  14. 14. セッションデータ(続)● グローバルは避けてなるべく狭いスコープ ● 複数起動、組み合わせ → バッファローカル、クロージャ● グローバルに置く場合 ● 単なる変数アクセスでなく、関数経由でのアクセス に限定する● その他テクニック ● コントロール用バッファ、親子バッファ
  15. 15. データの置き方はわかった。 次は、どう作るか。
  16. 16. Emacsの自然な形式● アプリケーションの境界がバッファ● バッファローカル変数 → model● バッファ → view● keymap/コマンド → controller → ほとんどがこの形
  17. 17. 問題● バッファごとに独立している ● たくさんviewを組み合わせたい時は? 例:ECB, gdb● バッファ間の関係 ● 独立か親子関係か、全員killするべきか● バッファがたくさんある場合のウインドウ管理 ● 独自制御だと混ぜられない 例:wl, lookup, popwin, e2wm
  18. 18. UI部品:低レベル● ボタン ● 形(face)、キー・マウス(keymap) ● action-lock● レイアウト ● 固定幅フォント、ウインドウ幅・高さ ● 右寄せ、左寄せ、中央寄せ● ポップアップメニュー ● 普通のメニュー、GUIメニュー ● anything などの minibuffer 系 ● popup.el などの overlay 系
  19. 19. UI部品:高レベル● テーブル ● みんな自前実装:dired, list-processes, list-buffers ● ctable.el● ツリー ● tree-widget (widgetのパーツ) ● dire-x.el● フォーム ● widget か独自実装
  20. 20. フォームライブラリ widget● Emacs標準添付● 歴史が古く、かなり独特の世界● 作り手にとってはかなりつらい ● 必要なコード量多すぎ ● 融通が効かない ● Hackしまくりで混ぜられない → Webのフレームワーク相当が必要
  21. 21. Emacs Lisp 言語方面● GUIはOOPによる設計が自然でノウハウも多い● Emacsでのオブジェクトシステム ● defstruct, eieio(CLOS) ● 独自OOP実装多い – luna, widget, ewoc, e2wm, skype – eieio の標準添付で統一されるか?
  22. 22. 現状のまとめ● バッファをまたぐ場合は、データのスコープや バッファ間の関係が重要● CLOS知らなくても作れるが、後で便利● Emacs上でのUI構築はまだまだ発展途上● フォーム作る場合は widget しかない → フレームワークの登場が待たれる!!!
  23. 23. 既視感● 画面遷移をまたぐ場合は、データのスコープや 画面間の関係が重要● prototype知らなくても作れるが、後で便利● ブラウザ上でのUI構築はまだまだ発展途上● UI作る場合はDOMの理解が重要 → フレームワークが乱立中!!!
  24. 24. JSによるアプリ開発と現状そんなに変わらない!!!
  25. 25. Emacsで幸せ実現!!!

×