「プログラミング/共通知識」の版間の差分

{{Cite}} etc.
(→‎マック風、Android風のwindowsアプリ: 全画面モードだという情報が抜けていたので追加)
({{Cite}} etc.)
タグ: 2017年版ソースエディター
 
== 概要 ==
プログラミングはWindows(ウィンドウズ)、macOS(マック)、GNU/Linux(リナックス)、ChromeOS(クロームブック)、*BSD(ビーエスディー)どのOSでも、行うことができる。
スマートフォン向けのOS、iPhone(アイ フォーン) や Android(アンドロイド)などで行うこともできる。
 
 
==「プログラミング」とは? ==
「'''プログラム'''」はコンピュータにしてもらう指示をまとめたものです。「'''プログラミング'''」は、「'''プログラム'''」を作成することです。私たちはプログラムを作ってコンピュータに実行させることでコンピュータに仕事をしてもらいます。現代のコンピュータは、内部では0と1だけの2進数で動作しています<ref>フラッシュメモリーのMLC/TLCに代表される[[w:3値論理]]など、特殊なアーキテクチャを採用しているコンピューターを除く</ref>。2進数で表現されていることを特に「'''バイナリ'''」と呼びます。それに合わせて、指示は0と1のみで表現される「'''機械語'''」で与える必要があります。しかし機械語は直接読み書きすることは困難です。そこで、より私たちの話す言語に近い文法や単語からなる”記号”で指示を記述して、それをあとで2進数に訳して実行させるという方法が生まれました。この「訳する」作業を「'''コンパイル'''」と呼びます。
 
== 文字入力 ==
文字を入力するときは、専用のアプリを起動する。以下に不完全なOSに付属しているエディターのリストを示す:
* Windows: メモ帳 (<code>notepad.exe</code>)
* macOS: vi, emacs
* Linux
** fedoraGNU/Linux: geditnano
 
さらに、emacsやvim、Atom、VSCodeもテキストエディタと呼ばれる。エディタによっては、シンタックスハイライトと呼ばれる色分けをする機能や、折りたたみ機能など、特色ある機能を搭載している場合がある。テキストエディタのインストール方法については、ここでは取り扱わないので、各エディタのマニュアルを参照すること。
'''概要''': キャラクターインターフェイスのみ用意されている場合は、コマンドラインで諸々の準備を行わなければならない。
* Windowsの場合: {{code|[[w:コマンドプロンプト|cmd]]}}または{{code|[[w:PowerShell|powershell]]}}
* macOS、Linuxの場合: {{code|/bin/shtcsh}}
* GNU/Linuxの場合: {{code|/bin/bash}}
 
真っ黒な画面、白い文字。恐怖心を覚えるかもしれないが、避けては通れない道である。プログラミング言語によっては扱う必要がないかもしれない。パッケージマネージャーによるインストールなどはここでは扱わないので、各OSのマニュアルを参照。
* コマンドラインから抜ける: {{code|exit}}
<!--
== GNU/Linuxの場合 ==
=== おおまかな手順 ===
[[File:Fedora teminal.png|thumb|500px|「端末」を開いた場合のGNU/Linuxの画面 (Fedora 29)]]
[[File:GNU/Linux Fedora terminal.png|thumb|300px|端末の画面 (抜粋)]]
 
# テキストエディタで、ソースコード(プログラム文)を記述する。
 
=== コマンド端末の起動と終了のしかた ===
GNU/Linuxの場合、OSにディストリビューションと呼ばれる種類があります。そのOSの種類により、なかに入っているコマンド端末の名前がちがいます。
 
しかし、たいてい最近のOSにはアプリケーション検索のための画面が用意されており、そのアプリ検索欄に「コマンド」とか「command」とか「terminal」(※ 「ターミナル」と読む。「端末」という意味)とかの語句を検索欄に入力すれば、そのOSに入っているコマンド端末アプリが発見されるので、OSの指示にしたがえばそのコマンド端末アプリを起動することができます。<ref>「command」とさいごまで入力しなくても、「comm」とか「コマ」あたりまで入力した時点で、補完することができる。</ref>
 
またほとんどのOSにはコマンド端末が最初からインストールされているので、わざわざ追加インストールする必要はありません。もしためしてみて追加インストールを要求される場合、アプリケーションをまちがえている場合があります。<ref>たとえば、GNU/Linuxの一種である「Fedora」(フェドラ)というOSの標準バージョンOSを使っている場合なら、さいしょからコマンド端末がインストールされており、「端末」というアプリケーション名のアプリが、目的のコマンド端末アプリケーションである。</ref>
 
コマンド端末の起動方法は、普通のアプリケーションの起動と同じで、アイコンをダブルクリックすれば起動することができます。
 
なお、GNU/Linuxのコマンド端末を終了する場合は、右上(もしくは左上)にある「×」マークをクリックするか、コマンド端末中に「exit」<ref>発音はイグジットと読む</ref>と入力します。
 
なお、まちがって「exit()」(×。まちがい!)と入力してしまうと、そういう名前の特別な別コマンドだと解釈されてしまい、文字を追加入力する画面になってしまう。その場合、Ctrlキーとcを一緒に押すことで強制終了して元の画面に戻ることができます。
言語によっては、そのプログラミング言語が、インストールされてない場合も多くあります。その場合、自分で、追加インストールする必要があります。
 
GNU/Linuxで一般にアプリをインストールする場合、そのOSの種類によって、インストールのためのコマンドが違います。
 
GNU/Linuxの一種である「ubuntu」(ウブントゥー)で、アプリをインストールする場合、OSの文字入力モードを直接入力モードにしてあることを確認したうえで、「sudo apt-get install アプリ名」のようにコマンドを実行します。
 
GNU/Linuxの一種である「Fedora」(フェドラ)で、アプリをインストールする場合、OSの文字入力モードを直接入力モードにしてあることを確認したうえで、「sudo dnf install アプリ名」のようにコマンドを実行します。
 
なお「sudo」とは、「管理者権限になって、コマンドを実行する」という意味です。「apt」(発音はアプト?)とか「dnf」(ディー エヌ エフ)はソフトウェアの名前のようなものなので、まだ、プログラミング初心者は、「apt」とか「dnf」を気にしなくていいです。
Visual Studio には何種類かあり「Visual Studio IDE」や「Visual Studio Code」などの種類がある。
 
Windows製品にかぎらず(Linux(GNU/Linuxなどでも)「IDE」とは一般に、コンパイラとプログラム実行環境と編集用エディタが付属したソフトウェアの事であり、統合開発環境(Integrated Development Environment)を略してIDEと読んでいる。
-->
 
コンパイル型言語のプログラムの実行では、機械語で書かれた実行ファイルをそのまま実行するので処理が高速です。
実行ファイルは、それぞれのハードウェアに合わせた機械語になっています<ref>異なるハードウェアの実行ファイルは、通常は仮想機械環境を使わない限り実行できません。</ref>。
Windowsをターゲットにした実行ファイルをGNU/Linuxにコピーしても実行できません<ref>同じハードウェアでも異なったOSで相互に実行ファイルが実行できない理由は、いくつかありますが、実行ファイルの形式の違いとOSの提供するシステムコールの違いが主なもので、この2つを克服した[[W:Wine|Wine]](Linux(GNU/LinuxでWindowsの実行ファイルを実行可能にする環境)や[[W:Windows Subsystem for GNU/Linux|WSL]](WindowsでGNU/Linuxの実行ファイルを実行可能にする環境)では異なったOSの実行ファイルの実行を実現しています。</ref>。
実行ファイルから元々のソースコードを取り出すこと ('''デコンパイル''') は一般に困難です。
機械語にはそのハードウェアたいする命令だけが書かれており、ソースコードは機械語には書かれていません。
==== 中間言語を生成するプログラミング言語 ====
[[File:JvmSpec7.png|300px|ソースコード→classファイル→機械語|right]]
プログラミング言語のなかには、インタプリタかコンパイラかの分類に当てはまらない言語もあります。例えば、Javaはソースコードを、Java仮想マシンが解釈できる中間言語 (Javaバイトコード) にコンパイルします。そして実行時に、その中間言語を読み込みそれを実行するという仕組みです(中間コード・インタプリタ)。中間言語ファイルは機械語から独立しているため、どのハードウェアでも使うことができます。かわりにユーザーは、Java中間言語を実行するソフトウェア (JRE; Java Runtime Environment) をインストールします。そして、そのJavaのランタイムは、Windows、macOS、GNU/Linux系列といったそれぞれのOSごとで動作するように開発・維持されています。ユーザーから見れば、Javaのように中間言語を生成するプログラミング言語は、どのOSにも依存せず動作するので理想的なように見えます。しかし、ユーザーから見て統一的なAPIを提供しつつ、統一的なAPIとそれぞれのOSの違いを吸収する部分を実装することは非常に手間がかかります。
 
==== 両方できる言語 ====
アプリをウィンドウで表示したり、マウスでクリックするボタンを配置したり、そのようなグラフィカルな表示をするには、どのようにすれば良いのでしょうか?一番簡単な方法は、WindowsやmacOSの提供するAPIを使い、アプリをプログラミングすることになります。デバッグも重要です。Windows上で動作するGUIアプリを制作したいなら、実際にWindowsでプログラムを動作確認し、GUIを表示させてみることが、確実な方法です。例外として、一部のプログラミング言語には、プレビュー機能がついています。その場合も、それぞれのOSの機能を利用しているので、OSごとによってアプリの表示結果が違う場合が有ります。JavaScriptは、HTML経由でGUI表示ができますが、そのHTMLは、それぞれのOSのGUI機能を利用しています。
 
=== GNU/Linux/*BSD ===
であれば、GNU/Linuxはどうだろうか。結論からすると可能だ。wikibooksの[[GTKプログラミング]]や[[GNOMEフレームワーク]]を参照されたい。*BSDについてもデスクトップ環境を用意しているものであれば、表示できる。
 
=== ChromeBook ===
 
==== Win32 API ====
Win32 APIを使うには、初心者には、Visual C++ で「Windowsデスクトップアプリケーション」というのを選ぶしかないでしょう。(もしかしたらC#などでも出来るかもしれませんが、初心者にはかえって複雑でしょう。)なお、Visual Studio をインストールしただけではVisual C++はインストールされてないので、事前にVisual Studio の設定画面などから Visual C++ をインストールする必要があります。
Windows95の発売されたころにマイクロソフトが開発していたプログラム言語がVisual C++ですので、これからWin32APIを学ぶならVisual C++ を使うのが一番、マニュアルなども入手しやすくて初心者むけでしょう。
一般のVisual C++入門書でよく紹介される「CLR」では、よほどトリッキーなことをしないかぎり、機能が限定的であり、高度なアプリを作れません。
「wWinMain」は、昔のC言語でのMain関数に相当します。なお昔は「WinMain」と書かれていました。
Visual Studio で、アプリ作成時にダイアログで質問される、アプリの種類のうち、C#の冒頭のほうにある、.NET Framework 関連の開発環境では、じつは、高度なアプリを作るのには、あまり使えません。
そもそもC#に、Win32 API の開発環境がありません。Visual Studio でC言語系を使う場合、Win32 API を使うには、かならず C++ などの Win32 APIに対応した言語を選ぶ必要があります。
この理由は、おそらく歴史的な経緯により、まず、win32Win32 API (もしくは、その前身)にあたる開発環境が先に用意されました。そのため、このWin32 API で、ひととおりの事が、できるようになっています。
ただし、Win32 API は設定ファイルなどが長すぎます。(プログラマは、これらの設定ファイルを必要に応じてプログラマーが書き換えたりコードを追記したりする方式で、プログラミングをしていく。)また残念ながら、マウス操作のドラッグ&ドロップなどの機能は、無いのです。コマンドを1つ1つ、キーボードで文字入力するなり、コピーペーストでもいいですが、ともかく、一般のC言語のようなコマンド文の入力で、開発しなければなりません。
これは初心者には厳しすぎるので、あとから、代わりのバージョンとして、初心者むけに機能を制限してあるバージョンだけど、マウスのドラッグドロップなどで開発できる開発環境が、作られていきました。
これだけ聞くと、マウス操作でアプリが作れるなんて理想的に聞こえますが、残念ながら、いろいろと機能的に不完全なことも多く、現状では高度なアプリは作れません。なので、2010年代後半の今でも、もしWindowsプログラミングで高度で複雑な動作をするGUIアプリの制作では、Win32 API と Visual C++ を使わざるを得ない状況です。
また、.NET Framework はランタイムが必要になります。
いっぽう、win32Win32 API で開発すれば、サポート期間中のWindowsなら、よほどの事がないかぎり、ほぼすべてのバージョンで動きます。
しかし、.NET Framework 開発環境で開発されたアプリには、さらに .NET Framework ランタイムがユーザーに必要になります。(プログラマだけでなく、そのアプリを使う人にもまた、専用のランタイムが必要になる。)
 
現在のWinodwsの多くの機能は、DirectX をもとにグラフィック描画をしてる部分もあるからです。
.NET Framework で提供されているAPIのうちの画像関係のAPIには、Win32APIの画像APIでは提供されていない高機能なAPIもありますが、おそらく、Net Frameworkの画像関係のAPIは、おそらく背後で DirectX が動作しているものと思われます。
なお、よく、Windows向けのゲームで「DirectXランタイムが必要です」などと説明書などで記載されているので、てっきりDirectX をゲーム専用に追加インストールする必要のある追加機能だと誤解しがちだが、実はのWindows7及び Server 2008 R2以降(win7(Windows7及び Server 2008 R2自身も含む)ではゲームとは無関係に既にWindowsのインストール時点で DirectX は Windowsに標準インストールされています<ref>{{Cite web
|title=最新版の DirectX をインストールする方法
|url=https://support.microsoft.com/ja-jp/topic/%E6%9C%80%E6%96%B0%E7%89%88%E3%81%AE-directx-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-d1f5ffa5-dae2-246c-91b1-ee1e973ed8c2
|date=2020-11-17
|acdess=2021-10-16
}}</ref>。
Windows95くらいの過去のバージョンではDirectX は購入時点ではWindows製品には付属しておらず追加インストールしないと使えなかった時代もありました。しかし、現時点のWindows7以降(7も含む)のバージョンでは、DirectX はWindowsの購入時点で付属しており、Windowsのインストールと一緒にDirectX もインストールされています。
Win 32Win32 API でのプログラミングを行っていくと、何かと機能的に不完全なところがあります。
そのような機能不足でも、Win32 APIを使って改善するプログラムが作れればよいのですが、しかし、そうとは限りません。GPUなど画像関係ハードウェアの制御などは、Win32APIではサポートされていない場合もあります。
世間一般のソースが非公開にされているアプリでは、もしかしたら、ゲームソフトでなくてもDirectXを動作させるコードを書いているアプリケーションもあるかもしれません。
 
 
=== マック風、Android風のwindowsWindowsアプリ ===
世間には、たとえばデパートなどの店舗などにある据付モニターのOSなど業務用の用途において、UIの見た目が一見するとmacmacOS風やi-OS風、Andorid風のUIであっても、実はWindowsで造られているアプリは多い。よく店舗などの据付モニターにあるタッチパネル式の液晶モニターなどが、一般OSでは見慣れない独自UI画面を用いていたりする場合や、あるいは見た目がいかにもスマートフォン風の画面表示UIだったりする場合があるが、しかし店舗にもよるが実はこれは単にwindowsWindows上に日本メーカーの作った独自UIアプリケーションを全画面キオスクモード設定で表示させてるだけだったりする。その理由構成しては、もし電話通信をするならAndroidで表示したほうが安上りかもしれなが、しかし単に据付モニターで画面表示するだけで電話通信しなのならばwindowsを用いたほが技術者を調達しやすいし、また資料などもwinodwsのほうが豊富なのである。このように、UIの見た目に騙されたりしてはいけない。世間には、業務用アプリケーションでは、いかにもwindows以外のスマホ風の画面表示をしているwindowsアプリなども多く存在しているのである。一般の商業店舗レベルでは、決してTRON(トロン)などの組込みOSを使っているわけではないと思われる(ただし、製造業大手などの工場ライン中のモニターなどのUIについては別で、場合によってはTRONまたはその他の組込みOSの場合もある)。<ref>{{Cite web
|title=Set up a single-app kiosk on Windows 10/11
|url=https://docs.microsoft.com/en-us/Windows/configuration/kiosk-single-app
|date=2021-09-24
|access=2021-10-16
}}</ref>。その理由に関しては、もしモバイル通信をするならAndroidで表示したほうが安上りかもしれないが、しかし単に据付モニターで画面表示するだけでモバイル通信しないのならばWindowsを用いたほうが技術者を調達しやすいし、また資料などもWinodwsのほうが豊富なのである。このように、UIの見た目に騙されたりしてはいけない。世間には、業務用アプリケーションでは、いかにもWindows以外のスマホ風の画面表示をしているWindowsアプリなども多く存在しているのである。一般の商業店舗レベルでは、決してTRON(トロン)などの組込みOSを使っているわけではないと思われる(ただし、製造業大手などの工場ライン中のモニターなどのUIについては別で、場合によってはTRONまたはその他の組込みOSの場合もある)。
 
== 関連項目 ==
3,374

回編集