Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
💪

vim-jpラジオのEmacs回に出演しました

2025/01/29に公開1

Introduction

2025年1月前半に配信された エンジニアの楽園 vim-jp ラジオ のEmacs回に @tadsan と出演しました。

https://audee.jp/voice/show/96517
https://audee.jp/voice/show/97075

2025年1月後半はEmacs歴30年の大ベテランである @t-wada さんが出演しており、こちらも最高におもしろかったのでぜひ聞いてください。 Scratch BufferとTDDの関係性の話を聞けるのは世界広しといえどもvim-jpラジオだけだと思います。

https://audee.jp/voice/show/97491
https://audee.jp/voice/show/97837

出演のきっかけ

僕は普段vim-jpやEmacs JPなどテキストエディタコミュニティで活動しています。 最近だと2024年の8月と10月に開いた東京Emacs勉強会が大盛況だったり、2024年のEmacsはvim-jp内で盛り上りを見せていました。

https://tokyo-emacs.connpass.com/event/321255/
https://tokyo-emacs.connpass.com/event/330572/

そこで @tomoya さんからvim-jpラジオに出ないかと打診があり、自分のエンジニアの師匠である @tadsan と一緒に出たいと話した所OKが出たので実現しました。

【2025年最初のテーマはEmacs!?】エンジニアの楽園 vim-jp ラジオ #25

https://audee.jp/voice/show/96517

Shougoさんからのお便り

Shougo です。こんにちは。お二人は Emacs 使いとして vim-jp でも有名です。 お二人にとって Vim の羨ましかった機能やプラグインはありますでしょうか。 また、「デフォルト設定は悪、全てを設定可能にする考え方」についてはどう思いますでしょうか。

やはりVimのテキストオブジェクトはEmacsには存在しない概念なので羨しいですね。 「デフォルト設定は悪、すべてを設定可能にする考え方」は可処分時間が無尽蔵にあるならひとつずつ理解をしながら設定したい所ですが、人生の短さが悔まれますね。 すべてを設定可能にする考え方は、Emacs Lispの場合はadvice関数があるし、 defconst で定義したものであろうと setq で上書きできるので、他エディタよりも圧倒的に柔軟性があるように感じています。

Emacserの飲み会でよく話題になるのですが、Emacs本体が提供しているEmacs Lispのコードでさえすべては参考実装であって、ユーザーが好きなように上書きしても良いというのが我々の感覚です。 なので他テキストエディタよりも本体へのコントリビューションに対しての感覚が弱いかもしれないですね。

こまもかさんからのお便り

tomoyaさん、ありすえさん、tadsanさん、たけてぃさん はじめまして。最近Emacsを始めたこまもかです。

Emacsといえば設定をEmacs Lispという専用のLispで行ったり、他のエディタよりLisp系言語のサポートが手厚い事が有名だと思います。 かく言う僕もCommon Lispを書くためにEmacsを始めたのですが、皆さんの思うLispの魅力などについてお聞きしたいです。

Lispの魅力についての外観をつかみたいなら ハッカーと画家 コンピュータ時代の創造者たちLand of LispA Road to Common Lisp を読むことをお勧めします。 Lispにもっと踏み込みたいなら On LispLET OVER LAMBDA もお勧めです。

僕個人としての魅力は、Lisp自体の言語仕様が変わることはなく、Lispの言語仕様の上にmacroや関数を積み上げているので30年前のコードベースも余裕で動くことです。 ソフトウェアを開発していると後方非互換の回し車に常に追われており、頻繁なバージョンアップを余儀なくされます。 phpプロジェクトは1年塩漬にされているとさまざまな依存関係のせいで動かないことが多々あります。

また、paredit などを使うと括弧の編集体験が気持ち良すぎるので、単に書いて気持ちが良いというのもあります。

kuuさんからのお便り

tomoyaさん、ありすえさん、tadsanさん、たけてぃさん はじめまして、最近Emacsの補完はいいぞと思ってますkuuです。

世の中には数多くのテキストエディタがありますが、Emacsを選んだ理由をお聞きしたいと思います。 後、Emacserに囲まれてるありすえさんの心境もお聞きしたいです。

補完候補でいうと、こちらの記事が非常にマニアックでおもしろかったので通な人にはお勧めです。 僕は怠け者なので flex を優先的に使っていますが、極めると initials になるんだろうなという感想です。

https://qiita.com/keita44_f4/items/12a4a7081b0092eaca94

自分がEmacsを始めたきっかけ

tadsanがEmacsを使ってたのでEmacsを始めたというのがきっかけだったんですが、 @takaxp さんが超速でorg-modeの編集をしていたのがorg-modeへのあこがれのきっかけでした。 tadsanが居なかったら今ごろVSCodeかSublime Textを使っていました。

最近のEmacs勉強会について

「東京Emacs勉強会 サマーフェスティバル2024」を開催したら50人参加しました。

https://tokyo-emacs.connpass.com/event/321255/

「東京Emacs勉強会 オクトーバーフェスティバル2024」を開催した時はテキストエディタバーをやりたかったのでカクテルを作りました。

https://tokyo-emacs.connpass.com/event/330572/

近いうちに本物のテキストエディタバー開催を画策しています。

https://medium.com/@tadsan/5月18日-土-テキストエディタバーを大阪でやります-6022f723153f

Emacsの魅力について

Emacsをヘビーユーズしつつ、たまにOSS活動をする程度の自分にとっては「Emacsはフロントエンドフレームワーク」という感覚です。 コンピュータでやりたいことはEmacs Lispで拡張し、Emacsという統一的なインターフェスで提供できます。 実際過去にEXWM(Emacs Window Manager)を使ってた時があったのでそういう感覚が人一倍強いのかもしれません。

EmacsユーザーはGUIで使っている人が多く、ターミナルの制約を受けないというのもあります。

最近の目玉機能

nativecompが熱いという話はtomoyaさんのブログにまとまっています。恐ろしく速くなります。

https://blog.tomoya.dev/posts/hello-native-comp-emacs/

LSPやTree-Sitterも入りましたね。

本筋ではないけどおもしろ機能はgrugrutさんがまとめてくれています。

https://www.grugrut.net/posts/202211242303/
https://www.grugrut.net/posts/202404122318/

embarkが気に入っている話

こちらが参考になります。

https://emacs-jp.github.io/tips/fifteen-ways-to-use-embark

embarkについて説明がうまくできなかったのが悔まれますね。 自分のユースケースについて後日ブログにまとめます。

Shougoさん曰くddu.vimでもembarkのようなことを実現できるそうです。

https://github.com/Shougo/ddu.vim

embark以外の自分的に熱いpackageはorg-nix-shellです。 Org Babelの実行をNix Shell環境できるので、よりポータビリティの高い環境を提供できます。

https://github.com/AntonHakansson/org-nix-shell

org-modeについて

org-modeもいろいろできすぎて説明が難しいですね。 過去に書いた自分のブログが参考になるかもしれません。

https://www.takeokunn.org/posts/permanent/20240112071806-my_relationship_with_org_mode_in_2023_and_how_navigate_in_2024/
https://www.takeokunn.org/posts/permanent/20231219122351-how_to_manage_blog_by_org_roam/

また、タスク管理についてはこなゆき氏のYouTubeお勧めです。

https://www.youtube.com/watch?v=cpD3OH20KDw&t=6s&ab_channel=こなゆき

僕個人の手元のPCのすべての設定はNixかorg-modeのどちらかで管理されている状態です。

https://github.com/takeokunn/nixos-configuration

ドナルドクヌース先生の文芸的プログラミングの本もおもしろいのでぜひ。

https://www.amazon.co.jp/文芸的プログラミング-SOFTWARE-SCIENCE-Programming-Paradigm/dp/4756101909

ISUCONの手順書はこちらです。

https://zenn.dev/takeokunn/articles/20241217090756#手順書最適化

【VimとEmacsの違い】エンジニアの楽園 vim-jp ラジオ #26

https://audee.jp/voice/show/97075

Emacs JPラジオ

vim-jp slackの #tech-emacs チャンネルはEmacsJPより盛り上がっている状態についてEmacsJPの皆さんには非常に申し訳ない気持ちでいっぱいです。

ゴリラさんからのお便り

たけてぃさん、tomoyaさん、ありすえさん

こんにちは、寿司食べたいゴリラです

たけてぃさんといえば、EmacsユーザだけどVimのことがよくわからないままゴリラ.vimに来てくれて質問もしていて、 フットワーク軽くてパッションがあるなというイメージを持っています。

そんなたけてぃさんがVimmerにEmacsを勧める場合、どう口説きますか? 口説き文句をぜひ聞かせてください

「俺と一緒にEmacsで†††テキストエディタの高み†††を目指さないか」と2024年12月10日18時57分に書いてました。 真面目に答えると、「エディタのカスタマイズだけで満足するの今日で卒業しない?」か「明日また来てください、本物の設定させていただきありがとうございますをお見せしますよ」ですね。

車アイコンさんからのお便り

みなさんこんにちは! 実はガンダム好きな車アイコンです。 たけてぃさんに質問があります。たけてぃさんもガンダムが好きということですが、よくみなさんが話されているRMSとはどんなモビルスーツか教えてください

ガンダムの世界での型式番号は 量産機:RMS-□□□ らしく、ガンダムではないと答えたこと自体は正解だったけど知りませんでした。

https://www2u.biglobe.ne.jp/~asurada/ms_labo/msdata/about.html

Emacsの創始者はRichard Matthew Stallmanの頭文字を取ってRMSです。(正確にはジェームズ・ゴスリンの作ってたものを派生させたものがGNU Emacs)

https://ja.wikipedia.org/wiki/リチャード・ストールマン

モーダルとモードレス

モードレスに体が慣れすぎているので、たまにvimを使うと「insertモードは素潜りしている状態」に慣れないですね。

Emacsキーバインドについて

C-p はprevious、 C-f はforwardなどニーモニックで覚えやすいとはいえ、Dvorak配列 みたいなQWERTY配列以外のキーボードでEmacsを使ったことがないので気になる所です。

Dvorak配列にはn回挑戦していますがいっこうに身につかなくて中々厳しいです。 仕事しながらDvorak配列に移行するのは無理という結論になったので無職期間が欲しいです。

小指について

Emacsユーザーで小指が痛いって言っている人本当に見たことがないですね。

左Ctrlを押すコストは0コストなので常に小指はCtrlを押してます。

Emacsの語源は Editing MACroS であって小指やキーバインドが本質ではないです。小指が痛い人はevilをガンガン使いましょう。 「お前はVimとEmacsから逃げられない」という記事が最近バズってましたが、Emacsは自分好みにカスタマイズしてこそのEmacsなのでキーバインドは好きにすれば良いと思っています。 ネタ記事にマジレスするのは野暮ですね。

https://qiita.com/Neuroi/items/1ed446a0c87f47858727

vimのキーマップやdesign-not

☆Vimは… こうではない design-not

  • Vim はシェルでもオペレーティングシステムでもない。Vim はターミナルウィンドウ を提供し、その中でシェルやデバッガを走らせることができる。例えば、ssh 接続越 しにこれをすることが可能だ。しかし、このようなものにテキストエディタが必要な いなら守備範囲外だ (代わりに screen や tmux のようなものを使おう)。 風刺を込めて曰く: "Vim は Emacs のように流し台以外ならなんでもかんでも取り込 んでしまうようなことはしないが、Vim で流し台を洗うことはできるぞ。 ;-)" Vim と gdb を連携させる方法については |terminal-debugger| を参照。他の(古い) ツールは http://www.agide.org (リンク切れのようだ) と http://clewn.sf.net で 見つけることができる。
  • Vimは、全てのプラットフォームに渡って調和を欠くという代償を払って、見栄えを よくしようとする装飾的なGUIエディタではない。しかし、機能的なGUI特性は歓迎さ れる。

不思議な仕様ですね。Vimできることが少なすぎてたいへんそうだなと常に思っています。

定義ジャンプ

PATHを通しても良いのですが、そもそもGNU系のプロジェクトは手元でBuildするのが基本なので可能な限りやりましょう。 Cのコードに簡単に定義ジャンプできるが、謎のEmacs特有のCマクロがガンガン使われており、コードリーディングには骨が折れますね。

DWIM文化

DWIM (do what I mean) 文化はEmacs以外で見たことがないですね。ほかにもあれば教えてもらいたいです。 ラジオでも話しましたが、Emacs上では M-x comment-dwim が一番一般的ですね。

「ひとつのことをうまくやる」UNIX文化とは真逆の世界のように感じられます。

Emacs普及してない

「Emacsに一生入門できねえ2020」にも書いてある通り、素の状態は難しいし、Emacs Lispも初見だと難しいですよね。

https://anond.hatelabo.jp/20200921040234

40〜50歳のベテランがボリュームゾーンですので(要調査)、やはり若手の自分が盛り上げていくしかないという感覚が常にあります。 tomoyaさんは「風になりたい奴だけがEmacsを使えばよい 2020」や「一子相伝の暗殺拳」のようにやる気のある人を育成する方針のようです。 僕個人としてはある程度共感しつつ、とはいえ門戸を広げる活動をしたいと思っています。

https://blog.tomoya.dev/posts/only-those-who-want-to-be-the-wind-should-use-emacs-2020/

自分がイベントを開いたり、ブログを書いたり、コミュニティ活動を積極的に行って初心者のハードルを下げていきたいです。 vimコミュニティだとゴリラ.vimがその立ち位置なのかなと思っているので真似して頑張っていきたいです。

https://gorillavim.connpass.com/

流行りは巡るもの

「すべての道はEmacsに通じる」のでみんなEmacsにたどり着くと思っています。 じきにShougoさんも暗黒美夢王から暗黒威魔苦巣王になるでしょう。(本人は今はその意思はなさそうだが)

EmacsはTerminalの中で起動するの?

僕はEmacsはGUIで起動しつつTerminalはFishとTmuxをメインで使っています。 EmacsはTUI的な動きに弱いのでその部分はTerminalに担ってもらっています。

embarkからeshellを起動して使うこともありますし、日常の大部分のShell Script実行はorg-modeから行っています。

こういう格言を言っている人がいるとかいないとか。

世の中には2種類のEmacs使いがいる。 shellの上でEmacsを使う者と、Emacsの上でshellを使う者だ。

https://qiita.com/fnobi/items/8906c8e7759751d32b6b

major-modeとminor-mode

minor-modeはフィーチャートグルという説明良いなと思いました。今後使わせてもらいます。

org-modeでスライド

org-tree-slideなどもありますが、個人的には最近Typstにはまっているのでorg-modeからTypstを出力するようにしています。

https://github.com/takaxp/org-tree-slide
https://www.takeokunn.org/posts/fleeting/20250126114218-build_and_deploy_typst_using_nix/

エンディング

テキストエディタを極めたいのでEmacsを極めます。

ハッカーへのあこがれを諦める必要はないし、やはり僕はハッカーになりたいんです。 ハッカーになりたいならEmacsが最適なのは自明なのでEmacsをこれからも使い続けます。

https://tadsan.fanbox.cc/posts/8295358

また、2025年中にEmacsConf開催する予定なのでぜひ来てください。

感想

正直緊張してあまりうまく喋れない、楽屋でおもしろいタイプの男になってしまったなーと配信までは布団に包まって震えてました。 実際に配信されるとカットや編集が丁寧に成されていて、想像以上に自分の声を不快感なく聞ける仕上りになっていました。 シャララカンパニー の担当者様、本当にありがとうございます。

ラジオのお便りと配信に対しての反響が想像以上に多くうれしい限りです。 自分の配信を聞いて久々にEmacsを設定した人、新規で興味を持ってくれた人、感想を書いてくた人が非常に多かったです。

https://k1low.hatenablog.com/entry/2025/01/14/095141
https://blog.atusy.net/2025/01/16/vim-jp-radio-25/
https://kazto-dev.hatenablog.com/entry/2025/01/11/175850

また、Sacha Chua氏のEmacs Newsにも載りました。Sacha Chua氏ファンの自分としてはうれしい限りです。

自分のような実力や経験はまだまだだけど勢いだけは誰よりもある若手エンジニアがEmacs界を盛り上げていく必要があると感じています。 2025年も熱いイベントを企画していくつもりなので皆さんぜひ協力をしてください。

宣伝

Software Design 2025年3月号 (発売日2025年02月18日) にtadsanと「第3章 Emacs の機能、魅力、思想」を書きました。

あなたがエディタに求めるものは?編集速度、拡張性、習熟しやすさ…… コードエディタ大研究

https://www.fujisan.co.jp/product/1535/next/

Emacsの歴史からorg-modeの使い方までEmacsに関する魅力について頑張って書いたのでぜひ買ってくれるとうれしいです。

GitHubで編集を提案

Discussion

g000001g000001

DWIM文化

DWIM(ドゥウィム)は元々はXeroxのInterlisp方面で研究/実践されていたもので、コンテクストに応じて変化するUIです。

Interlispの対話機能にはは、シェルの履歴呼び出し、対話的な補完機能、アンドゥ、スペル修正等がありましたが、これらのUIをパクったものは後世のUnixシェル等、結構あります。
またpareditなどもInterlispの構造エディタの流れにあると思います。

Interlisp-Dのdwimについて当時の開発者による説明
https://youtu.be/HYWFTiai_tA?si=_KPsCq-H1Z-TWiQY&t=608

対話lisp
https://www.softwarepreservation.org/projects/LISP/interlisp/Teitelman-3IJCAI.pdf

ジャーゴンファイルでDWIMについて先入観が多い解説があるので、Unix文化圏ではポンコツ機能というイメージが強いかもしれません。
http://www.catb.org/jargon/html/D/DWIM.html

実際のところエリック・レイモンドはあまりInterlispを知らないので適当なことをそれらしく書いているという印象があります。