Emacsとgahパッケージによる可塑的なコンピューティング

Emacsとgahパッケージによる可塑的なコンピューティング

可塑的なコンピューティング:ユーザーの主体性を強化する

可塑的なコンピューティング(Malleable computing)とは、ソフトウェアの提供者が硬直した完成品ではなく、ビルディングブロック(構成要素)を提供することで、ユーザーが自身の特定のワークフローに合わせてデジタルツールを適応・再形成できるようにするパラダイムです。広範なオーディエンス向けに機能セットを定義する一般的なソフトウェアとは異なり、可塑的なソフトウェアは、消費者が製品の定義を担うことを可能にし、既存のライブラリやプログラムを再構成して、望ましい動作のサブセットを作成することを可能にします。

このアプローチは、開発の焦点を「一般的なオーディエンス(N)のための構築」から「単一のユーザー(1)のための構築」へとシフトさせます。一人のユーザーのために構築することで、開発者は広範なエラーハンドリング、再利用のためのモジュール化、形式的な配布といったオーバーヘッドを回避し、「十分に実用的な」機能状態に迅速に到達できます。

ケーススタディ:GitHub統合のためのgahパッケージ

gahパッケージは、Emacsにおける可塑的なコンピューティングの具体的な実装例です。これは、特定の摩擦点、すなわちOrg AgendaでのトラッキングのためにGitHubのIssueを手動でOrg-modeにコピーするという問題を解決するために作成されました。

コア要件

フル機能のGitHubクライアントや複雑な同期ロジックのオーバーヘッドを避けるため、gahは以下の目標を持って設計されました:

  • シームレスな統合: GitHubのIssue(タイトル、説明、メタデータ)をOrgタスクとしてコピーする。
  • コンテキストスイッチの削減: Webブラウザではなく、Emacs内でほとんどの操作を実行する。
  • Org構文のサポート: Org構文を使用して思考やメモを表現する。
  • 基本的なGitHub Actions: 新しいIssueを作成し、既存のIssueをWebブラウザで開く。
  • 認証のオーバーヘッド・ゼロ: 認証を既存のシステムツールに委譲する。

技術仕様

gahは、GitHub CLI (gh) をRESTサービスとして活用し、GitHubへの主要なインターフェースとして扱います。このアーキテクチャにより、Emacsは認証を直接管理する必要がなくなります。ツールセットには、いくつかの特化したコンポーネントが含まれています:

  • ユーザーインターフェース: メニューにはTransientパッケージを、データ表示にはVariable Pitch Table (vtable)を使用。
  • 変換: OrgからMarkdownへの変換にはox-gfmを、MarkdownからOrgへの変換にはPandocを採用。
  • データ処理: ネイティブのElisp JSONサポートを使用して、gh CLIからのレスポンスをElispのハッシュテーブルにデシリアライズ。

実装の効率性

実装は驚くほど軽量で、約392行のコードで構成されています。この効率性の鍵となる例がgah-request-issues関数です。これは、コマンドリスト、ディスパッチ用のshell-command-to-string、およびデシリアライズ用のjson-parse-stringを組み合わせることで、20行未満でIssueを取得します。

Emacs開発の利点

Emacsは、動的なプログラミング環境としての性質を通じて、可塑的なコンピューティングを促進します。Elispは動的言語であり、ロードされたコード間に隔離がないため、ユーザーはアプリケーションを再起動することなく、実行中のセッション内で動作をプロトタイプ化、評価、オーケストレーションできます。

開発者は、以下を含む様々なインターフェースを使用して反復(イテレーション)を行うことができます:

  • ScratchバッファとElispファイル
  • Org source blocks
  • IELM REPL、Eshell、または eval-expression (M-:)

コミュニティの視点と反論

gahプロジェクトは個人のエンパワーメントの力を示していますが、コミュニティはこのアプローチに関していくつかのニュアンスを指摘しています:

  • 既存の代替手段: 一部のユーザーは、同様のGitHub統合のためにMagit Forgeのような堅牢なソリューションが既に存在することを指摘しています。
  • 「Jank(作り込み不足)」の要因: 可塑的なコンピューティングの柔軟性には、ツールが作成者にとっては機能的であっても、プロフェッショナルなソフトウェアのような洗練さに欠けるという「vibeslop jank」が伴うことがよくあります。
  • スキルギャップ: 可塑的なソフトウェアには一定レベルのプログラミングスキルが必要であり、非技術的なユーザーにとっては「可塑的」であることが「複雑」と捉えられる可能性があります。
  • 同期の課題: 一部の批評家は、ローカル/リモートの同期機能がないツールは、プロフェッショナルな環境では有用性が限られていると主張しています。

「我々エンジニアは、使用するツールが柔軟であることを当然と考えている。ツールが他のオーディエンスにとって扱いやすいものである必要が出てきたときに初めて、それらは制約を受けるようになるのだ。」

最終的に、gahパッケージは、適切な期待値と高レベルの抽象化があれば、ユーザーが1日で非常に特化した機能的なツールを構築できるという概念実証(PoC)として機能しています。これは、隔離された非可塑的なアプリケーションエコシステムでは不可能なことです。

Sources