テキストファイルには、重要な情報とそうでない情報が含まれていると思います。
確認したいポイントにそって、必要な情報が得られたら便利ではないでしょうか。
このようなニーズに応える手段として、今回、サクラエディタのアウトライン解析を紹介します。
私は、ソフトウェア開発を行っているため、動作時のログファイルをよく見ます。
膨大なログから、処理の大まかな流れ、エラーが発生しているのかどうか、などすぐに把握したいと思っておりました。
そこで、自分が着目したいトピックをルール化し、アウトライン解析で実行することで、必要な情報を抽出するようにしています。
同じような悩みを抱えている方は、一読の価値ありです。
アウトライン解析とは
アウトライン解析とは、ファイルのテキストから、特定の見出し記号、関数の位置等を解析して一覧表示する機能です。
図を見た方が理解が早いと思いますのでイメージを記載します。
C++メソッドツリーという画面が、アウトライン解析結果です。
C++のソースファイルでは、上記のようにC++のアウトライン解析ルールが適用され、クラスに対してメソッド一覧が表示されます。
アウトライン解析方法
「C++には、C++のルール」「HTMLには、HTMLのルール」など、ファイルの拡張子によって、アウトライン解析方法が設定することができます。
こちらは標準で搭載されている機能です。
アウトライン解析の実行方法
2通りの方法があります。
①アイコンをクリック or ショートカットキー(F11)
以下のアイコンをクリックすることで、実行できます。
ツールチップで表示されていますが、F11を押すことでも実行できます。
ショートカットキーを覚えておくと、一発で起動できますので、便利です。
慣れるとすぐ覚えるかと思います。
② [検索] → [アウトライン解析]をクリック
アウトライン解析は「検索」の中にあります。
見出しを抜き出すので、「検索」配下にあるイメージしておくと、覚えやすいかもですね。
アウトラインルールの設定方法
Ctrl + F5にて、タイプ別設定が起動できます。
今回の例では、C++のファイルで実行していますので、ファイル拡張子cppに応じた、標準ルール[C/C++]のアウトラインのルールが紐づけられています。
指定の拡張子にのみ設定したい場合は、Ctrl + 4 で、タイプ別設定一覧から行います。
特定の拡張子に対して、設定する場合
例えば、新しくログ解析用に設定したいとします。
ここでは、ログファイルの拡張子がdebuglogと想定し、ログ用のルールファイルを指定します。
Ctrl +4を押して、タイプ別設定一覧を表示します。
他の設定から複製などするなどして、新しく作成します。
設定変更から「ファイル拡張子」を指定します。
独自のルールを設定したい場合は、ルールファイルにチェックし、作成したルールファイルを指定します。
アウトラインルールの作成方法
それでは、独自のルールファイルを作成してみましょう。
ファイルの拡張子は、rul, rule, txtなど、自由に設定して構いません。
ルールファイルの中身は、以下のような記載となります。
ポイント①:階層構造が利用できる
例えば、ルールファイルとして、rule.txtを作成・設定するとします。
■ /// 大項目
・ /// 中項目
◆ /// 大項目
「■」と「◆」は同じグループ名をしているため、同じ階層レベルになります。
以下のようなファイルを開いているときに、F11を実行すると、
ルールファイルの画面が起動し、下記のように階層表示できます。
ポイント②:正規表現が利用できる
ファイルの先頭付近に以下を記述することで、検索文字列に正規表現が利用できるようになります。
;Mode=Regex
また、以下のように記述することで、検索文字列にマッチした文字列を置換して表示することも可能です。
;Mode=RegexReplace
サンプルコードは、「アウトラインルールの適用事例」にて紹介します。
アウトラインルールの適用事例
私は、ログファイルを解析するときに、大まかな処理の流れをすぐにつかむために、
以下をルールファイルとして登録しています。
- 主要な処理の流れのログ
- エラー時のログ
これにより、ログからすぐに、以下のようなことを把握できます。
「大枠の処理の流れ」
「エラー終了しているのか」
「どのタイミングでエラーが発生しているのか」
特に、プロジェクトの規模が大きくなるにつれて、「ログの量が多く処理が追いにくい」「エラーを見落とす人がでてくる」など、様々な問題が発生してきます。
ある程度、確認ポイントをプロジェクトで統一する際にも利用できると思います。
例えば、以下のようなログがあるとします。
詳細ログが大量にあると大枠なシーケンスの流れを見失ってしまいます。
また、Grepしない限り、エラーも埋もれてしまうでしょう。
そこで以下のようなルールを設定するとします。
;Mode=RegexReplace
シーケンス([0-9]) /// シーケンスの流れ[$1] /// 処理の流れ
エラーコード:([a-z]{5}) /// ★エラー出ているよ!($1) /// エラー
実行すると処理の流れを把握しつつ、エラーの見落としも減ると思います。
正規表現にマッチした文字列を抜き出したい場合は、
対象を()で括る、そして、置換側で「$数字」で抽出することができます。
今回の例では、マッチする対象を1つしか指定していなかったので、
$1としていますが、複数ある場合は、順番に$2, $3, …として抽出することができます。
アウトライン解析のトラブルシューティング:ルールファイルが効かない
原因①:ルールの記載の仕方がおかしい
検索文字列 /// グループ名
検索文字列の後にスペースキーが存在しています。
ここにスペースがないと、検索文字にヒットせず、アウトライン解析が効いていないような現象になります。
原因②:文字コードがおかしい
日本語が含まれているルールファイルの場合、もしかすると、文字コードが影響しているかもしれません。
ルールファイルをSJISで保存して試してみてください。
アウトラインルール作成時の注意点
注意①:優先度が高いものから記述する
ルールは先頭から判定されます。
当てはまるルールが複数ある場合、最初に記載している方が優先されるため、優先させたいものを先に記述しましょう。
注意②:解析に時間がかかることもある
解析対象のファイルが膨大、あるいは、ルールファイルが膨大な場合、
アウトライン解析の実行に時間がかかる場合があります。
あまりにも解析が遅い場合は、ルールファイルの見直しなどをおおなった方がよいかもしれません。
まとめ
以上、サクラエディタのアウトライン解析の設定方法の紹介でした。
- アウトライン解析で見出しを抽出することができる
- ルールファイルを指定することで、独自の観点で抽出することができる
#正規表現、階層が利用できる - ログの解析など、独自の状況に応用できる
- ルールファイルをチームに展開することで、同じ観点で確認するポイントが共有できる
アウトライン解析を利用できそうな視点を持って、業務にあたると業務効率改善につながるかもしれません。