LoginSignup
1
1

More than 5 years have passed since last update.

HighSierraにOpenGrok環境を作ってみた(2018/11/4)

Last updated at Posted at 2018-11-04

はじめに・・・

最近規模が大きめなソースコード読むことが増えてきたため,自宅のMacbook ProにOpenGrokを入れてみたという記事です.
会社でもガッツリ使っていて、コードリーディングが非常に楽になります.
皆さん、是非使ってみては如何でしょうか?

fig3.png

開発環境

MacOS High Sierra 10.13.2

OpenGrok 1.1-rc70

Homebrew

Python 3.6.0

JDK 11

Tomcat 8(最新版でも問題ないと思うが,諸事情に8を使用)

Ctags

好きなブラウザ(私はChromeを使用)

作業ディレクトリ

今回作業を行うディレクトリは下記の通りです.

WORK_DIR=~/Documents/Qiita/OpenGrok

事前準備

環境構築

必要なモノをインストールします.(Homebrewはインストール済みを想定しています.)

# Tomcatのインストール
$brew install tomcat@8

# Ctagsのインストール
$brew install --HEAD universal-ctags/universal-ctags/universal-ctags

OpenGrokの準備

https://github.com/oracle/opengrok/releases
上記URLから,今回は1.1-rc70のバイナリターボール(opengrok-1.1-rc70.tar.gz)を取ってきます.
※ソースコードではないのでご注意
取得したopengrok-1.1-rc70.tar.gzを作業ディレクトリに展開します.

# ダウンロード先に移動
$cd ${opengrok-1.1-rc70.tar.gzのダウンロードされたディレクトリ}

# WORK_DIRに展開
$tar xfvz opengrok-1.1-rc70.tar.gz -C $WORK_DIR

OpenGrokの設定

OpenGrok-Toolのビルド

OpenGrokは処理を行うために様々なコマンドを用意しています.
今回はそのコマンドのPythonラッパーを使用します.
具体的な手順は,OpenGrokが用意してくれているドキュメントを参照することをオススメします.
ここでは必要最低限の準備しません.

# 上で展開したOpenGrokのディレクトリに入る
$cd $WORK_DIR opengrok-1.1-rc70

# toolsの中に入り,opengrok-tools.tar.gzを展開し,その中に入る
$tar xfvz opengrok-tools.tar.gz
$cd opengrok-tools-1.1rc70

# ここからPythonの処理に入るので,仮想環境を準備
$python3 -m venv env
$. env/bin/activate

# ビルドに必要なものをインストールする.
$python -m pip install -r opengrok_tools.egg-info/requires.txt

# ビルドとインストール
$python setup.py develop
$export PYTHONPATH=`pwd`/src/main/python:$PYTHONPATH
$python setup.py install

# インストールされたか確認
$opengrok-groups
usage: opengrok-groups [-h] [-D] [-j JAVA] [-J JAVA_OPTS] [-e ENVIRONMENT]
                       (-a JAR | -c CLASSPATH)
                       options [options ...]
opengrok-groups: error: the following arguments are required: options
$opengrok-sync                                                                                                                      ✘ 2
usage: opengrok-sync [-h] [-w WORKERS]
                     [-d DIRECTORY | -P [PROJECTS [PROJECTS ...]]] [-I] [-D]
                     [-i [IGNORE_ERRORS [IGNORE_ERRORS ...]]] -c CONFIG
                     [-U URI]
opengrok-sync: error: the following arguments are required: -c/--config

これでOpenGrokのツールをインストールできました.

デプロイ

ビルドが済んだのでTomcatへのデプロイを行います.
tomcatのバージョンによって,ファイルパスが変わるので注意してください.(下記は私の環境の場合です)

# Tomcatのwebappに.warファイルをデプロイする.
$opengrok-deploy $WORK_DIR/opengrok-tools-1.1rc70/lib/source.war /usr/local/Cellar/tomcat@8/8.5.34/libexec/webapps

コードリーディングするソースコードの準備

OpenGrokで見るソースコードの準備を行います.
適当なソースコードを今回は準備します.

# 適当なソースコードを準備
$ll -R  NMF_for_cpp-master
total 80
-rwxr-xr-x@ 1 t_sumida  staff   3.8K  3  2  2018 Array2D.hpp
-rwxr-xr-x@ 1 t_sumida  staff   214B  3  2  2018 CMakeLists.txt
-rwxr-xr-x@ 1 t_sumida  staff   6.9K  3  2  2018 NMF.hpp
-rwxr-xr-x@ 1 t_sumida  staff   904B  3  2  2018 README.md
-rwxr-xr-x@ 1 t_sumida  staff    12K  3  2  2018 Separator.h
-rwxr-xr-x@ 1 t_sumida  staff   1.1K  3  2  2018 main.cpp

# OpenGrokで使うディレクトリを作成する.
$sudo mkdir /var/opengrok/src
$sudo mkdir /var/opengrok/data
$sudo mkdir /var/opengrok/etc

インデキシング

最後にインデキシングを行い,Tomcatを起動していきます.

# ソースコードを/var/opengrok/srcにコピーする
$cp -r NMF_for_cpp-master /var/opengrok/src

# インデキシングを実行(規模によっては時間がかかる)
sudo opengrok-indexer  -a $WORK_DIR/opengrok-1.1-rc70/lib/opengrok.jar -- \
    -s /var/opengrok/src -d /var/opengrok/data -H -P -S -G \
-W /var/opengrok/etc/configuration.xml -U http://localhost:8080

# Tomcatを起動
$catalina start
$catalina run

使ってみる

Tomcatが起動した後に,
http://localhost:8080/source/
をブラウザで開くと,下のような画面になっている.
fig1.png

使い方に関しては,チートシートなどがその辺に転がってるので参照してください.
「この関数がどこで定義されていて,どこで使われているのか?」
「この定義を色付けしておきたい!」
など様々なことが出来ますよ.

fig2.png
fig3.png

運用

今後他にも見たいソースコードがあるなら,インデキシングを毎回行ってください.
CやC++,Java, Pythonに対応しているので色々試してみてください.
※インデキシング時のコマンドを少し変える必要があると思いますが・・・

最後に・・・

会社で使ってて便利だと思ったので,自宅のMacにもOpenGrokを入れてみました.
研究室の古いソースコードとか,プロジェクト単位で登録すれば色々便利かもしれないです.

1
1
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
1
1