

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
シェル関数・とは?初心者がつまずかない使い方と実例
シェル関数とは、日常のコマンド操作をより楽にするための小さな部品です。複数のコマンドを1つの名前にまとめることで、面倒な反復作業を自動化したり、手順を短くしたりできます。初めて学ぶ人にとっても安心して使えるよう、基本を順を追って解説します。
まずは要点を押さえましょう。シェル関数は 名前と中身のセットです。名前を呼ぶと中身のコマンドが順番に実行されます。シェル関数は主に Bash や Zsh などのシェルで使われますが、考え方はどのシェルでも似ています。
シェル関数の基本
シェル関数とは、複数のコマンドを1つの名前で呼べる部品です。これにより、よく使う手順を簡略化できます。関数を作っておくと、毎回同じ一連のコマンドを入力する必要がなくなります。
関数の代表的な書き方には2つのスタイルがあります。<span>name() { ... } という形式と、function name { ... } という形式です。どちらでも動作しますが、好みやプロジェクトの方針で選ぶと良いでしょう。
例として、名前を使って挨拶を表示する簡単な関数を考えます。name() { echo こんにちは; } と定義しておけば、name と呼ぶだけで挨拶が表示されます。もう少し実用的な例として、日付と時刻を表示する関数を作ることも可能です。
次に、別の書き方として function name { echo 今日の日付は曜日と日付を表示 のような形も使えます。これらは意味的には同じことを実現します。実運用では名前の衝突を避けるために自分だけのプレフィックスをつけると安全です。
使い方の基本
関数を定義したら、名前を呼ぶだけで中のコマンドが実行されます。呼び出し方は非常にシンプルです。name と入力するだけで、中身の処理が順番に実行されます。引数を渡すこともできます。
引数を受け取るには、関数の中で $1 $2 などの特別変数を使います。最初の引数は $1、次が $2 です。例として name() { echo 引数は $1; } のように書くと、呼び出し時に渡した値が表示されます。
引数と戻り値の扱い
関数からの戻り値は、通常は終了ステータスで判断します。直感的には return 0 が成功を意味し、return 1 などの非0が失敗を意味します。なお戻り値そのものをデータとして返したい場合は、echo などを使って出力し、呼び出し元でキャプチャします。
例として、2つの引数を受け取り、それを連結して表示する関数を考えます。concat() { echo $1$2; } として呼ぶと、渡した文字列が連結されて表示されます。これを応用して、ファイル名の組み合わせや日付の組み合わせなどを作ることができます。
ローカル変数とスコープ
関数の中で変数を使うときは、外側の変数と干渉しないようにするのが良い場合があります。そのときは local キーワードを使います。local temp=5 のように書くと、関数内でのみ有効な変数になります。これにより他の場所の変数と名前がぶつかる問題を避けられます。
実用的な例と練習問題
日常のタスクを自動化する関数を作ると作業が楽になります。次の例はディレクトリ内のファイル名を整形して表示する関数です。
list_files() { for f in *; do echo ファイル名: $f; done; }
このような小さな関数を組み合わせて、自分用のワークフローを作ることができます。さらに複雑な処理を1つの名前で呼べるようになると、作業効率が大きく向上します。
定義の2つの書き方と表
基本的な2通りがあります。name() { ... } と function name { ... } です。どちらを使っても動作します。コードを見ただけで理解しやすい方を選ぶと良いでしょう。
| 書き方 | name() { ... } |
|---|---|
| 書き方 | function name { ... } |
注意点とコツ
コマンド名と関数名の衝突 に注意してください。システムのコマンドと同じ名前を使うと予期せぬ挙動の原因になります。関数名には前置きやプレフィックスをつけると安全です。
他のスクリプトやサブシェルで関数を使いたい場合は export する方法もあります。export -f name のように書くと、子プロセスにも関数を渡せます。初学者はまず自分の端末内で完結させ、徐々に応用に進むと良いでしょう。
まとめ
シェル関数は日々の作業を自動化するための強力な道具です。最初は簡単な関数から作ってみて、慣れてきたら引数の取り扱いや戻り値の扱い、ローカル変数を使った安全な設計へと段階的に拡張していきましょう。練習を重ねることで、コマンドラインでの作業を大きく効率化できます。
シェル関数の同意語
- シェル関数
- シェル環境で定義した再利用可能な処理のブロック。関数名と本体から成り、スクリプト内で繰り返し実行できる機能です。
- シェルの関数
- シェル(Bash・Zsh など)で使える関数のこと。名前付きの処理のまとまりを指します。
- Bash関数
- Bashシェルで定義する関数。name() { ... } の形で記述します。
- Zsh関数
- Zshシェルで定義する関数。関数名と本体を組み合わせて処理をまとめる機能です。
- Ksh関数
- KornShellで定義する関数。Kshでも name() { ... } の形式で記述します。
- sh関数
- POSIX系シェル(sh 互換)で利用される関数の総称。sh 互換シェルでも同様の関数機能を持ちます。
- POSIXシェルの関数
- POSIX準拠のシェルで定義・使用される関数のこと。
- シェルスクリプトの関数
- シェルスクリプト内で定義され、再利用できるコードの塊として用いられます。
- ファンクション
- 関数の別表記として使われるカタカナ表記。意味は同じ「関数」です。
- 関数定義
- 関数を定義する操作・構文を指す言葉。実体は関数そのものを作る手続きです。
- ユーザー定義関数
- ユーザーが自分で定義した関数のこと。標準のビルトイン関数とは区別されます。
シェル関数の対義語・反対語
- 外部コマンド
- シェルの外部にある実行可能ファイルを、別プロセスとして起動して実行するコマンド。シェル関数は同じシェル内で実行されるのに対して、外部コマンドは新しいプロセスを作って実行される点が対照的です。
- ビルトインコマンド(内部コマンド)
- シェル自身が提供する組み込み機能で、別ファイルを起動せずにその場で実行されます。シェル関数はユーザーが定義するコードブロックですが、ビルトインはシェルが直接提供する機能という点で異なります。
- 実行ファイル(外部プログラム)
- ファイルとして存在する実行可能なプログラム。ファイルを実行することで結果を得ます。シェル関数はコードブロックとして同じプロセス内で動作しますが、実行ファイルは外部リソースとして動作します。
- エイリアス
- 長いコマンドを短い名前で置き換える機能。関数のように処理を定義するのではなく、文字列の置換に近い点が対照的です。
- スクリプトファイル
- 別ファイルにコマンドをまとめたもの。実行時には解釈・実行され、シェル関数のようにメモリ上で定義されるわけではありません。
- 手続き/プロシージャ
- プログラミングにおける“関数”の別名として使われる語。文脈によっては値の返却より処理の流れを重視する“手続き的”実装を指すことがあり、シェル関数の対比として挙げられることがあります。
- ワンライナーコマンド
- 1行だけで完結する処理。複数行のシェル関数と比較して、再利用性が低い一発勝負の実行形態の例です。
シェル関数の共起語
- シェル
- コマンドを解釈して実行するプログラム。スクリプト内でシェル関数を作る土台となる概念です。
- bash
- Bourne Again Shell。最も広く使われるシェルの一つで、シェル関数の定義や呼び出しが標準的に行えます。
- zsh
- Z Shell。補完機能が強力で、関数の定義・利用を柔軟に行える高機能なシェルです。
- sh
- POSIX準拠の Bourne Shell。移植性を重視して書く際の基本形となる古典的シェルです。
- 関数
- 再利用可能な処理のまとまり。名前と本体から成り、スクリプトの保守性を高めます。
- 関数定義
- 関数を作成する手順。名前と本体を組み合わせて定義します(例: name() { ... } / function name { ... })。
- 関数呼び出し
- 定義済みの関数を実行すること。関数名を記述するだけで呼び出せます。
- ローカル変数
- 関数内でのみ有効な変数。通常は local を使って宣言します。
- グローバル変数
- シェル全体で参照可能な変数。関数内外をまたいで値を共有します。
- スコープ
- 変数や関数の有効範囲。サブシェルでは別のスコープになることがあります。
- 引数
- 関数に渡す値。$1, $2 などで関数内から参照します。
- パラメータ展開
- 変数の値を展開して文字列として利用する仕組み。${var} などの形式が一般的です。
- 参照渡し
- 変数そのものを渡して間接的に操作するテクニック。名前付き参照や参照機能を使います。
- nameref
- 名前付き参照。declare -n を使って別名を実体参照として扱う機能。
- set -e
- コマンドが失敗した場合にスクリプトを即座に終了させる設定。堅牢性を高めます。
- set -u
- 未定義変数の参照をエラーとして扱う設定。予期せぬ挙動を防ぎます。
- trap
- シグナル処理。特定のシグナルを受け取って関数内で処理を実行できます。
- source
- 外部ファイルを現在のシェル環境に読み込み、同じスコープで実行します(. filename 形式 / source filename)。
- export
- 環境変数として子プロセスへ渡す設定。関数内で設定した値を外部コマンドにも伝えます。
- local
- 関数内で使用するローカル変数を宣言するキーワード。サブスコープ化の基本手段です。
- デバッグ
- set -x や PS4 などを利用して関数の動作を追跡・検証します。
- POSIX準拠
- 移植性を重視する場合、POSIX規格に沿った書き方を心がけます。
- dash互換性
- dash は軽量で POSIX準拠ですが、bash固有の機能は動かないことがあるため注意します。
- サブシェル
- 別プロセスとして実行されるシェル。パイプやバッククォートなどで生成され、変数の影響範囲が分かれます。
- 戻り値
- 関数の実行結果を示す終了コード。通常0が成功、0以外がエラーを意味します。
- exitコード
- 終了コード。コマンドや関数の実行結果として返される整数値です。
シェル関数の関連用語
- シェル関数
- シェルが提供する、複数のコマンドをまとめて1つの名前で呼べる機能です。再利用性の向上とスクリプトの可読性改善に役立ち、主に Bash・Zsh・Dash などのシェルで使われます。
- 関数
- プログラムの処理を1つのまとまりとして名前で呼べる設計単位です。シェルの関数はこの概念をシェル内のコマンド群として実現します。
- Bash関数
- Bash での関数の定義方法の総称。代表的な書き方は f() { ... } または function f { ... }。引数は $1, $2, …、$#、$@ で受け取ります。
- POSIX準拠の関数
- POSIX 準拠のシェルでも使える基本形は name() { … }。一部のシェル固有構文(function キーワードなど)は互換性に影響します。
- 関数の定義方法
- 関数を定義する主な2通りは、echo: f() { ... } と function f { ... }。用途やシェルの仕様で使い分けます。
- 引数
- 関数に渡す値のこと。内部では $1, $2, …、$#(引数の個数)、$@(全引数のリスト)などで扱います。
- ローカル変数
- 関数内だけで有効な変数を作るときに local 変数を使います。グローバル変数への影響を抑えるのに役立ちます。
- グローバル変数
- デフォルトでは関数内で代入した変数は全体に影響します。必要に応じて local で局所化します。
- 戻り値/終了ステータス
- 関数の終了時に整数を返します。通常は 0 が成功、0 以外がエラーを意味します。
- returnとexitの違い
- return は関数内の終了コードを返すのに対し、exit はスクリプト全体を終了させます。
- 出力による情報返戻
- 関数は標準出力へ値を出力して呼び出し元が取得することが多いです。必要に応じて printf を使うと安全です。
- 標準入出力のリダイレクト
- 関数内部でもリダイレクト可能。> や >>、<、2>&1 などでファイルや他のコマンドへ出力・入力を制御します。
- 関数の呼び出しとスコープ
- 呼び出し元と関数内の変数の影響範囲に注意。グローバル変数への代入は呼び出し元にも影響します。
- 再利用性と設計原則
- 1つの関数は1つの責務を持つよう設計すると再利用性と保守性が高まります。コメントや関数のドキュメント化も重要です。
- 外部コマンドと関数の違い
- 関数はシェル内の機能で、外部コマンドを起動するより高速。環境変数の影響範囲もシェル内で完結します。
- 環境変数と関数のエクスポート
- export -f で関数を子プロセスへ渡すことができます( Bash などでサポート)。
- デバッグ
- set -x などのデバッグオプションや、適切なエコー出力で動作を追跡します。
- 読み込みと再利用
- 関数定義を別ファイルに切り出し、source(.)で現在のシェルに読み込んで再利用します。
- 関数名の命名と名前空間
- 名前の衝突を避けるため、プレフィックスを使うなど命名規則を設けると管理しやすいです。
- パラメータ展開と引用の扱い
- 引数は必ず適切に引用し、$@ は引用して展開するのが安全です。これにより単語分割の問題を避けられます。
- 配列と関数(Bash特有)
- Bash では関数内で配列を扱えます。arr=(a b c) のように宣言し、要素を参照します。
- 特殊パラメータの扱い
- $#, $*, $@, $$, $?, $-, などの特殊パラメータの意味を理解すると正確に引数と状態を扱えます。
- 関数の終了条件の設計
- set -e、trap ERR などを活用してエラー時の挙動を明確化します。
- 関数とスクリプトの境界
- source で読み込んだファイルと実行ファイルとして新規プロセスを起動するケースの違いを理解して使い分けます。
- 各シェルの違い
- Bash、Zsh、Dash、sh などにより関数の挙動やサポート機能に差があるため、ターゲット環境を意識します。
シェル関数のおすすめ参考サイト
- 【 シェル関数とは 】 | 日経クロステック(xTECH)
- shell(シェル)とは?概要や特徴、使用例、できることを解説
- シェルスクリプトのメリットとデメリットとは?
- シェル関数の基本 - Tech Blog
- シェルスクリプトの関数の書き方 functionや()の本当の違いとは?



















