🐙

特定バージョンのソースコードから特定のクラス名を検索する方法

2024/11/21に公開

はじめに

プログラムの開発やデバッグを行う際、特定のバージョンのソースコードから特定のクラスや関数を検索したい場面があります。しかし、GitHubの検索機能ではデフォルトブランチのみが対象となり、他のバージョンやブランチのコードを直接検索することはできません。この記事では、ローカル環境でリポジトリをクローンし、特定のバージョンに切り替えてから、クラス名を検索する方法を紹介します。

TL;DR

GitHubのデフォルトブランチ以外の特定のバージョンのソースコードから特定のクラス名を検索するには、リポジトリをローカルにクローンし、該当バージョンにgit checkoutで切り替えてから、grepコマンドまたはVSCodeなどのIDEの検索機能を使用して目的のクラス名を検索します。

手順

1. リポジトリをクローンする

まず、対象のリポジトリをローカル環境にクローンします。ここでは例として、langchain-ai/langchainリポジトリを使用します。

git clone git@github.com:langchain-ai/langchain.git

2. クローンしたリポジトリのディレクトリに移動する

クローンが完了したら、リポジトリのディレクトリに移動します。

cd langchain/

3. 該当バージョンに切り替える

git checkoutコマンドを使用して、目的のバージョン(タグやブランチ)に切り替えます。

例)バージョンv0.0.172に切り替える場合:

git checkout v0.0.172

実行すると以下のように表示されます:

Updating files: 100% (8827/8827), done.
Note: switching to 'v0.0.172'.

4. 特定のクラス名を検索する

4.a コマンドラインで検索する方法

grepコマンドを使って、クラス名ChatOpenAIを検索します。

grep -rn ChatOpenAI ./langchain
オプションの詳細
  • r または -recursive
    • 再帰的に検索を行います。指定したディレクトリ内のすべてのサブディレクトリとファイルを対象とします。
  • n または -line-number
    • 行番号を表示します。マッチした行がファイル内の何行目にあるかを表示します。

出力結果

plaintext./langchain/experimental/client/tracing_datasets.ipynb:124:    "from langchain.chat_models import ChatOpenAI\n",
./langchain/experimental/client/tracing_datasets.ipynb:128:    "llm = ChatOpenAI(temperature=0)\n",
./langchain/experimental/client/tracing_datasets.ipynb:161:      "Retrying langchain.chat_models.openai.ChatOpenAI.completion_with_retry.<locals>._completion_with_retry in 1.0 seconds as it raised RateLimitError: That model is currently overloaded with other requests. You can retry your request, or contact us through our help center at help.openai.com if the error persists. (Please include the request ID 63c89b8bad9b172227d890620cdec651 in your message.).\n",
./langchain/experimental/client/tracing_datasets.ipynb:162:      "Retrying langchain.chat_models.openai.ChatOpenAI.completion_with_retry.<locals>._completion_with_retry in 2.0 seconds as it raised RateLimitError: That model is currently overloaded with other requests. You can retry your request, or contact us through our help center at help.openai.com if the error persists. (Please include the request ID e3dd37877de500d7defe699f8411b3dd in your message.).\n"
./langchain/experimental/client/tracing_datasets.ipynb:363:    "from langchain.chat_models import ChatOpenAI\n",
./langchain/experimental/client/tracing_datasets.ipynb:367:    "llm = ChatOpenAI(temperature=0)\n",
./langchain/chat_models/promptlayer_openai.py:9:from langchain.chat_models import ChatOpenAI
./langchain/chat_models/promptlayer_openai.py:13:class PromptLayerChatOpenAI(ChatOpenAI):
./langchain/chat_models/promptlayer_openai.py:22:    be passed here. The PromptLayerChatOpenAI adds to optional
./langchain/chat_models/promptlayer_openai.py:32:            from langchain.chat_models import PromptLayerChatOpenAI
./langchain/chat_models/promptlayer_openai.py:33:            openai = PromptLayerChatOpenAI(model_name="gpt-3.5-turbo")
...(以下省略)

ChatOpenAIクラスが使用されている箇所や定義されているファイルが一覧表示されます。

4.b VSCodeなどのIDEを使用する方法

コマンドラインでの検索も便利ですが、Visual Studio Code(VSCode)などの統合開発環境(IDE)を使用すると、より直感的かつ効率的に検索やコードの閲覧が可能です。

手順
  1. VSCodeでフォルダを開く
    • VSCodeを起動し、メニューから「ファイル」→「フォルダーを開く」を選択します。
    • クローンしたlangchainディレクトリを選択し、開きます。
  2. 検索機能を使用する
    • 左側のアクティビティバーにある検索アイコン(🔎)をクリックします。
    • 上部の検索ボックスにChatOpenAIと入力します。
    • 即座に検索結果が表示され、該当するファイルと行が一覧で示されます。
  3. 検索結果からコードを閲覧・編集する
    • 検索結果の項目をクリックすると、そのファイルが開き、該当箇所にジャンプします。
    • コードの周辺を確認したり、必要に応じて編集・解析が可能です。
  4. 高度な検索オプション
    • 検索ボックスの右側にある「...」(詳細)アイコンをクリックして、検索条件を細かく設定できます。
      • 正規表現の使用:正規表現を用いた高度なパターン検索が可能です。
      • 大文字小文字の区別:検索時に大文字小文字を区別するか選択できます。
      • 完全一致の検索:単語の完全一致で検索できます。
      • 除外パターンの設定:特定のファイルやディレクトリを検索対象から除外できます。

メリット

  • コードのコンテキストを容易に確認できる
    • コードエディタ上で直接結果を閲覧できるため、周辺のコードや実装の詳細をすぐに確認できます。
  • 検索結果の視覚的なナビゲーション
    • 検索結果が視覚的に整理されており、ファイルごとに結果を展開・折りたたみできます。
  • デバッグやコード補完機能の活用
    • IDEの機能を活用して、コード参照や定義へのジャンプ、デバッグなどが可能です。

注意点

  • インデックスの作成
    • 初回はファイル数が多い場合、インデックスの作成に時間がかかることがあります。
  • リソースの使用
    • 大規模なプロジェクトの場合、IDEが多くのメモリを消費することがあります。

IDEを利用することで、ソースコードの探索や理解がよりスムーズになります。特に大規模なプロジェクトや複雑なコードベースを扱う際には、積極的に活用すると良いでしょう。

補足:ソースコードを読む際のポイント

ソースコードを読み解く際には、以下のような明確な目的を持つことをおすすめします。

  • エラーの根本原因を調べる
    • 実行時に発生したエラーや想定外の挙動の原因をソースコードから突き止めます。
  • 機能の実装方法を知る
    • 特定の機能やアルゴリズムがどのように実現されているかを理解し、自身の開発に役立てます。
  • ドキュメントにない設定や関数を調べる
    • 公開されているドキュメントには記載されていない隠れた機能や設定を見つけ出し、より高度な操作を可能にします。

明確な目的を持ってソースコードを読むことで、効率的に情報を得ることができます。

最後に

以上、特定バージョンのソースコードから特定のクラス名を検索する方法をご紹介しました。リポジトリをローカルにクローンし、git checkoutで目的のバージョンに切り替えてから、grepコマンドやIDEを使用して検索することで、効率的に必要な情報を得ることができます。ぜひ活用してみてください!

Discussion