PES
JA English 한국어 日本語 中文 हिन्दी বাংলা اردو Español Português Français Deutsch Русский العربية Bahasa Indonesia Tiếng Việt ไทย Türkçe

通知を有効にする方法

このブラウザーまたはアドレスでは通知を利用できません。対応ブラウザーで安全な接続のPESサイトを開いてください。

通知がブロックされている場合は、ブラウザーの設定で許可してください。

  1. アドレスバー横のサイト設定、またはブラウザーのサイト設定を開き、このサイトの通知を許可に変更してください。
  2. 端末の設定でブラウザーの通知を許可し、おやすみモードや集中モードを確認してください。
  3. PESに戻ってページを再読み込みし、ベルから通知を有効にしてください。

iPhoneやiPadではPESをホーム画面に追加し、そこから開いて通知を許可してください。

わたしの学習進度
  1. 人工知能の使い方
  2. ターミナル命令
  3. 人工知能の応用
  4. バイブコーディング
  5. 人工知能資格 準備中
  6. キーボード

Pythonの前に身につけたい、シェルの基本

のではPythonを思い浮かべがちですが、AIツールのインストールや実行を支える実用的な基礎は、のとです。

シェルはAIを作るための主な言語ではありませんが、Pythonより前からファイル管理や作業の自動化に使われてきた道具です。

深く学び込む必要はありません。よく使うコマンドをいくつか覚えるだけで、気軽に始められ、一生役立つ基礎になります。

すべてのツールを支える基本言語

シェルプログラミングAIを実際に動かす言語

は実行・ファイル管理・開発の自動化に便利です。はブラウザ・アプリ・ノートブック・でも使えます。端末は便利な窓口の一つで、全利用者の必須条件ではありません。

カリキュラムを見る
  • インストール不要ですぐ練習
  • macOS · Linux 対応
  • 安全な
学習ジャーニー 今日、最初の一歩を踏み出しましょう
0 / 12レッスン完了 0%
12段階のロードマップ
29個の実習ミッション
0回コマンド実行
ステップ・バイ・ステップ

12レッスンで身につけるシェル

基本から ・開発ツール、Python や ・ など他の言語の実行まで、学んだらすぐに実行しましょう。

入門 → 実践
  1. レッスン 01 完了 次へ ターミナルとの出会い コマンド構文と現在地を知る ミッション 3個 始める
  2. レッスン 02 完了 次へ ファイルとフォルダー 作成・移動・削除・内容確認 ミッション 3個 始める
  3. レッスン 03 完了 次へ 変数と展開 値を保存・再利用・計算 ミッション 2個 始める
  4. レッスン 04 完了 次へ 条件と繰り返し ifで判断しforで繰り返す ミッション 2個 始める
  5. レッスン 05 完了 次へ 関数とスクリプト 自分だけのコマンドを作る ミッション 1個 始める
  6. レッスン 06 完了 次へ テキスト処理の基本ツール grepで検索、sort・uniq・wcで集計 ミッション 2個 始める
  7. レッスン 07 完了 次へ パイプとリダイレクト コマンドをつなぎ結果をファイルへ ミッション 2個 始める
  8. レッスン 08 完了 次へ 実践スクリプト 役立つ自動化を作る ミッション 1個 始める
  9. レッスン 09 完了 次へ 安全なシェル:引用と落とし穴 防御的なスクリプト習慣 ミッション 2個 始める
  10. レッスン 10 完了 次へ Node.jsコマンド node・npm・npxでJavaScriptを動かす ミッション 3個 始める
  11. レッスン 11 完了 次へ 開発ツールの導入 Grok・Codex・Claude Code・Firebaseをターミナルへ ミッション 3個 始める
  12. レッスン 12 完了 次へ シェルで他の言語を実行する ターミナルからPython・awk・sedを直接動かす ミッション 5個 始める
なぜシェル?

一度学べば、どこでも一生使える共通語

AIの回答を自分で実行

ファイル整理や自動化をに頼むと、多くの場合が返ってきます。を読めれば、実行前に安全性を自分で確認できます。

どこでも通用する基礎力

シェルは何十年も使われてきた安定した共通語です。一度学べばmacOS・Linux・・・AIツールで長く活用できます。

macOSでもそのまま学べます

macOSの標準シェルはですが、このコースのと概念はほぼ同じように動作します。を使えばBashで明示的に実行でき、の添字の開始番号のようなごく一部の高度な違いを除けばそのまま通用します。

実践サンプル

シェルスクリプト一枚でWebサーバーを作る

20行ほどので、に実際にページを返すWebを起動できます。が結局「テキストのかたまりをやり取りする約束」であることがよく分かる例です。

server.sh
#!/bin/bash

PORT=8084
PIPE=simple-web-server-pipe

rm -f "$PIPE"
mkfifo "$PIPE"

response() {
    read -r method path _
    echo "[$(date)] $method $path" >&2
    index=$(cat index.html)
    printf 'HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\nConnection: close\r\n\r\n%s' \
      "$index"
}

while true; do
    response < "$PIPE" | nc -l "$PORT" > "$PIPE"
done
  1. mkfifo "$PIPE" を作ります。が受け取ったリクエストと、作った応答がこの通り道を行き来します。
  2. nc -l "$PORT" nc(netcat)で8084番を開き、ブラウザーの接続を待ちます。ソケットサーバーを一つで代用します。
  3. response() リクエストの1行目(メソッド・)を読んでログを残し、index.htmlをHTTP 200応答にして返します。
  4. while true; do … done 応答後に接続が切れるとが回り、次の訪問者を受け付けます。おかげでサーバーは動き続けます。

同じフォルダーにindex.htmlを置き、bash server.shで実行してから、ブラウザーでlocalhost:8084を開いてください。本番用ではありませんが、仕組みの理解に最適です。

レッスン 01 · ハンズオン

ターミナルとの出会い

入力の基本、、を確認する方法を学びます。

学習目標 4個 実習ミッション 3個 約10分
実習を始める
レッスン 02 · ハンズオン

ファイルとフォルダー

ファイルやフォルダーを作り、コピー・移動・削除・表示する方法を実践します。

学習目標 4個 実習ミッション 3個 約10分
実習を始める
レッスン 03 · ハンズオン

変数と展開

値をに保存し、結果や計算結果を文章に組み込む展開を学びます。

学習目標 4個 実習ミッション 2個 約10分
実習を始める
レッスン 04 · ハンズオン

条件と繰り返し

ifで動作を選び、forやwhileで同じ作業をます。

学習目標 4個 実習ミッション 2個 約10分
実習を始める
レッスン 05 · ハンズオン

関数とスクリプト

よく使う処理をにまとめ、・・を理解します。

学習目標 4個 実習ミッション 1個 約10分
実習を始める
レッスン 06 · ハンズオン

テキスト処理の基本ツール

必要な行を探し、並べ替え・重複削除・件数集計を行います。

学習目標 4個 実習ミッション 2個 約10分
実習を始める
レッスン 07 · ハンズオン

パイプとリダイレクト

|で出力を次の入力へ渡し、>と>>で結果をファイルへ送ります。

学習目標 4個 実習ミッション 2個 約10分
実習を始める
レッスン 08 · ハンズオン

実践スクリプト

これまでの要素を組み合わせ、安全に実作業を自動化するを学びます。

学習目標 4個 実習ミッション 1個 約10分
実習を始める
レッスン 09 · ハンズオン

安全なシェル:引用と落とし穴

やの事故を防ぎ、エラーに強いで仕上げます。

学習目標 4個 実習ミッション 2個 約10分
実習を始める
レッスン 10 · ハンズオン

Node.jsコマンド

からを使う方法を学びます。バージョン確認、実行、での管理、の一度きり実行まで。

学習目標 4個 実習ミッション 3個 約10分
実習を始める
レッスン 11 · ハンズオン

開発ツールの導入

コーディングとデプロイをに入れる短い案内です。Node/が揃えば、多くは一行から始められます。

学習目標 4個 実習ミッション 3個 約10分
実習を始める
レッスン 12 · ハンズオン

シェルで他の言語を実行する

はすべてを自分でこなすのではなく、他の言語を呼び出す指揮者です。一行で渡す-c、複数行をまとめて渡す、そしてが最もよく使うとを学びます。

学習目標 6個 実習ミッション 5個 約10分
実習を始める
学習目標

このレッスンでできること

  1. 1

    コマンド [] [対象] の基本形を使う

  2. 2

    現在地を確認してフォルダー間を移動する

  3. 3

    で文字を表示する

  4. 4

    manと--helpで調べる

基本概念

重要な概念を学ぶ

01

ターミナルとプロンプト

は文字でコンピューターに指示する画面です。$や%は入力待ちの印。を入力してEnterを押します。

02

コマンドの3要素

多くのは「動作・・対象」で構成されます。 -l Documentsなら、Documentsを詳しく一覧表示するという意味です。

03

現在地を知る

で、で移動、で内容を確認します。~は、..は一つ上のフォルダーです。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • との間には空白が必要です。-laではなくls -la。
  • はします。
学習目標

このレッスンでできること

  1. 1

    フォルダーと空ファイルを作る

  2. 2

    コピー・移動・名前変更・削除を行う

  3. 3

    ・・で内容を見る

  4. 4

    削除を安全に使う

基本概念

重要な概念を学ぶ

01

作成 — mkdirとtouch

はフォルダー、は空ファイルを作ります。mkdir -pなら途中のフォルダーもまとめて作れます。

02

コピー・移動 — cpとmv

は原本を残してコピーし、は移動します。mv old newは名前変更にも使えます。

03

内容を見る — cat・head・tail

は全体、とは先頭や末尾だけを表示します。はゴミ箱を使わず即座に削除するため注意が必要です。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • -rfは確認なしでフォルダー全体を削除します。対象を必ず確認してください。
  • とは同名の対象を上書きできます。-iを使う習慣をつけましょう。
学習目標

このレッスンでできること

  1. 1

    変数を作って値を取り出す

  2. 2

    変数を安全にする

  3. 3

    $(( ))で計算する

  4. 4

    $( )でコマンド結果を得る

基本概念

重要な概念を学ぶ

01

変数を作って使う

name=valueで作り、$nameで取り出します。=の左右に空白を入れてはいけません。

02

ダブルクォートで守る

"$name"のように囲むと、値の空白が保たれます。安全なの基本習慣です。

03

算術展開とコマンド置換

$(( 3 + 4 ))は7、$()はコマンドの結果を値として返します。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • =の周りに空白を入れると名前がとして扱われます。
  • しないは空白で分割されます。 "$name"を基本にしましょう。
学習目標

このレッスンでできること

  1. 1

    if / elif / elseでする

  2. 2

    [[ ]]で比較する

  3. 3

    forで一覧を処理する

  4. 4

    数値との比較を区別する

基本概念

重要な概念を学ぶ

01

if文

if ; then ... fiでは、条件が真のときだけ内側を実行します。elifやelseを追加でき、fiで閉じます。

02

[[ ]]で比較

は==と!=、数値は-gt/-lt/-eq、ファイルは-fや-dで確認します。

03

forループ

for item in list; do ... doneは一覧を一つずつに入れてます。

04

seqで決まった回数だけ繰り返す

1から20までのように「決まった回数」を繰り返すには、で数字を作ってforに渡します。for i in $(seq 1 20); do ... done のように書き、$(seq 1 20) が 1 2 3 … 20 を作ります。inを抜いて for i $(seq 1 20) と書くとエラーになるので、「for in リスト」の順序を必ず守ってください。同じは for i in {1..20} のようにでも書けます。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • [[ $x > 7 ]]の>は比較です。数値には-gtを使います。
  • [[ と ]] の内側には空白が必要です。
学習目標

このレッスンでできること

  1. 1

    関数を定義して呼び出す

  2. 2

    $1などの引数を使う

  3. 3

    #!/bin/bashを説明する

  4. 4

    を理解する

基本概念

重要な概念を学ぶ

01

関数の定義と呼び出し

name() { ; }で処理に名前を付け、$1や$2でを受け取ります。

02

スクリプトとシバン

を.shファイルに保存できます。はで実行する指定です。

03

実行権限と引数

+x hello.shの後に./hello.shを実行します。$1、$2、$@、$#でを読みます。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • +xがないとになる場合があります。 hello.shでも実行できます。
  • 空白を守るためを"$1"のように囲みます。
学習目標

このレッスンでできること

  1. 1

    で行を探す

  2. 2

    grep -iと-nを使う

  3. 3

    で並べ替える

  4. 4

    で数える

基本概念

重要な概念を学ぶ

01

grep — 検索

word fileは一致する行だけを表示します。-iはを無視、-nは行番号、-rは再帰検索です。

02

sedとawkの入り口

は検索・置換、は行を列に分けて表データを処理します。

03

rg (ripgrep) — 最近よく使われる検索ツール

で と打つツールは ripgrep です。この単元の と同じように行を検索しますが、既定でフォルダ全体を高速に探し、.gitignore に書かれたファイルは飛ばします。は grep とすべて同じではないので、まず grep を覚えてから併用するとよいです。ここのは rg に対応していないため、自分のパソコンで試してください。

04

並べ替えと集計

は並べ替え、は連続する重複を統合し、 -lは行数を数えます。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • ... file > fileのように同じファイルへ出力すると内容が消えます。
  • は一致しないと何も表示しません。判定だけならgrep -qを使います。
学習目標

このレッスンでできること

  1. 1

    |でをつなぐ

  2. 2

    >で保存する

  3. 3

    >>で追記する

  4. 4

    の流れを理解する

基本概念

重要な概念を学ぶ

01

パイプ ( | )

A | BはAの出力をBの入力へ直接渡します。小さな道具を組み合わせて強力な1行を作れます。

02

リダイレクト ( >, >>, < )

>は上書き、>>は追記、<はファイルを入力にします。2>はエラーだけを保存します。

03

画面にも表示しつつファイルにも — tee

の途中にを挟むと、流れる内容を画面(または次の)へそのまま渡しながら、同時にファイルにも保存します。名前はT字型の配管継手(tee)に由来します。>は出力をファイルへ「そらす」ため画面から消えますが、コマンド | tee ファイル は画面に見せつつ保存する点が違います。上書きせず追記するにはtee -aを使います。ログを残しながら結果も目で確認したいときに便利です。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • >は対象を即座に上書きします。内容を残すなら>>を使います。
  • 内はになることがあり、変更したが外に残らない場合があります。
学習目標

このレッスンでできること

  1. 1

    で成功・失敗を確認する

  2. 2

    &&と||で処理をつなぐ

  3. 3

    forで複数ファイルを処理する

  4. 4

    の予約実行を理解する

基本概念

重要な概念を学ぶ

01

終了コードと$?

は成功なら0、失敗なら別の値を返します。で直前の結果を読み、A && BはA成功時だけBを実行します。

02

繰り返しを自動化

とファイル操作を組み合わせれば、多くの対象へ同じ処理を自動実行できます。

03

予約実行 — cron

は決まった時刻に実行します。0 3 * * *は毎日午前3時を意味します。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • 重要な処理は || exit 1で失敗時に停止します。
  • をし、では絶対パスを使います。
学習目標

このレッスンでできること

  1. 1

    3種類のを説明する

  2. 2

    単語分割とグロビングを理解する

  3. 3

    set -euo pipefailを使う

  4. 4

    を必ず引用する

基本概念

重要な概念を学ぶ

01

3種類の引用

"$var"は展開しつつ空白を守り、'$var'は文字どおり、なしはや展開が起きます。

02

単語分割とグロビング

しない値は複数のに分かれ、*や?がファイル名に変わるため事故の原因になります。

03

防御的オプション

set -euo pipefailはエラー・未定義・途中の失敗を検出します。も有効です。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • 多くの事故はの省略から始まります。は常に囲みましょう。
  • では[[ $a = b && $c = d ]]の形を使います。
学習目標

このレッスンでできること

  1. 1

    -vでNode.jsのバージョンを確認する

  2. 2

    node app.jsでファイルを実行する

  3. 3

    npmでパッケージを入れスクリプトを実行する

  4. 4

    npxでグローバル導入なしに一度だけ実行する

基本概念

重要な概念を学ぶ

01

Node.jsとは?

はブラウザの外(・)でを動かすランタイムです。Webアプリ、、ビルド、多くのコーディングがNode上で動きます。の次に覚えると開発ツール導入が楽になります。

02

nodeコマンド

-v(または--version)で版を確認します。node app.jsはファイル実行、node -e "console.log(1+1)"は一行実行です。

03

npmとpackage.json

はを管理します。に名前・版・・dependenciesが書かれます。npm installで依存を入れ、npm run startでscriptsを実行します。は一度きり実行用です。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • やが not foundなら未インストールです。nodejs.orgかで入れ、を開き直してください。
  • npm install -gは権限・セキュリティ問題を招きやすいです。nvmを使うか、sudoなしで入れられるよう設定してください。
学習目標

このレッスンでできること

  1. 1

    多くのツール導入の前提がだと説明する

  2. 2

    Claude Code・Codex・Grok・の代表的な導入コマンドを知る

  3. 3

    グローバル導入(-g)と一度きり実行()を区別する

  4. 4

    導入後にバージョン確認する習慣を持つ

基本概念

重要な概念を学ぶ

01

なぜターミナルにツールを入れるのか

現代の開発はエディタだけでは終わりません。(Grok Build、Codex、Claude Code)、、マネージャがで動きます。レッスン10のNode/がその土台です。

02

代表的な導入(短い要約)

公式手順は変わるので常に公式ドキュメントを優先してください。Claude Code: -fsSL ://claude.ai/install.sh | (または install -g @anthropic-/claude-code)。OpenAI Codex: curl -fsSL https://chatgpt.com/codex/install.sh | sh(または npm install -g @openai/codex)。Grok: 公式インストーラまたは npm install -g @xai-official/grok。: npm install -g firebase-tools。導入後は claude --version などで確認します。

03

安全に入れる習慣

| は信頼できる公式からだけ。グローバルで権限エラーならよりを直します。チーム・CIではdevDependencyで版を固定すると安全です。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • 出所不明な | は危険です。公式か確認してください。
  • 似た名前でもは違います。@anthropic-/claude-code、@openai/codex、のように正確な名前を使います。
学習目標

このレッスンでできること

  1. 1

    -cや -eで他の言語を一行実行できる

  2. 2

    プログラムをファイルに保存してpython3 ファイル.pyで実行できる

  3. 3

    ヒアドキュメント(<<PY)で複数行のプログラムをに渡せる

  4. 4

    sedでファイルのテキストを一括修正できる

  5. 5

    awkで表形式データから列を取り出し集計できる

  6. 6

    AIが書いたコードを実行する前に安全に確認できる

基本概念

重要な概念を学ぶ

01

シェルは演奏者ではなく指揮者です

だけですべて計算しようとするとすぐ壁にぶつかります。シェルは「誰をいつ呼ぶか」を決める指揮者です。計算やデータはPython、表の集計は、テキストの一括修正はに任せ、シェルはその結果をつなぎます。シェルが分かれば、学んだことのない言語も呼び出して使えます。

02

一行だけ渡す — -cと-e

多くの言語は「コードをで受け取ってすぐ実行する」を持っています。Pythonは -c "コード"、は -e "コード"、Perlはperl -e、Rubyはruby -eです。電卓の代わりにpython3 -c "print(2**10)"と打つ習慣だけで、は格段に強力になります。

03

ファイルに保存して実行する

一度きりでないプログラムはファイルに保存します。hello.pyにコードを書いておけば、 hello.pyでそのまま実行できます。レッスン5で学んだを1行目に#!/usr/bin/env python3と書き、 +x hello.pyでを与えると、python3を前に付けずに./hello.pyだけで動きます。実行後に と打てば成功(0)か失敗(1)かが分かるので、レッスン8のとおり&&で次のにつなげられます。

04

複数行を渡す — ヒアドキュメント

プログラムが複数行になると-cでは不便です。そこで使うのがです。 - <<'PY'と書くと、次の行からPYと書いた行の直前までがまとめてPythonのに渡ります。間の-は「ファイルではなく標準入力からコードを読め」という意味です。コーディングがファイルを修正するときによく使う形がこれです。

05

<<'PY'と<<PYは違います

終了タグをで囲むと(<<'PY')本文がそのまま渡ります。囲まないと(<<PY)本文の$や$()をが先に置き換えます。Pythonコードに$はあまり出ませんが、やに$があると静かに壊れるので、コードを渡すときは囲む形が基本です。

06

sed — 探して置き換えるストリームエディター

's/探す/置き換える/'は各行で最初の一つを、末尾にgを付けると(s/…/…/g)その行のすべてを置き換えます。前に行番号や//を付けて対象行を選び(2s/…/…/、/error/s/…/…/)、-nとpを組み合わせると選んだ行だけ出力します。-iを付けると画面ではなくファイル自体を書き換えます。区切り文字は/でなくてもよく、の置換はs|/old/path|/new/path|の方がずっと読みやすくなります。ファイル自体を書き換えるときはsed -i.bak 's/探す/置き換える/' ファイルを使いましょう。元のファイルをファイル.bakとして残す形なので安全で、macOSとLinuxのどちらでも同じように動きます。Linux(GNU sed)だけならsed -iのようにバックアップ名を省略できますが、macOSのsedは-iの後に名前を必ず要求するため、そのまま打つとエラーになります(macOSでバックアップなしに書き換えるならsed -i '' '…' ファイルの形です)。

07

awk — 表を扱う小さなプログラミング言語

はではなく言語そのものです。行を空白で分けて$1・$2・$3と呼び、NFは列数、NRは行番号です。基本形はawk 'パターン { 処理 }'で、パターンを省くと全行、処理を省くと行全体の出力になります。先頭にBEGIN{}、末尾にEND{}を置けば準備と仕上げができるので、合計・平均・項目別集計が一行で終わります。

08

パイプで言語をつなぐ

から受け取り標準出力へ流すように作られたプログラム同士は、で自由につなげます。 sales.txt | '{print $2}' | -n | -3と書けば「ファイルを読む → 2列目を取る → 数値で並べる → 大きい3つだけ」が一行で完成します。awk・はこうしてパイプでつなぎ、Pythonは-cやでコードを渡すのが基本です。これがは指揮者だという言葉の本当の意味です。

09

AIが書いたコードを安全に実行する

はたいていこのの形で答えます。貼り付ける前に三つだけ確認しましょう。①どのファイルを触るのかを目で読む。②rmや>で上書きする箇所がないか見る。③大事なファイルなら 元 元.bakで先にバックアップを取る。を読めるということは、AIの答えを検証できるということです。

試してみよう

1行ずつ実行

コマンドを選ぶとターミナルに入力されます。

注意

初心者がよくするミス

  • のプログラムは必ずで囲んでください。ダブルクォートだと$1をが自分のと勘違いして空にしてしまいます。awk '{print $1}'は動きますが、awk "{print $1}"は正しく動きません。
  • の終了タグは行の先頭に、前後に空白なしで同じ文字を正確に書く必要があります。字下げしたい場合は<<-を使い、タブで字下げします。
  • コードを渡すときは<<'PY'のようにタグを引用符で囲むのが基本です。囲まないとコード内の$がシェル変数に置き換わり、静かに壊れます。
  • -iはファイルを元に戻せない形で書き換えます。まず-iなしで実行し画面で結果を確認してから付けましょう。
  • macOSでsed -i 's/…/…/' ファイルのようにバックアップ名なしで打つとundefined labelエラーになり、ファイルはそのままです。macOSのsedは-iの後に名前を要求するからです。sed -i.bakの形で書けば、macOSでもLinuxでも同じが通ります。
  • sed 's/a/b/' file > fileのように読むファイルと書くファイルを同じにすると、ファイルが先に空になり内容が消えます。
🚀 発展学習 — さらに深く

ユーザー入力を受け取る

ユーザーに値をたずねて、に入れます。変数を前もって宣言しておく必要はありません。

echo "名前は何ですか?"# 質問を画面に表示
read name# 答えを変数 name に読み込む
echo "こんにちは、$name!"# 受け取った値を使う

現在地とサブシェル

の代わりに、 $PWD でもが分かります。かっこ ( ) で囲んだコマンドは別ので動くので、その中で しても外の現在地は変わりません。

echo "今いる場所は $PWD です"# で現在のを使う
(cd /tmp; pwd)# サブシェルの中だけで移動 → /tmp を表示
pwd# 外は元の場所のまま

画面整理とヘルプ

clear(または Ctrl-L)で画面を片付けます。知らないは三種類のヘルプで調べます — 組み込みコマンドは help、マニュアルは man、詳しい文書は info です。

clear# の画面を消す(Ctrl-L と同じ)
help for# for のような組み込みコマンドのヘルプ
man ls# のマニュアルページ(q で終わる)

ブレース展開

{ } の中に値を並べたり範囲を書いたりすると、がたくさんの名前を一度に作ります。フォルダーの構成を一行で作るときに特に便利です。

mkdir -p project/{src,tests,docs}# 三つのフォルダーを一度に作る
touch file{1..5}.txt# file1.txt から file5.txt まで五つのファイルを作る
cp config.yaml{,.bak}# バックアップの小技 — config.yaml → config.yaml.bak

安全に削除する

で消したものは元に戻せません。-i(一つずつ確認する)と -v(消したものを表示する)でうっかりミスを減らせます。trash- を使えば、代わりにゴミ箱へ送ります。

rm -i old.txt# 消す前に、本当に消すかたずねる
rm -v *.tmp# 何を消したかを表示する
rm -r tempDir/# フォルダーと中身をすべて消す(注意!)

便利なlsオプション

はで並べ方と表示の形を変えます。次の三つは覚えておく価値があります。

ls -l# 一行に一つずつ、詳しく
ls -t# 最近変更したものから順に
ls -R# すべてのサブフォルダーの中まで(再帰的)

パラメーター展開

${ } の中では、値を取り出すと同時に、その一部を切り取ったり置き換えたりできます。の値を加工するいちばん強力な道具です。

echo "${var/Some/A}"# 最初の Some を A に置き換える
echo "${var//Some/A}"# // ならすべての Some を A に置き換える
echo "${var:0:7}"# 0 番目から 7 文字だけ(部分)
echo "${#var}"# 文字列の長さ

デフォルト値と大文字小文字

が空のときのデフォルト値を決めたり、大文字と小文字を一度に変えたりできます。

echo "${foo:-デフォルト値}"# foo が空なら「デフォルト値」を代わりに使う
: "${NAME:=ゲスト}"# NAME がなければ「ゲスト」を入れて、そのまま残す
echo "${var^^}"# すべて大文字( 4 以降)
echo "${var,,}"# すべて小文字

パスを切り出す

# は前から、% は後ろから切り取ります。二つ重ねると(##、%%)できるだけ長く切り取るので、からファイル名やフォルダーだけを取り出せます。

path="/usr/local/bin/run.sh"# 例のパス
echo "${path##*/}"# 最後の / までを消す → run.sh ()
echo "${path%/*}"# 最後の / から後ろを消す → /usr/local/bin (dirname)
echo "${path%.sh}"# 拡張子 .sh だけを消す

配列

かっこの中に複数の値を入れ、[番号] で一つを、[@] ですべてを取り出します。${#array[@]} で個数を数えます。

array=(りんご バナナ ぶどう)# 三つの値を持つを作る
echo "${array[0]}"# 1 つ目 → りんご(番号は 0 から)
echo "${array[@]}"# 全部 → りんご バナナ ぶどう
echo "${#array[@]}"# 個数 → 3

連想配列

-A で作る連想は、「名前 → 値」の組で値をしまいます(ほかの言語の辞書やマップのようなものです)。

declare -A person# 連想配列を宣言する
person[name]="花子"# 名札 name に値をしまう
echo "${person[name]}"# 取り出す → 花子
for k in "${!person[@]}"; do echo "$k"; done# すべてのキーを順にたどる

組み込み変数と算術

があらかじめ値を入れておくがあります。は $(( )) の中で行い、べき乗や余りも計算できます。小数の計算には を使います。

echo "$?"# 直前のの(0 = 成功)
echo "$RANDOM"# 0 から 32767 までの乱数
echo "$(( 2 ** 10 ))"# べき乗 → 1024
echo "scale=2; 10/3" | bc# 小数の計算 → 3.33

printfによる書式出力

はシステムによって動きが少しずつ違います。 はどこでも同じように動き、桁数・そろえ方・小数点以下の桁を正確に決められます。

printf "こんにちは、%s!\n" "世界"# %s の場所に値が入る → こんにちは、世界!
printf "%.2f\n" 3.14159# 小数第 2 位まで → 3.14
printf "%05d\n" 42# 0 で埋めて 5 桁に → 00042

caseで分岐

一つの値をたくさんのパターンと比べるときは、if を何度も重ねるより case のほうがすっきりします(ほかの言語の switch に似ています)。

case "$x" in# x の値によってする
0) echo "ゼロ";;# 0 のとき
1) echo "いち";;# 1 のとき
*) echo "それ以外";; esac# * はそれ以外のすべてに一致する

for・while・until

for は一覧や範囲を順にたどり、while は条件が真のあいだ、until は条件が偽のあいだます。C 言語風の for もあります。

for ((i=1; i<=3; i++)); do echo "$i"; done# C 言語風の for
while (( count < 3 )); do ((count++)); done# 条件が真のあいだ
until (( count >= 3 )); do ((count++)); done# 条件が偽のあいだ

正規表現とファイル検査

=~ は、がのパターンに合うかを調べます。-e・-f・-d などは、ファイルやフォルダーがあるか、どんな種類かを確かめます。

if [[ "$email" =~ ^[a-z]+@[a-z]+\. ]]; then echo 一致; fi# 正規表現で照合する
if [[ -f "$file" ]]; then echo "ファイルあり"; fi# -f: 普通のファイルか
if [[ -d "$dir" ]]; then echo "フォルダーあり"; fi# -d: フォルダーか
if [[ -z "$name" ]]; then echo "空です"; fi# -z: 空か

変数のスコープ

local はの中だけで使うを、 は変えられない定数を作ります。declare は整数(-i)・小文字(-l)・大文字(-u)のような性質を決めます。

greet() { local msg="こんにちは"; echo "$msg $1"; }# msg は関数の外からは見えない
readonly PI=3.14# 変えられない定数
declare -i num=42; num+=10# 整数型 → 計算が自動で行われる(52)
declare -u up="hi"; echo "$up"# いつも大文字 → HI

getoptsでオプション処理

が -v や -f ファイル名 のようなを受け取れるようにする標準の道具です。文字の後ろのコロン(:)は「このオプションには値が必要」という意味です。

while getopts ":vf:" opt; do# v は値なし、f は値が必要
case $opt in# オプションごとにする
v) verbose=true ;;# -v なら verbose をオンにする
f) file="$OPTARG" ;; esac; done# -f の値は に入る

sourceとexport

source(または .)は、別のファイルを現在ので実行して、そのや設定を読み込みます。export はをにも渡します。

source ./lib/helpers.sh# 別のファイルの関数と変数を現在のシェルに読み込む
. ~/.bashrc# . は source の短い書き方
export API_KEY="abc123"# 子プロセスからも見えるようにする

grepの追加オプション

はを使うとずっと強力になります。再帰検索・行番号・除外・数え上げを組み合わせます。

grep -r "TODO" ./src# -r: フォルダー全体を再帰的に検索
grep -n "error" app.log# -n: 行番号付きで
grep -v "debug" app.log# -v: その言葉がない行だけ(逆)
grep -c "error" app.log# -c: 何行あるかだけ

sedでストリーム編集

は流れていくテキストをその場で編集します。置換・削除・範囲の指定ができ、-i でファイルそのものを書き換えます(バックアップを残しましょう)。

sed 's/okay/great/g' file.txt# すべての okay を great に
sed '/^#/d' file.txt# # で始まるコメント行を消す
sed -i.bak 's/old/new/g' file.txt# ファイルそのものを書き換え + .bak のバックアップ
sed -n '/error/p' log.txt# error を含む行だけ表示

awkで列を処理

は各行を空白(または -F で指定した文字)で分け、それぞれを列 $1、$2 … として扱います。合計・絞り込み・集計が得意です。

echo 'a b c' | awk '{print $2}'# 2 列目 → b
awk -F',' '{print $3}' data.csv# カンマで分けて 3 列目
awk -F',' '$2 > 25' people.csv# 2 列目が 25 より大きい行
awk '{s+=$1} END{print s}' nums.txt# 1 列目の合計

cut・sort・uniq・xargs

小さな道具をでつなぐと、強力なデータ処理ができます。 は、前のの出力を次のコマンドのに変えます。

cut -d ',' -f 1 file.csv# カンマ区切りの 1 列目だけ
sort file.txt | uniq -c# 並べ替えてから重複を数える
find . -name "*.tmp" | xargs rm -f# 見つけたファイルを に渡して消す
find . -name "*.txt" -print0 | xargs -0 rm# 空白を含むファイル名でも安全(-0)

ヒアドキュメントと文字列

<< EOF()は、複数行のテキストをひとまとめにしての入力に渡します。<<<()は、短い一行を入れる手軽な方法です。

cat << EOF# EOF までの行が入力になる
複数行の テキスト EOF# 二つの EOF のあいだが中身
grep "バナナ" <<< "りんご バナナ ぶどう"# <<< で一行を入力

標準エラーと/dev/null

(stdout)と標準エラー(stderr)は別々の通り道を通ります。2> はエラーだけを、2>&1 はエラーを出力と同じ場所へ送ります。/dev/null は捨てる場所です。

command 2> error.log# エラーメッセージだけをファイルへ
command > out.log 2>&1# 出力とエラーをまとめて out.log へ
command > /dev/null 2>&1# 出力もエラーも捨てる(静かに実行)

プロセス置換

<() は、コマンドの出力をまるでファイルのように渡します。二つのコマンドの結果を、一時ファイルなしでそのまま比べるときに便利です。

diff <(ls dir1) <(ls dir2)# 二つのフォルダーの一覧をそのまま比べる
while read l; do echo "$l"; done < <(ls)# の中で設定したが、ループの後も残る

コマンド置換

$() は、コマンドの結果を値のように文の中にはめ込みます。バッククォート(`)より $( ) を使いましょう — 入れ子にできます。

echo "ここには $(ls | wc -l) 個のファイルがあります"# ファイルの数を文にはめ込む
today=$(date +%Y-%m-%d)# 今日の日付をに入れる

trapで後片付け

trap は、が(終了・エラー・中断)を受け取ったときに実行するを決めます。一時ファイルの後片付けに特に便利です。

TMP=$(mktemp)# 安全な一時ファイルを作る
cleanup() { rm -f "$TMP"; }# 後片付けの
trap cleanup EXIT# スクリプトが終わるとき、必ず後片付けする
trap 'echo 中断しました; exit 1' SIGINT# Ctrl-C を押されても安全に

防御的なsetオプション

の先頭に set のを置くと、エラーに強くなります。-e(エラーで止まる)・-u(未設定のを許さない)・-o pipefail(の失敗に気づく)を一緒に使います。-x は用です。

set -euo pipefail# 丈夫なスクリプトの定番の 1 行目
set -x# 実行するを一つずつ表示(デバッグ)
set +x# デバッグをやめる

バックグラウンドとwait

の後ろに & を付けると、で実行します。jobs で一覧を見て、wait で終わるまで待ちます。

sleep 5 &# バックグラウンドで実行
jobs# まだ動いているバックグラウンドジョブの一覧
wait# すべてのバックグラウンドジョブが終わるまで待つ
time sleep 1# コマンドにかかった時間を測る

安全パターン

実際ので何度も出てくる守りの型です — 必要な値を確かめる、があるか確かめる、失敗したらすぐ止める。

: "${VAR:?VAR が必要です}"# VAR がなければエラーを出して止まる
command -v jq && echo "jq あり"# コマンドがインストールされているか確かめる
cp a b || { echo 失敗; exit 1; }# 失敗したらメッセージを出して止まる

setオプションを理解

set -euo pipefail は三つのを合わせたものです。それぞれがどんな事故を防ぐのかが分かると、なぜ定番になったのかが見えてきます。

set -e# どれか一つでもが失敗したら、すぐに止まる
set -u# 定義していないを使うとエラー(打ち間違いを見つける)
set -o pipefail# の途中の一段が失敗したら、パイプ全体を失敗にする

shoptでグロビング調整

は、ファイル名の照合()のしかたを調整します。globstar は ** をサブフォルダーの中まで届かせ、nullglob は何も一致しないとき空の値にします。

shopt -s globstar# ** がサブフォルダーの中まで一致する( 4 以降)
for f in **/*.sh; do echo "$f"; done# すべてのサブフォルダーにある .sh ファイル
shopt -s nullglob# 一致しないとき、パターンの文字ではなく空の値になる

IFSと安全な行読み込み

(内部フィールド区切り文字)は、単語分割でどこを区切るかを決めます。ファイルを一行ずつ安全に読むには、IFS= と read -r を一緒に使います。

IFS=',' read -ra f <<< "a,b,c"# カンマで分けて f に入れる
while IFS= read -r line; do# 空白や特殊文字をそのまま残す
echo "$line"; done < file.txt# 一行ずつ安全に読む

nvmでバージョン管理

プロジェクトによって、必要な Node のバージョンが違うことがあります。 で複数のバージョンをインストールし、切り替えます。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash# nvm をインストール(バージョン番号は公式ドキュメントで確認)
nvm install 22# Node 22 をインストール
nvm use 22# 現在ので Node 22 を使う
node -v# 切り替えたバージョンを確認

npm scriptsとローカルバイナリ

の は、_modules/.bin を に加えた状態で実行されます。だから、プロジェクトの道具をグローバルにインストールしなくても使えます。

npm init -y# package.json をすばやく作る
npm install lodash# 実行時の依存パッケージを追加
npm install -D typescript# 開発のときだけ使う依存パッケージ
npm run build# scripts.build を実行

npxで一度きり実行

グローバルにインストールせずに、最新版の道具を一度だけ動かすときは を使います。バージョンがよく変わる に特に便利です。

npx create-next-app@latest my-app# プロジェクトのひな形を作る例
npx prettier --write .# ローカルの、またはダウンロードした prettier を実行
npx --yes cowsay hello# 確認なしで一度だけ実行

AIコーディングエージェント導入メモ

公式のインストールか、 のグローバルでインストールします。インストールしたらすぐ、バージョンを表示するで確かめましょう。

curl -fsSL https://claude.ai/install.sh | bash# Claude Code (Anthropic)
curl -fsSL https://chatgpt.com/codex/install.sh | sh# OpenAI Codex
npm install -g @xai-official/grok# Grok CLI(npm で入れる別の方法の例)
claude --version && codex --version# インストールの確認(例)

Firebaseとその他の必須CLI

デプロイ・ログイン・ホスティングに使う は、速いマネージャーの pnpm と一緒にインストールすることがよくあります。

npm install -g firebase-tools# Firebase CLI
firebase login# でログイン
firebase projects:list# プロジェクトの一覧
npm install -g pnpm# pnpm をグローバルにインストール

PATHと権限の問題

インストールはできたのにが見つからないなら、 の問題です。which で場所を確かめ、 の設定を見直しましょう。

which node npm# プログラムがある場所
echo "$PATH"# 検索を確認
npm config get prefix# グローバルインストールの行き先
command -v firebase || echo "not found"# インストールされているか確かめる

言語別の一行実行オプション

ほとんどの言語には、「コードをで受け取って、すぐに実行する」があります。違うのはオプションの文字だけで、使い方は同じです。

python3 -c "import sys; print(sys.version)"# Python の一行実行
node -e "console.log(1 + 1)"# の一行実行
perl -e 'print "hello\n"'# Perl の一行実行
ruby -e 'puts (1..5).to_a'# Ruby の一行実行
php -r 'echo PHP_VERSION;'# PHP は -r を使う

AIがファイルを修正するときのパターン

にコードの修正を頼むと、答えはほとんどこの形になります。ファイルを読み、を置き換えて書き戻す小さな Python プログラムを、で渡す形です。大事なのは、置き換える対象が本当にあるかを、先に assert で確かめることです。

python3 - <<'PY'# ここから PY までが Python のプログラム
p = "src/app.py"# 修正するファイルの
s = open(p, encoding="utf-8").read()# ファイル全体を読む
old = "before text"# 探す文字列(この行がないと NameError になる)
new = "after text"# 入れる文字列
assert old in s# 対象がなければここで止まる(いちばん大事な行)
s = s.replace(old, new)# 置き換える
open(p, "w", encoding="utf-8").write(s)# 書き戻す
PY# ヒアドキュメントの終わり — 行のいちばん先頭に正確に

ヒアドキュメント応用 — 設定ファイルを作る

は、の中で複数行の設定や文書を作るときにも、いちばんすっきりした方法です。タグをで囲まないと、$ がその場で値に置き換わります。

cat <<EOF > .env# タグを囲まない → 変数が値に置き換わる
PORT=$PORT# $PORT が実際の値になって保存される
EOF# ここで終わり
cat <<'EOF' > template.txt# 囲む → $PORT が文字のまま残る
bash <<< "echo one-liner"# で一行だけ渡す

sed応用 — 狙った行だけ直す

前にアドレス(行番号や)を付けると、その行だけが変わります。-i でファイルを直接書き換えるときは、-i.bak のように拡張子を付けましょう — バックアップが残り、macOS でも Linux でも同じように動きます。

sed -n '10,20p' log.txt# 10〜20 行目だけ表示
sed '/^#/d' config.txt# # で始まるコメント行を消す
sed -i.bak 's/3000/8080/' config.txt# バックアップ(.bak)を残してファイルを書き換える
sed -E 's/([a-z]+)@([a-z.]+)/\2 \/ \1/' mail.txt# グを使って順番を入れ替える
sed 's/error/ERROR/gI' log.txt# せずに、すべて置き換える
printf 'appended\n' >> notes.txt# 最後の行の後ろに追加(どこでも使える方法)

awk応用 — 集計と書式

の本当の力は、による集計と の書式に表れます。表を読み、項目ごとにまとめて、見やすく表示するまでが一行で済みます。

awk '{sum[$1] += $2} END {for (k in sum) printf "%-10s %5d\n", k, sum[k]}' sales.txt# 項目ごとの合計を表にして表示
awk -F, '{print $2}' data.csv# なら -F, でカンマで分ける
awk 'NF > 0' notes.txt# 空行を消す(パターンだけを書くと、その行を表示する)
awk '{n = split($0, a, "/"); print a[n]}' paths.txt# からファイル名だけ
awk 'NR == FNR {m[$1] = $2; next} $1 in m {print $1, m[$1], $2}' a.txt b.txt# 二つのファイルを結合する
awk 'BEGIN {printf "%.2f\n", 22 / 7}'# BEGIN だけで電卓になる

jq・xargs — 言語をつなぐ接着剤

は で、「見つけた結果ごとにを実行する」は で扱います。両方を知っていると、でつなげられる範囲がぐっと広がります。

curl -s https://api.example.com/u | jq '.name'# JSON からフィールドを一つ
jq -r '.items[] | .id' data.json# を一行に一つずつ展開(-r でを外す)
ls *.txt | xargs wc -l# 見つけたファイルごとにコマンドを実行
grep -rlZ TODO . | xargs -0 sed -i.bak 's/TODO/DONE/g'# + でまとめて修正(-Z と -0 で空白を含むファイル名も安全に、バックアップも残る)

Learn X in Y Minutes(Bash、CC BY-SA)を参考に再構成しました。一部は参照専用です。

レッスン完了!すばらしい!また一歩成長しました。

ガイドライン

人工知能

人工知能資格

勉強

バイブコーディング

ゲーム開発

練習

チューター

チャット

掲示板

制作

コミュニティ

その他

用語辞典

知らない言葉を選んでみましょう。やさしい説明と関連用語が見られます。

その用語はまだありません。

用語を選ぶと説明が表示されます。