ソフトウェア・アーキテクチャ、アプリケーション・アーキテクチャって、何を指すの?何か違うの?


そもそもアーキテクチャってなんなの?ということを、前の記事「アーキテクチャ」って、何を指すの?で少し整理しました。
このポストでは、アーキテクチャについて調べている時に違いがよくわからなかったこの2つの単語について整理します。

前の記事で記載したように(私の理解になりますが)、アーキテクチャという単語は「ある程度複雑な物事を指す単語と組み合わせて、それらの「構成方式」を意味」します。

ということで、ソフトウェア・アーキテクチャ、アプリケーション・アーキテクチャというのは、それぞれソフトウェア、アプリケーションの構成方式(具体的な物ではなく、組み合わせ方、組み立て方というような抽象的なもの)を指すということになります。

ソフトウェア、アプリケーションってそもそも何だっけ…ということを考えつつ、それぞれの言葉が何を指すのか、違うものなのかを考えたいと思います。

ソフトウェア、アプリケーションって何だっけ

ソフトウェア

前の記事に続き、大辞林 第4版を参照します。

①コンピューター-システムに関係するプログラム。システムの運用に関する文書化された情報を含めることもある。ソフト。
②映像・音楽・マルチメディアなどの作品
③特にハードウェアに対して、知識や思考による産物を集積したもの。

ソフトウェアエンジニアリングの文脈で語られるときは、およそ①の前半の意味として捉えてよいのではないかと思います。

また、『Clean Architecture 達人に学ぶソフトウェアの構造と設計』にはこのような記述があります。

ソフトウェアの1つ目の価値は「振る舞い」だ。プログラマは、マシンがステークホルダーのためにお金を生み出したり節約できるように、マシンに振る舞いを与えるために雇用されている。
(中略)
ソフトウェアの2つ目の価値は「ソフトウェア」という言葉に関係している。この言葉は「ソフト」と「ウェア」の複合語だ。「ウェア」は「プロダクト」を意味する。「ソフト」は……そう、ここに2つ目の価値がある。
 ソフトウェアは「ソフト」になるように考案されたものだ。マシンの振る舞いを簡単に変更する手段になることを目的としたものである。マシンの振る舞いを簡単に変更したくないときは、それを「ハード」ウェアと呼んだ。
 上記の目的を達成するには、ソフトウェアはソフトでなければいけない。つまり、簡単に変更できなければいけない。

2つ引用しましたが、内容をまとめると、「ソフトウェアは、コンピューターシステムに関係するプログラム。マシンに振る舞いを与えるもので、振る舞いを簡単に変更するためのもの」ということになるでしょうか。
(個人的な話になりますが、引用部の最後の「ソフトウェアはソフトでなければいけない。つまり、簡単に変更できなければいけない。」という部分は、普段仕事している時にもよく浮かぶ一文です。シンプルでかっこいい一文だなと思います)

ソフトウェア・アーキテクチャというと、そうしたプログラムの構成方式ということになります。

アプリケーション

コトバンクのASCII.jpデジタル用語辞典から引用します。アプリケーションの項目には、ワープロ・ソフト、表計算ソフト、画像編集ソフトなど、作業の目的に応じて使うソフトウェアとあります。
OS、ドライバー、ファームウェアなど、コンピューターの制御に使われるソフトウェアをシステム・ソフトウェアというとあるように、コンピューターの制御をシステム・ソフトウェアが行い、その上でやりたいことをするために"応用"(=アプリケーション)するのがアプリケーション(・ソフトウェア)ということになります。
なので、アプリケーションは、ソフトウェアをより狭めた概念です。

アプリケーション・アーキテクチャは、ソフトウェアの中でも、特にアプリケーション・ソフトウェアのアーキテクチャということになります。

ソフトウェア・アーキテクチャ、アプリケーション・アーキテクチャの違い

ソフトウェアは、マシンを動かすためのプログラム全般。アプリケーションは、ソフトウェアの中でもより作業の目的に特化した、応用的なソフトウェアという違いがありました。

もちろんソフトウェア・アーキテクチャとアプリケーション・アーキテクチャと言った時に、それを言う人ごとに指すものは異なるでしょうけれど、ソフトウェアとアプリケーションの違いから、大まかにこうした違いがありそうです。

  • ソフトウェア・アーキテクチャはソフトウェア全般の構成方式。アプリケーション・アーキテクチャはソフトウェアの中でもユーザーが利用するソフトウェアについての構成方式。

ソフトウェア・アーキテクチャと言った時の方が、より抽象的にソフトウェア全般のアーキテクチャについて語っていて、アプリケーション・アーキテクチャと言った時には少し具体的な、ユーザーインターフェースなんかも含んだアーキテクチャ(つまり、ユーザーインターフェース等も含めてソフトウェアをどう構成するか)について語っている…という感じでしょうか。
前述の通り、その文章を書いた人、その言葉を発した人が何をイメージしているか、意図しているかというのは文脈や人によって異なりますが、このように一度イメージを持つことで、その文章や会話への理解は深まるのではないかと思います。