アセンブリの意味とは?エンジニアが知っておくべき基礎知識
「アセンブリ」は、IT業界や製造業などの専門用語として、さまざまな分野で使われている言葉です。
「会合」や「組み立てる」「部品」という意味が一般的になりますが、IT分野では意味合いが異なります。
また、機械語に近いプログラミング言語の「アセンブリ言語」や、有名な開発環境である.NET Frameworkの用語はプログラミングの根幹に関わる知識です。
この記事では、IT業界で使用される「アセンブリ」を中心に、他の分野の意味についても合わせて解説していきます。
「アセンブリ」の意味とは
「アセンブリ」は英語の「assembly」のことで、Weblio英和辞典では以下のように説明されています。
語源はラテン語
アセンブリの語源はラテン語で「一つのものを何かと合わせる、結合させる」という意味になります。
「部品を集めて組み立てる」といったう意味でよく使用されています。
さまざまな意味を持つ
アセンブリの意味を分野ごとに解説します。
■ 一般的な意味
全工程の中の一部や、システムを構成するパーツの一部という意味を持つ。
■ 学校や議会
学校での集会や、立法府の議会などの「集合」や「会合」の意味を持つ。
大学の入学試験の形式のひとつで、2段階選抜のAO入学試験を「アセンブリ入試」ということもある
■ 医療やバイオテクノロジーの分野
医療機器の組み立てなどの意味で使用する。
また、ゲノム情報解析の工程で、断片配列を繋げて対象ゲノム配列を復元するコンピューター処理のことを「ゲノムアセンブリ」と呼ぶ。
■ 3Dデザインなどの分野
「組み立てる工程」や「組み立てたもの」といった意味で使用される。
■ プログラミングの分野
「アセンブリ言語(アセンブラ言語)」として、機械語に近い低水準のプログラミング言語のことを指す。
「アセンブリ」と「アセンブラ」の違いとは
機械語を人間にわかりやすい言葉に翻訳することを「コンパイル」または「アセンブル」と呼びます。
IT業界でいう「アセンブリ」がプログラミング言語やコードライブラリを意味するのに対し、「アセンブラ」はプログラミング言語を翻訳するプログラムやソフトウェアのことを指します。
ソフトウェアには、以下のような種類があります。
- アセンブラ
- コンパイラ
- インタープリタ
3Dデザイン分野の「アセンブリ」
近年、製造業の間で普及してきた「3Dプリンター」とは、立体の造形物を作り出せるプリンターのことです。
3D-CADなどで作られた設計データを基に、具体的な形に成型することができます。
3D-CADでの「アセンブリ」
3Dプリンターで使用される「3D-CAD」は、寸法の入った図面を3次元で表現する代表的な設計ソフトです。
3D-CADでは、組立品を「アセンブリ」、組立部品を「パート」と呼びます。
また、仕上がりイメージの最終組立品を「トップアセンブリ」、それを構成する部品の集まりを「サブアセンブリ」といいます。
具体的な流れは以下のとおりです。
- パートを組み立てて「アセンブリ」を作る
- 「アセンブリ」同士をさらに組み立てて「サブアセンブリ」を作る
- 「サブアセンブリ」を組み合わせて「トップアセンブリ」を作る
3Dプリンター
3Dプリンターで形状を作る手順を簡単に説明します。
- 3D-CADや3D-CGなどのソフトを使って3次元の形状データを作成します。
- 作成した3D形状データをSTLデータに変換します。
STLというデータ形式は、Standard Triangulated Languageの略で、3次元形状を小さな三角形の集合体に表現するシステムのことです。 - STL形式の3Dデータを、スライサーと呼ばれるソフトを使って3Dプリンターで出力できる形式(Gコード形式)に変換します。
- スライサーで変換したデータをフロントエンドと呼ばれるソフトに読み込ませます。
フロントエンドソフトとは、スライサーで変換したデータを読み込み、3Dプリンターへデータを送信するためのソフトです。 - フロントエンドソフトを使用して、Gコードのデータをプリンターへ送信します。
- プリンターのファームウェアがGコードを解釈したあと、モーターや温度を調整して、準備が整ったら印刷が開始されます。
IT業界の「アセンブリ」とは
IT業界で「アセンブリ」といえば、主にプログラミング言語の「アセンブリ言語(アセンブラ言語)」か、「.NET Framework (ドットネットフレームワーク)」の用語で、コードライブラリのことを指します。
アセンブリ言語
コンピューターが理解できる機械語は、0と1だけの電気信号でできています。
スイッチを入れた状態を【1】、スイッチを切った状態を【0】として、この2つの状態を組み合わせたものを「機械語」といいます。
機械語のままでは人間が読み書きするには難解すぎるため、人間にわかりやすく翻訳するものとしてプログラミング言語が作られました。
この翻訳する工程が少なく、機械語に近い形のものを「低水準言語」と呼びます。
「アセンブリ言語」は、その代表的な低水準言語のひとつです。
プログラマーが使用するプログラミング言語としては、C言語やjava、PHPなどが一般的です。
これらは「高水準言語」と呼ばれています。
プログラマーが命令文を打ち込んでから、コンピューターが命令文を理解するまでの間に、何段階もの翻訳が行われて人間のわかりやすい言葉に変換されています。
初期のコンピューターではアセンブリ言語がプログラミングで主流でしたが、高水準言語の発達により、現在ではコンピューター上でのプログラミングではほとんど使われなくなりました。
現在では、互換性の高さやメモリの節約ができるというメリットから、主に家電製品や、パソコンや携帯電話のハードウェア制御などに使われています。
アセンブリ言語で学ぶプログラムの仕組み
コンピューター内でプログラムが実行される時の流れは、以下のとおりです。
- プログラマーがプログラミング言語でプログラムを記述する
- プログラムをコンパイルして実行ファイルに変換する
- プログラムの起動時に、実行ファイルのコピーがメモリ上に作成される
- CPUがプログラムの内容を解釈し、実行する
以下はアセンブリ言語のプログラム例です。
このサンプルコードは、80386以降のCPUのものです。
アセンブリ言語は、機械語の命令に「ニーモニック」と呼ばれる英語のようなニックネームを割り当てています。
サンプルコードでいうと、「mov」はデータの格納(move)、「add」は加算(addition)の動作を表すニックネームです。
「eax」や「edp」はCPUの内部にあるレジスタの名称です。
レジスタはメモリの一種で、種類によって名前と役割が決まっており、それぞれが担当する種類のデータを格納します。
演算などの処理を行いたい場合は、メモリ上で処理を行うことができません。
レジスタに値を格納することで、演算などを行うことが可能になります。
[edp-8]などの数値の部分は、メモリの格納場所のアドレスを意味します。
メモリにアクセスするためには、そのアドレスを指定する必要があります。
高水準言語でプログラミングする場合は、変数を用いることで簡単にメモリにアクセスが可能です。
しかしアセンブリ言語の場合、アドレスを指定しなければメモリにアクセスできません。
C言語のプログラミングの時に、ポインタを用いてメモリにアクセスする方法と同様のイメージです。
「アセンブラ」の役割
プログラミング言語を機械語に翻訳するプログラムやソフトウェアの名称として、「アセンブラ」があります。
「アセンブラ」の役割や、似たような役割を持つ「コンパイラ」や「インタープリタ」との違いについて説明します。
アセンブラ
「アセンブラ」は、直接ハードウェアを制御するマイクロコンピューターの世界で使われることが多い翻訳プログラムです。
メモリの使用量が少ないので、知識と技術があればコンピューターの性能を最大限に活かすことができます。
一例として、「LABELと書かれた場所へ移動しろ」という命令文は、機械語(14ビット)で書くと「10 1000 0001 0000」となりますが、これをアセンブラにかけると「GOTO LABEL」というアセンブリ言語に翻訳されます。
コンパイラ
「コンパイラ」は、C言語やJavaなどの高水準言語に使われることの多い翻訳プログラムです。
言語ごとに独自のコンパイラが用意されており、中には実行効率の悪いものが存在します。
しかしコンピューター自体の性能が発達してきたため、特に問題にはなりません。
プログラミングによる開発効率がよいので、大規模なシステムで使われることが多いソフトウェアです。
インタープリタ
「インタープリタ」は、言語翻訳の機能を内蔵させて、プログラム言語を直接コンピューターが実行する仕組みとなっています。
プログラムを1行ずつ変換しながら実行していく方式のため、速度が遅いのが欠点ですが、バグを見つけやすいというメリットもあります。
簡単で便利なため、個人用や小規模の開発に向いているプログラムです。
.NET Framework(ドットネットフレームワーク)
Microsoft .NET Framework(マイクロソフト ドットネット フレームワーク)は、マイクロソフトが開発したWindows用のアプリケーション開発・実行環境です。
.NET Frameworkは、「共通言語基盤 (Common Language Infrastructure:略してCLI)」と「共通言語ランタイム(Common Language Runtime:略してCLR)」という中間言語インタープリタを持っており、あらゆるプログラム言語を実行できます。
.NET Framework用語での「アセンブリ」は、コンパイル済みの実行コードのことで、ソフトウェアの配置やバージョン管理の際に使うプログラム単位を指します。
C言語とその種類
「C言語」は、1972年にAT&Tベル研究所のデニス・リッチー氏が主体となって開発したコンパイル型の汎用プログラミング言語です。
他の現代的なプログラミング言語に比べると抽象度は低く、むしろC言語はアセンブリ言語に近い存在ともいえます。
対応する機器の範囲が広く、自動車や家電の組み込み用マイコンから、スーパーコンピューターまでさまざまな機械で使用されています。
C++(シープラスプラス)
「C++(シープラスプラス)」は、1983年にベル研究所のコンピューター科学者のビャーネ・ストロヴストルップ氏が開発した、C言語の拡張版です。
日本では略して「シープラプラ」、または「シープラ」と呼ばれています。
C言語にオブジェクト指向を追加した仕様となっています。
C#(シーシャープ)
「C#(シーシャープ)」とは、マイクロソフト社が2000年に発表したプログラミング言語です。
C#は「C++」と「Java」をもとに作られた全く別のプログラミング言語で、C++はC言語との互換性がありますが、C#はC言語やC++と互換性がないので一緒に使うことはできません。
■ .NETを使ったプログラミング例(C#)
.NET Frameworkの環境を使用した、C#言語のプログラミング例を紹介します。
以下は「Hello World」を表示するソースコードです。
C#では「クラス」という概念を用いて、ソースコードを書きます。
基本的に「クラス」では、オブジェクトが持つ属性やメソッドなどを定義します。
このサンプルコードで解説すると、「Hello」というクラスに「Main」というメソッドを定義していることになります。
1行目の「Hello」はクラス名です。
「class」は以降の{ }で囲まれたコードが、ひとつのクラスであることを意味します。
3行目の「static void Main() 」は「Main」というメソッドです。
「static」はMainメソッドがHelloクラスに対して、1対1の関係で存在することを意味します。
また「void」は、Mainメソッドが戻り値を持たないことを示します。
5行目のソースコードで、画面に「Hello, world!」と表示します。
「アセンブリ」は学んでおくべき知識
「アセンブリ」は業界によってさまざまな意味を持つ言葉です。
ITの分野では、プログラミングの歴史と仕組みに深い関わりのある言葉のため、知っておいて損はありません。
コンピューターがプログラムを動かす仕組みや、代表的な開発環境である.NET Frameworkを知ることは、新しいプログラム言語の習得の際にも役立ちます。
IT業界や製造業に従事している人であれば、「アセンブリ」に関する知識を深めることで、自身のスキルアップや業務の幅が広がることが期待できます。
- 「アセンブリ」はさまざまな分野で使われている言葉である
- 「アセンブリ」は、学校や議会では「集合」や「会合」の意味になる
- 医療の分野では、医療機器の組み立てを「アセンブリ」という
- 「アセンブリ」は、3D-CADなどの分野では「組み立てる工程」の意味になる
- プログラミング言語では「アセンブリ言語(アセンブラ言語)」が有名
- 「.NET Framework (ドットネットフレームワーク)」の「アセンブリ」は、コードライブラリのことを指す