Notepad++ と GTags で楽々ソースコードリーディング!

最近 Vagrant 仮想サーバー内のファイルの参照や編集に Notepad++ と NppFTP を使い始めたのですが、今回は Notepad++ のもう一つのお薦めプラグインを紹介します

私は普段 NetBeans IDE を使っているのですが、関数の宣言元へのジャンプ機能をよく利用しています

エディタでは、通常、選択ワードや正規表現による検索、ジャンプ機能まではサポートされていることが多いのですが、関数の宣言元や参照リファレンスまでの検索となるとIDE等の環境でないとなかなかサポートされていません

NotePad++では、ソースコードを読むときに強力なアシストをしてくれる GNU GLOBAL を簡単に使えるようにしてくれる NppGTags プラグインがあり、関数の宣言元の検索も出来るようになります

ソースコードにタグ付けする類似のプラグインとして CTags 等もありますが、NppGtags プラグインが使いやすく高機能なのでお勧めです

普段はIDEを使っていても、ちょっとソースを確認したいって時は、IDEの代わりに Notepad++ を使えばサクッと確認することができます (^^)

pnedev/nppgtags
nppgtags – GTags plugin for Notepad++

NppGTags プラグインの準備

Notepad++ エディタのインストールに関しては、前回の記事中で少し紹介しているので下記記事を参照して下さい

Vagrant仮想サーバーのファイルをNotepad++のNppFTPを使い直接編集
Vagrant仮想サーバーのファイルをSFTPを使い直接編集する方法を紹介します。例えば、同期フォルダー以外のファイルをちょっと編集したいという場合にも vi エディタは要りません。Windows側のエディタから直接編集出来ます (^^)

インストール

前回の記事でプラグインをインストールする時は、プラグインマネジャーから行っていましたが、NppGtags プラグインは、最新版が GitHub の NppGtags で公開されていますので、 そこからZipファイルをダウンロードします

Zipファイルを解凍して、その中の NppGTags.dll と NppGTags フォルダーをそのまま Notepad++ をインストールしたフォルダー以下にある plugins フォルダー内にコピーします

これで Notepad++ を再起動すれば NppGTags プラグインが有効化されます

設定

NppGTags_setting

Settings

プラグインメニューから Settings を選択します

NppGTags_settings

パーサーの選択

パーサーはデフォルト(GTags)、CTags、Pygments から選択できます。対象言語によっては変更する必要がありますが、C言語系やJava, PHPならデフォルトのままでOKです

GTags C言語系やJava,PHP等をサポートしています
CTags より多くの言語をサポートしていますが、リファレンスの検索が未対応です
Pygments 外部からPythonライブラリ(Pygments)を導入する必要があります

Auto update database

GTags を利用するには、対象フォルダにGTagsのデータベースを作成する必要があるのですが、そのデータベースの自動更新を行うかを指定します

ショートカットキーの割当

NppGTagsプラグインのメニューは、ショートカットキーが未設定ですので使いやすいように割り当てておきます

メニューの 設定→ショートカット管理 から行います

NppGTags_ショートカット管理

自分は以下のようにしました

AutoComplete Alt+Spacebar
AutoComplete File Name
Find File
Find Definition Ctrl+B
Find Refarence Ctrl+Shft+B
Search in Soure Files
Search in Other Files
Go Back Alt+Left
Go Foward Alt+Right
Toggle Results Window Forcus Ctrl+Shift+Tab

※他のショートカットと定義がダブらないようにする必要があります

コンテキストメニューへ追加

さらにマウスで右クリックした時に表示されるポップアップメニューにいくつかの動作を割り当てておくと便利なので追加します

NppGTags_右ポップアップメニュー

メニューの 設定→コンテキストメニューを編集 から行います

contextMenu.xml ファイルに下記を追加します

<Item id="0"/>
 <Item PluginEntryName="NppGtags" PluginCommandItemName="Find Definition" ItemNameAs="GTags-定義を検索" />
 <Item PluginEntryName="NppGtags" PluginCommandItemName="Find Reference" ItemNameAs="GTags-使用状況を検索" />
 <Item PluginEntryName="NppGtags" PluginCommandItemName="Search in Source Files" ItemNameAs="GTags-ソースファイルを検索" />
 <Item PluginEntryName="NppGtags" PluginCommandItemName="Search in Other Files" ItemNameAs="GTags-その他テキストファイルを検索" />
 <Item id="0"/>

また、NppGTags プラグインとは関係ないのですが、選択ファイルが簡単にオープンできるように下記も追加しました

<Item MenuEntryName="Run" MenuItemName="Open file" ItemNameAs="選択ファイルを開く"/>

これで準備OKです

NppGTagsの使い方

GTagsを使って検索するには先に対象フォルダーでデータベースを生成する必要があります

このデータベースを使うことで、関数の定義元の検索等が高速に出来るようになります

GTagsデータベースの作成

メニューから Create database を実行すると、フォルダー選択ダイアログが表示されるので、通常はプログラムのプロジェクトルートフォルダーを指定すれば、それ以下のソースコードを対象として GTagsデータベースを生成してくれます

例えば、wordpress のルートフォルダーを指定すれば、そのフォルダー以下を再帰的にスキャンしてデータベースが作成されます

NppGTags_プロジェクトフォルダー選択

データベースの作成は、対象となるプログラムソースファイル数が多いと結構時間がかかります

NppGTags_データベース作成

データベースの作成や削除は、プラグインのメニューから簡単に出来るし、自動的に更新することも出来るので簡単に扱うことが出来ます

※データベースファイル(GTAGS, GRTAGS, GPATH, NppGTags.cfg)は、プロジェクトルートフォルダーに作成されますので、Git管理している場合は無視ファイルとして追加しておきます

Find Definition 定義を検索

まずは、一番使いたい関数の定義元を検索する機能を見てみます

試しに、Wordpress の wp_die 関数やってみました

あっという間に結果がエディタの下部に表示され、候補が複数あるのが分かります
このリストをダブルクリックすると対象ファイルにその位置へジャンプします

NppGTags_find_definition

元のファイル表示位置へ戻りたい時は、ショートカットに定義した Alt+Left キーで戻ることが出来ます

なかなかいい感じです (^^)

Find Refarence  使用状況の検索

次に関数が使われている所(リファレンス)を検索してみます

NppGTags_find_reffrence

これも結果がリスト上に分類されて直ぐに表示されます

Search in Source File / Search in Other File

あまり使うことはないかも知れませんが、選択ワードを検索する時に使用します

検索対象が Source File の時は、サポートしている言語(C言語系、Java、PHP)のソースコードを対象に検索し、Other File の場合は、それ以外の HTML, CSS, JavaScript, Text ファイル等を対象に検索します

Notepad++標準のファイル内検索を使うほうが私にはしっくりきます (^^)

Find File ファイル検索

ファイルパスや名前に指定した文字列を含むファイルを検索します
ファイルパスは、プロジェクトのルートディレクトリの相対パスとなります

試しに plugins で検索してみます

NppGTags_find_file

Autocomplete 補完機能

Notepad++エディタには標準で補完機能があるので、通常の補完でも候補を表示してくれます

Notepad_補完

NppGtagsの補完だとこんな感じです

NppGtags_補完

違いは、NppGtagsの補完のほうがより多くの候補がリストアップされます。また、入力を続けると自動的に候補を絞り込んで表示します

補完機能は、IDEを使った場合より見劣りしますので、編集を伴う作業の場合は素直にIDEを使ったほうが良さそうです

また、Autocomplete File Name は、ファイル名入力を補完してくれる機能だと思うのですが、残念ながら手元で試した限りは PHP の include 等では機能しませんでした

 

機能や使いやすさでは、IDE等の統合環境よりも劣りますが、ちょっとコードを確認したいというような場合では Notepad++ は直ぐに起動するので意外と便利なのではないかと思います

以上、NppGTagsの使い方を紹介しました (^^)

 


まとめ記事紹介

search star user home refresh tag chevron-left chevron-right exclamation-triangle calendar comment folder thumb-tack navicon angle-double-up angle-double-down angle-up angle-down quote-left googleplus facebook instagram twitter rss