私はテキストデータファイル、例えば会員リスト、レース結果、チーム名簿などを扱うことが多いです。これらはデータベースからエクスポートしたり、スプレッドシートをカンマ区切り値(CSV)形式で保存したりする際に得られるものです。これらのファイルからデータを抽出したり、不要なデータを削除してクリーンアップしたり、何らかの方法でフォーマットを変更したりしたいのですが、こうしたテキスト操作のキラーアプリとして長年愛されてきたのが、Bare Bones SoftwareのBBEditです。
同社はBBEdit 13を有料アップグレードとしてリリースしました。27年の歴史を誇るアプリですが、Rich Siegel氏と開発チームは、このパワフルなテキストエディタを常に新鮮に保つ新機能の開発に取り組んでいます。今回のアップデートでは、長年BBEditのコアコンピテンシーであったパターンマッチ検索に重点を置き、正規表現をインタラクティブに試せる「パターンプレイグラウンド」と、多くの一般的な正規表現に簡単な説明付きで素早くアクセスできる「Grepチートシート」を追加しました。さらに、BBEdit 13では検索ウィンドウにライブ検索機能が搭載され、検索語を入力すると一致する箇所が自動的にハイライト表示されます。
正規表現の簡単な入門
文字列の検索はよくご存知でしょう。このドキュメントで「string」を検索すると、その単語のすべてのインスタンスと、「astringent」などその 6 文字を含む単語がすべて見つかります。
さらに興味深いのは、正規表現(検索パターンを定義する文字列) です。正規表現を使用すると、文書内のすべての電話番号、市外局番を持つすべての電話番号、またはではなく607
としてフォーマットされた電話番号だけを検索するなどの操作を実行できます。(###) ###-####
###/###-####
テキストの置換にも正規表現を使用できます。例えば、検索の一部を括弧で囲むと、そのパターンが保存され、置換に使用できます。これにより、名前のリストTim Cook
を のようにフォーマットし直すといったことが可能になりますCook, Tim
。つまり、名前を検索して置換パターン1に保存し、姓を検索して置換パターン2に保存し、順序を逆にして両者の間にカンマを挿入する置換を記述することになります。
(余談ですが、多くの人が口語では「正規表現」ではなく「grep」という言葉を使います。Grep は、Unix で正規表現検索を実行するためのコマンドライン ユーティリティの名前です。その名前は Unix の ed コマンドに由来しておりg/re/p
、「正規表現をグローバルに検索して印刷する」と展開されます。ここではUnixユーティリティについて具体的に説明していないため、「grep」を「正規表現」の同義語として使います。)
パターンという観点から考え始めると、テキストベースのデータはまるで粘土のように扱いにくくなります。難しいのは、目の前の特定の文字ではなく、それらを表す背後にあるパターンを理解できるように脳を訓練することです。BBEdit 13の新機能が真価を発揮するのはまさにそこです。では、レースの完走タイムのファイルから10分の1秒単位の誤差を取り除く必要があるという実例で、これらの機能を詳しく見ていきましょう(手動計時では許容される精度よりも高い精度が必要だからです)。
パターンプレイグラウンド
私のように長年正規表現を書いてきた人間でさえ、grep検索を構築するには試行錯誤が必要です。これは私がgrepが下手だからではなく、ソースファイルが実際よりも規則的だと思い込みやすいからです。
例えば、名と姓を検索するgrep検索を作成し、それらをLast, Firstにフォーマットし直した場合、「Victor Von Doom」のように姓が2語で構成されている検索では検索に失敗します。厄介なことに、2語の姓を考慮して検索を修正すると、「Billie Joe MacAllister」のように姓が2語で構成されている検索では結果が異なります。現実世界のデータは、必ずしも整然としたパターンに当てはまらないことがあります。
これまでの解決策は、BBEditの検索ウィンドウで正規表現を書き始め、書き進めながら継続的にテストすることです。確かにうまくいきますが、試行錯誤の作業は面倒です。BBEditの新しいパターンプレイグラウンド機能は、正規表現に既に慣れている人にとってはプロセスを簡素化し、そうでない人にとっては学習の助けとなります。その仕組みは以下のとおりです。
「検索」>「パターンプレイグラウンド」からウィンドウを開きます。ウィンドウには5つのセクションがあり、そのうちのいくつかはユーザーが操作するもの、他のセクションはユーザーの操作結果を報告するものです。
- 検索パターン:ここに検索パターンを入力します。今回の場合は、
\d
「任意の数字」の正規表現を使って時刻を検索します。小数点以下の桁を除いた時刻を括弧で囲んで置換パターン1としてキャプチャし、ピリオド(ピリオドは単独では「任意の文字」を意味するため、先頭にバックスラッシュを付ける必要があります)と小数点以下の桁を識別する別の数字を検索します。 - キャプチャ グループ:置換で使用するパターンを括弧でキャプチャする場合、ウィンドウのこのセクションには、各置換パターンに含まれる内容が表示されます。
- 置換パターン:ここに置換パターンを入力してください。私は、
\1
小数点以下の部分(置換パターン1)を除いて、検索した時刻の最初の部分だけを抽出したいので、入力しました。 - 置換テキスト:このフィールドには、置換パターンによって最終的に置き換えられる内容が表示されます。このフィールドは編集可能に見えますが、実際にはコピーするだけです。
- 内容:この大きなフィールドには、検索対象のファイルの内容が表示され、見つかったテキストがハイライト表示されます。ポップアップメニューから、別の開いているファイルを選択できます。

ライブ検索結果のハイライト
機能的な検索を構築し終えたら、「検索に使用」をクリックして、BBEditの検索ウィンドウに移動できます。ここでBBEdit 13の新しいライブ検索の有用性が発揮されます。検索ウィンドウが最前面に表示されているときは、BBEditは見つかったすべての用語をハイライト表示します。さらに重要なのは、見つかるはずなのに一致しない用語はハイライトされないことです。
このスクリーンショットでわかるように、BBEdit は15,000件の再生時間をすべてハイライト表示しており、それぞれ1時間以上経過しています。しかし、7,000件の再生時間の多くは1時間以内なので、検索では必要な情報がすべて見つかるわけではありません。

パターンプレイグラウンドウィンドウに戻って、時間を表す数字と最初のコロンを識別するパターンの「0個以上」を探すことで、検索パターンを修正できます(\d:)*
。

Grep チートシート
時刻の先頭に時桁があるものとないものがあるということに気づいた瞬間、修正方法が分かり、パターンプレイグラウンドウィンドウに戻る必要はありませんでした。しかし、もし正しい正規表現が分からなかったり、特殊な正規表現を使っている場合はどうすれば良いでしょうか?そんな時にGrepチートシートが役立ちます。Grep検索を実行できる場所に表示される小さな「?」アイコンをクリックするだけで、BBEditに一般的な正規表現のメニューが表示されます。必要なものがすべて揃っているとは言えませんが、まずはこれで十分でしょう。

その他の新機能
BBEdit 13 には、他にも興味深い新機能がいくつかあります。完全なリストについては、リリース ノート (現在のバージョンでは、[ヘルプ] > [変更ノート] を選択するといつでも参照できます) を参照してください。
- テキスト変換を適用: BBEditでテキストファクトリーを作成し、複数のファイルにわたって特定の変換を適用していた場合、BBEdit 13の新機能「テキスト」>「テキスト変換を適用」コマンドを使えば、テキストファクトリーで実行できるすべての操作を1つのダイアログで実行できます。また、後で再利用したい場合は、「テキストファクトリーとして保存」をクリックしてください。
- 長方形選択:以前のバージョンのBBEditでは、Optionキーを押しながら長方形選択を行うことができましたが、これは「編集」>「テキストオプション」で「ソフトラップテキスト」が有効になっていないドキュメントでのみ機能していました。BBEdit 13では、このオプションが有効になっている場合でも長方形選択が可能になりました。これは列形式のデータを扱う際に便利です。列形式のデータを扱う場合は、BBEditの「編集」>「列」コマンドをぜひご利用ください。
- 選択機能の強化:検索結果のハイライト表示は見た目だけを強調表示している点にご注意ください。これらの項目は選択されているため、切り取りやコピーはできません。しかし、新しい選択オプション「検索 > 検索してすべて選択」を使えば、切り取りやコピーが可能です。また、BBEdit の列コマンドについて言えば、新しく追加された「編集 > 列 > 列を選択」コマンドは、まさに期待通りの機能を備えています。さらに、「編集 > 選択 > ハイライト表示された一致」コマンドと「編集 > 選択 > ライブ検索結果」コマンドも新たに追加されました。
- 末尾の空白文字の削除:行末に1つ以上の空白文字が含まれることはよくありますが、これが問題になる場合があります。BBEdit 13には、このような不要な文字を削除するための「テキスト > 末尾の空白文字の削除」コマンドと、同等のテキストファクトリー操作が追加されました。
- サイドバーの機能強化:サイドバーの外観と動作を調整するための「BBEdit > 環境設定 > サイドバー」が追加されました。また、以前のバージョンにもオプションがありましたが、「BBEdit > 環境設定 > 外観」にある「リスト表示フォントサイズ」スライダーでサイドバーのテキストサイズを大きくできるようになりました。
- ダークモードの切り替え:ダークモードに設定している場合、BBEdit がシステムの外観に合わせて自動的に変更されるようになりました(「ダークモードのダークサイド」、2019年5月31日の記事参照)。BBEdit > 環境設定 > 外観をご覧ください。BBEdit はシステムの外観の変更に合わせて配色も変更します。リリースノートでこの方法について詳しく説明しています。
BBEdit 13のリリース前にBare Bones社から受けた説明会で、おそらく最も興味深かったのは、以前のバージョンのBBEditにも搭載されていた便利な機能についてでした。しかし、私はそれらの機能をなかなか使いこなせませんでした。BBEditを普段から使っている私でさえ、どれほど多くの機能を見逃していたのかを知るのは、実に恥ずかしい思いでしたので、その点についてはまた別の機会に詳しく触れたいと思います。
いずれにせよ、BBEdit 13は、長年愛用してきたユーザーの使い方を変えることなく、魅力的な新機能を追加した強力なアップグレードです。特にgrepベースの検索を使用している方、あるいはgrepの構文が分からず使いこなせていない方にとって、BBEdit 13はアップグレード料金に見合うだけの価値があります。
アップグレードの詳細
システム要件が増加したため、BBEdit には少なくとも macOS 10.14.2 Mojave (10.14.6 以降が望ましい) が必要となり、10.15 Catalina でも動作します。
BBEdit 13 は BBEdit 12 と同じ価格設定で、新規ライセンスは 49.99 ドルです。バージョン 12 からのアップグレードは 29.99 ドル、BBEdit 11 以前をお持ちの場合は 39.99 ドルです。Mac App Store でサブスクリプションにご登録のお客様は、特別な手続きなしで BBEdit 13 のすべての新機能にすぐにアクセスできます。
BBEdit のすべての機能は 30 日間無料で使用できます。その後もコア機能は引き続き無料で使用できますが、ライセンス料を支払わないと星印の付いたメニュー項目は使用できません。