タブキー(英語: tab key) `⭾ Tab` は、タイプライターやワードプロセッサ専用機あるいはコンピュータ用のキーボードのキーの一つで、カーソルを次のタブストップまで移動させるキーである。元々はタイプライターにおける図表作成機能のために使用された。

## 歴史

tabはtabulatorまたはtabularの略で、tabulateとは「データを表(tabular, table)にする」という意味である。

英文タイプライターでは、キーを打つと印字の直後に用紙を左に送り、次の印字に備える。すなわち用紙を基準に見ると、印字しようとする位置が右に1文字分ずれる。同様にスペースキー(スペースバー)を押すと、印字せずに1文字分ずれる。タイプライターで表を作るとき、当初はスペースキーやバックスペースキーを使って文字の間の空白を手動で調整して入れていた。これを簡単にするために、ページの横幅全体に渡る水平の棒に可動式のレバー(これを「タブストップ」という)をセットし、タブキーを押すと次のタブストップまで用紙が移動するメカニズムが加えられた。当初、タブストップは手動でセットしていたが、後に「タブセット」と「タブクリア」のキーが設けられ、等間隔のタブストップが自動でセットできるようになった。

このタブの機構は、各段落の最初の行を一様に字下げするためにも使われるようになった。最初のタブストップは5文字目か6文字目に設定されていたが、これは活字を組む際の字下げよりもはるかに大きかった。

## コンピュータにおける用法

タブの機能は、コンピューターにも持ち込まれた。タイプライター同様、QWERTY配列のキーボードではQの左隣にキーが置かれた。

タブキーを押したときの挙動は、アプリケーションソフトウェアによって様々である。

ワープロソフトやテキストエディタでは、カーソル位置にASCIIのタブ文字(後述)を入れるか、8文字や4文字毎に設定した基準線(タイプライターのタブストップに相当)まで空白を入れる。ソフトウェアによってはタブ位置を自由に変更できたり、タブの直後を左揃えにそろえるばかりでなく、中央揃えにしたり右揃えにしたりする機能を持っているものもある。タブは、通常の日本語文書や、欧文タイプライターのように、文字送り幅が等しい(等幅という)場合には、仮にこれがなくてもスペースを1個から数個置くことで代用できる。しかし、通常の欧文文書や一部の日本語文書のように文字送り幅が文字によって異なる(プロポーショナルフォント)場合には、行の途中で縦位置を揃えるためにはタブが必須である。

表計算ソフト等では、タブキーを押すとカーソルを次のセルに移動し、シフトキーとタブキーを同時に押すと前のセルに移動する。

多くのGUIのアプリケーション(特にWindows)では、タブキーを押すと他のウィジェット(ボタンなど)にフォーカスが移動する。これにより、マウスを使わなくてもキーボードだけでGUIの操作ができるようになっている。これは元々IBMのCommon User Accessの設計の一部であった。macOSではこの機能は「フルキーボードアクセス」と呼ばれている。

タブは、部分的に入力されたテキストを補完するのにも用いられる。例えば、いくつかのコマンドライン・インターフェース(CUI)では、コマンドやファイル名の最初の数文字を入力してタブキーを押すと、入力した文字で始まるコマンドやファイル名に補完される。

## 水平タブと垂直タブ

行の途中で縦をそろえるために、縦に1本ないし数本の基準線を設け、その基準線まで右方向に空白を設けることを水平タブ (horizontal tab, HT) という。一般に、単にタブといえばこの水平タブのことを指し、これまで説明してきた「タブ」は全て水平タブである。

コンピュータでは水平タブの他に垂直タブ (vertical tab, VT) もあった。これは垂直方向に間隔を空ける際に改行コードを複数個送る代わりに1つの垂直タブコードで済むようにしたものである。垂直タブコードを受信したとき、プリンターでは縦方向に6行ほどずれ、コンソールでは桁位置を維持して改行する。

## タブ文字

ASCIIでは、制御文字として水平タブ(HT)に 9 が割り当てられている(Unicodeも同様)。キャレット記法では `^I` となり、一般的なキーボードではタブキーの他、`Ctrl`+`I`でも入力できる。C言語など多くのプログラミング言語ではエスケープ文字を使って `\t` で文字列中にタブ文字を入れることができる。

垂直タブ(VT)には、ASCIIでは 11(十六進数では0xB)が割り当てられている(Unicodeも同様)。キャレット記法では `^K` 、エスケープ文字は `\v` である。

EBCDICでは、HTは5、VTは11である。

当初のプリンターは、タブがどこに設定されているかを示すために、機械式のタブストップを使用した。水平方向は可動式の金属の突起で、垂直方向はキャリッジコントロールテープのパンチ穴で示された。当初は、プリンターにセットした用紙に既に印刷されている伝票などの様式に合わせて、タブストップは手動で設定された。後に、別の制御文字を使用してタブの設定と解除が行われるようになった。ISO 6429には、コード136(水平タブの設定)、137(水平タブの行揃え)と138(垂直タブの設定)が含まれている。

実際には、設定可能なタブストップは固定のタブストップに急速に置き換えられた。水平タブは8文字ごと、垂直タブは6行(一般的には1インチ)ごととするのがデファクトスタンダードとなった。印刷プログラムは、用紙上のどんな位置へでも移動するために必要なスペースや改行を簡単に送ることができ、これはタブストップを決めるモーダルで非標準な方法よりもはるかに信頼できた。タブ文字は、単に複数のスペースや改行を1つのコードで送るためのデータ圧縮用として使われるようになった。

8文字の水平タブが普及したのは、8が2の累乗であり、当時のデジタル電子機器で扱いやすかったためである。

### タブ区切りのテキスト(TSV)

各種データの交換用に多用されるComma-Separated Values(CSV、コンマ区切りテキスト)の形式の一つとして、各フィールド(項目)の区切り文字(デリミタ)にタブ文字が使われることがあり、これをTab-Separated Values(TSV)と呼ぶ。

表計算ソフトやワープロの表からデータをコピーしたときや、データを貼りつけるときにタブ区切りのテキストが使われる。

### HTML

HTMLでは `&#9;` や `&Tab;` で水平タブを表現できるが、HTMLでは水平タブを含む空白文字の連続は1つの空白として表示される。ただし、`<pre>`タグの中や、CSSで`white-space`属性を`pre`に設定されたタグの中は、この限りではない。

以下は、`<pre></pre>`要素の中で`&#9;`を使った例である。

上記のHTMLは以下のように表示される。

垂直タブは `&#xB;` であるが、XML 1.0やHTMLでは使用できない。

### Unicode

Unicodeでは、水平タブ・垂直タブのコードポイントはASCIIと同じである。

- U+0009 <control-0009> (CHARACTER TABULATION, 水平タブ (HT), タブ)
- U+000B <control-000B> (LINE TABULATION, 垂直タブ (VT))

制御文字の図形表現として以下のものがある。

- U+2409 ␉ symbol for horizontal tabulation
- U+240B ␋ symbol for vertical tabulation

Unicodeには、タブキーに刻印される記号もある。

- U+21B9 ↹ leftwards arrow to bar over rightwards arrow to bar (tab with shift tab)
- U+21C6 ⇆ leftwards arrow over rightwards arrow
- U+21E4 ⇤ leftwards arrow to bar (leftward tab)
- U+21E5 ⇥ rightwards arrow to bar (rightward tab)