シェルとは
シェル (shell) はオペレーティングシステム (OS) のユーザーのためにインタフェースを提供するソフトウェアであり、カーネルのサービスへのアクセスを提供する。
ということです。
これではあまりイメージできないかもしれませんので、もう少し具体的に述べます。 現在では、MacにしろWindowsにしろLinuxにしろ、いくつものWindowを開くことができるので、なかなかピンときませんが、最初1960年代Unixが生まれ、その後1980年の初めにMicroSoft社がMS-DOSを世に出した頃は、今のようなWindowシステムは当然なく、OSと対話するための窓1つしかありませんでした。
つまり、MS-DOSを立ち上げても、下のような真っ黒い窓がディスプレイ画面全体に現れて、それ以上のことは何も起こりませんでした(この画面はWindows7上のコマンドプロンプトなので、実際には違います)。
ちなみにMacのターミナルですと次のような画面です。
また、Ubuntu(Linux)のBashでは下のような画面です。
そしてユーザは、このコマンドに向かってなんらかの命令をして、カーネルやプログラムがその命令に対する答えをディスプレイに(文字情報として)表示させていたのでした。このようなカーネルやプログラムと会話をするものをシェルといいます(意味を拡張したGUIのシェルに対して、テキストベースのシェルと呼ばれることもあります)。
このようなシェルはOSごとに色々とあります。同じOS内でも何種類のシェルがあったりもします。
代表的なものとしては、
- Windowsにおけるコマンドプロンプト
- LinuxやMacにおけるBash
です。時々、ターミナルとか言われるときもあります(厳密にいえばシェルとは違うものですが、現実にはよく混同されている上、あまりそれで困ることがないのでこのままにしておきます)。つまり
- コマンドプロンプト
- Bash(バッシュ)
- ターミナル
- シェル
- 端末
は、ほぼ同じ意味と考えて良いでしょう。また、コマンドラインで~を叩くというような言葉も、このシェル上でプログラム名(~)を打ち込み、最後にエンターキーを打ち込むことを指したりします。
Windowsにおけるコマンドプロンプト以外の選択肢
ただ、もちろん、そのシェルの能力に関しては、それぞれ色々な違いがあります。
例えば、これらのシェル上でスクリプト(プログラム)を作ることが可能で、Windowsのコマンドプロンプトではそれらをバッチと呼び、LinuxやMacではシェルスクリプトと呼んだりしますが、これらのプログラミングの拡張性などでは差が出るわけです。多くの場合Bash等のLinuxのシェルの方が拡張されています。
あるいは操作性に関しても差があります。例えば、シェル上でBashなら「Ctrl-a(コントロールキーを押しながら、aを押す)」で、行の最初に飛んでくれますが、コマンドプロンプトではそのようなジャンプはできません。
したがって、当然ながら、実際にはもう少し便利なものが開発されています。
- WindowsのコマンドプロンプトでもBashのような機能を追加するclinkというものがあります。 インストールするだけで、先ほどの「Ctrl-a」などが使えるようになります。
- 今多く使われているGitをインストールしたときに一緒にインストールされるGit-Bashも結構便利です。これは、先のclinkとは違いコマンドプロンプトに機能を追加するのではなく、実際のBashが使えるようになるものです。
- Cygwinをインストールする。Bash以外のコマンドなどもどっさりインストールされますが、Bashも使えるようになります。
- Microsoft社から出されている PowerShellというものもあります。
カレントディレクトリとcd(チェンジディレクトリ)
ディレクトリとはフォルダーとも言われることがありますが、ファイルを入れておく部屋のようなものですが、シェルを立ち上げると、シェルは必ずどこかのディレクトリにいることになります(カレントディレクトリ、略してカレント)。例えば、Windowsでコマンドプロンプトを立ち上げると通常はC:¥Users¥ログインユーザ名になっています。コマンドラインでdirを叩くと、次のような出力が得られます(もちろん出てくるディレクトリ等は人によって違います)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
C:\Users\chikkun>dir
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 7EA4-AF91 です
C:\Users\chikkun のディレクトリ
2015/04/30 10:58 <DIR> .
2015/04/30 10:58 <DIR> ..
2015/05/06 17:25 <DIR> Desktop
2015/05/06 14:01 <DIR> Documents
2015/04/27 17:22 <DIR> Downloads
2015/05/06 16:11 <DIR> Dropbox
2015/03/12 08:47 <DIR> Favorites
...中省略....
2014/10/25 09:03 5,994 tmp.txt
...以下省略....
27 個のファイル 654,321 バイト
33 個のディレクトリ 6,793,883,648 バイトの空き領域
C:\Users\chikkun>
これらのファイルやディレクトリが、カレントディレクトリ(C:¥Users¥chikkun>)以下にあるということになります。
シェルで作業しているときは必ずこのカレントディレクトリというものを意識する必要があります。
ちなみに上記の「.」と「..」は「.」がカレントディレクトリ、「..」が1つ上のディレクトリを表します(これはLinux、Windowsも共通です)。また、「..¥..¥(Linuxだったら../../)」とすると、現在のカレントディレクトリの親の親という意味になります。つまりカレントディレクトリがC:¥work¥task1だとすると、cd ..¥..¥をコマンドラインで打ち込んだら、Cドライブのルート(C:¥)にカレントディレクトリが変更されます。
また、Windowsではディレクトリとディレクトリの間を「¥」で句切りますが、LinuxやMacでは「/」で句切ります。
もちろん、このカレントディレクトリというものは変更できます。これがWindowsでもLinuxでも同じで、cdです。通常はcd 移動したいディレクトリを打ち込んで、改行キーで実行します。
例えば、WindowsでDドライブのworkというディレクトリに移動したいのであれば、
1
2
d:
cd \work
という感じになります。
ただ、Linux(Mac)にはドライブという概念がありません。
WindowsでのディレクトリとLinux(Mac)のディレクトリの違い
Windowsでは通常、ハードディスクの1番目のものがCドライブになり、そこのWindowsというディレクトリにOSがインストールされます。もし、ハードディスクを追加したりすると、デフォルトではそのハードディスクはDドライブになります。
したがって、CドライブのWindowsというディレクトリを表すのに「C:¥Windows」という書き方をします。そして、これは「D:¥Windows」とは別のディレクトリーになります。また「C:¥」をルートと言ったりますが、「D:¥」もルートなので、ドライブ毎にルートがある感じになります。
しかしながら、Linuxではドライブという概念がありません。つまりC:というようなドライブの部分はなく、「/」というルートが1つあって、そこから木の枝のようにディレクトリが作られます。そして、ハードディスクを増設するとそのどこかのディレクトリにマウントすることになります。
例えば、AというハードディスクにBというハードディスクを増設する場合、Aに存在する/homeという空のディレクトリにハードディスクBをマウントし、/home以下のディレクトリはBのハードディスクに保存されることになります。
通常MacやLinuxではドライブ意識する必要がないので問題ないわけなんですが、このこともあって、Windows上のBashを使っている場合はドライブの表記が特殊になります。もちろん、ドライブを表す書き方がしっかりあって、Git-bashの場合ですと
1
cd /d/work
というような書き方をし、またCygwin系のBashでしたら
1
cd /cygrive/d/work
とうように、ドライブを添えることが可能です。
環境変数
環境変数とはwikiによれば
環境変数(かんきょうへんすう)はOSが提供するデータ共有機能の一つ。OS上で動作するタスク(プロセス)がデータを共有するための仕組みである。特に環境変数はタスクに対して外部からデータを与え、タスクの挙動・設定を変更する際に用いる。
ざっくり言えば、環境変数として保存しておくと、色々なアプリから参照できるキー・バリュー(あるキーワードに対して、その値がある)と言うことができます。例えばJAVA_HOMEという環境変数名に対してc:/javaというように設定してあると、Javaのプログラムからも、Rubyのプログラムからも、シェルスクリプトからも、色々なアプリケーションからその環境変数を参照できると言うことです。
ここではいくつかのよく使う環境変数とその設定の方法を記します。
各OSごとの環境変数の設定方法
Windows
Windowsの場合(Windows7)は通常GUIで環境変数を設定します。PATHという環境変数に「C:\jdk1.8.0_20\bin」を、JAVA_HOMEに「C:\jdk1.8.0_20」を設定する例を説明します(値は例です)。
- コントロールパネルを開き、この中の「システムとセキュリティ」を開きます。
- そして、この中の「システム」を開きます。
- 「システムをの詳細設定」を開き
- 一番下の「環境変数1」を開きます。
- 変数名がPathと書いてあるものを探します。そこにカーソルを合わせて、編集ボタンをクリックします。
- 編集画面が出るので、矢印キーの←で一番最初まで持って行き、「C:\jdk1.8.0_20\bin」を付けて、その後に「セミコロン;」を加えて、先頭に入れます(セミコロンはWindowsの場合のPathとPathの間の区切り文字で、LinuxやMacではコロン(:)です)。 C:\jdk1.8.0_20\bin;….←この後に以前からあるPathが続く 入力が終わったら、OKボタンをクリックします。
- 今度は新規に「JAVA_HOME」という環境変数を作成します。 「新規」というボタンをクリックします。 変数名に「JAVA_HOME」を入れて、例えば「C:\jdk1.8.0_20」を入力して、OKボタンをクリックして終了です。
このように上記のような画面で、変数名と変数値を入力して、環境変数を新規に作ったり、編集したりします。
Mac、Linuxの場合
MacとLinuxは同じ方法でいけます。
最近よく使われるBashの場合は通常、システム全体に設定したい場合/etc/profile、そのユーザだけに設定したい場合~/.bash_profileに環境変数を設定します。つまり/etc/profileか~/.bash_profileを編集します。
1
2
3
4
export PATH=$PATH:$HOME/bin
export JAVA_HOME=/usr/java
MAX_NUMBER=10
export MAX_NUMBER
のように、PATHならすでに通常はあるので、:(コロン)でパスを追加し、新しく環境変数を作る場合は環境変数名=値とし、その前にexportを書きます(上記の例のように、次の行でexportすることも可能)。
エディタ
単にエディタというとバイナリエディタというのもあるので、正確ではありませんが、通常はテキストエディタを指すことが多いでしょう。ここでもそのテキストエディタを扱っています。ワープロのように文字を大きくしたり、図を貼り付けたりすることは(通常)できません。
それに対して後述するIDEは、プログラミング言語を編集したり、テストしたり、コンパイルしたり、とおよそプログラミングするときに必要と思われることが何d目尾できてしまう、プログラマにとって強い味方です(ちなみにIDEは「Integrated Development Environment」です)。一方その分、相当重く、立ち上がってくるのにも時間がかかるほどです。
ただ、これら2つの違いは微妙に曖昧です。エディタなのだけれどIDE的なこともできるものあったりします。ただ、ちょっとしたものを編集するのにIDEを立ち上げる人はほとんどいないでしょが、反対に、エディタで全てのプログラミングを行っている人はいます。
いずれにしろ、プログラマはこれらのエディタやIDEとは長い付き合いになるので、色々なものを試してみて自分にあったものをお選んだ方が良いでしょう。
ここでは、いくつか有名どころのものをOSごとに紹介しておきます。
Windows
Notepadがあまりに非力なのでなんらかのエディタをインストールする必要があるかもしれません。
秀丸エディタは、古くからあるWindows用の定番エディタです(有料)。日本語対応で、検索機能や起動の速さ、扱えるファイルサイズの大きさをかなり大きく設定できるだとか、無制限のアンドゥ(取り消し)、機能の追加やキーのカスタマイズもでき、非常に多くの機能があることが特徴です。Wikiによれば、
秀丸エディタは多くの機能を搭載するが軽快に動作し、常駐モードなどでさらなる動作速度のアップを図っている。 また、C言語に似た文法を持つ独自のマクロ機能を搭載しており、これにより、定型作業の効率化、複雑な作業の一本化を図ることができる。単なる動作記録としてでなく、分岐条件やDLLへのアクセス、各種プログラムの実行などが可能となっており、単なるエディタに留まらない作業が可能。サイトー企画では、これらのライブラリを用意しユーザーからのマクロを一括して紹介しており、多数のマクロが公開されている。
です。
TeraPad(テラパッド)は、Windows上で動くフリーのテキストエディタです。HTMLファイルのタグが自動的に色分け表示されたり、行番号を表示できたり、アンドゥの回数が多く、そして、ブラウザでのプレビュー機能があったりします。 Wikiによれば
TeraPad の機能を拡張するため、外部ツールという形で他のプログラムを登録・実行することができる。例えば、外部ツールを利用することによって以下のようなこと等を行うことが出来る。 ・正規表現 ・コンパイラ の呼び出し ・マクロ
サクラエディタは、オープンソースで開発されている老舗の無料のテキストエディタです。 日本発のテキストエディタで、ヘルプが充実しています。複数のファイルから簡単に探し出したい文字列を検索できるGrep機能や、文字列をソートできるなどカスタマイズ機能が充実しています。 Wikiによれば
標準でクリーム色の背景。プログラムのソースコードを編集するのに向いており、キーワードの強調表示・アウトライン解析・補完入力などが使用できる。また、基本的な機能として複数エンコード・Grep・マクロ等も完備する。 他のエディタにない特徴としては、改行コードが混在した文書を扱える点があげられる。Shift_JIS, ISO-2022-JP, EUC-JP, UTF-16, UTF-8, UTF-7 など各種文字コードにも対応しているが、旧ANSI版(Ver.1.x)ではShift_JISに変換したデータを保持していたため、Shift_JISで表現できない文字は扱えないという制約があった。そのため、有志によりUnicode版の開発が進められ、2011年2月11日にVer.2として正式版が公開された。 現在は公式の32bit版と有志による64bit版がある。 とあります。
Mac
Macにデフォルトでインストールされている「テキストエディット」は、思ったより高機能ではありますが、それでも若干非力さを感じます。
- TextMateはMacでは定番のエディタです。Ruby on Railsのプログラマ達がよく使っているという話もあり、海外では人気のエディタです。作業中のフォルダ全体の検索ができたり、テキストのペーストのような一般的な操作を行った際のオートインデントができたり、{}のような文字の左右ペアの自動入力等、さまざまな便利機能が付いています。TextMate2になってからは、日本語のことも解決しているようです。
- miは歴史のある国産テキストエディタです。ソースコードを書くのに便利な多くの機能がありつつも、軽量で無料で使えます。豊富なライブラリが用意され、またユーザ独自のカスタマイズにも対応しており、上級者にとっても使い勝手の良いテキストエディタです。
Linux
デフォルトではたいていの場合Vimがインストールされています。Emacsというエディタも、コマンド1つですぐにインストールが可能です。
この2つのエディタは、エディタ戦争というような言葉が生まれるほど、プログラマにとってこれら2つのエディタは多く使われ、そしてどちらが良いかと言う問題で議論されていました(まあ、たぶん、使い慣れたものが良い、というのが結論のような気もします。後述するようにコピーなどのキーが通常のものと全く違うので、なかなか他者に乗り換えられないという事情も影響しているかもです)。
ただ、こんな有名な2つのエディタですが、これらはWindowsやMacの一般的なアプリケーションとキーが違うので、なかなか敷居が高いと思います。はじめて立ち上げたときは、どうすれば終了できるのかさえわからない、という状態になったことがある人は数知れません。
そこで、別の2つのエディタを紹介しておきます。
- GeditはLinuxのディストリビューションでCentOSやUbuntuでGnomeというデスクトップ環境をインストールした場合、インストールされるエディタです。Windowsのエディタと使い勝手にあまり差がなく、上記のVimやEmacsが使えない人には選択肢としてはあるかもしれません。
- Sublime Text 3はLinuxでもMacでもWindowsでも使えるエディタです。sublime_text_3_build_3083_x64.tar.bz2をダウンロードしてきます(2015年5月20日現在)。ナイトビルドのsublime_text_3_build_3086_x64.tar.bz2ですと「レジストキーを入力せよ」というような画面が出て、立ち上がりませんでした。 CentOS7では次のようにインストールして使えます(Ubuntuでも同様です)。
1
2
3
4
5
6
7
8
9
su #パスワードを入れる
cd
mkdir src #あったら必要ない
cd src
wget http://c758482.r82.cf2.rackcdn.com/sublime_text_3_build_3083_x64.tar.bz2
tar xvjf sublime_text_3_build_3083_x64.tar.bz2
mv sublime_text_3 /usr/lib/
ln -s /usr/lib/sublime_text_3/sublime_text /usr/bin/sublime3
sublime3&
で立ち上がるはずです。ただ、このままでは日本語等が入力できませんが、ここに日本言入力できるようにする記事がありますので参照ください。
エディタは何が良いか?
もともと趣味的なところが大きいので、どれを気に入るかというのが本当のところですが、いくつかの視点を指摘しておきます。
- 有料か無料か
- OSをまたがって利用できるか
- 色々な機能を追加できるか
- キーのカスタマイズができるか
などなどです。
とくに2が重要になるシチュエーションというのもあります。つまり、サーバーとしてはLinux系がまだまだ多く利用されていますので、サーバーでの作業をする可能性のあるプログラマは利用できるエディタがどうしてもVimとEmacsに限られてきます。また、これら2つのエディタはOSを実は選びません。
もちろん、Xwindowsが使えるならば、上記のsublimeも利用できますが、通常、サーバーではXwindowsはメモリーを食うし、セキュリティホールになる可能性もあり、インストールしないのが普通です。
さらに、この下で述べるすべてのIDEでEmacsのキーにすることが可能だと言うことも指摘しておきます(Vimにすることが可能なものもある)。
そう考えると、
- 複数のOSを使う可能性がある
- サーバーで作業する可能性がある
というようなプログラマは、敷居の高いVimとEmacsですが、少し慣れるには時間がかかりますが、一度挑戦してみるのも良いかもしれません。
IDE(統合環境)
コンパイル等が必要だったり、大規模な開発でない限りIDEはプログラミングで必須ということではありません。ただ、強力な機能を持っていて、関数や変数の補完やコードのフォーマット、サーバーへのデプロイなど多彩な機能を持っているものが多くあります。その中でも有名なものをいくつかピックアップしておきます。
- Eclipse Javaで最も普及しているオープンソースのIDE。
IntelliJ IDEA JetBrainsが開発したIDE。ZeroTurnaroundの調査によると、JavaのIDEとしてはEclipseに続いて2番人気。これを各言語にカスタマイズしたPhpStormやRubyMineなども人気(有料)。
1 2 3 4 5
IntelliJ IDEA Ultimate Edition --+--> RubyMine | | +--> Community Edition +--> PyCharm | +--> PhpStorm --> WebStorm
- NetBeans Oracleが中心としたコミュニティで開発されているIDE。
これらを使いこなせるようになったら、プログラマとして、きっと一人前になっているでしょう!
脚注
環境編集には「ユーザ環境変数」と「システム環境変数」があります。「ユーザ環境変数」は、ログインしているユーザーのみが利用する変数です。ユーザーごとに設定したい場合はこちらを設定します。システムやバッチ処理で環境変数を利用する場合は、「システム環境変数」を設定します。 ↩