この記事を通して、GNU/Linux オペレーティング システム (以降、単に「Linux」と呼ぶ) でプログラミングを始めることをお願いしたいと思います。 プログラミングを始めようとしている学生、新入生にプログラミングを教える教育者、Windows でプログラミングをしている趣味の人など、すべての人にこの記事を読んでいただき、少なくとも 1 週間は Linux を実際に試していただきたいと思います。
誤解のないように言っておきますが、私は皆さんに Linux カーネル自体のコードを書かせようとしているわけではありません (ただし、皆さんの使い勝手やプログラミングの熟練度が上がれば、それも可能になるでしょう)。 その代わりに、ユーザー空間のプログラムを書くことについて話しています。これには、ほとんどのコンピュータサイエンスの学習コースに含まれている演習、宿題、プロジェクトワークが含まれます。
考え方を攻める
一般的に、Linux は「使うのが大変」だと思われています。 確かに、Windows に慣れている人たちが慣れ親しんでいるものとは違いますが、厳しいものではありません。
Linux の話題に触発された多くのコンピュータ サイエンスの学生たちを考えてみてください。 彼らは、メーリングリストやフォーラム、IRC チャンネルで質問をするなど、自発的に Linux の使用方法を学ぶことを決意しました。 数週間後には、単に移動するだけでなく、それ以上のことができるようになっている。 多くの場合、1ヶ月以内にはLinuxに慣れ親しみ、他の人にも紹介するようになっています。 驚くべきことですか?
新しい技術を習得するには、必ず学習曲線があります。 Linuxも例外ではありません。学生にLinuxの使い方やプログラミングを教えれば、学ぶだけでなく、簡単だと感じるでしょう。 今まで知らなかったことを学ぶことは、彼らにとって自然なことなのです。 “Linuxは難しい “というのは、現代の神話であり、それを打ち破る必要があります。 もしあなたが教育者なら、自分の役割を果たしてください。
Getting Linux up and running
さて、Linux を使おうと決めたら、どのようにすればよいのでしょうか。 さまざまな Linux の「ディストロ」 (ディストリビューションとも呼ばれる) を聞いたことがあるかもしれません。 Ubuntu、Fedora、Debian……などなど。 なぜこんなにたくさんの「Linux」があるのでしょうか? 説明しましょう。 技術的には、「Linux」はカーネルの名前です(詳しくは、このウィキペディアの記事や、Linuxの公式ホームを参照してください)。 カーネルはそれだけではほとんど役に立たないので、GNUプロジェクトのユーザー空間ツール(Cライブラリの最も一般的な実装、一般的なシェル、および多くの基本的なオペレーティングシステムのタスクを実行する多くの一般的なUNIXツールを含む)をLinuxカーネルと組み合わせて、使用可能なオペレーティングシステムを作りました。 ほとんどのLinuxシステムで使用されているグラフィカルユーザーインターフェース(GUI)は、X Window Systemの実装の上に構築されています。
では、どのLinuxディストリビューションを使えばいいのでしょうか?
では、どの Linux ディストリビューションを使えばいいのでしょうか?Ubuntu と Fedora は、インターネットサーフィン、電子メール、文書処理など、コンピュータを気軽に使うユーザーにとって、非常に使いやすい Linux 体験を提供しています。
Linuxのインストールはやや難しいですが、特にLinuxと古いWindowsのどちらかを起動できるデュアルブートシステムを設定しようとしている場合は注意が必要です。 それ以外の場合は、とても簡単です。CD(ISO)イメージをダウンロードしてディスクに書き込み、そこからコンピュータを起動して、インストールするだけです。
また、Linuxをインストールせずに、Windowsを置き換えずに、デュアルブートセットアップをせずに、Linuxを試してみたい場合は、他の選択肢もあります。
The Ultimate Linux Newbie Guide は、自分で学ぶための良い参考資料です。
究極のLinux初心者ガイドは、自分で学ぶための良い参考資料です。 ですから、データをバックアップし、助けてくれる人がいなければ、インストールディスクを使って始めましょう。
新しいソフトウェアを簡単にインストールできるように、ほとんどのディストリビューションにはパッケージマネージャ(Linuxの世界では、ソフトウェアは「パッケージ」という形で配布されています)が搭載されており、インターネットから新しいソフトウェアを簡単にダウンロードしてインストールすることができます。
この記事が最大限に役立つよう、特定のディストリビューションにこだわらず、より一般的な内容にしたいと思います。
テキスト エディターの選択
少なくとも最初は、統合開発環境 (IDE) を使用しません。 テキスト エディターを使用してコードを書き、保存し、適切なコンパイラ/インタプリタを使用してコンパイル/解釈するというシンプルな方法で行います。 Linuxの世界では、たくさんのテキストエディタがあります。 Linuxをインストールすると、geditやkwriteなどのエディタが必ずインストールされていますので、どちらを使っても構いません。 UbuntuのようなGNOMEデスクトップ環境のディストリビューションをインストールした場合は、geditがすでにインストールされています。
Linux での C/C++ プログラミング
C 言語は通常、インドのエンジニアリング スクールや大学で多くの学生が最初に学ぶ言語ですので、まずは Linux で C 言語を使ってプログラミングする方法を見てみましょう。 なお、Linux で書く C コードは、ANSI C コードを書いている限り、Windows/DOS で書くのと同じです。 conio.h
graphics.h
で提供されているものなど、いくつかのライブラリ関数はANSI規格には含まれていません。
Linuxで使用するCコンパイラはGCCです。 これは、GNU Compiler Collectionの一部です。 ターミナルを開いて、コマンドを実行します。 gcc
を実行します。
gcc: no input files
しかし、「Command not found」のような表示が出た場合は、パッケージマネージャーを使ってGCCをインストールする必要があります。
コンパイラの他に、Cプログラムを正しくコンパイルするためには、glibc
というC標準ライブラリが必要です。 locate glibc
と入力して、出力を確認してみてください。
さて、テキスト エディタ、コンパイラ、標準ライブラリの存在を確認したところで、Linux 上で C 言語による最初のコードを書いてみましょう。 この記事では、「ホーム」ディレクトリの下に「codes」というサブディレクトリを作成し、その中にすべてのソースコードを保存することにします。
gedit を起動し、数字の階乗を表示する簡単な C コードを入力します:
#include<stdio.h>int main(int argc, char **argv){ int n, i,fact=1; printf("Enter a number for which you want to find the factorial:: "); scanf("%d", &n); for(i=1;i<=n;i++) fact=fact*i; printf("Factorial of %d is :: %dn", n,fact); return 0;}
このコードを codes サブディレクトリーに fact.c
cd codes
を実行してこのディレクトリに移動します。
gcc factorial.c
このコマンドを実行した後、ls
a.out
ファイルが表示されます。 これがCプログラムの実行ファイルで、適切なライブラリとともにコンパイル、リンクされています。 実行するには、次のように実行します (先頭の ./
に注意してください。これは必須です!):
./a.outEnter a number for which you want to find the factorial:: 5Factorial of 5 is :: 120
おめでとうございます、あなたは Linux で初めて C プログラムを書きました! これは、DOSやWindowsで書く普通のC言語で、何の驚きもありません。 この a.out
ファイルについてもう少し説明しましょう。 これは、DOS/Windows で見られる .exe ファイルに相当する Linux のファイルで、コードの実行形式です。
さて、コンパイルするたびに実行ファイルの名前を変更する代わりに、コンパイラに出力ファイルの名前を指定することができます。
gcc -o factorial factorial.c
C プログラミングとデータ構造のクラスから、さらにいくつかのプログラムを試してみましょう。
「C Programming Language」は、Brian Kernighan氏とDennis Ritchie氏による有名なプログラミングの本で、Linux風味の強いCプログラミングを学ぶことができます。
では、Linux で初めて C++ プログラムを書いてみましょう。 コーディング、コンパイル、実行のサイクルは、使用するコンパイラがg++
であることを除けば、C言語の場合と非常によく似ています。 すでにインストールされているかどうかは、gcc
で行ったように、ターミナルでコマンドを実行して確認します。 次に、パッケージマネージャーを使って、C++の標準ライブラリであるlibstdc++
がインストールされているかどうかを確認します(インストールされていない場合は、インストールします)。 両方ともインストールされたら、gedit を開き、次のようなシンプルな C++ プログラムを入力します:
#include<iostream>#include<string>using namespace std;int main(int argc, char **argv){ string s1="Hello"; string s2="World"; cout <<s1+" " + s2 << "n"; return 0;}
このファイルを codes サブディレクトリに string-demo.cxx
として保存します。
このファイルをコンパイルして実行します:
g++ -o string-demo string-demo.cxx./string-demo
上記のコマンドを実行すると、ターミナルに次のように出力されます:
Hello World
表示されているC++コードは、標準的なC++で、ヘッダーファイルから.h
が省略されています。 C++のソースファイルは通常、.C
.cc
.cpp
.c++
.cp
.cxx
のいずれかです。
では、クラスを使った簡単なC++プログラムを書いてみましょう。
#include<iostream>using namespace std;class Circle{ float r; public: void init(float x) /* Inline function */ { r = x; } float area();};float Circle::area(){ return 3.14*r*r;}int main(int argc, char **argv){ float radius; Circle circle; cout << "Enter the radius of the circle:: "; cin >> radius; circle.init(radius); cout << "Area of the Circle:: "<<circle.area()<<"n"; return 0;}
そのファイルをcodesのサブディレクトリにとして保存します。
Compile and execute:
g++ -o class-demo class-demo.cxx./class-demoEnter the radius of the circle:: 4Area of the Circle:: 50.24
これらのプログラムを正常にコンパイルできたと仮定して、gcc と g++ を使用して C/C++ の課題や問題を書き、コンパイルし、テストすることをお勧めします。
Linux での Java プログラミング
Java はおそらく、インドの学校やカレッジで C/C++ の次に広く教えられている言語です。
LinuxにJDKをインストールするには、公式サイトからLinux用のインストーラーをダウンロードします。
自分が何をしているかわからない限り、.bin
*rpm.bin
.bin
ファイルは、Windowsではcd
ファイルがダウンロードされたディレクトリに移動し、以下のコマンドを使用します:
chmod +x jdk-6u18-linux-i586.bin./jdk-6u18-linux-i586.bin
上記のファイル名は、ダウンロードしたJDKのバージョンによって異なる場合があります。 1行目でインストーラーを実行可能にし、2行目で実行します。 インストーラが起動すると、「Sun Microsystems, Inc. Binary Code License Agreement」が表示されます。
ライセンスを受け入れると、JDKの抽出が始まります。 インストーラが終了すると、カレントディレクトリ内に「jdk1.6.0_18」という新しいサブディレクトリができるはずです。 WindowsでのJavaプログラミングに慣れている人なら、これはすぐにわかるはずです。
これで準備は整いましたので、Linux で初めての Java プログラムを書いてみましょう。
import java.util.Random;class ArrayDemo { public static void main(String args) { int arr = new int; for(int i=0;i<10;i++) arr = (new Random()).nextInt(); for(int i=0;i<10;i++) System.out.println("Element at index " + i + "is::" + arr); }}
このコードをファイル ArrayDemo.java
に保存し、次のようにコンパイルして実行します。
/home/amit/jdk1.6.0_18/bin/javac ArrayDemo.java/home/amit/jdk1.6.0_18/bin/java ArrayDemo
最初の2つのコマンドでは、javacとjavaの実行ファイルの場所をフルパスで指定しています。
2 番目のコマンドを実行すると、ターミナルに次のように出力されます:
Element at index 0is:: 480763582Element at index 1is:: -1644219394Element at index 2is:: -67518401Element at index 3is:: 619258385Element at index 4is:: 810878662Element at index 5is:: 1055578962Element at index 6is:: 1754667714Element at index 7is:: 503295725Element at index 8is:: 1129666934Element at index 9is:: 1084281888
以上が、Java プログラムのコンパイル、実行、テスト、およびデバッグを行う方法です。
OpenJDK
オープン ソース マガジンの Java プログラミングに関する記事は、OpenJDK について語らずにはいられないでしょう。 このプロジェクトのことを知っておくのは良いことだと思います。
では、これは別の Java なのでしょうか? いいえ、同じJavaコードを書きます。 OpenJDKは、Linuxディストリビューションのパッケージマネージャーからインストールすることができます(ディストリビューションによっては、プリインストールされている場合もあります)。
Dealing with practicalities
さまざまな理由で、Linux を研究室全体に展開できない場合があります。
このマシンは、何人の学生がコーディングやコンパイルに使用するかにもよりますが、比較的良い構成のものである必要があります。 Windowsでは、Puttyが広く使われているSSHクライアントです。 Windows でコードを書き、それを Linux マシンにコピーしてコンパイルと実行を行う場合は、ローカル マシンから Linux の SSH サーバーにファイルをコピーできる pscp
プログラムをサイトからダウンロードする必要もあります。
もし、LinuxサーバーからのGUIセッションをWindowsマシンでアクセスできるようにする必要がある場合(例えば、GUIプログラミングをしているときなど)、OpenNXサーバー(Linuxサーバーマシンにインストールする)とNoMachine NXクライアント(Windows用)を調査します。 このような構成のマシンであれば、10人程度のユーザーセッションをサポートすれば、動作が遅くなることはありません。
もうひとつの方法は、(Linuxサーバー専用機を必要としない)デスクトップ上の仮想マシンにLinuxをインストールすることです。 これは、家庭用コンピュータでも利用できます。 VirtualBoxは仮想化ソフトウェアで、Windowsシステムにインストールすると、仮想マシンを作成することができ、その中にWindowsのインストールを中断することなくLinuxをインストールすることができます。 もちろん、仮想マシンのディスクファイル用に、いくつかの空きディスク容量(8GB以上)が必要になります。
これは、Linux をインストールする練習にもなりますし、Linux がどれほど簡単にインストールできるかを知る良い方法です。 特にUbuntuについては、Wubiがあり、他のWindowsアプリケーションと同じように、簡単で安全な方法で「ワンクリックで」Ubuntuをインストール(およびアンインストール)することができます。
ただし、ハードディスクへのアクセスは、専用パーティションへのインストールよりも若干遅くなります。 Windowsドライブが非常に断片化されている場合、パフォーマンスはさらに低下します。 また、Wubiではハイバネーションはサポートされていません。
一般的に、Linux でのプログラミングには、シェルコマンドの操作にある程度精通していることが必要です。 シェルの操作に慣れてください。
Linux でお気に入りの IDE を使う
開発に必要な IDE を使用している場合、NetBeans と Eclipse という 2 つの非常に人気のある IDE に Linux 版があり、どちらも C、C++、および Java の開発をサポートしていることは素晴らしいニュースです。 GNOME ベースの Linux ディストリビューションでは、Anjuta DevStudio が C、C++、Java (およびその他の言語) に対応した強力な IDE です。
この記事の締めくくりとして、プログラミングのためにLinuxを取り入れるための誠実な努力をすることをお勧めしたいと思います。 それは、はるかに良い世界だと思います。
リソース
- GCC を使用したgraphics.h のような機能
- GNU コンパイラ コレクション
- by Brian W. Kernighan and Dennis M. Ritchie, The C Programming Language.
- Brian W. Kernighan, Dennis M. Ritchie著「The C Programming Language」
- Bjarne Stroustrup著「The C++ Programming Language」
- Neil Matthew, Richard Stones著「Beginning Linux Programming」
- StackOverflowは、プログラミングに関する質問を投稿できるコミュニティフォーラムです。
- SSHの基本的な入門書
- VirtualBox。
- yolinux.com は一般的な Linux の情報を得るのに適したリソースです。
となっています。