これでソースコード リーディングが捗る! OpenGrok の構築方法
Opengrok とは
OpenGrok は主にソースコードの検索ツールとして使用されています。OpenGrok はソースコード検索および相互参照エンジンで Java で書かれているオープンソースのプロジェクトです。
どんな感じか見てみたい方はこちらのページにあるアクセス可能な OpenGrok サイトがありますので、検索を試してみてください!
構築する前に...
今回は Docker を使用します!
下記はすでにインストールされているものとして進めていきます。
- Docker
- Docker Compose
構築方法(Docker)
基本的には公式の Github に記載がある内容をなぞって構築を行っていきます。
Docker image
早速立ててみましょう!
1. 準備
まずは docker-compose.yml を作成するので、mkdir opengrok
などで今回の作業ディレクトリを作成してください。
作成した opengrok ディレクトリ配下に etc, src, data のディレクトリも作成しておきます。
docker-compose.yml を下記で作成します。
version: "3"
# More info at https://github.com/oracle/opengrok/docker/
services:
opengrok: ### サービス名
container_name: opengrok ### コンテナ名
image: opengrok/docker:latest ### Docker image の指定
ports:
- "8080:8080/tcp" ### 使用するポートと protocol の指定
environment:
SYNC_PERIOD_MINUTES: '60' ### 定期的に同期を行う分数の指定
# Volumes store your data between container upgrades
### コンテナとローカル環境のディレクトリの対応付け
volumes:
- '~/opengrok/src/:/opengrok/src/' # source code 配置場所
- '~/opengrok/etc/:/opengrok/etc/' # configuration.xml の配置場所
- '~/opengrok/data/:/opengrok/data/' # index data
※ ~/opengrok/src/ は home ディレクトリ配下の opengrok/src を指定していますが、こちらはご使用されている環境にあわせて変更をしてください。
設定できる環境変数はこちらをご参照ください。
2. コンテナの立ち上げ
docker-compose.yml があるディレクトリで下記のコマンドを実行し、立ち上がったら http://localhost:8080/ にアクセスしましょう!
$ docker compose up -d
+] Running 23/1
✔ opengrok 22 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 93.7s
[+] Running 1/2
- Network opengrok_default Created
6.5s
✔ Container opengrok Started
6.4s
立ち上がっているかはコマンドでも確認できます。
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
opengrok opengrok/docker:latest "/scripts/start.py" opengrok 10 minutes ago Up 10 minutes 0.0.0.0:8080->8080/tcp
下記の画面になれば起動は成功です。
3. コンテナの停止/削除
コンテナをすべて削除し、volume も削除する場合には下記を実行してください。
docker compose down --rmi all -v
ソースコードを配置する
立ち上げだけを確認しましたが、実際にこれでは検索がどんなものかはわからないですね。
今度はコードを事前に src ディレクトリに配置して検索できるようになるか確認してみましょう!
今回は OpenGrok 自体のコードを取ってきましょう。
Note: 動くかの確認であれば、検索できるコードとかならなんでもいいので適当なプログラムのディレクトリを設置するでも問題はないです。
releases のページにアクセスしてどれかのリリースの Assets からコードをダウンロードします。
今回は .zip ファイルをクリックし、ダウンロードしました。
ダウンロードしたファイルは作成済みの opengrok/src ディレクトリ配下に配置し、展開します。
Index
展開後に docker compose コマンドで OpenGrok を立ち上げて、しばらく待つと index data が作成されてソースコードにアクセスできるようになります。(時間が結構かかる場合もあるので起動したら coffee break でもしてください。)
数分待って opengrok/data ディレクトリ配下に index などのファイルができていれば処理は進んでいると思います。
下記のように表示されていれば、OK です。
Note: 警告マークは Sync 中になりますが、検索はできます。
Search
では、Full Search 項目で OpenGrok
と検索をしてみましょう!
検索結果がいっぱい出てこれば、OK です。
これで動作していることがわかったので後は思うままにコードを配置/検索/閲覧を繰り返すだけです!
良いコードリーディング ライフを!!!
ちなみに検索の help は help ボタンをクリックすることで確認できますので、ご確認ください。
Examples:
To find where setResourceMonitors is defined:
defs:setResourceMonitors
To find files that use sprintf in usr/src/cmd/cmd-inet/usr.sbin/:
refs:sprintf path:usr/src/cmd/cmd-inet/usr.sbin
To find assignments to variable foo:
"foo ="
To find Makefiles where the pstack binary is being built:
pstack path:Makefile
to search for phrase "Bill Joy":
"Bill Joy"
To find perl files that do not use /usr/bin/perl but something else:
-"/usr/bin/perl" +"/bin/perl"
To find all strings beginning with foo use the wildcard:
foo*
To find all files which have . c in their name (dot is a token!):
". c"
To find all files which start with "ma" and then have only alphabet characters do:
path:/ma[a-zA-Z]*/
To find all main methods in all files analyzed by C analyzer (so .c, .h, ...) do:
main type:c
おわりに
OpenGrok の構築はいかがでしたでしょうか。
Docker を利用すれば、簡単に構築ができたと思います。別途 OpenGrok を構築する用のリソースがあり、たくさんのコードを配置したい場合には source code から build して OpenGrok を構築してみましょう!
Code Path Tracker
OpenGrok でコードリーディングをする際にはタブがたくさん開いてしまうことやどこの関数をさっきまで追っていたのかがわからなくなったりすることがあります。
そんなときに履歴が確認できれば、もっとコードを読む作業が効率化できると思い、Google Chrome の拡張機能を作成してみました!
下記の記事で紹介しているのでぜひ、使ってみてください。
Discussion