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

Bashスクリプトを使ってLinuxシステムの自動化を始めましょう。本記事では、Bashの基本構文から実践的な活用方法まで、段階的に学習できる完全ガイドを提供します。初心者でも30分で動くスクリプトを書けるようになる具体的な手順を解説します。


目次


Bashスクリプトとは何か

Bashスクリプトは、Linux/Unixシステムで動作するシェルスクリプトの一種です。コマンドライン上で実行できるコマンドをテキストファイルにまとめ、自動化やバッチ処理に活用します。例えば、毎日決まった時間にデータのバックアップを取るスクリプトや、ログファイルの整理を自動化するスクリプトなどが挙げられます。

Bashスクリプトの最大のメリットは、手動で行っていた作業を自動化できる点です。これにより、作業時間の短縮だけでなく、ヒューマンエラーの防止にもつながります。特に、システム管理者やDevOpsエンジニアにとっては必須のスキルとなっています。

Bashスクリプトは、以下のような場面で活用されています。

  • システムの監視とログ管理
  • 定期的なバックアップ処理
  • ファイルやディレクトリの一括操作
  • ネットワーク設定の自動化
  • アプリケーションのデプロイメント

Bashスクリプトを習得することで、日々の作業効率を大幅に向上させることができます。


Bashスクリプトを書く環境を整える

Bashのインストールと確認

多くのLinuxディストリビューションやmacOSでは、Bashがデフォルトでインストールされています。以下のコマンドでBashのバージョンを確認できます。

bash --version

例えば、Ubuntu 22.04 LTSでは以下のような出力が得られます。

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

Bash 5.x系が推奨されますが、4.x系でも多くの機能を利用できます。Windows環境では、WSL(Windows Subsystem for Linux)を利用してBashを実行できます。

スクリプトファイルの作成

Bashスクリプトは、拡張子「.sh」のテキストファイルとして作成します。以下の手順で簡単なスクリプトを作成してみましょう。

  1. テキストエディタ(nano、vim、VS Codeなど)を開きます。
  2. 以下の内容を入力します。
#!/bin/bash

# 最初のBashスクリプト
echo "Hello, World!"

3. ファイルを保存します。ここでは「hello.sh」という名前で保存します。

スクリプトに実行権限を付与する

Bashスクリプトを実行するには、ファイルに実行権限を付与する必要があります。以下のコマンドを実行します。

chmod +x hello.sh

これで、スクリプトを実行できるようになります。

スクリプトの実行方法

スクリプトを実行する方法には、主に2通りあります。

  1. 直接実行(推奨)
./hello.sh

2. Bashインタプリタで実行

bash hello.sh

直接実行する場合は、スクリプトの先頭に「#!/bin/bash」という shebang(シバン)行を記述する必要があります。これにより、OSがどのインタプリタを使用するかを認識します。

開発環境の整備

Bashスクリプトの開発効率を上げるために、以下のツールを活用しましょう。

ツール用途導入方法
VS Codeスクリプトの編集とデバッグ公式サイトからダウンロード
ShellCheck静的解析ツール(構文エラーの検出)sudo apt install shellcheck(Ubuntu/Debian)
Bash Debuggerスクリプトのデバッグsudo apt install bashdb(Ubuntu/Debian)

VS Codeを使用すると、構文ハイライトや自動補完機能により、効率的にスクリプトを作成できます。また、ShellCheckを導入することで、一般的な間違いを事前に検出できます。


Bashの基本構文をマスターする

変数の使い方

Bashスクリプトでは、変数を使用してデータを保存します。変数の宣言と代入は以下のように行います。

# 変数の宣言と代入
NAME="Alice"
AGE=30

# 変数の参照($を付ける)
echo "Name: $NAME, Age: $AGE"

変数名には大文字と小文字が区別され、アンダースコア(_)を使用できます。また、変数に代入する値が空白を含む場合は、ダブルクォーテーションで囲む必要があります。

MESSAGE="Hello, World!"
echo "$MESSAGE"

変数の値を変更することもできます。

COUNT=1
COUNT=$((COUNT + 1))
echo "Count: $COUNT"

Bashでは、変数のスコープはデフォルトでグローバルです。ローカル変数を使用するには、関数内で「local」キーワードを使用します。

function example {
  local LOCAL_VAR="I'm local"
  echo "$LOCAL_VAR"
}

条件分岐(if文)

Bashスクリプトでは、if文を使用して条件分岐を行います。基本的な構文は以下の通りです。

if [ 条件 ]; then
  # 条件が真の場合の処理
elif [ 別の条件 ]; then
  # 別の条件が真の場合の処理
else
  # いずれの条件も真でない場合の処理
fi

条件式には、以下のような比較演算子を使用します。

演算子説明使用例
-eq等しい[ “$A” -eq “$B” ]
-ne等しくない[ “$A” -ne “$B” ]
-ltより小さい[ “$A” -lt “$B” ]
-le以下[ “$A” -le “$B” ]
-gtより大きい[ “$A” -gt “$B” ]
-ge以上[ “$A” -ge “$B” ]
=文字列が等しい[ “$A” = “$B” ]
!=文字列が等しくない[ “$A” != “$B” ]
-z文字列が空[ -z “$A” ]
-n文字列が空でない[ -n “$A” ]

以下は、if文を使用した具体的な例です。

#!/bin/bash

AGE=25

if [ "$AGE" -ge 18 ]; then
  echo "あなたは成人です。"
else
  echo "あなたは未成年です。"
fi

また、ファイルの存在を確認する場合は、以下のように記述します。

FILE="/path/to/file"

if [ -f "$FILE" ]; then
  echo "ファイルが存在します。"
else
  echo "ファイルが存在しません。"
fi

繰り返し処理(for・while)

Bashスクリプトでは、forループとwhileループを使用して繰り返し処理を行います。

forループ

forループは、リストや範囲内の要素を順に処理します。基本的な構文は以下の通りです。

for 変数 in リスト; do
  # 処理
done

例えば、1から5までの数値を出力するスクリプトは以下のようになります。

#!/bin/bash

for i in {1..5}; do
  echo "Number: $i"
done

また、配列の要素を処理することもできます。

#!/bin/bash

FRUITS=("Apple" "Banana" "Orange")

for fruit in "${FRUITS[@]}"; do
  echo "Fruit: $fruit"
done

whileループ

whileループは、条件が真である間、処理を繰り返します。基本的な構文は以下の通りです。

while [ 条件 ]; do
  # 処理
done

例えば、1から5までの数値を出力するwhileループは以下のようになります。

#!/bin/bash

i=1

while [ $i -le 5 ]; do
  echo "Number: $i"
  i=$((i + 1))
done

また、ユーザーからの入力を待つスクリプトも作成できます。

#!/bin/bash

echo "Enter 'quit' to exit."
read INPUT

while [ "$INPUT" != "quit" ]; do
  echo "You entered: $INPUT"
  read INPUT
done

関数の定義と呼び出し

Bashスクリプトでは、関数を使用してコードの再利用性を高めることができます。関数の定義と呼び出しは以下のように行います。

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

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

# 関数の呼び出し
関数名

例えば、挨拶を表示する関数を定義してみましょう。

#!/bin/bash

greet() {
  echo "Hello, $1!"
}

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

関数に引数を渡すこともできます。Bashでは、引数は位置パラメータ($1, $2, …)として参照されます。また、$@や$*を使用してすべての引数を参照できます。

以下は、引数を受け取る関数の例です。

#!/bin/bash

sum() {
  local total=0
  for num in "$@"; do
    total=$((total + num))
  done
  echo "Sum: $total"
}

sum 1 2 3 4 5

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


実践的なBashスクリプト例

ファイル操作の自動化

Bashスクリプトを使用して、ファイル操作を自動化する方法を紹介します。例えば、特定の拡張子を持つファイルを別のディレクトリに移動するスクリプトを作成してみましょう。

#!/bin/bash

# 移動元と移動先のディレクトリを指定
SOURCE_DIR="/path/to/source"
DEST_DIR="/path/to/destination"

# 移動先ディレクトリが存在しない場合は作成
mkdir -p "$DEST_DIR"

# .txtファイルを移動
for file in "$SOURCE_DIR"/*.txt; do
  if [ -f "$file" ]; then
    mv "$file" "$DEST_DIR/"
    echo "Moved: $file"
  fi
done

このスクリプトでは、以下の処理を行っています。

  1. 移動元と移動先のディレクトリを指定
  2. 移動先ディレクトリが存在しない場合は作成
  3. 移動元ディレクトリ内の.txtファイルを検索
  4. 見つかったファイルを移動先に移動

また、ファイルのバックアップを作成するスクリプトも作成できます。

#!/bin/bash

# バックアップ対象のファイル
FILE="/path/to/important/file.txt"

# バックアップ先のディレクトリ
BACKUP_DIR="/path/to/backups"

# バックアップファイル名(タイムスタンプ付き)
BACKUP_FILE="$BACKUP_DIR/file_$(date +%Y%m%d_%H%M%S).txt"

# バックアップの実行
cp "$FILE" "$BACKUP_FILE"

echo "Backup created: $BACKUP_FILE"

システム監視スクリプト

Bashスクリプトを使用して、システムの監視を行うこともできます。例えば、CPU使用率が一定の閾値を超えた場合にアラートを送信するスクリプトを作成してみましょう。

#!/bin/bash

# 閾値(パーセント)
THRESHOLD=90

# CPU使用率を取得
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')

# CPU使用率が閾値を超えた場合にアラートを送信
if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
  echo "ALERT: High CPU usage detected ($CPU_USAGE%)" | mail -s "CPU Alert" admin@example.com
fi

echo "Current CPU usage: $CPU_USAGE%"

このスクリプトでは、以下の処理を行っています。

  1. CPU使用率を取得
  2. 取得したCPU使用率が閾値を超えているかどうかを判定
  3. 閾値を超えていた場合は、メールでアラートを送信

また、ディスク使用率を監視するスクリプトも作成できます。

#!/bin/bash

# 監視対象のディレクトリ
DIR="/"

# 閾値(パーセント)
THRESHOLD=80

# ディスク使用率を取得
DISK_USAGE=$(df -h "$DIR" | awk 'NR==2 {print $5}' | tr -d '%')

# ディスク使用率が閾値を超えた場合にアラートを送信
if [ "$DISK_USAGE" -gt "$THRESHOLD" ]; then
  echo "ALERT: High disk usage detected ($DISK_USAGE%) on $DIR" | mail -s "Disk Alert" admin@example.com
fi

echo "Current disk usage: $DISK_USAGE% on $DIR"

バックアップスクリプト

Bashスクリプトを使用して、定期的なバックアップ処理を自動化することもできます。例えば、ホームディレクトリのバックアップを作成するスクリプトを作成してみましょう。

#!/bin/bash

# バックアップ対象のディレクトリ
SOURCE_DIR="$HOME"

# バックアップ先のディレクトリ
BACKUP_DIR="/mnt/backups"

# バックアップファイル名(タイムスタンプ付き)
BACKUP_FILE="$BACKUP_DIR/home_backup_$(date +%Y%m%d_%H%M%S).tar.gz"

# バックアップの実行
tar -czf "$BACKUP_FILE" -C "$(dirname "$SOURCE_DIR")" "$(basename "$SOURCE_DIR")"

# バックアップの成功を確認
if [ $? -eq 0 ]; then
  echo "Backup created successfully: $BACKUP_FILE"
else
  echo "Backup failed"
  exit 1
fi

このスクリプトでは、以下の処理を行っています。

  1. バックアップ対象のディレクトリとバックアップ先のディレクトリを指定
  2. バックアップファイル名にタイムスタンプを付与
  3. tarコマンドを使用して、ディレクトリを圧縮
  4. バックアップの成功・失敗を確認

また、リモートサーバーにバックアップを転送するスクリプトも作成できます。

#!/bin/bash

# バックアップ対象のファイル
SOURCE_FILE="/path/to/backup.tar.gz"

# リモートサーバーの情報
REMOTE_USER="user"
REMOTE_HOST="remote.example.com"
REMOTE_DIR="/path/to/backups"

# バックアップの転送
scp "$SOURCE_FILE" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR"

# 転送の成功を確認
if [ $? -eq 0 ]; then
  echo "Backup transferred successfully to $REMOTE_HOST:$REMOTE_DIR"
else
  echo "Backup transfer failed"
  exit 1
fi

Bashスクリプトのデバッグ方法

Bashスクリプトのデバッグは、エラーの原因を特定し、修正するために重要な作業です。以下に、効果的なデバッグ方法を紹介します。

デバッグモードの有効化

Bashスクリプトをデバッグモードで実行することで、スクリプトの実行過程を詳細に確認できます。デバッグモードを有効にするには、以下のいずれかの方法を使用します。

  1. スクリプトの先頭に「set -x」を追加
#!/bin/bash
set -x

echo "Hello, World!"

2. コマンドラインから「-x」オプションを指定して実行

bash -x script.sh

デバッグモードを有効にすると、スクリプトの各行が実行される前に出力されます。これにより、どの行でエラーが発生したかを特定しやすくなります。

ShellCheckの活用

ShellCheckは、Bashスクリプトの静的解析を行うツールです。一般的な間違いやベストプラクティスに反する箇所を検出してくれます。

ShellCheckをインストールするには、以下のコマンドを実行します。

sudo apt install shellcheck  # Ubuntu/Debian
brew install shellcheck      # macOS

ShellCheckを使用してスクリプトを解析するには、以下のコマンドを実行します。

shellcheck script.sh

例えば、以下のスクリプトを解析してみましょう。

#!/bin/bash

if [ $1 = "hello" ]
then
  echo "Hello, World!"
fi

ShellCheckを実行すると、以下のような警告が表示されます。

In script.sh line 3:
if [ $1 = "hello" ]
         ^-- SC2086: Double quote to prevent globbing and word splitting.

この警告は、変数$1をダブルクォーテーションで囲むことを推奨しています。修正後のスクリプトは以下の通りです。

#!/bin/bash

if [ "$1" = "hello" ]
then
  echo "Hello, World!"
fi

trapコマンドの活用

trapコマンドを使用すると、スクリプトの実行中に発生したシグナルやエラーを捕捉し、特定の処理を行うことができます。例えば、スクリプトが終了した際に一時ファイルを削除する処理を行うことができます。

#!/bin/bash

# 一時ファイル
TEMP_FILE="/tmp/tempfile"

# trapコマンドの設定
trap 'rm -f "$TEMP_FILE"; echo "Cleanup done"' EXIT

# 一時ファイルの作成
touch "$TEMP_FILE"

# 何らかの処理
echo "Processing..."

# スクリプトの終了
exit 0

このスクリプトでは、以下の処理を行っています。

  1. trapコマンドを使用して、EXITシグナルを捕捉
  2. EXITシグナルが発生した際に、一時ファイルを削除し、メッセージを表示
  3. 一時ファイルを作成
  4. 何らかの処理を実行
  5. スクリプトを終了

これにより、スクリプトが正常に終了した場合でも、エラーが発生した場合でも、一時ファイルが確実に削除されます。

ログ出力の活用

スクリプトの実行過程を記録することで、デバッグやトラブルシューティングに役立てることができます。以下は、ログ出力を行うスクリプトの例です。

#!/bin/bash

# ログファイル
LOG_FILE="/var/log/myscript.log"

# ログ出力関数
log() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}

# ログの初期化
log "Script started"

# 何らかの処理
log "Processing started"
sleep 2
log "Processing completed"

# ログの終了
log "Script completed"

このスクリプトでは、以下の処理を行っています。

  1. ログファイルのパスを指定
  2. ログ出力関数を定義
  3. スクリプトの開始と終了を記録
  4. 処理の開始と終了を記録

ログファイルを確認することで、スクリプトの実行過程を詳細に把握できます。


Bashスクリプトのベストプラクティス

Bashスクリプトを開発する際には、以下のベストプラクティスを参考にしてください。これにより、保守性や信頼性の高いスクリプトを作成することができます。

Shebangを明記する

スクリプトの先頭には、必ずShebang行を記述してください。これにより、OSがどのインタプリタを使用するかを明確に指定できます。

#!/bin/bash

Shebang行を記述することで、スクリプトを直接実行する際に、正しいインタプリタが使用されます。

変数をダブルクォーテーションで囲む

変数を参照する際には、必ずダブルクォーテーションで囲んでください。これにより、変数に空白が含まれていた場合でも、正しく処理されます。

# 良い例
echo "$VARIABLE"

# 悪い例
echo $VARIABLE

長いオプションを使用する

コマンドオプションは、短い形式ではなく、長い形式を使用してください。これにより、スクリプトの可読性が向上します。

# 良い例
rm --recursive --force directory

# 悪い例
rm -rf directory

エラーハンドリングを行う

スクリプト内でエラーが発生した際には、適切なエラーハンドリングを行ってください。例えば、コマンドが失敗した場合にスクリプトを終了するように設定します。

#!/bin/bash

set -e  # コマンドが失敗した場合にスクリプトを終了

# 何らかの処理
rm file.txt

また、エラーメッセージを表示することで、デバッグが容易になります。

#!/bin/bash

# エラーハンドリング関数
error_exit() {
  echo "$1" 1>&2
  exit 1
}

# 何らかの処理
if ! command; then
  error_exit "Command failed"
fi

関数を活用する

繰り返し使用される処理は、関数として定義してください。これにより、コードの再利用性が向上し、保守性が高まります。

#!/bin/bash

# 関数の定義
log() {
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}

# 関数の呼び出し
log "Script started"
log "Processing started"

ハードコーディングを避ける

スクリプト内に直接値を埋め込む(ハードコーディング)のではなく、変数や環境変数を使用してください。これにより、スクリプトの柔軟性が向上します。

# 良い例
CONFIG_FILE="/etc/myapp/config.conf"

# 悪い例
CONFIG_FILE="/home/user/config.conf"

スクリプトを文書化する

スクリプト内にコメントを記述し、スクリプトの目的や使用方法を文書化してください。また、ヘッダ部分にスクリプトの概要や作成者、作成日などを記述しておくと良いでしょう。

#!/bin/bash
#
# バックアップスクリプト
#
# 作成者: あなたの名前
# 作成日: 2026-01-01
# 説明: ホームディレクトリのバックアップを作成します

# 変数の定義
SOURCE_DIR="$HOME"
BACKUP_DIR="/mnt/backups"

# バックアップの実行
tar -czf "$BACKUP_DIR/home_backup_$(date +%Y%m%d_%H%M%S).tar.gz" -C "$(dirname "$SOURCE_DIR")" "$(basename "$SOURCE_DIR")"

スクリプトをテストする

スクリプトを作成したら、必ずテストを行ってください。テストを行うことで、バグやエラーを早期に発見し、修正することができます。テストケースとしては、以下のようなものが挙げられます。

  • 正常系のテスト(期待通りの動作をするか)
  • 異常系のテスト(エラーが発生した際に適切に処理されるか)
  • 境界値テスト(極端な値を入力した際に適切に処理されるか)
  • パフォーマンステスト(大量のデータを処理した際に適切に動作するか)

また、テストを

よくある間違いとその回避方法

Bashスクリプトを書く際には、初心者が陥りやすいいくつかの落とし穴があります。まず、変数の扱いに注意が必要です。変数名と値の間にスペースを入れてしまうと、構文エラーが発生します。例えば、greeting = "Hello" は正しくなく、greeting="Hello" と記述する必要があります。また、変数を使用する際には、必ず $ を付けることを忘れないようにしましょう。例えば、echo $greeting と記述します。

次に、コマンドの戻り値の扱いにも注意が必要です。Bashスクリプトでは、コマンドの実行結果を変数に格納する際に、意図しない動作を引き起こすことがあります。例えば、result=$(ls) と記述すると、ls コマンドの出力が result に格納されますが、コマンドが失敗した場合でも変数には出力が残ります。このため、コマンドの戻り値を確認することが重要です。一般的には if [ $? -eq 0 ] を使用して、直前のコマンドが成功したかどうかを確認します。

さらに、スクリプト内で使用するパスの扱いにも注意が必要です。相対パスを使用すると、スクリプトの実行場所によって動作が変わる可能性があります。例えば、./data/file.txt と記述した場合、スクリプトが実行されるディレクトリによってはファイルが見つからないことがあります。これを回避するためには、絶対パスを使用するか、スクリプト内で実行ディレクトリを固定する方法があります。具体的には、cd $(dirname $0) を使用して、スクリプトの実行ディレクトリに移動することが一般的です。

  • スクリプト内で使用するコマンドやオプションの動作を理解し、公式ドキュメントや man コマンドで確認することが重要です。

Bashスクリプトに関するFAQ

Bashスクリプトの作成や運用において、多くの方が抱く疑問や課題について、実務に即した回答をまとめました。初心者から中級者まで幅広く活用できる内容です。

Q1. Bashスクリプトの基本的な実行方法は?

A1. Bashスクリプトは通常、拡張子「.sh」のテキストファイルとして作成し、先頭行に「#!/bin/bash」を記述します。実行権限を付与した後(例: chmod +x script.sh)、ファイルパスを指定して実行します(例: ./script.sh)。システムのデフォルトシェルがBashであれば、直接ファイル名を入力しても実行可能です。実行時にはカレントディレクトリに注意し、パスを明示的に指定することで意図しない動作を防げます。

Q2. Bashスクリプトで変数を使う際の注意点は?

A2. 変数名は大文字・小文字を区別し、代入時には「=」の前後にスペースを入れません。変数を参照する際は「$」を付けますが、文字列結合時は「”${変数名}”」のように囲むと安全です。未定義変数を参照するとエラーになるため、初期値を設定するか「${変数名:-デフォルト値}」のようなデフォルト値展開を活用します。また、配列変数を使用する場合は「array=(要素1 要素2)」のように宣言し、要素を参照する際は「${array[0]}」のようにインデックスを指定します。

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

A3. スクリプト実行時に「-x」オプションを付けると、コマンド実行前の状態を表示し、処理の流れを追跡できます(例: bash -x script.sh)。また、「set -e」を記述すると、コマンドが失敗した際にスクリプトを終了させます。特定の箇所で一時停止させるには「set -u」で未定義変数を検出し、エラー箇所を特定します。ログ出力を活用することで、実行履歴を確認しながら問題を絞り込むことも有効です。

Q4. Bashスクリプトを他のシェルと互換性を持たせるには?

A4. スクリプトの先頭行に「#!/bin/sh」を記述すると、POSIX準拠のシェルで実行されますが、Bash固有の機能は使用できません。互換性を維持しつつBashの機能を活用するには、先頭行を「#!/bin/bash」とし、シェル固有の構文(例: 配列、プロセス置換)を使用する際はコメントで注意喚起します。また、環境変数「SHELL」や「BASH_VERSION」を確認し、実行環境に応じた条件分岐を設けることで、柔軟な動作を実現できます。

まとめ

Bashスクリプトは、LinuxやUnix系システムにおける自動化や効率化を実現する強力なツールです。本ガイドでは、基本的な構文から変数、制御構造、関数、そしてエラー処理まで、Bashスクリプトの基礎から実践的な活用方法までを網羅しました。スクリプトを記述する際には、可読性や保守性を意識し、適切なコメントやインデントを活用することが重要です。また、実行権限の設定やデバッグ手法を理解することで、より堅牢なスクリプトを作成できるようになります。

Bashスクリプトを習得することで、繰り返し行われる作業の自動化やシステム管理の効率化が図れます。実務では、既存のスクリプトを読み解いたり、目的に応じてカスタマイズしたりする機会も多いため、基礎をしっかりと身につけることが大切です。今後も継続的に学習を重ね、実践を通じてスキルを磨いていきましょう。

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