ソースコード検索エンジン・OpenGrokを構築しよう

この記事は 弥生 Advent Calendar 2021 の24日目の記事です。

こんにちは。弥生でエンジニアをしている、たけです。
突然ですが、この記事を読んでくださっているみなさんは、ソースコードの検索をどのように行っていますか?

普段から道に迷いやすい私ですが、ソースコードを読んでいるときにも迷子になることが多々あります。 そのうえ極度の面倒くさがりなので、「IDEを立ち上げるのもちょっとな…」と思うことがあります。

そこで、「OpenGrok」というソースコード検索エンジンを自分の開発用PCに構築することにしました。
私は普段デスクトップアプリケーションの開発を行っているのですが、Webアプリケーションの基本の勉強になりそうだと思ったことも、OpenGrokを使ってみようと思った理由の一つです。

目次

OpenGrokとは?

oracle.github.io

  • 高速のソースコード検索・相互参照エンジンです。
    • "A wicked fast source browser" (めちゃくちゃ速いソースブラウザ)です。
  • 複数のプロジェクトのソースコードを一括で検索することができます。
  • 以下のような様々な言語に対応しています。
    • C / C# / C++ / Golang / Java / JavaScript / Json / Kotlin/ Python / Ruby / Rust など

環境構築手順

公式的な環境構築手順は以下のページに記載されていますので、詳細はこちらをご参照ください。
How to setup OpenGrok · oracle/opengrok Wiki · GitHub

このブログでは、私が実際に自分の開発用PCのWindowsに構築した手順を簡単にご紹介します。

1. 事前準備

2. Ctagsをダウンロード

※Ctags:ソースファイル・ヘッダファイルの名前のインデックスファイルを生成するためのプログラム。

  • Universal Ctags をダウンロードし任意のディレクトリに展開する。
  • Path にctags.exeのパスを追加する。

3. OpenGrokの環境作成

  • OpenGrok > Download TAR Ball から「opengrok-XXX.tar.gz」をダウンロードし任意の場所に展開する。
  • OpenGrokの展開先にある、\lib\source.warを展開する。
  • 展開したsourceの配下にある、WEB-INF\web.xmlにCONFIGURATION、SRC_ROOT、DATA_ROOTを設定する。
  • sourceを、%CATALINA_HOME%(Tomcatの展開先)\webapps\にディレクトリごとコピーする。
  • %CATALINA_HOME%\conf\server.xmlの要素内に以下の行を追加する。
 <Context path="/source" docBase="source" debug="0" />

4. ソースコードを解析

  • 「3. OpenGrokの環境作成」でweb.xmlのSRC_ROOTに指定したパスに、解析したいソースコードを配置する。
  • コマンドプロンプトでOpenGrokの展開先\libに移動し以下のコマンドを実行する。
java -jar opengrok.jar -W [configuration.xmlへのパス] -c  [ctags.exeへのパス] -P -S -v -s  [ソースツリー(SRC_ROOT)へのパス] -d  [解析結果出力先(DATA_ROOT)へのパス]

5. OpenGrok を表示

  • Tomcatを起動する。(%CATALINA_HOME%\bin\startup.bat)
  • ブラウザから http://localhost:8080/source にアクセスする。
  • 以下のようなOpenGrokのトップページが表示されていれば環境構築成功です!

f:id:yayoi_ntake:20211220103905p:plain

OpenGrokでできること

  • SRC_ROOTに配置したすべてのファイルについて、以下の表の項目から検索を行うことができます。
  • 「Projects」から検索対象のプロジェクトを絞り込むことも可能です。
検索項目 検索対象
Full Search すべてのトークン
Definition シンボルの定義
Symbol シンボルの定義と参照
File Path ファイル・ディレクトリの名前
Type ファイルの種類
  • 検索結果を選択することで、ヒットした部分が含まれるファイルを開くことができます。
  • 開いたファイルの変数などをクリックすると、その定義にジャンプすることもできます。

使いどころ

上記に記載したOpenGrokの機能を使うと、

  • 複数のプロジェクトのソースコードの検索を、一括で高速に行うことが可能です。
  • 複数の条件を組み合わせた検索を簡単に行うことができます。
  • したがって、巨大なプロジェクトのソースコードを理解するのに便利です(もう迷わない)!

感想

実際にOpenGrokを使ってみて、「やはり速い!」と感じました。
私の所属するチームでは、複数の製品の開発を行っています。
そのため、「このクラス/メソッドは他にどこで使っているんだろう?」と思ったときに、複数のプロジェクトを気軽に検索することができるのはとても助かります。

また、Webアプリケーションのごく基本的な構成について、実際に環境を構築しながら学ぶ良い機会になりました。
OpenGrokを構築する環境がWindows、かつ日本語で書かれている参考情報があまり多くなく情報収集に少し苦労しましたが、それもまた良い勉強になりました。

今後やりたいこと

GitやSVNなどのバージョン管理システムとOpenGrokを連携させることで、変更履歴や差分も見られるようになるので、そちらも対応するとより便利になりそうだと思っています。

お知らせ

弥生では一緒に働く仲間を募集しています! herp.careers