1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GNU globalでいい感じにコードを閲覧するウェブページを生成する

Last updated at Posted at 2019-05-29

大規模なソースコードを読むのは骨が折れる。grepや目grepでは限界がある。そこでGNU Globalを使っていい感じにコードを閲覧するページを生成したい。今回使ったディストリビューションはDebian busterである。作業は静的ファイルに関する作業とCGIに関する作業に分かれる。静的ファイルだけでもハイパーリンクによるジャンプは可能なのでそこそこ使える。CGIも使えるようになると検索できてさらに便利になる。

#静的ファイル
GNU Globalにはgtags,global,htagsコマンドが含まれる。gtagsコマンドはソースコードをスキャンして識別子などを抽出し、GPATH、GRTAGS、GTAGSといったファイルを生成する。globalコマンドは生成されたそれらのファイルを使って検索を実行する。htagsは良い感じにハイライトとハイパーリンクを付けたHTMLファイル群を生成する。

##必要なパッケージ
GNU Globalはパッケージになっているのでapt-getするだけでgtags,htags,globalが使えるようになる。今回はウェブサーバとしてはnginxを使用してみた。Apacheでも何でもいいと思う。

$ apt-get install global nginx
$ service nginx start

##nginxの設定
nginxではURL内のパスとファイルシステム上のディレクトリの関係をlocationディレクティブで設定する。初期設定では/etc/nginx/sites-available/defaultで次のようになっている。

location / {
  # First attempt to serve request as file, then
  # as directory, then fall back to displaying a 404.
  try_files $uri $uri/ =404;
}

普通は/var/www/html以下にウェブサービス用のHTMLファイルを置くことが想定されているが、htagsコマンドはデフォルトでHTMLという名前のディレクトリを生成するので、/var/www/HTMLをドキュメントルートにしておく。htagsコマンドが生成するHTMLファイルの場所やディレクトリ名はオプションで変えられるので、各人の好みでいいと思う。

location / {
  # First attempt to serve request as file, then
  # as directory, then fall back to displaying a 404.
  try_files $uri $uri/ =404;
  root /var/www/HTML/;
}

nginxの設定ファイルを変更した後は忘れずにnginxを再起動する。

$ service nginx restart

##閲覧したいソースコードの展開
ブラウザから見たいのはhtagsコマンドが生成したHTMLファイルなので、ソースコード自体をどこに展開するかは自由なのだけど、今回は/var/www/に閲覧したいソースコードを展開し、そこでhtagsコマンドを実行することにする。そうすればデフォルトで/var/www/HTMLが生成されるので手間いらずである。今回は例としてGNU makeのソースコードを展開してみた。

$ cd /var/www
$ cd wget -nd -nH http://alpha.gnu.org/gnu/make/make-4.1.90.tar.gz
$ tar zxvf make-4.1.90.tar.gz
$ ls
html  make-4.1.90  make-4.1.90.tar.gz

##HTMLファイルの生成
gtagsコマンドによりGTAGSファイルを生成し、htagsコマンドによりHTMLファイルを生成する。

$ cd /var/www
$ gtags
$ htags -aosnFf
$ ls
GPATH  GRTAGS  GTAGS  HTML  html  make-4.1.90  make-4.1.90.tar.gz

htagsはコマンドラインオプション全部入りにしてみた。これで/var/www/HTML以下にはいい感じにハイライトとハイパーリンクのついたソースコードが生成されているので、ブラウザから見える。ただしCGIの実行ファイルが無いので検索フォームは動かない。
image.png

#CGI
GNU Globalのパッケージにはhtagsが生成したHTMLファイル群をいい感じに検索してナビゲーションするために必要なCGIであるglobal.cgicompletion.cgiがついているので、これを活用するためにnginxでCGIが使えるようにする。
##fcgiwrapのインストール
nginxはFastCGIプロトコルに対応しているようなので、global.cgiがFastCGIプロトコルから呼び出せるようにすればいい。そこでfcgiwrapをインストールする。

$ apt-get install fcgiwrap
$ service fcgiwrap start

##nginxの設定
nginxの設定ファイルには .cgi で終わるURLが要求されたらFastCGIを使うように教えてやる。

location ~ \.cgi$ {
  root /var/www/HTML/;
  fastcgi_pass unix:/var/run/fcgiwrap.socket;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
}

##CGI実行ファイルのコピー
GNU Globalのパッケージに同梱されているCGIの実行ファイルであるgloba.cgiとcompletion.cgiををhtagsが生成してくれたHTMLのディレクトリにコピーする。これで検索フォームが機能するようになる。

$ cd /var/www/HTML
$ cp /usr/share/global/gtags/global.cgi .
$ cp /usr/share/global/completion.cgi .
$ chmod +x *.cgi

アクセスログを見るとglobal.cgiは呼び出されているようなのだけど、completion.cgiがいつ使われるのかはよく分からない。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?