LoginSignup
6
11

More than 5 years have passed since last update.

OpenGrokの使い方

Posted at

各画面の説明

トップページ

image

左のフィールドで検索対象ごとに検索キーを入力します。
右のコンボボックスで検索対象となるプロジェクトを指定します。

検索対象

検索対象は次の5つです。複数同時にキーを指定するとAND検索になります。

  • Full Search
    すべてのトークン(単語、文字列リテラル、識別子、数値)
    シンボルに該当しない単語(キーワード、文字列、コメントなど)はここでしか検索できない
  • Definition
    シンボル(クラス、関数、変数、マクロ等の名前)の定義
  • Symbol
    シンボルの定義と参照
    Definitionと異なり、シンボルを使っている場所にもヒットする
  • File Path
    ファイルやディレクトリ/フォルダの名前
  • History
    バージョン管理システムのコメント

OpenGrokはトークン単位で検索を行います。例えば、printprintlnにヒットしません。これはファイルパスであっても同様で、foo/foo/barにヒットしますが、/foobar/bazにはヒットしません。

トークンの一部分を検索するにはワイルドカードを使用します。

プロジェクト

プロジェクトは複数指定できます。ここでプロジェクト名をダブルクリックするとプロジェクト内のディレクトリを閲覧できます。

検索結果

image

ファイル名をクリックすると、ファイルの先頭へジャンプします。
右半分のヒットした行をクリックすると、その行へジャンプします。

ファイル名の左にあるショートカットリンクの意味は次の通りです。

  • H: ファイルの履歴を表示します
  • A: Annotate: 行ごとに最終更新者を表示します
  • D: このファイルをダウンロードします

ファイルの閲覧

image

  • Home: トップに戻ります
  • History: ファイルの履歴を表示します
  • Annotate: 行ごとに最終更新者を表示します
  • Line#: 行番号の表示を切り替えます
  • Navigate: ナビゲーションウィンドウの表示を切り替えます
  • Download: このファイルをダウンロードします

ナビゲーションウインドウでは、ファイル内にあるシンボルの定義へジャンプすることができます。

image

  • 行番号をクリックするとその行にジャンプします。このとき、アドレスバーからその行のURLが取得できます
  • シンボルをクリックするとそのシンボルの定義か参照を検索します

履歴の閲覧

プロジェクトをバージョン管理システムからインポートしている場合は、履歴をOpenGrok上で確認することができます。

Historyではファイルの変更履歴を確認できます。
image

リビジョン番号をクリックするとその時点での内容を確認できます。また、Compareボタンで、ラジオボタンで選択した2つのリビジョン間の差分を確認できます。
image

Annotateでは行ごとの最終更新リビジョンと更新したユーザーを確認できます。
image

発展的な検索機能

この章はヘルプの翻訳です。

検索クエリはスペースで区切られた節の列です。節の前には+-およびフィールド名を付けることができます。

  • +を付けると、「その節がヒットする」ファイルを探します(省略可)
  • -を付けると、「その節がヒットしない」ファイルを探します
  • 以下のフィールド名:を付けると、その節を検索するフィールドを限定します(画面上の表記と名前が違います)
    • full: Full Search
    • defs: Definition
    • refs: Symbol
    • path: File Path
    • hist: History

Webフォームから検索する場合、入力するフィールドによってフィールド名のデフォルト値が決まります。

節は以下のものから成ります。

  • 単語: その単語自体にヒットする
  • 句: スペース区切りの単語列を" "で囲んだもの
  • クエリーグループ: 検索クエリーを( )で囲んだもの

節には以下の論理演算が行えます。

  • AND または &&
  • OR または ||
  • NOT または -

AND、OR、NOTはすべて大文字で、AND、ORは中置記法の2項演算子、NOTは前置記法の単項演算子です。

ワイルドカード

単語の検索にワイルドカードが使用できます。ただし、単語の先頭には使えません。

  • * 任意の$n$文字 $(n \ge 0)$ を表す
  • ? 任意の1文字を表す

例えば、print*printprintlnprintf等にヒットします。

ワイルドカードは単語を超えません。例えば、foo*arfoobarにヒットしますが、foo barにはヒットしません。

setResourceMonitorsが定義されている場所を探す

defs:setResourceMonitors

usr/src/cmd/cmd-inet/usr.sbin/の下でsprintfを使っているファイルを探す

refs:sprintf path:usr/src/cmd/cmd-inet/usr.sbin

変数Asignへ代入している場所を探す

"Asign="

pstackをビルドするMakefileを探す

pstack path:Makefile

Bill Joyという句を探す

"Bill Joy"

/usr/bin/perlではなく/bin/perlを指定しているperlファイルを探す

-"/usr/bin/perl" +"/bin/perl"

fooから始まる語を探す

foo*

ファイル名に". c"を含むファイルを探す

path:". c"

Tips

モジュールを絞り込む

パッケージや名前空間を限定する機能はありませんが、File Pathフィールドにモジュールのディレクトリ名を指定することで疑似的にモジュール名での絞り込みができます。

オブジェクト(インスタンス)を作っている場所を探す

クラスKlassをインスタンス化している場所を探すには、Full Searchで次のように検索します。
(new クラス名でインスタンス化する言語の場合)

Klassをインスタンス化している場所を探す
"new Klass"

ダブルクォートが無いとただのAND検索になり、Klass = func("new"); などにもヒットしてしまいます。

派生クラスを探す

Klassを派生している場所を探す(C++)
"public Klass"

リンク

6
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
11