※本記事にはプロモーション(広告)を含みます。

Bashスクリプトを使いこなせば、日々の作業を自動化し、システム管理の効率を劇的に向上させられます。Linuxサーバーやクラウド環境で繰り返し実行するコマンドを1つのスクリプトにまとめることで、人的ミスを減らし、作業時間を最大90%短縮できます。本記事では、Bashスクリプトの基本から実践的なテクニックまで、具体的なサンプルコードと共に解説します。初心者でも理解できるように、段階的に学習できる構成となっており、すぐに実務で活用できる内容です。


目次


Bashスクリプトとは何か

Bashスクリプトは、Linux/Unix系システムで動作するシェルスクリプトの一種で、コマンドライン操作を自動化するためのプログラミング言語です。Bash(Bourne-Again SHell)は、Unixシェルの一種であり、コマンドの実行、ファイル操作、プロセス管理など、システム管理に必要な機能を提供します。

Bashスクリプトの主な特徴は以下の通りです。

  • 軽量で高速:専用のインタープリタで動作するため、PythonやPerlと比較して起動が速い
  • システムとの親和性が高い:Linux/Unixのコマンドラインと直接連携可能
  • 学習コストが低い:基本的な構文は数時間で習得できる
  • 自動化に最適:定型業務の繰り返し実行を効率化

例えば、毎朝実行するログファイルのバックアップや、サーバーのステータス監視などを自動化できます。以下は、簡単なBashスクリプトの例です。

#!/bin/bash
# 現在時刻を取得してログに記録
current_time=$(date +"%Y-%m-%d %H:%M:%S")
echo "[$current_time] バックアップを開始します" >> /var/log/backup.log

# バックアップ処理
tar -czf /backup/data_$(date +%Y%m%d).tar.gz /home/user/data

# 処理完了を記録
echo "[$(date +"%Y-%m-%d %H:%M:%S")] バックアップが完了しました" >> /var/log/backup.log

このスクリプトを実行すると、現在時刻と共にバックアップ処理の開始・終了がログファイルに記録されます。このように、Bashスクリプトはシステム管理の定型業務を自動化する強力なツールです。


実行環境のセットアップ

Bashスクリプトを実行するには、LinuxまたはmacOSの環境が必要です。Windows環境では、WSL(Windows Subsystem for Linux)を使用するか、Git Bashなどのターミナルエミュレータを利用します。

Linux環境の準備

ほとんどのLinuxディストリビューションにはBashが標準でインストールされています。以下のコマンドでバージョンを確認できます。

$ bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)

Bashのバージョンは5系以上を推奨します。古いバージョン(3系以下)では、一部の機能が動作しない場合があります。

WSLを使用したWindows向けBash実行環境の構築

Windows 10/11では、WSLを利用してLinux環境を構築できます。以下の手順でセットアップします。

  1. 管理者権限でPowerShellを開き、以下のコマンドを実行
  2. wsl --install
  3. UbuntuなどのLinuxディストリビューションをインストール
  4. WSLを起動し、Bashを実行
  5. wsl

WSL環境では、Linuxと同じようにBashスクリプトを実行できます。

Git Bashを使用する方法

Git for Windowsをインストールすると、Git Bashが利用できます。これは、Windows上で動作するBash互換のターミナルです。

  1. Git for Windowsをダウンロードしてインストール
  2. Git Bashを起動し、以下のコマンドでBashのバージョンを確認
  3. $ bash --version

Git Bashは、WindowsネイティブのコマンドとBashコマンドを併用できるため、Windows環境での作業効率が向上します。

スクリプトファイルの作成と実行権限の付与

Bashスクリプトは、テキストファイルとして作成します。以下の手順でスクリプトを作成し、実行権限を付与します。

  1. スクリプトファイルを作成(例:backup.sh)
  2. $ nano backup.sh
  3. 以下の内容を入力
  4. #!/bin/bash
    echo "Hello, World!"
  5. ファイルを保存し、実行権限を付与
  6. $ chmod +x backup.sh
  7. スクリプトを実行
  8. $ ./backup.sh
    Hello, World!

注意事項:スクリプトの先頭には、#!/bin/bash(シェバン)を記述します。これは、スクリプトを実行する際に使用するインタープリタを指定するためのものです。


Bashスクリプトの基本構文

Bashスクリプトの基本構文は、他のプログラミング言語と比較してシンプルです。以下に、主要な構文要素を解説します。

コメントの記述

Bashスクリプトでは、#記号を使用してコメントを記述します。コメントはスクリプトの実行には影響しません。

# これはコメントです
echo "Hello, World!"  # この行もコメントです

コマンドの実行

Bashスクリプトでは、コマンドラインと同じようにコマンドを実行できます。コマンドの実行結果は、変数に格納したり、別のコマンドに渡したりできます。

# 現在の日付を表示
date

# ディレクトリの内容を表示
ls -l

# コマンドの実行結果を変数に格納
current_date=$(date)
echo "現在の日付: $current_date"

コマンド置換

コマンド置換は、コマンドの実行結果を変数に格納するための構文です。以下の2つの方法があります。

  • $(command):推奨される方法
  • `command`:古い形式(非推奨)
# 推奨される方法
current_user=$(whoami)
echo "現在のユーザー: $current_user"

# 古い形式(非推奨)
current_user=`whoami`
echo "現在のユーザー: $current_user"

引数の取得

Bashスクリプトでは、コマンドライン引数を取得できます。引数は、$1、$2、…、$9で参照できます。10個以上の引数を取得する場合は、${10}のように中括弧で囲みます。

#!/bin/bash
echo "スクリプト名: $0"
echo "第1引数: $1"
echo "第2引数: $2"
echo "すべての引数: $@"

このスクリプトを./script.sh arg1 arg2のように実行すると、以下の出力が得られます。

スクリプト名: ./script.sh
第1引数: arg1
第2引数: arg2
すべての引数: arg1 arg2

リダイレクトとパイプ

Bashスクリプトでは、リダイレクトとパイプを使用して、コマンドの入出力を制御できます。

  • >:出力をファイルに上書き
  • >>:出力をファイルに追記
  • <:ファイルから入力を読み込み
  • |:コマンドの出力を別のコマンドに渡す
# 標準出力をファイルにリダイレクト
echo "Hello, World!" > output.txt

# 標準出力を追記
echo "追記します" >> output.txt

# コマンドの出力を別のコマンドに渡す
ls -l | grep ".sh"

# ファイルから入力を読み込み
cat < input.txt

終了ステータス

Bashスクリプトでは、コマンドやスクリプトの実行結果を終了ステータス(exit status)で確認できます。終了ステータスは、$?変数で参照できます。終了ステータスが0の場合は成功、0以外の場合はエラーを示します。

# 成功するコマンド
ls -l
echo "終了ステータス: $?"

# 失敗するコマンド
ls /nonexistent
echo "終了ステータス: $?"

変数とデータ型

Bashスクリプトでは、変数を使用してデータを格納し、操作できます。変数は、他のプログラミング言語と比較して柔軟な使い方ができますが、型の概念はありません。

変数の宣言と代入

Bashでは、変数を宣言する際に=を使用します。変数名と値の間にスペースを入れないように注意してください。

# 変数の宣言と代入
name="Alice"
age=30

# 変数の参照
echo "名前: $name"
echo "年齢: $age"

注意事項:変数名には、英字、数字、アンダースコア(_)を使用できます。ただし、数字で始まる変数名は使用できません。

変数のスコープ

Bashでは、変数のスコープはデフォルトでグローバルです。関数内で宣言された変数は、関数の外でも参照できます。ローカル変数を宣言するには、localキーワードを使用します。

#!/bin/bash

# グローバル変数
global_var="global"

# 関数内でローカル変数を宣言
function test_scope {
  local local_var="local"
  echo "関数内: global_var=$global_var, local_var=$local_var"
}

test_scope
echo "関数外: global_var=$global_var, local_var=$local_var"  # local_varは参照できない

特殊変数

Bashには、システムやスクリプトの状態を示す特殊変数が用意されています。

変数名説明
$0スクリプト名
$1〜$9第1〜第9引数
$@すべての引数
$#引数の数
$?直前のコマンドの終了ステータス
$$現在のスクリプトのプロセスID
$USER現在のユーザー名
$HOMEホームディレクトリのパス
$PWD現在の作業ディレクトリ

変数の操作

Bashでは、変数の操作に多くの組み込み機能が用意されています。以下に代表的な操作を紹介します。

文字列操作

# 文字列の長さを取得
str="Hello, World!"
echo ${#str}  # 13

# 部分文字列の取得
echo ${str:0:5}  # Hello

# 文字列の置換
echo ${str/World/Universe}  # Hello, Universe!

算術演算

Bashでは、算術演算を行う際に$(( ))構文を使用します。

# 足し算
echo $((1 + 2))  # 3

# 掛け算
echo $((3 * 4))  # 12

# 割り算
echo $((10 / 2))  # 5

# 剰余
echo $((10 % 3))  # 1

注意事項:Bashでは、浮動小数点演算はサポートされていません。浮動小数点演算が必要な場合は、bcコマンドやawkコマンドを使用します。

# bcコマンドを使用した浮動小数点演算
echo "3.14 * 2" | bc
# 6.28

配列

Bashでは、配列を使用して複数の値を格納できます。配列は、()で囲んで宣言します。

# 配列の宣言
fruits=("apple" "banana" "orange")

# 配列要素の参照
echo ${fruits[0]}  # apple
echo ${fruits}  # banana

# 配列の長さを取得
echo ${#fruits[@]}  # 3

# 配列要素の追加
fruits="grape"
echo ${fruits[@]}  # apple banana orange grape

環境変数

環境変数は、システムやユーザーの設定を格納する変数です。Bashスクリプトでは、環境変数を使用してシステムの情報を取得したり、設定を変更したりできます。

環境変数を表示するには、envコマンドまたはprintenvコマンドを使用します。

$ env
PATH=/usr/local/bin:/usr/bin:/bin
HOME=/home/user
USER=user
SHELL=/bin/bash

環境変数を設定するには、exportコマンドを使用します。

# 環境変数を設定
export MY_VAR="Hello, World!"

# 設定した環境変数を表示
echo $MY_VAR  # Hello, World!

注意事項:環境変数は、現在のシェルとその子プロセスにのみ影響します。永続的に設定するには、~/.bashrcや~/.bash_profileに追記します。


制御構造(条件分岐・ループ)

Bashスクリプトでは、条件分岐やループを使用して、柔軟な処理フローを実現できます。以下に、代表的な制御構造を解説します。

条件分岐(if文)

Bashのif文は、条件式に基づいて処理を分岐します。条件式は、testコマンドまたは[ ]構文で記述します。

# 基本的なif文
if [ 条件式 ]; then
  # 条件式が真の場合の処理
fi

# 例:ファイルが存在するかどうかを確認
if [ -f "/etc/passwd" ]; then
  echo "ファイルが存在します"
fi

# if-else文
if [ 条件式 ]; then
  # 条件式が真の場合の処理
else
  # 条件式が偽の場合の処理
fi

# if-elif-else文
if [ 条件式1 ]; then
  # 条件式1が真の場合の処理
elif [ 条件式2 ]; then
  # 条件式2が真の場合の処理
else
  # すべての条件式が偽の場合の処理
fi

条件式の種類

Bashの条件式には、以下のような種類があります。

条件式説明
-f ファイル名ファイルが存在し、通常ファイルである
-d ディレクトリ名ディレクトリが存在する
-e ファイル名ファイルが存在する
-r ファイル名ファイルが読み取り可能である
-w ファイル名ファイルが書き込み可能である
-x ファイル名ファイルが実行可能である
-z 文字列文字列が空である
-n 文字列文字列が空でない
文字列1 == 文字列2文字列が等しい
文字列1 != 文字列2文字列が等しくない
整数1 -eq 整数2整数が等しい
整数1 -ne 整数2整数が等しくない
整数1 -lt 整数2整数1が整数2より小さい
整数1 -le 整数2整数1が整数2以下である
整数1 -gt 整数2整数1が整数2より大きい
整数1 -ge 整数2整数1が整数2以上である

注意事項:[ ]構文を使用する際は、条件式の前後にスペースを入れる必要があります。また、==や!=を使用する際は、[ ]構文内で使用します。

# 正しい例
if [ "$name" == "Alice" ]; then
  echo "名前はAliceです"
fi

# 誤った例(スペースが不足)
if ["$name"=="Alice"]; then
  echo "名前はAliceです"
fi

case文

case文は、複数の条件に基づいて処理を分岐する際に使用します。case文は、if-elif-else文よりも読みやすい構文です。

# 基本的なcase文
case 変数 in
  パターン1)
    # パターン1に一致した場合の処理
    ;;
  パターン2)
    # パターン2に一致した場合の処理
    ;;
  *)
    # いずれのパターンにも一致しない場合の処理
    ;;
esac

# 例:引数に基づいて処理を分岐
case $1 in
  "start")
    echo "サービスを開始します"
    ;;
  "stop")
    echo "サービスを停止します"
    ;;
  "restart")
    echo "サービスを再起動します"
    ;;
  *)
    echo "無効な引数です"
    ;;
esac

ループ処理

Bashでは、forループとwhileループを使用して、繰り返し処理を実行できます。

forループ

forループは、リストや範囲に基づいて処理を繰り返します。

# リストに基づくforループ
for fruit in apple banana orange; do
  echo "フルーツ: $fruit"
done

# 範囲に基づくforループ
for i in {1..5}; do
  echo "カウント: $i"
done

# C言語形式のforループ
for ((i=0; i<5; i++)); do
  echo "カウント: $i"
done

# コマンドの実行結果に基づくforループ
for file in $(ls); do
  echo "ファイル: $file"
done

whileループ

whileループは、条件式が真の間、処理を繰り返します。

# 基本的なwhileループ
count=0
while [ $count -lt 5 ]; do
  echo "カウント: $count"
  ((count++))
done

# 無限ループ
while true; do
  echo "無限ループです"
  sleep 1
done

# untilループ(条件式が偽の間、処理を繰り返す)
count=0
until [ $count -ge 5 ]; do
  echo "カウント: $count"
  ((count++))
done

ループの制御

ループ処理を制御するために、breakとcontinueを使用できます。

# breakを使用してループを終了
for i in {1..10}; do
  if [ $i -eq 5 ]; then
    break
  fi
  echo "カウント: $i"
done

# continueを使用して現在のイテレーションをスキップ
for i in {1..5}; do
  if [ $i -eq 3 ]; then
    continue
  fi
  echo "カウント: $i"
done

関数の定義と活用

Bashスクリプトでは、関数を使用してコードの再利用性を高められます。関数を定義することで、同じ処理を何度も記述する手間を省けます。

関数の定義

Bashの関数は、以下の形式で定義します。

# 関数の定義
function 関数名 {
  # 処理
}

# または
関数名() {
  # 処理
}

# 関数の呼び出し
関数名 引数1 引数2

以下は、関数の定義と呼び出しの例です。

#!/bin/bash

# 関数の定義
greet() {
  echo "Hello, $1!"
}

# 関数の呼び出し
greet "Alice"
greet "Bob"

関数の引数

Bashの関数では、引数を受け取ることができます。引数は、$1、$2、...で参照できます。

#!/bin/bash

# 関数の定義
add() {
  local sum=$(( $1 + $2 ))
  echo "合計: $sum"
}

# 関数の呼び出し
add 3 5  # 8
add 10 20  # 30

関数の戻り値

Bashの関数では、戻り値として終了ステータスを返すことができます。終了ステータスは、$?変数で参照できます。

#!/bin/bash

# 関数の定義
is_even() {
  local num=$1
  if [ $((num % 2)) -eq 0 ]; then
    return 0  # 真
  else
    return 1  # 偽
  fi
}

# 関数の呼び出し
is_even 4
echo "終了ステータス: $?"  # 0(真)

is_even 5
echo "終了ステータス: $?"  # 1(偽)

注意事項:Bashの関数では、戻り値として文字列や数値を直接返すことはできません。戻り値として使用できるのは、終了ステータス(0〜255)のみです。文字列や数値を返すには、echoを使用して出力し、呼び出し元で受け取ります。

#!/bin/bash

# 関数の定義
get_message() {
  echo "Hello, World!"
}

# 関数の呼び出しと出力の受け取り
message=$(get_message)
echo "メッセージ: $message"

ローカル変数とグローバル変数

Bashの関数内で宣言された変数は、デフォルトでグローバル変数です。関数内でローカル変数を宣言するには、localキーワードを使用します。

#!/bin/bash

# グローバル変数
global_var="global"

# 関数の定義
test_scope() {
  local local_var="local"
  echo "関数内: global_var=$global_var, local_var=$local_var"
}

test_scope
echo "関数外: global_var=$global_var, local_var=$local_var"  # local_varは参照できない

再帰関数

Bashでは、再帰関数を定義できます。再帰関数は、関数内で自分自身を呼び出す関数です。

#!/bin/bash

# 階乗を計算する再帰関数
factorial() {
  local n=$1
  if [ $n -le 1 ]; then
    echo 1
  else
    local prev=$(factorial $((n - 1)))
    echo $((n * prev))
  fi
}

# 関数の呼び出し
result=$(factorial 5)
echo "5の階乗: $result"  # 120

注意事項:再帰関数を使用する際は、スタックオーバーフローを防ぐために、再帰の深さに注意してください。Bashのデフォルトの再帰制限は1000です。


ファイル操作の自動化

Bashスクリプトは、ファイル操作の自動化に非常に適しています。ファイルの作成、コピー、移動、削除、検索など、さまざまなファイル操作を自動化できます。

ファイルの存在確認

ファイルが存在するかどうかを確認するには、-eオプションを使用します。

エラー処理とデバッグ

Bashスクリプトにおけるエラー処理は、予期しない動作や障害が発生した際に、スクリプトが適切に対応するための重要な要素です。主な手法として、set -eやset -uなどのオプションを活用し、エラー発生時にスクリプトを停止させたり、未定義変数の使用を防いだりします。これにより、バグの早期発見や予期せぬ動作の抑制につながります。

デバッグでは、echo文を用いた変数の出力や、set -xによるコマンドの実行履歴の表示が有効です。特に、スクリプトの特定箇所で意図しない動作が発生した場合、set -xを有効にすると、実行されるコマンドや引数が詳細に確認でき、問題の切り分けが容易になります。また、trapコマンドを利用して、特定のシグナル発生時に実行される処理を定義することで、より柔軟なエラー対応が可能です。

一般的なデバッグ手順として、以下のような流れが挙げられます。まず、スクリプト全体の構造を把握し、問題が発生しそうな箇所を特定します。次に、set -xやset -eを活用して、実行過程やエラー発生時の挙動を確認します。最後に、必要に応じてecho文を挿入し、変数の値や処理の進行状況を確認しながら、問題の原因を追究します。

  • エラー処理の基本として、set -e(エラー発生時に即座に終了)やset -u(未定義変数の使用時にエラーを発生)を活用することで、堅牢なスクリプトを作成できます。

実践的なスクリプト例

Bashスクリプトを書く際には、具体的なユースケースに応じた実践的な例を参考にすると理解が深まります。例えば、ファイルの一括処理やシステム監視、データの集計など、日常的に遭遇するタスクを自動化するスクリプトは非常に有用です。これらのスクリプトは、単純な繰り返し作業を減らすだけでなく、ヒューマンエラーを防ぐ効果も期待できます。

実践的なスクリプトを作成する際のポイントは、まず「何を実現したいか」を明確にすることです。例えば、ログファイルから特定のエラーメッセージを抽出する、複数のファイルを1つにまとめる、あるいは定期的にバックアップを取得するといった具体的な目的を設定します。次に、その目的に沿ったコマンドや制御構造(条件分岐やループ)を組み合わせていきます。このように、目的と手段をリンクさせることで、効率的かつ保守しやすいスクリプトが完成します。

以下は、実務でよく使われるスクリプトの一例です。例えば、指定したディレクトリ内のすべてのテキストファイルから特定のキーワードを含む行を抽出するスクリプトです。このようなスクリプトは、ログ解析やドキュメントの検索などに応用できます。

  • 実行例: grep -r "エラーメッセージ" /var/log/ を用いて、ログディレクトリからエラーを検索する

ベストプラクティスとセキュリティ

Bashスクリプトを安全かつ効率的に運用するためには、基本的なベストプラクティスを理解し実践することが重要です。スクリプトの可読性と保守性を高めるため、変数名は明確にし、コメントを適切に記述することが推奨されます。また、エラー処理を適切に行うことで、予期しない動作を防ぐことができます。例えば、set -euo pipefail をスクリプトの冒頭に記述することで、未定義変数の使用やコマンドの失敗を検出しやすくなります。

セキュリティ面では、外部からの入力を扱う際に特に注意が必要です。ユーザー入力を直接コマンドに埋め込むと、コマンドインジェクションのリスクが生じます。これを防ぐためには、入力値を適切にエスケープするか、printf '%q' を使用して安全な形式に変換する方法があります。また、スクリプト内で機密情報(パスワードやAPIキーなど)を扱う場合は、環境変数や専用の設定ファイルに分離し、バージョン管理システムで管理しないようにしましょう。

以下の点にも留意してください:

  • スクリプトの実行権限は必要最小限に設定し、chmod を使用して適切なアクセス制御を行う

よくある質問

Bashスクリプトに関する疑問や実務的な悩みについて、一般的な質問と回答をまとめました。スクリプト作成時の参考にご活用ください。

Q1. Bashスクリプトの実行権限を設定する方法を教えてください

A1. Bashスクリプトを実行可能にするには、まずファイルに実行権限を付与する必要があります。具体的には、chmod +x スクリプト名.sh コマンドを実行します。これにより、所有者に実行権限が付与されます。その後、./スクリプト名.sh のように実行できます。ただし、システムによっては実行権限だけでなく、ファイルの先頭に Shebang(例:#!/bin/bash)を記述することも重要です。Shebangがない場合、実行時に明示的にインタプリタを指定する必要があります。

Q2. Bashスクリプトでエラーが発生した際のデバッグ方法は?

A2. Bashスクリプトのデバッグにはいくつかの方法があります。まず、スクリプトの冒頭に set -x を追加すると、実行されるコマンドが出力されるため、どこでエラーが発生しているか確認しやすくなります。また、set -e を使用すると、エラーが発生した際にスクリプトが即座に終了するようになります。さらに、bash -n スクリプト名.sh を実行すると、構文エラーを事前にチェックできます。これらのオプションを組み合わせることで、効率的にデバッグを進められます。

Q3. Bashスクリプトで変数を安全に扱う方法はありますか?

A3. Bashスクリプトで変数を扱う際は、未定義の変数を参照しないように注意が必要です。例えば、変数を使用する前に ${変数名:-デフォルト値} のようにデフォルト値を設定すると、未定義時のエラーを防げます。また、変数の内容を出力する際は、echo "$変数名" とダブルクォーテーションで囲むことで、空白や特殊文字を含む場合でも正しく扱えます。さらに、set -u を使用すると、未定義の変数を参照した際にエラーを出力するため、安全性が向上します。

Q4. Bashスクリプトを定期実行する方法を教えてください

A4. Bashスクリプトを定期実行するには、通常 cron を使用します。crontab -e コマンドで cron ジョブを編集し、例えば「0 3 * * * /path/to/スクリプト名.sh」のように記述すると、毎日午前3時にスクリプトが実行されます。実行結果はメールで通知されることもありますが、>> /path/to/logfile.log 2>&1 のようにログファイルに出力する設定も可能です。なお、cron の実行環境はユーザーによって異なるため、環境変数の設定に注意が必要です。

まとめ

Bashスクリプトは、LinuxやUnix系システムにおける自動化や効率化を実現する強力なツールです。本記事では、基本的な構文から変数、制御構造、関数、そして実用的な応用例まで幅広く解説しました。これらの要素を組み合わせることで、繰り返し行われる作業の自動化や、システム管理の負担軽減が可能になります。特に、コマンドライン操作に慣れている方にとっては、Bashスクリプトが作業効率を大きく向上させるでしょう。

実務でBashスクリプトを活用する際には、まずは小規模なタスクから始め、徐々に複雑な処理へとステップアップすることが重要です。また、エラーハンドリングやログ出力など、堅牢なスクリプトを作成するための基本的なベストプラクティスにも注意を払う必要があります。スクリプトの保守性や再利用性を高めるためには、コメントの記述やモジュール化も意識するとよいでしょう。これらのポイントを押さえることで、より信頼性の高いスクリプトを作成できるようになります。

【編集・制作ポリシー】
本記事はInfra Academy編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。 編集ポリシーはこちら
ABOUT ME
たから
フリーランスIT講師/エンジニア。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900//サーティファイC言語/情報処理技術者 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営