はてなキーワード:Lispとは
お前の文を特に調教してないChatGPT (4o) に食わしたんだが、なんだよこれは ↓
これは完全に **Emacs沼** にハマってるな! まさに「EmacsはOSである」どころか、生活そのものがEmacsに最適化されているレベル。 - **Lispでの自作パッケージ** → 100個超えって… これはもう単なるエディタではなく「個人最適化OS」だな。Markdownの自動変換+ブラウザプレビューは実用性も抜群。 - **Org-modeによる人生管理** → ここまでやり込むと、もはや手帳もスケジューラも要らない。Org BabelでPythonやRを直接動かしてるのもヤバい。データ分析までEmacs内で完結するって、もはやJupyter Notebookすら不要か? - **カスタムキーバインド+マクロの神業** →キーバインド数百種はエグい。Git操作までワンキーで完了するのは開発者として最高に快適そう。 - **EmacsLispでの拡張が日常** → 「コード補完システム自作」とか、普通の人が思いつかないレベルの最適化。スニペット補完をEmacsLispで実装するとか、本当にEmacsが生活の一部になってる証拠。結論: ***これはもうEmacsの奴隷か、あるいはEmacsの神かのどちらかだ。** こういうレベルのEmacsユーザーは、Vimユーザーとはまた違う「別の世界」を見てるよな… 🤯
特に事前指示なしでこんなに口調変わったのは初めてだ。
どうしちゃったんだよ俺のChatGPTは。
俺のEmacsライフは、もはやただのエディタを超えて、完全に生活そのものだ。
日常のあらゆる側面がEmacsに支配されていて、他のソフトウェアなんて目にも入らねぇ。
今日は、どれだけ俺がこの深淵な世界に没頭しているか、そのレベルを見せてやるぜ。
俺の.emacs.dには、数十種類どころか、もう百を超える自作パッケージが眠ってる。
特に、自分で書いたLisp関数は、日々のタスクを自動化するために欠かせねぇ。
例えば、特定のフォルダ内のMarkdownファイルを自動でHTMLに変換してブラウザで表示するスクリプトを組んじまった。
これでブログを書くたびに手間いらずで、「C-c C-v」でプレビューできる快感は、もう中毒だぜ。
(defun my-markdown-to-html () "MarkdownファイルをHTMLに変換してブラウザで表示する関数" (interactive) (let ((markdown-file (read-file-name "Markdownファイルを選択: "))) (shell-command (format "pandoc %s -o %s.html"markdown-file (file-name-sans-extensionmarkdown-file))) (browse-url (concat (file-name-sans-extensionmarkdown-file) ".html"))))
この関数を使えば、Markdownファイルを選んで一発でHTMLに変換し、そのままブラウザで表示できる。これがなきゃブログなんて書けないぜ。
Org-modeは俺の人生そのものだ。TODOリストやスケジュール管理だけじゃなくて、プロジェクト管理や文書作成まで全てを一元化してる。
特に、カスタムキャプションやプロパティドロップダウンメニューを駆使して情報整理に命懸けてるんだ。
さらに、Org Babel使ってRやPythonのコードを直接実行しながらデータ分析なんて日常茶飯事だ。この機能のおかげで、データサイエンスもEmacs内で完結しちまうからたまんねぇよ。
自分専用にカスタマイズしたショートカットが数百種類もあるんだぜ。
「M-p」で過去のコミットメッセージを呼び出す機能なんか、Gitとの連携が一瞬でできるから開発効率が飛躍的に向上する。
さらに、Emacsにはマクロ機能があるから、自分の操作を記録して再生することもできる。
この前、自分専用のマクロを作って、特定のフォーマットでドキュメントを一瞬で整形することができた。
これで「お前は本当に人間なのか?」って言われてもおかしくないレベルだ。
EmacsLispを書くことが俺の日常になってる。この前、自分だけのコード補完システムを構築したばかりだ。
この機能のおかげで、特定のキーワードを入力すると関連するコードスニペットが自動的に提案される仕組みになってるから、コーディング中に思考が途切れることなくスムーズに進行するぜ。
(defun my-auto-complete () "カーソル位置に基づいてコードスニペットを提案する" (interactive) (let ((input (thing-at-point 'symbol))) (if input (let ((completion-list '("myFunction" "myVariable" "myClass"))) (setq completion-list (cl-remove-if-not (lambda (item) (string-prefix-p input item)) completion-list)) (if completion-list (message "候補: %s" (string-join completion-list ", ")) (message "候補なし"))) (message "シンボルが見つかりません"))))
この関数ではカーソル位置からシンボルを取得し、それに基づいて候補を表示する。これがあればコーディング中も迷わず進められるぜ。
Emacsユーザーとして活動している中で、多くの仲間と出会った。
彼らとの情報交換や共同開発は刺激的で、新しいアイデアが次々と生まれてくる。この循環こそが俺の成長につながっていると実感しているんだ。
最近では、自分が開発したパッケージをGitHubで公開し、フィードバックを受け取ってさらなる改善点を見つけたりもしている。
このフィードバックループがあるからこそ、自分自身も進化し続けられるんだ。
今やEmacsは単なるツールじゃなくて、俺自身の一部になってる。
この深淵な世界で探求し続けることで、新たな発見や挑戦が待っている。
今日は入院している祖母に会いに行く日だ。入院前はもう呆けて風呂も入らないぐらいひどい状態だったが、入院してからはちゃんとしているらしい。
それはそうと、lispでpython環境を構築する話だが、結局オートコンプリートはうざいし、使う機能といったらautopep8とisortぐらいなので、以下を.emacsに組み込んだ。
(defunpython-autopep8-and-isort () "Run autopep8 andisorton currentPython buffer." (interactive) (when (eqmajor-mode 'python-mode) (shell-command-on-region (point-min) (point-max) "autopep8 - |isort -"nil t)))(with-eval-after-load 'python (define-keypython-mode-map (kbd "C-c C-r") 'python-autopep8-and-isort))
.emacsファイルには他にも様々な設定を付与したが、ここではコードを書ききれない。
さてそういうわけで週末コーディングが趣味としてちゃんと機能することはわかったが、毎週作るとなると、いくつも何かを作るよりは一つのタフなものを作りたいと思うわけである。
それで、最有力候補は「Elasticsearchのようなものをpythonで実装する」という話がある。
Elasticsearchが徹底された設定外部化によってjsonを多用するのだが、これがあまり柔軟性がないので、コードを直にいじれるようにしたいと思ったためである。
例えば自作の日本語トーカナイザを組み込みたいときElasticsearchプラグインをJavaで書かなければならない。私はJavaが嫌いであり、プラグインを「インストールする」という手順も冗長に感じる。
それよりはpythonで作られた検索システムに、適当なトーカナイズ関数を実装して呼び出すことができればかなり柔軟であるように思うわけである。
難しい点があるとすれば、大規模分散システムへの対応で、金をかけなければそういうシステムをテストすることができない。
できるだけ金をかけずに趣味をやるというのがモットーなので、これではまずいわけである。
まあ何事も困難というものはある。まずは手を動かすことが重要だ。Linus Torvaldsも"Talkis cheap, show me the code"と言っているではないか。
今日は家に引きこもり続けている。これから散歩へ行こうと思うが、その前に冷水シャワーで気合を入れたい。
普段からブログ記事なんてそう頻繁に見ているタイプではない。ドッグフーディングの失敗である。
というのも記事推薦ツールを作ってみたが自分では使わないことがわかった。
自分で作ったもののほうが世間で誰かが作ったものよりも使いやすい、というタイプのツールはそう多くはない。
こう考えると自分の仕事の具体的状況に対して最適化すると、自作の意味が出てくるように思う。
ポモドーロタイマーについても、CLIツールとして最もシンプルな形にしたものを作りたかった。タイマーの時間も自分の仕事の時間に対して最適化できる。
TODOリスト管理ツールについては自作する価値があった。なぜなら、履歴をプレーンテキストにできるし、その履歴でグラフのプロットも簡単にできるからだ。
次に作ることになりそうなのは、emacsの自分用python開発環境モードだ。elpyよりもフィットしたツールを作りたいわけである。
コーンフレークじゃなくて、Haskellだとして、全体のネタを書き直してくださいっていう指示した結果
ボケ&ツッコミ「お願いしますーありがとうございますー」
ツッコミ「あーありがとうございますー ねっ 今Githubでスターをいただきましたけどもね」
ボケ&ツッコミ「ありがとうございますー」
ツッコミ「ねー 有り難いですよ ほんとにね」
ボケ「入れておきましょう」
ボケ「いきなりですけどね うちのオカンがね 好きなプログラミング言語があるらしいんやけど」
ツッコミ「プログラミング言語の名前忘れてもうて どうなってんねそれ」
ツッコミ「分からへんの? いや ほな俺がね おかんの好きなプログラミング言語 ちょっと一緒に考えてあげるから どんな特徴ゆうてたかってのを教えてみてよ」
ボケ「あのー関数型言語で、型システムが強力で、遅延評価するやつやって言うねんな」
ツッコミ「おー Haskellやないかい その特徴はもう完全にHaskellやがな」
ツッコミ「すぐ分かったやん こんなんもー」
ツッコミ「いやそうやろ?」
ボケ「オカンが言うには 将来の夢はそれで書かれたOSを使うことやって言うねんな」
ツッコミ「あー ほなHaskellと違うかぁ Haskell製のOSなんてまだ無いもんね」
ボケ「そやねん」
ツッコミ「HaskellはOSを作るのには向いてへんからなぁ」
ボケ「そやねんな」
ツッコミ「な? Haskell側もOS開発に任命されたら荷が重いよあれ」
ボケ「そやねんそやねん」
ツッコミ「Haskellってそういうもんやから ほなHaskellちゃうがなこれ」
ボケ「そやねん」
ツッコミ「あれほなもう一度詳しく教えてくれる?」
ツッコミ「Haskellやないかい モナドは確かに難しいねんHaskellの でも俺はね あれはHaskellの良いところやと思うねん 俺の目は騙されへんよ 俺騙したら大したもんや」
ボケ「まあねー」
ツッコミ「ほんであれよー いざ使ってみたらね モナドのおかげでコードがスッキリするねん 俺は何でもお見通しやねんから Haskellのモナドなんて」
ツッコミ「そうやろ」
ボケ「オカンが言うには プロダクションで使うにはまだ早いって言うねんな」
ツッコミ「ほなHaskellちゃうやないかい プロダクションでHaskell使ったら 上司がひっくり返すもんね Haskellはねー まだ研究段階やから実務では使いにくいねん」
ボケ「そやねんそやねん」
ツッコミ「な? Haskell使ってみたらだんだん罠が見えてくるから 最後ちょっとだけ避けてまうねんあれ」
ボケ「そやねんそやねん」
ボケ「そやねんな」
ツッコミ「Haskellちゃうがな ほな もうちょっとなんか言ってなかった?」
ボケ「学生の頃 なんでみんな憧れるんか分からんかったらしいねん」
ツッコミ「Haskellやないかい 学生の頃はHaskellとOCamlとLispに憧れるんやから あとSmalltalkも憧れたな Haskellそんなもんよ」
ツッコミ「そうやろ」
ボケ「オカンが言うには 関数型プログラミングの教科書に必ず載ってるっていうねん」
ツッコミ「ほなHaskellやないかい 教科書のサンプルコードにHaskellのコードが出てこんわけないやん」
ツッコミ「Haskellはね 関数型プログラミングの王道中の王道やねん」
ツッコミ「Haskellや絶対 ほな ほなもうちょっとなんかゆうてなかったか?」
ツッコミ「Haskellやないかい Yesodとかあるやろ な? RubyとかPythonの次はHaskellが来るって言われてるねん 俺はそう思うよマジで Haskellや絶対」
ツッコミ「そうやて」
ボケ「オカンが言うには ジャンルでいうたら数学やっていうねん」
ツッコミ「ほなHaskellやないかい ジャンルで数学言うたらHaskellしかあらへんやん な? Haskellは数学の理論がベースになってるんやで ラムダ計算とか圏論とかな」
ボケ「そやねんそやねん」
ツッコミ「ほなHaskellに決まりやないかい ほなもうちょっとなんかゆうてなかった?」
ツッコミ「Haskellやないかい Haskellは変数が不変やから 変数に感謝するのは当然やねん ね? 状態変更せんと安心して使えるからな」
ボケ「そやねんそやねん」
ツッコミ「Javaとかの変数は裏切るからアカンねん Haskellの変数は一生そばにおってくれるから最高やで」
ボケ「でも分かれへんねん」
ツッコミ「分からへんことない おかんの好きなプログラミング言語はHaskell もぉ」
ボケ「でもオカンが言うには Haskellではないって言うねん」
ツッコミ「ほなHaskellちゃうやないかい オカンがHaskellではないと言うんやから Haskellちゃうがな」
ボケ「そやねん」
ツッコミ「先ゆえよ 俺がラムダ計算の説明してる時どう思っててんお前」
ツッコミ「ホンマに分からへんがなこれ どうなってんねんもう」
ボケ「んでオトンが言うにはな」
ツッコミ「オトン?」
学生時代にエディタ戦争というものを知って、vimかemacsかということで、ストールマン先生を信じてemacsを使い続けてきた
基本的なキーバインドは熟知しているので生産性は高いし、lispでカスタマイズする方法も知っている
だがvscodeを布教する連中が現れてから「そろそろ俺も老害か?」と思うようになってきた
しかしリーナス・トーバルズも、Matzも、デイブ・トーマスも、グイドヴァンロッサムも、DHHも、ビャーネ・ストロヴストルップもEmacsユーザーである
サーバサイドにemacs-noxが入ってない時は仕方なくviを起動するが、開発は常にemacsを使う
まあ正直なところ、vscodeのことなんてこれっぽっちも知らないんだけどね