プログラムのソースコード内を探検する方法

A star forming region in the sky

カテゴリー :

,

プログラムのソースコード内を探検し修正する方法について、私なりの方法を記載します。

ページ言語切替

オープンソースの利点

私が学生の頃にオープンソースという言葉が広く使われるようになりました。

それ以前も BSD 系の un*x や GNU のプロダクトはプログラムのソースコードが公開されていましたが、ライセンスが決められてより積極的に公開されるようになったのは、今から30年前、Linux が広く使われるようになってからだと思います。

オープンソースの利点は、言うまでもなくソースコードが誰でも見られることです。プログラムの動作に疑問があった時に、ソースコードが公開されていれば、原因を調べる事ができ、少し知識があれば修正することもできます。

昨晩 (と言うか日付が変わっていましたが) に公開した記事は、ソースコードが公開されているからこそ修正できました。

個人的には、クローズドソースよりもオープンソースのソフトウェアの方を好んで使用します。

ソースコードを探検する方法

今回の事例から、私がどのようにソースコードの中を探検しているのか、その手法について記載します。

キーワードの選定

始めにキーワードを探します。

今回はサイトのキャッチフレーズブロックで不具合がありました。

ソースコードは殆どの場合は英語でコメントされています。WordPress の管理画面を英語にして、該当のブロックの英語表記を見ると、”Site Tagline” となっていました。

日本語では「キャッチフレーズ」ですが、英語では “tagline” でした。

これで、探すキーワードは “tagline” である事が分かりました。

また「サイトのキャッチフレーズ」でググると bloginfo(‘description’) でキャッチフレーズが取得できる事が分かりました。

キーワードに “bloginfo“ と “description’ を追加です。

再帰的に検索 (grep -r)

キーワードが決まれば、ソースコードの全てのファイルの中にキーワードが含まれるファイルを探します。

ssh でレンタルサーバーの中に入り、WordPress がインストールされているディレクトリで grep コマンドを実行します。

Bash
grep -r 'tagline'
grep -r 'bloginfo'
grep -r 'description'
Bash

’-r’ オプションは再帰的に各ファイルを検索するものです。

grep コマンドを実行すると、各キーワードが含まれるファイル名と該当行が表示されます。

これで大まかにですが、どのファイルが影響するか当たりを付けます。grep コマンドの結果を less (ページャー) にパイプで受けて、更に追加のキーワードで検索します。

Bash
grep -r 'tagline' | less
Bash

WordPress の場合、wp-content ディレクトリにテーマやプラグイン、wp-includes ディレクトリに WordPress 本体のファイルが置かれています。ブロック (block) のディレクトリにあるかと推測しながら、該当ファイルを探します。

結果として、wp-includes/blocks/site-tagline.php ファイルに辿り着きました。

修正と動作確認

該当ファイルに目星を付けたら、先ずはバックアップを作っておきます。

Bash
cp site-tagline.php site-tagline.php.orig
Bash

これで不具合があっても元に戻せます。

エディタ (今回は vim を使用) で site-tagline.php を開いて、”bloginfo” や ”description” で検索して該当する行を探します。

PHP
function render_block_core_site_tagline( $attributes ) {
        $site_tagline = get_bloginfo( 'description' );
        if ( ! $site_tagline ) {
               return;
        }
site-tagline.php

get_bloginfo(‘description’) で tagline を取得しているのが分かりましたので、これを bloginfo(‘description’) で取得するように変更しました。

キャッシュが残っていると確認できませんので、LiteSpeed Cache プラグインのキャッシュを消去、インラインCSS とインライン JS を消去します。その上でページを読み込んで動作確認します。

今回のケースでは、この修正によりサイトのキャッチフレーズ (tagline) がページのロケールに合わせた多言語になる事を確認できました。

これで修正完了です。

結び

私が普段ソースコードを探検して修正する方法について記載しました。

特別な事をしている訳ではありません。でもイチから全てのソースコードの内容を理解するのは時間もかかりますし、原因となる箇所に辿り着くまでに大きな労力を必要とします。

ポイントを絞って調査する事によって、対処までの労力を格段に減らす事ができます。

ある程度の経験は必要ですが、これを繰り返すことでソースコードの修正に対するハードルが下がります。

今回はこの方法で修正する事が出来ましたが、本来ならソースコードの修正ではなく、functions.php で修正できるのがベストです。PHP は関数の再定義が出来ないようですが、回避できる方法を探してみます。

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です