ソース‐コード【source code】
ソースコード(そーすこーど)(yen loan)
基本ソフト(OS)やアプリケーションソフトなどのコンピュータプログラムを開発するにあたって、その動作のすべてを記述したもの。通常、人間が読み書きできるテキストファイルの形式で保存される。
ソースコードで使われる言語は人間には意味が分かるが、コンピュータはそのままでは理解することができない。そこで、ソースコードを機械語に翻訳して、コンピュータが理解できる形式に変換したものがOSやアプリケーションソフトとして配布される。
一般に、機械語は人間にとって解読が不可能であるため、開発者がソースコードを公開しない限り、コンピュータプログラムの詳細な設計図を知ることはできない。最近では、ソースコードを公開しないマイクロソフトの開発手法に対して、ソースコードを公開するリナックスなどの「オープンソース」と呼ばれる開発手法が広がりを見せている。
マイクロソフトのOS「ウィンドウズ」のソースコードが、厳重に管理されているにもかかわらず、インターネットに流出していることが明らかになった。マイクロソフトからソースコードが提供される特別な契約を結び、アプリケーションソフトを開発していた会社の関与が疑われている。
(2004.02.16掲載)
ソース・コード
ソースコード
実行コードの元(ソース)となるプログラムのこと。コンピュータが直接実行できるのは、数値の連なりからなる機械語だけであり、実行コードは一般に機械語で構成される。しかし機械語は人間にとって分かりにくく、作成や保守が難しい。そのため、より人間に理解しやすい形式でプログラムを記述し、それをソフトウェアで処理して機械語に翻訳する開発方式が一般に採用される。この人間に理解しやすい形式で記述されたプログラムがソースコードである。
ソースコードがあれば、プログラムの動作を理解したり、再利用や改良を加えるなどの作業が容易になる。ソースコードを広く公開し、さらに改変や再配布を許可するなどの一定の要件を備えたソフトウェアを「オープンソースソフトウェア」と呼ぶ。オープンソースソフトウェアについては、Open Source Initiative(OSI)という非営利団体が定義を設けている。
関連見出し
オープンソースソフトウェア
フリーソフト
関連URL
Open Source Initiative(http://www.opensource.org/)

ソースコード
【英】source code, source program
ソースコードとは、計算機を動作させる実行形式のプログラムの元となる、プログラミング言語の記述仕様に従って記述された文書のことである。
計算機は、機械語と呼ばれる中央処理装置が直接解釈できる命令を実行することによって動作する。しかし、人間にとって、機械語を扱うことは非常に難しい。そのため、プログラミング言語を用いてソースコードの命令を記述し、そのソースコードを機械語で書かれた実行形式のプログラムに変換してから計算機に与える、という手順がとられている。
プログラムは、多くの場合、コンパイルを経て生成されたネイティブの機械語の状態で実行される。コンパイルされる前のソースコードはテキスト形式のデータであり、テキストエディタなどで読むことができるが、実行形式のプログラムはバイナリ形式であり、テキストエディタなどでは読むことができない。また、コンパイルを経る手順の他にも、ソースコードを逐次、機械語に変換しながら実行するインタープリタ形式と呼ばれる場合がある。インタープリタ形式は、インタープリタ型言語と呼ばれる種類のプログラミング言語において用いられる形式である。この場合は、実行形のプログラムがすなわちソースコードであるということになる。
あるアプリケーションプログラムを構成するソースコードは、通常は、モジュールごとに複数のテキストファイルに分割されている。個々のファイルにおいて記述されるプログラムコードは、使用するプログラミング言語に応じて区別され、それぞれのプログラミング言語が規定する文法に基づく命令文などが記述されている。文法通りに記述されているソースコードは、それぞれの言語ごとに用意されているコンパイラやインタープリタによって処理される。ソースコードがコンパイルされると、ネイティブの機械語(オブジェクトコード)が出力され、リンカによって実行ファイルに変換される。
商品として有償で提供されているソフトウェアの多くは、利益を逸しないためなどの理由で、ソフトウェアの改変や複製が不可能な状態で提供されている。このようなソフトウェアはプロプライエタリソフトウェアと呼ばれるが、その多くは、ソースコードを提供せずに機械語で書かれた実行形式のプログラムだけを配布することで複製などを不可能にしている。
プロプライエタリソフトウェアとは逆に、プログラムを誰でも利用したり改変や改良を加えたりできるように、ソースコードが敢えて公開されているソフトウェアは、オープンソースソフトウェア(OSS)と呼ばれている。
また、Webページの構造を記述しているHTMLやXHTMLなどの文書のソースコードについては、Webブラウザの機能を用いたりファイルをダウンロードしたりすることで簡単に見ることができる。
ソースコードは、プログラムの直接的な元となる文書であり、人間によって改良、変更などの手が加えられる重要な文書である。そのため、ソースコードの可読性が高いことが重要視されている。可読性を向上させるための約束事は、コーディング規約などと呼ばれており、それぞれの組織やプロジェクトごとにあらかじめ設定される。プログラミング言語の種類によってもコーディング規約の内容は異なるが、コーディング規約として示される具体的な例としては、インデントの用い方をはじめ、変数や関数名、クラス名の命名方法、あるいは括弧の使い方、といった事項がある。なお、コーディング規約を包含するより広義のコーディングのやり方を、プログラミング作法と呼ぶ場合もある。
ソースコード
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/02/11 15:53 UTC 版)
![]() |
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2017年10月)
|
プログラムの実行 |
---|
一般的な概念 |
コードの種類 |
コンパイル戦略 |
有名なランタイム |
|
有名なコンパイラとツールチェーン |
|
ソースコード(英: source code)は、プログラミング言語で書かれた、コンピュータプログラムを表現する文字列(テキストまたはテキストファイル)である。
概要
ソースコードはプログラミング言語を用いて書かれるものであり、各種コンピュータハードウェア(プロセッサ)のための機械語や仮想機械のための中間表現(バイトコード)よりも、人間が読み書きするのに適している。
ソースコードをコンピュータがどのように処理するかは、そのプログラミング言語の処理系によってさまざまである。与えられたソースコードをそのまま、インタプリタによって逐次的に実行する処理系もあるし、事前にソースコードをコンパイラによって機械語(またはアセンブリ言語)で書かれたオブジェクトコードに変換し、リンカによってライブラリやリソースと結合して実行可能ファイル(ロードモジュール)を生成し、オペレーティングシステム (OS) がその実行可能ファイルをメインメモリに読み込んでプログラムを実行するケースもある。コンパイル時に機械語には直接変換せず、いったん仮想機械向けの中間表現に変換しておき、実行時コンパイラによってプログラム実行時に環境に合わせた機械語にコンパイルする処理系もある。Pythonのような動的プログラミング言語で書かれたプログラムの一般的な配布形態はソースコードであり、ソースコードを解釈して実行するための言語処理系を実行環境にインストールする必要があるが、PyInstallerのように実行ファイルに事前変換するツールも存在する[1]。
設計から実装へ、というプログラミングの過程(詳細は「プログラミング」の記事を参照)で、ソースコードを記述することを特に指してコーディングという。
ソースコードの量は通例ソフトウェアの規模に比例して増大する。ごく小規模のソフトウェアではソースコードが単一のソースファイルに収まるケースもあるが、大規模なソフトウェアでは通例機能ごとにソースコードを分類し、複数のソースファイルに分散して記述することでソースコードのメンテナンス性を確保する。ソースコードの行数をもとにソフトウェア開発プロジェクトの規模を見積もる手法も存在する。
例
下記のテキストはJavaのコンソールアプリケーションのソースコードの一例である。
public class Main {
/**
* プログラムのエントリポイントとなる main メソッド。
*/
public static void main(String[] args) {
// 標準出力(コンソール)に文字列を出力する。
System.out.println("Hello, Java!");
}
}
Javaで書かれたプログラムはJava仮想マシン (Java VM, JVM) 上で実行されるが、一般的にJavaソースコード自体を直接実行させることはなく、コンパイラによってJavaバイトコードに変換したうえで実行される。例えば上記のテキストを"Main.java"という名前と拡張子を持つテキストファイル(Javaソースファイル)として保存したうえで、ソフトウェア開発キットであるJava Development Kit (JDK) に含まれるコンパイラjavacによってコンパイルする必要がある。コンパイラによって生成されたJavaクラスファイルとコマンドラインツールjarを用いることによってJARファイルを生成する。一般的にエンドユーザー環境に配布されるのはJavaソースファイルではなく、バイトコードなどを含むJARファイルの形態であり、Java Runtime Environment (JRE) がインストールされた任意の環境で実行できるようになる[注釈 1]。
なお、プログラミング言語のソースファイルはテキストファイル形式であり、任意のテキストエディタで閲覧・編集することができるが、テキストに含まれる言語固有のキーワード(あるいは予約語)やコメントなどを認識し、色分けして分かりやすく表示するシンタックスハイライトに対応したコードエディタが使われることが多い。統合開発環境 (IDE) に搭載されているコードエディタは、いくつかの言語のシンタックスハイライトに標準で対応しているほか、設定変更やプラグインの導入によって対応言語を増やすことができるようになっていることもある。
下記は上記のテキストに対してMediaWikiによるシンタックスハイライトを適用した結果である。
public class Main {
/**
* プログラムのエントリポイントとなる main メソッド。
*/
public static void main(String[] args) {
// 標準出力(コンソール)に文字列を出力する。
System.out.println("Hello, Java!");
}
}
プログラミング関連の書籍には説明やサンプル用のソースコードまたは疑似コードが掲載されているが、モノクロ印刷の都合上、色によるシンタックスハイライトができない代わりにボールド体(太字)やイタリック体(または斜体)でキーワードやコメントが区別されていることもある。
定義
ソースコードの定義は明瞭でない。しかし様々な定義が試みられている。
Linux Information Project (LINFO) はソースコードを「プレーンテキストの形で1から人間によって書かれたソフトウェア。例えば人が読めるアルファベットの形であったり、人によってコンピュータにタイプされたりするもの」と定義している[2]。すなわちソースコードはプレーンテキスト(人の言葉)で書かれたもので、機械が生成・変換したのではなく人が1から書いてできているソフトウェアの実体を指す。ソース(源)という語が示すように、ソフトウェアはソースコードを変換(コンパイル)して生成した機械語によって動作するため、ソースコードはソフトウェアの源/ソースである。
ソースコードは人が書くものだが、より抽象度の高い表現でソフトウェアを記述し、それを基に従来人が書いていたソースコードを機械に書かせる(機械に生成させる)ことが古くからおこなわれてきた(トランスパイラ、自動プログラミング)。機械が生成したコードは人が書いたものではなく、また機械の生成物であって生成元(ソース)ではないため、上記の定義からするとソースコードではない。ただし従来ソースコードだったものが生成されているので、この種の中間コードもソースコードと呼ばれることがある(cf. 自動プログラミング § ソースコード生成)。現代のソフトウェア開発では大元の高水準ソースコードが幾重にもわたって中水準のソースコードまたは中間表現にコンパイル/トランスパイルされ、最終的に機械語のコード/プログラムとなる場合が多い(例: C#→CIL→機械語、TypeScript→JavaScript ES6→JavaScript ES5→機械語)。
アセンブリ言語のような低水準言語のプログラムを、ニーモニックを使って手作業で記述したものはソースコードと言えるが、プログラムの規模が増大した現代では保守性の観点から、低水準言語を直接使ってプログラムを記述する機会は少ない。通例ソースコードは高水準言語を使って記述・保守されるようになっている。
ソースコードの公開・非公開
ソースコードはソフトウェアの開発段階を経て機械語を生成した後でもそのソフトウェアの保守に不可欠であり、類似ソフトウェアの新たな開発や既存ソフトウェアの改善に有用であり、また、ソフトウェアに制御されるハードウェアの内容を知る大きな手がかりともなるため、ソースコードを独占あるいは逆に公開することは大きな意味を持つ[注釈 2]。
一般に人間には機械語は扱いがたく、特に1990年代以降のPCで使用されている大規模なOSやアプリケーションソフトウェアのプログラム全体を機械語で書くことはほとんど不可能である[注釈 3]。そのため、通常は人間にとって理解のしやすいプログラミング言語によって書かれたソースコードとしてプログラムを作成し、その後にコンパイラなどを用いてまとめて機械語に変換する。変換された機械語プログラム(バイナリ)は数値の羅列にすぎず、人間には理解が極めて困難である。機械語を各プロセッサに対応するアセンブリ言語のニーモニックに変換して表示することで、命令レベルのプログラム内容を把握することも可能ではあるが、読解の効率や保守性の点で問題がある。従って、既存のプログラム上の誤りであるバグを修正したり、改良を加えたりするためには元のソースコードが必須である。
知的財産権を収益の根幹とするソフトウェア産業では、ソースコードを企業秘密として保持し、使用者には機械語プログラムの複製の使用権を販売することで利益を得ていることが多い。このような考え方の下に開発されているソフトウェアはプロプライエタリソフトウェアと呼ばれる。これらの企業にとってはソースコードは独占すべき重要な資産である。もしソースコードが流出すれば、自社の開発成果が競合他社の製品に利用される恐れがある。
これに対し、ソースコードを積極的に公開しようとする考え方もある。
- アメリカ合衆国の政府資金によるソフトウェア開発では、開発成果は納税者である国民に還元すべきであるとの考えから、ソースコードを一般に公開する場合も多い。
- リチャード・ストールマンとフリーソフトウェア財団の考えによれば、コンピュータの利用者は自由にソフトウェアによる恩恵を享受できるべきであり、その実現に反するソースコードの独占・隠蔽は許されない不道徳である(自由ソフトウェア運動)。
- エリック・レイモンドに代表されるオープンソース支持者の中には、ソースコードの公開がソフトウェアの発展のためには有用であるという考え方もある[注釈 4]。
- レッドハットのビジネスモデルのように、知的所有権よりはブランドイメージとユーザーサポート、安心感を売る形態の場合、ソースコードの公開が戦略的に有意義であることもある。ソースコードを独占しておくよりは、それを公開することでそのソフトウェアを普及させ、市場の拡大に役立てた方が良い場合である。
- UNIXやLinux、Androidのように、OSのソースコードが公開され、ライセンスの範囲内で利用と改変が許可されていることが、サードパーティの参入障壁を下げ、ハードウェアおよびアプリケーションソフトウェアの実行プラットフォームの普及につながっているケースもある。
リバースエンジニアリング
通例、ソースコードから実行コードへの変換で多くの情報が失われるため、実行コードから完全なオリジナルのソースコードを得ることはできない(不可逆変換)。しかし、実行コードしか入手できない場合であっても、時間と手間を掛ければリバースエンジニアリングによってソースコードに近いものを作り出すことは可能である。このため、真に機密保持が重要なプログラム、例えば暗号化装置のようなものでは意図的にプログラムが複雑に構成され、物理的にも読み出しにくいハードウェアに記録されているものがある(セキュリティについては隠蔽によるセキュリティも参照のこと)。
Java VMや.NET Frameworkなど、仮想マシンあるいは中間言語方式のフレームワーク上で動作するアプリケーションソフトウェアは、バイナリ形式にコンパイルおよびビルドされた後も型名や変数名といったプログラム自身に関するメタデータを多く含んでおり、逆コンパイルによりJavaやC#といった高水準言語のソースコードに変換することもできることから、比較的リバースエンジニアリングしやすい性質を持つ。プロプライエタリな商用ソフトウェアにこのようなフレームワークを利用する場合、第三者によるリバースエンジニアリングを防止するために、難読化 (obfuscation) を施すこともある。
兵器のソースコード
兵器で使用されるプログラムのソースコードはきわめて重要な機密とされる場合が多い[注釈 5]。
プログラムに起因する兵器の限界や制限を知っていれば、対抗手段を得られる可能性が高くなる、という指摘がある[要出典]。
用語の由来
コンピュータプログラムのことを「コード」と呼ぶ慣習は元々、プログラミング言語が広く使われるより以前のコンピュータの黎明期に、機械語またはそれを直接表現する「ニモニック」(mnemonic) によるアセンブリ言語のプログラムが、まるで暗号のようだ、ということに由来する(なお、暗号学では「コード」とは暗号の分類の一つである。「コード (暗号)」の記事などを参照)。
よってその由来からは、「ソースファイル」はともかく「ソースコード」とはコンピュータプログラムのものだけを指すことになるが、ハードウェア記述言語によるハードウェアの記述なども広義としてソースコードと呼ばれていることもある。
コーディングという言葉は、元々はアセンブリ言語のようなごく低水準の言語でプログラムを書く作業、というきわめて限定された意味から派生して、一般にソースコードを記述する、という意味になった語である。しかし、 近年[いつ?]はHTMLを書くという意味にも使われるなど濫用され気味である(なお、デモシーンでは機械語のテクニックを駆使して高効率のプログラムを書く、というような本来の意味に近い意味で使われている)。
和訳
プログラムを「算譜」等とした過去の日本語訳の類例として、ソースコードを原算帳と訳した例がある[3]。
脚注
注釈
- ^ JREを同梱したスタンドアロンの実行ファイルにまとめて配布する方法もある。
- ^ ただし、動的なウェブページの制御に使われるプログラミング言語であるJavaScriptのソースコードは、ウェブサイト作成に使われるHTMLやCSS同様、本来ウェブブラウザでいったんローカルにダウンロードして実行するものであるため、閲覧可能なウェブページのものであれば誰でも見ることが可能である。
- ^ 最適化などの目的でプロセッサ固有の命令を直接使用するために、一部のコードはインラインアセンブラで記述されることもある。
- ^ オープンソース支持者の考えでは、例えば有用なソフトウェアの場合、ソースコードを公開すると直ちに世界中のソフトウェア開発者が興味を引かれてソースコードを読み漁るので、重要なバグは直ちに修正される。足りない機能は直ちに追加される。レイモンドはこのことを論文「伽藍とバザール」の中で「目玉の数さえ十分あれば、どんなバグも深刻ではない」[1]と言い表した。これはLinuxのような成功したオープンソースプロジェクトに共通する性質である。
- ^ 軍用機の例では日本の国産戦闘機開発計画FS-Xの交渉に際して、原型となった戦闘機F-16の飛行制御用プログラムについて、ソースコードの閲覧を許すソースライセンスの供与の可否が米国で問題となり、否決されたという例がある。
出典
- ^ [解決!Python]PyInstallerでPythonスクリプトを実行可能ファイル化するには:解決!Python - @IT
- ^ Source code (also referred to as source or code) is the version of software as it is originally written (i.e., typed into a computer) by a human in plain text (i.e., human readable alphanumeric characters). LINFO. Source Code Definition.
- ^ 島内剛一「数学者用ワープロSPE」『数学』第40巻第3号、日本数学会、1988年7月29日、72頁、doi:10.11429/sugaku1947.40.264、2019年5月2日閲覧。
関連項目
ソースコード
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/07/15 10:19 UTC 版)
アセンブリ言語で書かれている。MACRO-11アセンブラの条件付アセンブリ機能とマクロプログラミング機能を多用することで、構成変更の自由度が向上しており、通常の機械語にはない高度な命令も使用可能になっている。OSとデバイスドライバのコメントを除去したソースコードもOS配布物に含まれており、"SYSGEN" というプログラムでOSやドライバをユーザーが設定した構成でビルド(システム生成)できる。開発者向け文書には、コメント付きのカーネルリストが含まれていた。
※この「ソースコード」の解説は、「RT-11」の解説の一部です。
「ソースコード」を含む「RT-11」の記事については、「RT-11」の概要を参照ください。
ソースコード
「ソースコード」の例文・使い方・用例・文例
- 実行環境に依存しないソースコードの書き方
- 実行されることができるコンピュータで読取り可能な機械語に特定のプログラミング言語で書かれるソースコードを翻訳するために、コンピュータープログラムを使用する
- ソースコードが自由に利用できるコンピュータ・ソフトウェアの、それに関する、またはそれであるさま
- 同じソースコードは、異なるオペレーティングシステム用の異なるバイナリを生じるためにコンパイルされる
- コンパイラは、ソースコードをオブジェクトコードに変換するために、ソースコードを解析しなければならない
- ソースコードのページへのリンク