Mazn.net

やってみて 調べてみて 苦労しなけりゃ 箱は動かじ

CodeReadingWiki 改造版でソースコード解読

      2013/07/15

etherさん作成のCodeReadingWiki が、ソースコードを読むのにすごく便利で使わせて頂いていました。これはソースコードにglobalというツールでタグをつけ、Webブラウザから閲覧しながら必要に応じてソースコードにコメントを挿入できるソフトウェアです。

ソースコードはタグ付けされているので、簡単に変数や関数の定義位置に飛べたり、検索することができ、Webブラウザから閲覧できるので、複数の人とコメントを共有したりできます。

しかし、最近は更新が全然ないようなので、独自に少し改造しました。変更点は以下の通りです。

  • 見た目を変更
  • コメントはダブルクリックした行の下ではなく上に挿入
  • 複数のプロジェクトに対応 → データベースの構造を変更したので互換性がなくなりました。
  • コメントの検索機能を実装
  • Linux用のセットアップスクリプト作成
    • 元々のCodeReadingWikiはWindows前提でしたが、これはLinux前提です。mkcrwiki.shを移植すればWindowsでも動くとは思います。
  • ディレクトリ構造・ファイル構造を変更

スクリーンショット (gnu-globalのソースコードの例)

トップページ

crwiki01.jpg

コメントを入れたいソースコードの行(262行目)をダブルクリックしてコメントを挿入していることろ。

crwiki02.jpg

コメントを入れた後に、同じ行(262行目)をダブルクリックして、コメント挿入完了したところ。赤枠と赤文字でコメントが表示されます。

crwiki03.jpg

コメントの検索結果。global.cの262行目にfunctionというコメント文字列が存在しています。

crwiki04.jpg

ダウンロード

crwiki-mazn-0.2.tar.gz

インストール

動作確認はCentOS 5 + firefox 3.6 で行っています。手順はあまり詳細に書いていないので、不明点がある場合はコメントください。

MySQLのインストール

yumで簡単にインストール可能です。設定ファイル例はcrwiki-mazn-x.x.tar.gzに入っていますので参考にしてください。

# yum install mysql-server

MySQLのインストールの詳細は省略します。MySQL起動後、以下をMySQLに対して発行しテーブルを作成します。

CREATE DATABASE crwiki;
CREATE TABLE remarks (prj VARCHAR(65) NOT NULL, src VARCHAR(255) NOT NULL, line INT NOT NULL, remark MEDIUMTEXT NOT NULL, PRIMARY KEY(prj, src, line)) TYPE = MYISAM ;

PHPのインストール

# yum install php

PHP mbstring や php-mysqlのインストール

PHP関連の必要なモジュールをインストールします。

# yum install php-mbstring php-mysql

Apacheのインストール

Apacheはデフォルトでインストールされるので、必要に応じてApacheのルートディレクトリを設定してあげてください。ここでは、/home/www とします。

Gnu Globalのインストール

Gnuglobal はCentOSには付属していないので、ソースからインストールします。今回は global-5.8.2 で動作確認をしています。バージョンが異なると、globalで生成されるhtmlファイルに違いが出て、うまく動かない可能性がありますので注意です。

CodeReadingWiki (crwiki) のインストール

今回のディレクトリ構成は以下のようにします。

/home/www                        ・・・ Apacheのルートディレクトリ
       |--- crwiki               ・・・ crwiki用のディレクトリ
               |--- linux-kernel ・・・ 解読したいソースコード

crwiki をダウンロード・展開し、すべてのファイルを/home/www/crwikiのディレクトリに移動します。ファイルに含まれているファイルは以下のファイルです。

  • crwiki.awk          ・・・ globalで生成したhtmlを変更するためのawkファイル。mkcrwiki.sh から使われる
  • crwiki.js               ・・・ Webブラウザへ送信されるJavaScriptファイル
  • crwikiconf.cgi     ・・・ crwikiの設定ファイル。主にDBの接続設定を記述
  • crwikilib.php      ・・・ crwikiの処理を行うメインファイル
  • mkcrwiki.sh        ・・・ 解析実行用シェル。解析したいソースコードのあるディレクトリに対して実行する
  • style.css               ・・・ Webブラウザに送信されるスタイルシート
  • my.cnf                    ・・・MySQLの設定ファイル例。削除しても構いません

crwikiの設定を行います。MySQLに接続するためのホスト名、ユーザ名、パスワードを設定してください。

# vi /home/www/crwiki/crwikiconf.cgi
<?php
$dba_class   = "MySQLAgent";
$host        = "localhost";
$user        = "root";
$password    = "hogehoge";
$db          = "crwiki";
$db_charcode = "utf8";
?>

読みたいソースコードをcrwikiディレクトリにディレクトリを一個作って置きます。ここでは、linux-kernel というフォルダにLinux カーネルソースコードがあるとします。

ソースを置いたら、mkcrwiki.shでソースコードの解析をします。

#  cd /home/www/crwiki/
# ./mkcrwiki.sh linux-kernel

プロジェクト名を設定します。プロジェクト名はユニークにしてください。
デフォルトではディレクトリ名が入っています。プロジェクト名が空の場合は動作しません。

# vi linux-kernel/crwiki.php
<?php
// Prject Name
$prj = "linux-kernel";
require '../crwikilib.php';
?>

あとは対象サーバのURLにWebブラウザでアクセスしてください。

参考URL

http://rainyday.blog.so-net.ne.jp/2006-10-07

http://sourceforge.jp/projects/crwiki/

 - IT技術, プログラミング ,

336px

Message

メールアドレスが公開されることはありません。

  関連記事

no image
findでのファイル名or検索 and検索

findは色々な条件を指定してファイルを検索できます。or検索する場合は -or …

no image
iSCSIを使ってみる@CenOS5.2 (ターゲット) + Windows XP (イニシエータ)

CentOS 5をtarget、Windowsをinitiatorとして、iSC …

no image
cygwin上にSphinxをインストール

Cygwin 上に Sphinx をインストールしたときのメモです。 pytho …

no image
lxc-cloneでoverlayfsを使ってみる@Ubuntu 14.04

既存Linuxコンテナのディレクトリをコピーして、LXCのクローン環境を作るので …

no image
CDやDVDの中身が見れない@Windows Vista

最近悪名高いWindows Vistaを使っているのですが、一通り設定や必要そう …

no image
windows presentation foundation プラグイン@Firefox 3.5

Firefoxで急にwindows presentation foundatio …

no image
BeckyからThunderbirdへのデータの移行

BeckyからThunderbirdへのデータの移行はネット上に多くの事例が掲載 …

no image
VNCで日本語入力@CentOS5

CentOSでvncserverを起動した場合、デフォルトでは日本語が入力できま …

no image
リモートデスクトップでPC再起動 or シャットダウン@Windows 7

Windows リモートデスクトップ接続では、通常のスタートメニューから再起動や …

no image
画面の外に行ってしまったウィンドウを移動する@Windows 7

Windows XPの場合、ウィンドウが画面外に行ってしまって移動できない場合、 …