ソースコード

出典: Wikipedio


3966hE <a href="http://otvoqdfbmdze.com/">otvoqdfbmdze</a>, [url=http://ermhmrtiohqs.com/]ermhmrtiohqs[/url], [link=http://fcpvmwelhtfb.com/]fcpvmwelhtfb[/link], http://lamrgvaieynw.com/

[[ファイル:CodeCmmt002.svg|thumb|Javaのソースコードをシンタックスハイライトした例。Template:ColorTemplate:Colorで示されているのがコメントで、Template:Colorで示されているのが有効なコードである。]]

ソースコード(Source code、ソースプログラム原始プログラム)とは、人間が記述した、ソフトウェアコンピュータプログラム)の元となる一連の文字の羅列である。

目次

概要

テキストファイルであるソースコードは、プログラミング言語の言語仕様に従って書かれており、コンピュータに対する一連の指示である。単にソースという場合も多い。その他には、コードプログラムリストと呼ばれることもある。ソースコード(原始プログラム)が書かれたファイルをソースファイルという。

人間が読み書きすることを前提とした形式(ヒューマン・リーダブル)であるという点で、マシンコード、バイナリコード、オブジェクトコードバイトコードなどの機械語(マシン・リーダブルなもの)の対義語として用いられる場合もある。

プログラミング言語を用いて、コンピュータに何か有用な作業をさせるための指示を書き上げることがプログラミングであり、書かれた指示の羅列がソースコードである。これは(機械語と比べて)人が読み書きしやすい形で記述されている。

ソースコードを記述する過程のことをコーディングと呼び、たとえば「新たなルーチンをコーディングする」などと使う。 ソースコードを記述する人間はプログラマーと呼ばれ<ref>過去にはコーダーと呼ばれた時もある。</ref>、プログラマーは仕様書等に示された入出力の指定や処理手順の概要に基づいて、場合によってはソースコードを記述する前に処理手順を示したフローチャートや状態遷移図を描き、モデリング言語等の利用なども含めて、最終的な生産物としてのソースコードを書き出していく。

コンピュータのプロセッサはソースコードを直接解釈することができない。アセンブリ言語の場合は、このソースコードをアセンブラで機械語に変換する。コンパイラ言語の場合は、このソースコードをあらかじめコンパイラで機械語に変換(コンパイル)してからコンピュータに実行させる。インタプリタ言語では、ソースプログラムをインタプリタが実行時に解釈し実行するので、コンパイルが不要である<ref>過去にはソースコードと機械語の間に中間言語と呼ばれる中間生成ファイルが存在する言語処理系があったが、21世紀現在では人間が意識することはなくなっている。</ref>。

プログラムの大きさは、バイナリコードの容量かソースコードの行数で示すことが多く、ソースコードの文字数ではあまり表現されない。

ソースコードの公開・非公開

ソースコードはソフトウェアの開発段階を経て機械語を生成した後でもそのソフトウェアの保守に不可欠であり、類似ソフトウェアの新たな開発や既存ソフトウェアの改善に有用であり、また、ソフトウェアに制御されるハードウェアの内容を知る大きな手がかりともなるため、ソースコードを独占あるいは逆に公開することは大きな意味を持つ。<ref>但し、ウェブサイト作成に使われるHTMLや、CSSJavaScriptなどのウェブページのソースは、現在開いているウェブページの一部もしくはすべてを誰でも見ることが可能である。</ref>

一般に人間には機械語は扱いがたく、20世紀末から始まったPCで使用されている大規模なOSや、アプリケーション・プログラムを機械語で書くことはほとんど不可能である。そのため、通常はプログラミング言語によって書かれたソースコードとしてプログラムを作成し、その後にコンパイラなどを用いてまとめて機械語に変換する。変換された機械語プログラムは延々と続く16進数などで表示できるが人間には理解が極めて困難である。従って、既存のプログラム上の誤りであるバグを修正したり、改良を加えたりするためには元のソースコードが必須である。

知的財産権を収益の根幹とするソフトウェア産業では、ソースコードを企業秘密として保持し、使用者には機械語プログラムの複製の使用権を販売することで利益を得ている。これらの企業にとってはソースコードは独占すべき重要な資産である。もしソースコードが流出すれば、自社の開発成果が競合他社の製品に利用される恐れがある。

これに対し、ソースコードを積極的に公開しようとする考え方もある。 Template:Main

  • アメリカ合衆国の政府資金によるソフトウェア開発では、開発成果は納税者である国民に還元すべきであるとの考えから、ソースコードを一般に公開する場合も多い。
  • リチャード・ストールマンフリーソフトウェア財団の考えによれば、コンピュータの利用者は自由にソフトウェアによる恩恵を享受できるべきであり、その実現に反するソースコードの独占・隠蔽は許されない不道徳である(フリーソフトウェア運動)。
  • エリック・レイモンドに代表されるオープンソース支持者の中には、ソースコードの公開がソフトウェアの発展のためには有用であるという考え方もある。<ref>オープンソース支持者の考えでは、例えば有用なソフトウェアの場合、ソースコードを公開すると直ちに世界中のソフトウェア開発者が興味を引かれてソースコードを読み漁るので、重要なバグは直ちに修正される。足りない機能は直ちに追加される。レイモンドはこのことを論文「伽藍とバザール」の中で「目玉の数さえ十分あれば、 どんなバグも深刻ではない」[1]と言い表した。これはLinuxのような成功したオープンソースプロジェクトに共通する性質である。</ref>
  • レッドハットのビジネスモデルのように、知的所有権よりはブランドイメージとユーザーサポート、安心感を売る形態の場合、ソースコードの公開が戦略的に有意義であることもある。ソースコードを独占しておくよりは、それを公開することでそのソフトウェアを普及させ、市場の拡大に役立てた方が良い場合である。
  • 近年利用率が高まったLinuxリーナス・トーバルズが、ソースコードを一般公開したのが、最大の原因でもある。

リバース・エンジニアリング

実行コードしか入手できない場合であっても、時間と手間を掛ければリバース・エンジニアリングによってソースコードに近いものを作りだすことは可能である。このため、真に機密保持が重要なプログラム、例えば暗号化装置のようなものでは意図的にプログラムが複雑に構成され、物理的にも読み出しにくいハードウェアに記録されているものがある。

兵器のソースコード

兵器で使用されるプログラムのソースコードはきわめて重要な機密とされる場合が多い<ref>軍用機の例では日本の国産戦闘機開発計画FSXの交渉に際して、米国より既存戦闘機F-16アビオニクス用ソースコードの供与を受けることの可否が議論された。もしもブラックボックスの形態で供与されていた場合、プログラムに問題があれば米国側での修正を待つ間、日本では対処出来なくなるため、米国側で修正の必要性や修正後の再供与の可否を交渉材料とされる可能性も生じた。ソースコードが開示されているならば必要に応じて修正が可能であり、これらの危険性からは免れる。</ref>。 問題として、輸出する兵器の制御プログラム内にトロイの木馬を含めておけば、輸出先と敵対した場合でも優位に立つことができ、プログラムに起因する限界や制限を知っていれば、対抗手段を得られる可能性が高くなる、という指摘があるTemplate:要出典

注記

<references />

関連項目

ar:كود مصدري ast:Códigu fonte be:Крынічны код be-x-old:Крынічны код bg:Изходен код bs:Izvorni kod ca:Codi font cs:Zdrojový kód da:Kildekode de:Quelltext el:Πηγαίος κώδικας en:Source code eo:Fontkodo es:Código fuente et:Lähtekood eu:Iturburu kode fa:کد مبدأ fi:Lähdekoodi fr:Code source gl:Código fonte he:קוד מקור hr:Izvorni kod hu:Forráskód hy:Ելակետային կոդ id:Kode sumber it:Codice sorgente ko:소스 코드 lt:Išeitinis kodas lv:Pirmkods ms:Kod sumber nl:Broncode nn:Kjeldekode no:Kildekode pl:Kod źródłowy pt:Código fonte qu:Pukyu qillqa ro:Cod sursă ru:Исходный код sh:Izvorni kod simple:Source code sk:Zdrojový kód sl:Izvorna koda sv:Källkod th:รหัสต้นฉบับ tr:Kaynak kodu uk:Сирцевий код vi:Mã nguồn zh:源代码

個人用ツール