アプリケーションの起動・停止
アプリケーションの起動や停止、および再実行の際、環境変数の設定や連携するアプリケーションの起動など複数のコマンドが必要なことはめずらしくありません。シェルスクリプトにアプリケーションの起動や停止、再実行時に繰り返しおこなうコマンドをまとめておくことで、作業を効率化できます。
インフラエンジニアやサーバーサイドエンジニアの応募資格でよく目にすることがある「shell」。とは言え、「shellエンジニア」として募集されるケースは少なく、あまり馴染みがない人も多いかもしれません。
この記事では、shellに関する基本的な知識を詳しく解説します。最後にshellエンジニアの将来性についても触れるため、shellに興味がある人はぜひ最後まで読んでみてください。
目次
shellは、ユーザーとコンピューターのオペレーティングシステム(OS)との間で仲介役を担うプログラムです。具体的には、シェルはOSの中核であるカーネルとのやりとりを可能にする窓口役として機能します。シェルを通じて、ユーザーはコマンドをカーネルに送信し、カーネルからの応答や結果を受け取ることができます。
さらに、シェルはコマンドラインインターフェースを提供し、スクリプトの実行やプログラムの起動など、システムとの対話をより広範にサポートします。
shellの仕組みをわかりやすく表すと以下の通りです。
【1】ユーザーが入力したコマンドをshellが受け取る
【2】shellがカーネルに処理を依頼する
【3】カーネルが処理結果をshellに返す
【4】shellがユーザーに処理結果を表示する
私たちユーザーはコンピューターと直接やり取りしているわけではなく、shellが仲介役として、コマンドや処理結果をコンピューターやユーザーが理解できる形に変換して伝えてくれているのです。
shellはユーザーとカーネルの窓口役です。shellを用いることで、以下のことが可能になります。
●定期的なシステムのバックアップ
●指定時間になったら特定のファイルを他のディレクトリに移動する
●OS起動時のアプリケーションの各種設定 など
またシェルスクリプトを用いれば、より複雑な動作を定期的におこなうよう指示することもでき、作業の効率化に貢献します。
ブラウザにもInternet ExplorerやChromeなどさまざまな種類があるように、shellにもいくつか種類があります。それぞれ機能性なども異なるため、目的に応じたshellを選びましょう。以下に代表的なものを紹介します。
bashは「Bourne Again shell」の略で、UNIX系のOSで用いられるshellです。多くのUNIX系OSで使用されており、Linux、macOS、そしてWindowsのSubsystem for Linuxでも利用可能です。変数や関数、演算処理など多くの機能が付加されているため、簡単なプログラムであればbashだけで記述できます。
shは「Bourne shell」の略で、先ほど紹介したbashをはじめさまざまなshellの前身となったshellです。
cshは「C shell」の略で、UNIX系のOSで用いられるshellです。C shell系とBourne shell系は全く異なる系統で、C shell系はその名の通り、C言語に似た文法なのが特徴です。tcshはC shellの派生形で、ユーザーインターフェース部分を中心に拡張されたshellです。
kshは「Korn shell」の略で、shを上位互換したshellの1つです。POSIX標準にも準拠しており、shのスクリプトがそのまま利用できる互換性があります。
zshは「Z Shell」の略で、kshの機能に加えてbashやcshの機能を取り入れた非常に拡張性の高いシェルです。特にカスタマイズ性が高く、作業効率を向上させる機能が多く含まれています。
シェルスクリプトとは、shell上で実行できるコマンドを複数まとめたファイルのことです。shell上で使えるプログラミング言語のことを指すこともあります。シェルスクリプトを使わなくても一つ一つコマンドを入力することでカーネルとやり取りすることは可能ですが、シェルスクリプトで事前に指示内容を定義しておくことで複雑な指示を効率的に実行できるのです。
シェルスクリプトはファイルの移動やコピー・ペースト、ログの記録・抽出などの基本的な操作を自動化できるため、主に作業の効率化に役立ちます。以下では、シェルスクリプトを使用することで具体的にどのようなことができるのかを紹介します。
アプリケーションの起動・停止
アプリケーションの起動や停止、および再実行の際、環境変数の設定や連携するアプリケーションの起動など複数のコマンドが必要なことはめずらしくありません。シェルスクリプトにアプリケーションの起動や停止、再実行時に繰り返しおこなうコマンドをまとめておくことで、作業を効率化できます。
ルーティン作業の自動化
シェルスクリプトは他のプログラミング言語やツールとの連携ができるため、複雑なタスクを自動化することができます。
例えば、ジョブ管理ツール「cron」とジョブスクリプトを組み合わせると、分・時間・日・曜日・月単位で自動的に実行するプログラムを設定できます。このプログラムを設定することで、毎週決まった曜日に実行するルーティン作業などを自動化することが可能です。
データの抽出
LinuxやUnixを操作する際、ログファイルやデータの出力結果から必要なデータのみを抽出することがよくあります。任意のデータを抽出できる「grepコマンド」を利用することもできますが、複雑な処理を行う場合は何度も入力する必要があり、手間がかかります。シェルスクリプトを利用するだけで簡単にデータの抽出が可能になるため、効率的に作業が進められます。
名前が似ているためshellと混同されることが多いですが、shellはプログラム、シェルスクリプトは複数のコマンドをまとめたファイルと覚えておきましょう。
作業の効率化や自動化に関する技術は他にも多くありますが、shellが選ばれる理由は何なのでしょうか?以下でshellを使うメリットを三つ紹介します。
shellはコマンドラインインタプリンタの一つであり、コンパイルを行う必要がありません。同様にシェルスクリプトもコンパイル不要の言語です。変換作業が無いため簡単に実行でき、確認や修正の手間が軽減する点がメリットです。またこれにより、迅速な開発や運用も可能にします。
shellおよびシェルスクリプトの強みは「自動化」にあります。あらかじめ必要なコマンド内容をシェルスクリプトにまとめておけば、業務の効率化につながります。
特に開発業務や運用・保守などの業務においては、よく使うコマンドが決まっているケースが多く、shellでの処理を習得しておくことで格段に作業効率を上げられます。またshellを使った処理の手順がまとめられていれば、知識の有無に関係なく作業に使うことができるため、作業量を分散できたり、属人化を防いだりするメリットもあります。
シェルスクリプトは他のプログラミング言語やツールと連携することができます。そのため、より複雑な作業を自動化することが可能です。
またシェルスクリプトは拡張性が高く、既存のシェルスクリプトに修正を加えるだけで新しい機能やタスクに対応できます。一度作成したシェルスクリプトはその後も継続して使用でき、他のシェルスクリプトから呼び出すことも可能です。
shellの活用例やメリットを知り、利用してみたいと感じた人は多いと思います。ここでは、shellの中でも代表的なBashの使い方を見ていきましょう。macOSであれば、Bashはインストール済みです。Windowsであれば、WSLをインストールすることで利用可能になります。
shellはコマンド(命令)を入力することで実行することができます。リダイレクト機能を用いれば、処理結果やエラーなどの出力先を変更することもできます。
システムのログインシェルに「Bash」が設定されている場合は、Bashのコマンド入力が可能です。そのほか外部コマンドとしてBashを起動させることや、シェルスクリプトの1行目に”#!/bin/bash”とすることでBashコマンドを入力することもできます。
shellのコマンドには内部コマンドと外部コマンドがあります。以下はshellを使うときによく利用されるファイルやディレクトリの操作をおこなうコマンドです。
ls:ディレクトリにあるファイルの一覧を表示する
mkdir:ディレクトリ(フォルダ)を作成する
cd:ディレクトリを移動する
pwd:ディレクトリのパスと名前を表示する
cp:ファイルをコピーする
mv:ファイルを移動する
more:メッセージやファイルの内容を1ページずつ表示する
rmdir:ディレクトリを削除する
rm:ファイルを削除する
man:コマンドの使い方を表示する
shellはUNIXやLinux系のOSを扱うエンジニア、特にインフラエンジニアにとっては必須スキルとされることが多い技術です。また「shellエンジニア」という職種名よりも、「インフラエンジニア」「サーバーエンジニア」といった職種名で採用がおこなわれているケースも多いのが特徴です。ここでは、shellやシェルスクリプトを利用して何らかの処理を実行するエンジニアのことを「shellエンジニア」と総称して解説していきます。
shellエンジニアの仕事内容として、代表的なものは以下の三つです。
シェルスクリプトによるバッチ処理の開発
バッチ処理をするためのシェルスクリプトを記述する仕事です。バッチ処理をする際は「バッチファイル」を使うことも多いですが、シェルスクリプトはバッチファイルよりも複雑なロジックや変数を使用でき、強力なため、必要に応じて利用されます。また、バッチ処理の際はcronなど他のプログラムと組み合わせることが多いのも特徴です。
インフラ系のスクリプトやツールの作成
インフラ系のスクリプトやツールを作成する仕事です。コンピューターの起動・停止の際に必要になる各種ソフトウェア・ミドルウェアの起動や環境変数の設定など、複数のコマンドが必要な作業を自動化することで作業の効率化につながります。
C言語やSQLなど他言語での起動スクリプトの作成
他言語でのプログラムを作成する仕事です。shellはカーネルからの実行結果を提供するだけでなく、C言語やSQLなどで記述した処理を実行することもできます。データベースの管理やシステム運用などでは同じ作業を繰り返しおこなうような処理が多いため、その処理内容をスクリプトとして作成することで作業を効率化できます。
shellエンジニアになるには、シェルスクリプトさえ作成できれば良いというものでなく、UNIXコマンドや他言語の知識も必要になります。以下にshellエンジニアに必要なスキルや経験を詳しく解説します。
UNIX・ Linuxの基礎知識
shellはUNIX・Linuxを扱う現場で利用されることが多く、以下は必須の基礎知識となります。
●ファイルシステムの基本的な概念
●ファイルやディレクトリの作成、削除、移動など
●プロセスの作成、実行、管理、停止など
●ユーザーやグループの管理、アクセス制御
●システムログの監視やデバッグツールの使用方法
●ネットワークの基本的な概念
他のプログラミング言語の基礎知識
シェルスクリプトは他言語と組み合わせて利用することも可能です。PythonやPerl、RubyやC言語、Javaなどの代表的な言語を身につけておくと、より複雑な処理も可能になります。
システム自動化の知識
shellは作業の効率化に役立つ技術であり、特に最近はシステムを自動化する場面で求められることが増えています。AnsibleやChefなどの自動化に関するツールやソフトに関する知識を身につけておくと、より市場価値の高いエンジニアとして活躍できるでしょう。
shellは業務効率化に非常に役立つ技術であり、人手不足が懸念される業界では今後さらに需要が高まることが予測されています。また、shellはインフラエンジニアの必須技術として実務経験が求められるケースも増えており、shellに関する技術を身につけておくことで活躍の幅が広がることは間違いありません。さらにPHPやJavaなど主要な言語を習得しているエンジニアと比較すると、shellを習得しているエンジニアは少ないため、shellエンジニアは希少価値の面でも有利と言えるでしょう。
shellはユーザーとOS(カーネル)の窓口役であり、シェルスクリプトはshell上で実行するためのコマンドをまとめたファイルのことです。shellやシェルスクリプトの知識や技術を身に付けることで作業効率を格段に上げることができます。こうした技術は業界問わずさまざまな場面で求められるため、shellやシェルスクリプトのスキルは今後非常に重宝されることが予測されます。
またshellの技術は他言語のツールやプログラムと組み合わせて利用することでさらに複雑な処理が可能になります。shellのスキルを+αとして身に付けることで、市場価値の高いエンジニアとして活躍できるでしょう。
文/赤池沙希
NEW!
NEW!
タグ