つの重要なポイント
### 1. Emacs: 強力で拡張性のあるテキストエディタ
> Emacsは、正午の太陽が星々を消し去るのと同じように、他の編集ソフトウェアを凌駕する。それは単に大きくて明るいだけでなく、他のすべてを消し去る。
**比類なき多用途性。** Emacsは単なるテキストエディタではなく、完全なコンピューティング環境である。110万行以上のEmacs Lispコードを持ち、基本的なテキスト編集からプログラムのデバッグ、メールの読み取り、ディレクトリの閲覧、さらには記号代数問題の解決まで、幅広い機能を提供する。
**独自のユーザー体験。** 伝統的なエディタとは異なり、Emacsは一度起動してそのまま使い続けることを前提として設計されている。ユーザーは単一のセッション内で複数のファイルを編集でき、作業をすぐにアクセス可能な状態に保つことができる。インターフェースは以下の3つの主要な概念に基づいている:
- フレーム:グラフィカルユーザーインターフェースにおけるウィンドウのEmacs用語
- ウィンドウ:フレームの中のコンテンツ表示用の区画
- バッファ:編集可能なテキストを格納するコンテナで、ファイルに関連付けられている場合もあるし、そうでない場合もある
**すべてが編集可能。** Emacsの最も強力な機能の一つは、ヘルプメッセージ、検索結果、ディレクトリリストなど、ほとんどすべてのコンテンツが編集可能なバッファで表示されることである。これにより、ユーザーは情報を柔軟に操作し再利用することができ、複雑なテキスト操作に特に適している。
### 2. Emacsのアーキテクチャ:Lispを核としたモデル・ビュー・コントローラーパターン
> Emacsのアーキテクチャは、インタラクティブアプリケーションで広く使用されているモデル・ビュー・コントローラーパターンに従っている。
**アーキテクチャの内訳。** Emacsのアーキテクチャは、以下の3つの主要なコンポーネントに分けられる:
- モデル:テキストと関連メタデータを保持するバッファ
- ビュー:画面を更新する再表示エンジン
- コントローラー:ユーザー入力を処理しモデルを操作するEmacs Lispコード
**モデルとしてのバッファ。** Emacsのモデルの中心はバッファであり、改行文字で行末を示す単純なフラットな文字列である。バッファは以下の操作をサポートする:
- テキストの挿入と削除
- 部分文字列の抽出
- 正確な文字列や正規表現の一致検索
- 複数の文字セットのサポート
- 変更を元に戻すためのアンドゥログ
**自動再表示。** Emacsのビューコンポーネントである再表示エンジンは、Lispコードからの明示的な指示なしに画面を自動的に更新する。これにより、プログラマーはモデルの操作に集中でき、表示の更新を気にする必要がない。
### 3. Emacs Lisp: Emacsの拡張性とカスタマイズを支えるエンジン
> Emacs Lispはインタラクティブである。定義や式をEmacsバッファに入力し、即座に評価することができる。
**強力な拡張言語。** Emacs LispはEmacsの拡張性の核であり、以下の主要な特徴を持つ:
- 低い官僚主義:小さなカスタマイズは簡単に.emacsファイルに追加できる
- インタラクティブな開発:変更を再起動せずに行い評価できる
- 一級市民:ユーザーが書いたLispコードは組み込みコードと同じアクセス権と特権を持つ
- 完全なプログラミング言語:大規模で複雑なプログラムを書くのに適している
- 安全性:バグのあるLispコードがEmacsをクラッシュさせることはなく、実験を奨励する
- 簡単なドキュメント化:関数には即時ヘルプのためのドックストリングを含めることができる
**欠点とトレードオフ。** その力にもかかわらず、Emacs Lispにはいくつかの制限がある:
- モジュールシステムがない:パッケージ間の競合を避けるために命名規則が使用される
- グローバルな可視性:パッケージ内のすべての関数が他のパッケージから見える
- オブジェクトシステムがない:これにより、特定のプログラミングパラダイムがより困難になる
### 4. 機能の増殖:Emacsの設計における強み
> Emacsの機能の増殖は、そのアーキテクチャの直接的な結果である。
**機能成長サイクル。** Emacsのアーキテクチャは機能の有機的な成長を促進する:
1. 低い参入障壁により新しいアイデアの実装が容易
2. 個人的なカスタマイズが.emacsファイルに追加される
3. 人気のあるカスタマイズが共有可能なパッケージに成長
4. 最高のパッケージが標準のEmacsディストリビューションに組み込まれる
**複雑さの管理。** 絶え間ない機能追加にもかかわらず、Emacsは管理不能になることを避けている:
- ユーザーインターフェースの複雑さは、ユーザーが機能を徐々に発見できるようにすることで軽減される
- Emacsを単一のモノリシックなものではなく、パッケージの集合体として扱うことで、保守性が保たれる
- Lisp言語は抽象化の境界として機能し、コアのCコードが互換性を壊すことなく進化できる
**コミュニティ主導の開発。** Emacsの機能の成長は主に草の根のプロセスであり、ユーザーの興味とニーズを反映している。これにより、新しい機能が本当に役立ち、標準ディストリビューションの一部になる前に十分にテストされることが保証される。
### 5. Emacsと他のアーキテクチャの比較:EclipseとFirefox
> Eclipseのアーキテクチャは、プラグインがほぼすべての重要な機能を提供するという点で、開放的である。
**Eclipse:強力だが複雑。** Eclipseは広範な機能を提供するプラグインアーキテクチャを持つが、以下の欠点がある:
- プラグイン開発は安全ではなく、バグがシステム全体をクラッシュさせる可能性がある
- プラグインを書くには複雑なインターフェースに対処する必要がある
- 簡単な拡張でも多くのボイラープレートコードが必要
**Firefox:中間的な立場。** FirefoxのアーキテクチャはEmacsといくつかの類似点を持つ:
- JavaScriptを使用し、Emacs Lispのようなインタープリタ型の動的言語を使用
- 自動表示管理を提供
- 拡張のインクリメンタルな開発を可能にする
**Emacsの利点。** Emacsのアーキテクチャは、力とシンプルさの独自の組み合わせを提供する:
- 拡張のための安全な実行環境
- 簡単なカスタマイズのための低い参入障壁
- 複雑で完全な機能を持つ拡張へのスケーリング能力
- 組み込み機能とユーザー作成機能の一貫したインターフェース
### 6. ユーザーインターフェースにおける合成可能性の力
> あるコマンドの結果を別のコマンドの入力として使用するのはどれほど簡単か?インターフェースのコマンドは互いに合成できるか?それとも結果が表示された時点で行き止まりになってしまうのか?
**Emacsの合成可能なインターフェース。** Emacsはユーザーがコマンドの出力を組み合わせ再利用することを得意とする:
- すべてのコンテンツが編集可能なバッファで表示される
- 標準のテキスト操作コマンドがすべての種類のコンテンツに適用される
- あるコマンドの結果を簡単に別のコマンドの入力として使用できる
**合成可能性の利点。** このアプローチは以下の利点を提供する:
- データと対話する際の柔軟性の向上
- 単純なビルディングブロックから複雑なワークフローを作成する能力
- システムの新しい使い方を発見する実験と発見を奨励
**他のシステムとの比較。** Microsoft Visual Studioなどの多くの現代的なアプリケーションは、ユーザーがコマンドの出力と対話する方法を制限し、柔軟性と創造的な問題解決の可能性を減少させる。
### 7. 拡張言語とプラグイン機能の評価
> 拡張言語はアプリケーションのほとんどの新機能を実装するための好ましい方法か?
**拡張性を評価するための重要な質問:**
1. プラグインが使用できるインターフェースは何か?
2. それらは迅速な開発を可能にするほどシンプルか?
3. 開発者は問題領域に近い高い抽象レベルで作業できるか?
4. アプリケーションのデータはバグのあるプラグインコードからどのように保護されているか?
**Emacsのアプローチ。** Emacsはこれらの領域で優れている:
- Emacs Lispはほとんどの新機能を実装するために使用される
- 拡張言語はEmacsの内部機能に完全にアクセスできる
- Lispの高い抽象レベルは迅速な開発を可能にする
- Lispインタープリタは安全な実行環境を提供する
**一級の拡張の重要性。** アプリケーションの拡張言語が強力でよく統合されている場合、それはユーザー作成の機能の活気あるエコシステムを奨励する。これにより、アプリケーションの元の作成者が想像もしなかった予期せぬ革新的な使用法が生まれる可能性がある。
Last updated:
レビュー
『Beautiful Architecture』は賛否両論の評価を受けており、平均評価は3.41/5である。読者の中には、ソフトウェアアーキテクチャの原則と様々なプロジェクトからの実例を包括的にカバーしている点を称賛する者もいる。業界の専門家からの洞察や、取り上げられているトピックの幅広さを評価する声も多い。しかし、一方で、章ごとの品質の一貫性の欠如、図の不足、時には情報が古いといった批判もある。内容が冗長で深みが足りないと感じる者もいれば、アーキテクチャの決定やトレードオフに関する多様な視点を重視する者もいる。本書の構成は独立したエッセイから成り立っており、これが強みでもあり弱みでもあると見なされている。