2024.10.01
自社の社内情報を未来の“ゴミ”にしないための備え 「情報量が多すぎる」時代がもたらす課題とは?
ちょこっとラクするPHPコード読解術(全1記事)
リンクをコピー
記事をブックマーク
inoco氏:それでは始めたいと思います。「ちょこっとラクするPHPコード読解術」というLTをします。井上と申します。ホワイトプラスという会社でエンジニアリングマネージャーをやっています。
今回のLTですが、PHPで書かれたコードの読み方に興味がある方向けのトークになっていて、おそらく、主に初心者の方向けになるかなと思っています。
(スライドを示して)アジェンダはこんな感じです。前提ですが、私の場合、静的解析に興味があって、その仕様を理解する目的でコードを読むことが多いです。そういった背景がある中での経験に基づいて話すので、若干知識や考え方が偏っている可能性がありますが、そのあたりは差し引いて聞いてもらえればと思います。IDEは基本「PhpStorm」を使っているので、そういった前提での話になります。
本日伝えたいことですが、「あなたのコードの読み方を教えてください」ということです。「こんな工夫をしているよ」というようなことを、ぜひ「X」にポストしてみてもらえるとうれしいです。なんですが、その前に私のやり方も紹介したいと思っています。
初めに結論から言うと、「『Xdebug』を活用しましょう」ということになります。
それでは、背景から説明したいと思います。(スライドを示して)まず解決したい課題です。コードが込み入ってくると迷子になりやすいということがあって、覚えることと考えることを同時にやるのは負担が大きいです。
なので、覚えることを減らして、考えることに集中したいです。「覚える」と言っているのは何をかというと、例えば変数の中身や式がどう評価されるのかというような話です。
こういった課題に対していくつかやっていることがあります。まとめると、目的を絞って明確にすること、メモをしながら読むこと、問題をシンプルにすること、機械に委譲することです。そして、機械に委譲するというのが今日話したいスコープになってきます。
(スライドを示して)それ以外も簡単にまとめておくと、まず目的を絞ると言ったのですが、その目的自体を決めづらかったりすることもあるかなと思っています。自分の場合は、オープンソースのissueを漁ってみて、issueを起点に読み始めることをしています。
例えば、バグがあって、「こんなふうに挙動がおかしいよ」みたいなissueがあったら、その仕組みを理解します。どんなふうにどんなバグが起きていて、どう直せばいいのかを目的にしてコードを読んでいます。
コードを読む中での思考の過程をメモするのですが、それはコードの中に書きます。なぜかというと、コードの外に書こうとすると、メモと該当箇所の紐づけが煩わしいからです。
コードと紐づけて考えなくていいような確認ごとなどは箇条書きにして……。どこでもいいのですが、どこかにメモしておきます。
簡単化するというのは、観察したい処理をまずはシンプルな処理で挙動を確認して、だんだん複雑にすることで慣れていくということをやっています。
機械に委譲するというのが、本日のスコープになります。
というわけで、Xdebugの活用方法について話していきたいと思っています。まず、コードを読む時に、静的にコードを読むことだけではなくて、動かしてみるのがいいだろうと考えています。
簡単なものであれば、例えばvar_dumpとかをすればいいかもしれないのですが、複雑になってくると大変なので、Xdebugを活用するとよさそうだと思っています。
1つ目の便利ポイントですが、ステップ実行です。1行ずつ、読み間違うことなく進められることが良いです。
(スライドを示して)例えば「Laravel」の起動処理を知りたい、理解したいと思った時は、起動のindex.phpを読みにいきます。(スライドを示して)すると、赤字の部分は型がついていなくて、IDEでジャンプしようとしてもジャンプができなくて読みにくくなっています。
例えば、前の処理を読んで、クラスを特定して、そのクラスの中からメソッドを探してみたいな手間(が発生する)とか。あるいは、そこで脳内メモリが消費されることが起きます。
一方で、ステップ実行をすると1行ずつ実行できます。例えば$app->makeのメソッドの中に入って、1行ずつ見ていくことができて、実際の処理順に従ってメソッドの中を読み進めることができます。
(スライドを示して)この例のように、Applicationクラスのmakeメソッドが処理されるのを目視確認できるということがわかりやすいです。
(スライドを示して)ここでもメソッドを呼んでいるので、さらにこの中に入って。例えばif文があると、メソッドを解釈したり変数を覚えておいたりプロパティを覚えておいたりする必要が出てきて、また脳内メモリを食っちゃいます。
ですが、ステップ実行すると、実際にtrueなのかfalseなのかを目で見て確認できるので、ひとまず読み流したい時に簡単にできるのが良いところです。
処理が複雑になってくると「もうどこから手をつければいいのか」という気分になって、手が止まったり思考が止まったり疲れちゃったりすると思うのですが、ステップ実行であれば1行ずつ着実に見ていけるので、気持ちが軽くなると言えます。
2つ目の便利ポイントは、変数の中身が見られるということで、ここでも脳内メモリの消費を抑えられます。
(スライドを示して)右下の赤い枠で囲った部分に変数がずらりと並んでいます。
これをズームして、矢印のアイコンを押すとさらに展開されて、多数の変数が出現してきます。というわけで、とてもじゃないが覚えきれないです。
そもそも全部覚える必要もないのですが、処理が込み入ってくるといくつかの変数を覚えておいたりしないといけなくなってきます。それはそれで大変なので、機械に任せられるところは任せてしまいたいという話です。
3つ目の便利ポイントは、スタックトレースです。これがあると処理経路に気づけたり、処理の過程を覚える必要がなくて、これも省メモリになります。
またLaravel関連の例で、Eloquentのscopeという機能があると思うのですが、あれがどういうふうにして呼び出されるのかを知りたいと思った時に、コードを読もうにもどこから読めばいいかわからないという状態に陥ります。
そんな時でも、scopeメソッドの中にブレイクポイントを仕掛けて処理を実行します。
そうすると、左下の赤枠で囲った部分がスタックトレースですが、どんなふうにしてORMのscopeTitleというメソッドまでたどり着いたのかを、1行1行追いかけることができます。
(スライドを示して)ここですが、1個遡ると、scopeTitleというメソッドの名前を組み立てていることが読み取れたり、さらに遡ると、Post::titleという呼び出しからマジックメソッドが取り出されていることも見てとれます。
4つ目の便利ポイントは、スタックトレースからのジャンプです。(スライドを示して)例えば、先ほど見たスタックトレースの「click」と書いている部分をクリックします。
すると、scopeTitle()メソッドに飛んでくるので、コードを簡単に追いかけることができる仕組みになっています。
また、スタックトレースから該当箇所にジャンプして、さらにそこに広がっている変数も全部見ることができます。なので、見たいところに移動して、そこの変数を確認するということが、すでに通り過ぎた処理においてもできるのが便利です。
(スライドを示して)Xdebugの話は以上で、おまけのTipsです。私は静的解析を読むことが多かったので、1個目が、Xdebugを使って静的解析を読む時は、基本(的に)並列処理ができることが多いですが、それをoffにしないと動きがおかしくなります。
Xdebug以外にも人間の能力を委譲すべきツールがいくつかあるので、こういうものを活用すると、より楽に、ちょこっと楽にコードを読むことができます。
ツールを使うことで楽にできるのですが、そうはいっても、前提知識が多いに越したことはないので。例えばマジックメソッドを知らないと挙動がどうなるのかがわかりにくいので、前提知識は多いに越したことはないでしょうという話です。
まとめます。コードは読むものではなくて、機械に読ませるものです。その中で、Xdebugはすごく役に立つので、ぜひぜひ活用してみるといいのではないでしょうかというお話でした。
以上となります。ご清聴ありがとうございました。
関連タグ:
2024.10.29
5〜10万円の低単価案件の受注をやめたら労働生産性が劇的に向上 相見積もり案件には提案書を出さないことで見えた“意外な効果”
2024.10.24
パワポ資料の「手戻り」が多すぎる問題の解消法 資料作成のプロが語る、修正の無限ループから抜け出す4つのコツ
2024.10.28
スキル重視の採用を続けた結果、早期離職が増え社員が1人に… 下半期の退職者ゼロを達成した「関係の質」向上の取り組み
2024.10.22
気づかぬうちに評価を下げる「ダメな口癖」3選 デキる人はやっている、上司の指摘に対する上手な返し方
2024.10.24
リスクを取らない人が多い日本は、むしろ稼ぐチャンス? 日本のGDP4位転落の今、個人に必要なマインドとは
2024.10.23
「初任給40万円時代」が、比較的早いうちにやってくる? これから淘汰される会社・生き残る会社の分かれ目
2024.10.23
「どうしてもあなたから買いたい」と言われる営業になるには 『無敗営業』著者が教える、納得感を高める商談の進め方
2024.10.28
“力を抜くこと”がリーダーにとって重要な理由 「人間の達人」タモリさんから学んだ自然体の大切さ
2024.10.29
「テスラの何がすごいのか」がわからない学生たち 起業率2年連続日本一の大学で「Appleのフレームワーク」を教えるわけ
2024.10.30
職場にいる「困った部下」への対処法 上司・部下間で生まれる“常識のズレ”を解消するには
2024.10.29
5〜10万円の低単価案件の受注をやめたら労働生産性が劇的に向上 相見積もり案件には提案書を出さないことで見えた“意外な効果”
2024.10.24
パワポ資料の「手戻り」が多すぎる問題の解消法 資料作成のプロが語る、修正の無限ループから抜け出す4つのコツ
2024.10.28
スキル重視の採用を続けた結果、早期離職が増え社員が1人に… 下半期の退職者ゼロを達成した「関係の質」向上の取り組み
2024.10.22
気づかぬうちに評価を下げる「ダメな口癖」3選 デキる人はやっている、上司の指摘に対する上手な返し方
2024.10.24
リスクを取らない人が多い日本は、むしろ稼ぐチャンス? 日本のGDP4位転落の今、個人に必要なマインドとは
2024.10.23
「初任給40万円時代」が、比較的早いうちにやってくる? これから淘汰される会社・生き残る会社の分かれ目
2024.10.23
「どうしてもあなたから買いたい」と言われる営業になるには 『無敗営業』著者が教える、納得感を高める商談の進め方
2024.10.28
“力を抜くこと”がリーダーにとって重要な理由 「人間の達人」タモリさんから学んだ自然体の大切さ
2024.10.29
「テスラの何がすごいのか」がわからない学生たち 起業率2年連続日本一の大学で「Appleのフレームワーク」を教えるわけ
2024.10.30
職場にいる「困った部下」への対処法 上司・部下間で生まれる“常識のズレ”を解消するには