Malleable コンピューティング、Emacs、そしてあなた

2026/07/23 6:15

Malleable コンピューティング、Emacs、そしてあなた

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

著者は、大量導入向けのスケーラビリティよりも速度と簡潔さを優先する軽量のツール

fj
を使用し、Emacs 内で GitHub の Issue 管理を自動化することに成功した。このソリューションは複雑なローカルサーバーを避けるために既存の
gh
コマンドラインユーティリティを利用して認証を行い、UI 操作には Elisp パッケージ
Transient
、フォーマット変換には
ox-gfm
を統合することで、ユーザーがエディタから直接 Issue のメタデータをコピーし、Org モードでコメントを作成し、ブラウザウィンドウを開くことを可能にしている。これらすべての機能は JSON 解析ロジックで約 20 行以内で実装されている。「可変計算(malleable computing)」の原則に従い、Emacs を再起動することなしに迅速なプロトタイピングを可能にしている。2 時間半という初期開発フェーズとコードのリファクタリングを経て、最終製品は個人の利用に最適化された約 400 行の Lisp から構成されている。このアプローチは、伝統的な大衆向けソフトウェア("N")とは対照的に、最小限の計画で堅牢なツールを個人ニーズのために構築することは非常に実現可能であることを示している("1")。

Summary:

著者は、大量導入向けのスケーラビリティよりも速度と簡潔さを優先する軽量のツール

fj
を使用し、Emacs 内で GitHub の Issue 管理を自動化することに成功した。このソリューションは複雑なローカルサーバーを避けるために既存の
gh
コマンドラインユーティリティを利用して認証を行い、UI 操作には Elisp パッケージ
Transient
、フォーマット変換には
ox-gfm
を統合することで、ユーザーがエディタから直接 Issue のメタデータをコピーし、Org モードでコメントを作成し、ブラウザウィンドウを開くことを可能にしている。これらすべての機能は JSON 解析ロジックで約 20 行以内で実装されている。「可変計算(malleable computing)」の原則に従い、Emacs を再起動することなしに迅速なプロトタイピングを可能にしている。2 時間半という初期開発フェーズとコードのリファクタリングを経て、最終製品は個人の利用に最適化された約 400 行の Lisp から構成されている。このアプローチは、伝統的な大衆向けソフトウェア("N")とは対照的に、最小限の計画で堅牢なツールを個人ニーズのために構築することは非常に実現可能であることを示している("1")。

本文

GitHub Issue 管理の自動化:Elisp とマレブルコンピューティングの実践

私は GitHub の Issues を利用していますが、個人的には Org Agenda で状況を追跡することを好みます。両者の整合を取るため、以前は「タイトル」と「説明」を手動でコピーして Org ファイルに転記していました。

この手作業による二重構造こそが、重複した Issue を Emacs 内のスケッチブック として活用する機会となりました。Org のノート領域だけでなく、GitHub で共有したいコメントの作成エリア(ステージングエリア)としても機能しました。しかし、この手動のコピー作業は長く続き、やがて 「これを自動化すべきだ」 という思考が避けられないようになりました。

本稿では、その自動化の実践を紹介すると同時に、Emacs のマレブル・コンピューティング能力の一側面を解説します。これは私の前掲論文「Emacs において、すべてのものはサービスのごとく見える」への追跡編です。

要件定義

自動化試みの本質的な問いは、**「何を達成したいのか」「何を避けたいのか」**の二点にあります。

達成すべき目標(What do I want done?)

以下の機能を Org モードから実現させたいと存じます:

  • GitHub Issue の追跡: Org Agenda で GitHub Issue(タイトル、説明文、メタデータなど)を容易にコピーする。
  • コンテキストスイッチの最小化: Emacs での作業を主軸とし、ブラウザとの切り替えを減らす。
  • 思索表現: Org シンタックスを用いて思考を表現する。
  • 新規作成: 新しい GitHub Issue を作成する。
  • 認証処理: GitHub の認証処理を直接扱う必要がないこと。
  • ブラウザ表示: Emacs から直接、ブラウザで特定の GitHub Issue を開く。

避けるべき事項(What do I not want to do?)

以下の点に過度な労力をかけたくないと考えます:

  • 本格的な GitHub CLI のインストールや記述を避ける。
  • ローカル環境(Emacs)とサーバー端(GitHub)の同期論理に深く関与する。
  • 多くの時間を割くこと(理想は一日以内、最長でも一週間以内で動作可能にする)。

仕様設計

次に**「どのように構築すべきか」**という問いを解決します。 今回の試みでは、既存の GitHub コマンドラインユーティリティ

gh
を活用することにしました。

gh
を利用するメリット

  • 認証処理の委譲: Emacs から直接認証設定をいじる必要がなく、
    gh
    に委譲できる。
  • REST サービスとしての扱い: Emacs は
    gh
    を GitHub に対する REST サービスとして扱うことができる。

必要なツールとパッケージ

実装には以下の組み合わせを使用しました:

  • UI: メニュー表示には
    Transient
    パッケージ、可変ピッチテーブルには
    vtable
    パッケージ。
  • フォーマット変換: Org から Markdown へは
    ox-gfm
    、Markdown から Org へは Pandoc
  • データ処理:
    gh
    の JSON レスポンス解析は、Elisp 標準機能による JSON サポート。

実装

上記の実装はパッケージ

fj
(ソースコード:
fj.el
)として公開されています。 特に注目すべきは、以下の関数です。これは
gh
を通じて GitHub の Issue を取得し処理するロジックを担っています。

(defun fj-request-issues (repo)
  "REPO の Issue リクエストを行う。"
  (let* ((fields fj-browser-fields)
         (cmd-list (list "gh"
                         "--repo"
                         (format "'%s'" repo)
                         "issue"
                         "list"
                         "--limit"
                         (number-to-string fj-request-issue-count)
                         "--json"
                         (string-join fields ","))))
    (json-parse-string (shell-command-to-string
                        (string-join cmd-list " "))
                       :null-object nil)))

コードの構造と抽象化

この関数は約 20 行で完結しており、高い抽象化度合いを実現しています:

  1. リクエスト構成:
    cmd-list
    gh
    実行時の引数(コマンドライン)を定義。
  2. ディスパッチ:
    shell-command-to-string
    が上記リクエストを実行し結果を取得。
  3. デシリアライズ:
    json-parse-string
    で JSON レスポンスを Elisp ハッシュテーブルへ変換。

取得したハッシュテーブルは vtable に埋め込まれ、以下の機能を提供します:

  • 補助ウィンドウで Issue の詳細情報を表示・更新。
  • Issue リストのナビゲーション。

これらにより作成された複数のコマンドは、

Transient
メニューからアクセス可能です。

マレブルコンピューティングに関する考察

Elisp は動的なプログラミング言語であるため、ソースコードが利用可能であれば、リスタートなしにプロトタイプ化が可能です。これに対し、静的言語や拡張性に欠けるツールでは「編集−コンパイル−デバッグ(E-C-D)」のサイクルを繰り返す必要があります。

Emacs はコード評価のために多数の方法を提供し、ロードされた間隔離島性がないため、即興的な協調動作が可能になります:

  • スクラッチバッファ
  • Elisp ファイル
  • Org ソースブロック
  • IELM REPL
  • Eshell
  • eval-expression
    M-:

また、Emacs から shell 経由でアクセス可能なあらゆるプログラム(

gh
,
pandoc
など)もこの柔軟性を拡張します。

開発効率と成果

高い抽象化により必要なコード量は極めて少なく抑えられています。執筆時点での

fj.el
は以下の通りです:

github.com/AlDanial/cloc v 2.08  T=0.01 s (146.4 files/s, 76550.1 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Lisp                             1             93             38            392
-------------------------------------------------------------------------------
  • 目標機能の実装: GitHub から Issue をリクエストし表示する基本動作には約 2 時間半
  • 全要件の達成: 残りの時間で当初のすべての要件をカバー(以降はリファクタリングのみ)。

関心のある方は

fj.el
をご検討ください。ここではソフトウェア工学とマレブルコンピューティングについて思索的な考察を加えます。

ソフトウェアのスコープ:比喩と逸話

90/90 の法則とパレートの法則

  • 90/90 の法則: 最初の 90 パーセントのコードには、開発時間の 90 パーセントが費やされ、残りの 10 パーセントのコードにまた 90 パーセントが使われる。
  • パレートの法則(80/20): 製品の機能のうち 20%しか使われないのに、それを必要とするユーザーは全体の 80%に上る。

結論: 望む機能(BIBO 安定性=有界入力で有界出力)が「20%のデリバラブル」に含まれる場合、結果を早く得ることができます。

サイノフスキー氏の論文への示唆

Sinofsky 氏の "What is Software Bloat, Really?" に記述されているように、Microsoft Office などの製品では機能セットに関する製品定義は製造者側に重荷があります。ユーザー調査では「Office の大部分が利用されていますが、誰も製品全体を利用しているわけではありません」と結論づけられています。

供給(Supply)vs 需要(Demand)の境界:

  • 供給側ソフトウェア(例:MS Office): 製造者が広範な観衆に応えるため、機能セットと開発スコープが広大になる。優先順位は製造者に委ねられる。
  • マレブルなソフトウェア: 製造者は「建材(ビルディングブロック)」を提供し、消費者自身がツールを構築する代理権を持つ。既存のコード(Elisp など)を組み合わせて新たな挙動を生み出す。

役割の変容: マレブルなソフトウェアでは、製品定義の重荷が製造者から消費者へ移り変わります。消費者は建材から新しいツールを構築する際、自らがその責任を負うことになります。

1 人用か N 人用の構築か

「1 人用(Build for 1)」と「N 人用(Build for N)」のスコープは桁違いです。他者のためにコードを書く場合(N=2)、以下のような懸念事項を扱う必要があります:

  • エラーハンドリング
  • コードの保守性・モジュール化・再利用可能性
  • ドキュメント、ユニットテスト、インテグレーションテスト
  • パッケージング・配布

マレブルな技術の良い面であり同時に悪い面の「十分よい(just good enough)」能力は、「1 人用」の構築を促します。「私の環境で動く(it works for me)」ことが勝利宣言となることが多いためです。

多くの供給側ソフトウェアでは N 人用が必須ですが、マレブルな技術を用いる場合、N 人用かどうかは選択問題となります。

マレブルなソフトウェアとユーザーの代理権

fj
の事例に戻ると、「1 人用」での構築による恩恵は明らかです。Emacs 内から私は以下を容易に行えます:

  • 指定されたリポジトリの GitHub Issues を閲覧。
  • GitHub Issue を Org ファイルへコピー。
  • Org シンタックスを用いて新しい GitHub Issue を作成。
  • ブラウザで GitHub Issue を開く。

Emacs 内に

fj
を実装したのは比較的容易でした。なぜなら、Elisp パッケージや外部アプリ(
gh
,
pandoc
)を再利用できたからです。一日以内に望むツールを手に入れることができました。

特権的な材料も要求せず、許可も不要です。マレブルな技術による個別的なエンパワーメントは、統合の少ないサイロ化されたアプリケーションを操作する作業と比較して、深い解放感をもたらします。

結びの言葉

本稿では、Emacs のマレブルコンピューティング能力について思索し、

fj.el
を通じてコードとプログラムの再利用を行うことで新たな挙動を創出する方法を示しました。

適切に測定された期待値(要件、機能セット、観衆)の下、マレブルな技術はもはや不可能だったツールの構築を可能にします

同じ日のほかのニュース

一覧に戻る →

2026/07/23 2:30

ターレンス・オのチャートプとの対話:ヤコビアン仮定に対する反例について

## Japanese Translation: 该平台主要通过安全的登录提供个性化体验。经过身份验证后,用户将获得量身定制的响应而非通用回答,并可访问由其保存的聊天历史所告知的答案。关键功能包括直接在界面中创建自定义图像,以及上传外部文件以实现与工作流的无缝集成。通过将创意工具与基于记忆的个性化相结合,该平台将标准效用转化为自适应环境,从而简化任务,并在无需重复设置的情况下利用之前的互动。

2026/07/23 2:20

GigaToken:言語モデルのトークナイゼーション速度が約1,000倍高速化

## Japanese Translation: Gigatoken は、HuggingFace および tiktoken などの標準的なトークナイザーの超高速で即座に置き換え可能なものとして機能し、ネイティブ API を通じてデータ処理を革命化します。これは、マルチスレッド Rust プログラミング、SIMD 最適化、キャッシュ階層の改良、分岐の最小化といった高度なエンジニアリング技術によって達成された画期的成果です。ベンチマーク結果では、EPYC 9565 などの高エンド AMD プロセッサ上において、HuggingFace のトークナイザーよりもほぼ 989 倍、tiktoken よりも 681 倍以上の高速化が確認されています。 本ソフトウェアは、Llama 3/4、Qwen、Gemma、Phi-4、DeepSeek、GLM、Nemotron、Kimi K2、Mistral、CodeLlama などの主要な AI モデルをサポートします。スタンドアローン API(最も高速)および HuggingFace または Tiktoken を既存のワークフローで使用するための互換モード(わずかに低速)を備えています。本ツールは現在、Linux ベースのシステム上で AMD EPYC、Apple M シリーズ、または AMD Ryzen チップを使用する際に最適化されたバイト対ペア符号化を用いて最も効果的に動作し、Windows でのサポートは限られています。ユーザーには WSL の使用を推奨します。 今後の計画としては、Python インテグレーションの改良(現在は ABI3 を使用しており、これは内部 API よりもわずかに低速)およびさらなる最適化によるハードウェア互換性の拡大が含まれます。現在知られている制限事項には、API におけるファイルシンクの欠如と SentencePiece 最適化の制限があります。最終的に、Gigatoken は精度を損なうことなく、モデルトレーニングと推論を大幅に高速化するトークナイゼーション時間を劇的に削減することを約束します。研究用途については、@software{roed2026gigatoken...} として引用されるべきです。

2026/07/23 6:00

Safari テクノロジー プレビュー 248 のリリース

## Japanese Translation: Safari Technology Preview リリース 248 が、macOS Golden Gate および macOS Tahoe 向けに公開されており、システム設定 → 一般 → ソフトウェアアップデートから直接更新可能です。本リリースでは、リビジョン 315567@main と 316817@main の間に含まれる WebKit の変更を取り入れており、大幅なパフォーマンス向上と共に重要なアクセシビリティおよび機能強化を達成しました。 主な新機能には、TC39 プロポーザルに基づく JavaScript BigInt Math 機能(`BigInt.pow` および `BigInt.sqrt`)の追加、ES2022 クラスプライベートフィールド/メソッド/アクセッサに対する Web Inspector のサポート拡大が含まれます。アクセシビリティについては、VoiceOver ナビゲーションを大幅に改善し、特に disclosure widgets(hidden="until-found")および古くなった aria-labelledby 値に関する問題を解消しました。メディア再生面では、旋回したコントロールの不具合、iPhone での字幕表示欠落、ストリーム失敗、デバイス方向のバグに対する修正により安定性が向上しています。 ストレージおよび Web API の安定性も改善されました:IndexedDB トランザクションは現在停止されたバックグラウンドトランザクションによってブロックされなくなり、Async Clipboard API の非同期リクエストおよび FileReader の charset 処理が正しく動作するようになりました。セキュリティの回帰問題である Content Security Policy エラーおよび同一ページ内ナビゲーションチェックに関する不具合も解決済みです。また、Digital Credentials エラーコードおよび AbortError の処理に対する修正も含まれています。さらに、開発者は Digital Credentials API を利用し、Web Inspector 文脈内でウォレットペイロードのシミュレーションを行うことができます。