800 Views
July 12, 24
スライド概要
コードリーディングとは。そのためにできることとは。すべきこととは。
ベガシステム技術勉強会の発表資料です。
ベガシステムは、創業1990年、30年以上続くIT企業です。 お客様との対話を大切にし、新たな価値を創造し続けます。
https://book.mynavi.jp/ec/products/detail/id=54062
(;つД⊂)ゴシゴシ (゚Д゚)え?
わかった つ・も・り になる! CodeReading
わかった つ・も・り とは? • 概略だけ取り出してわかったつもりになってドヤ顔してもらう 事を想定して作っています。 • 正確性よりもわかりやすさを重視して作っています。 • この内容を聞いても、本当の実力はつきません。このスライド を出発点として各自勉強してみてください。
本日のお品書き • 読む/書くではゲームのルールが違う • CodeReadingルール • コードとはまだ見ぬ誰かへのお手紙
読む/書くではゲームのルールが違う • コードを書く時は以下のようにします。 やりたい事 やり方 コード 実行 実行結果
読む/書くではゲームのルールが違う • コードを読む時は以下のようにします。 実行結果 Q : 女の子が男の子を見 てドン引きしています。 男の子は何がしたかった か教えてください。 実行 コード やり方 やりたい事
整理すると コードを書く • やりたい事からやり方を考えるゲーム コードを読む • やり方と結果からやりたい事を推測す るゲーム
やろうとしている事は、この人たちに近いのです。 (死人は出ないヨ)
最も重要なことは 細部に惑わされずに、 全体像と状況証拠から コードが実現したい 本当の意図をつかみ取る こと
本日のお品書き • 読む/書くではゲームのルールが違う • CodeReadingルール • コードとはまだ見ぬ誰かへのお手紙
CodeReadingルール その1 : はじめにコー ドを読んではいけな い • 何も考えずにコードを読んで はいけません。 • コードを読むのはどうしても 分からないときだけ。最後の 最後です。
CodeReadingルール その2 : はじめにコー ドを読んではいけな い • コードを読むという事は時間 がかかる事です。 • なぜなら、コードはやり方が 書いてあるだけでやりたい事 は書いてないからです。 • コードを読むという事は自分 から意図的に泥沼に落ちると いうことです
つまり、 いかにして 読まないか が鍵になってくる。
CodeReadingルール その3 : システムの概要を調べよう! コードを技術的に調べる前に、 ・関係者からの聞き取り ・ドキュメントの読み込み ・動かしてみて挙動を調べる などを通して「このシステムは何が目的で作ら れていて、何が出来るのか?」という事を調べ ておきます。 技術者の場合、技術的に解決することを優先し がちですが、前提となる事実関係をしっかりと 捉えることが最優先です。
CodeReadingルール その4 : フォルダ構成 は重要 はじめに読むべきファイルを絞り込みます。 プロジェクトのフォルダ構成は非常に重要であり、フォ ルダを見て、読むべき場所をしぼり混んでいきます。 各フレームワーク、言語ごとに「推奨すべきフォルダ構 成」というものが定義されている事が多いです。 ご自分のプロジェクトに関しても、調べてみてください。 プロジェクトを始めるとき、オリジナリティーに富んだ 「ぼくの考えた最強フォルダ構成」とかは後から読む人 が困惑するので避けましょう。
CodeReadingルール その5 : 名前から妄想 しよう 読むべきフォルダが見つかったら、次に名前から内容を 妄想します。 ファイル名、名前空間、クラス名、関数名、と絞り込み を行い対象を絞り込みます。 怪しいクラス、関数、処理をみつけたとしてもその場で 読み進めてはいけません。 まずは、その場所を「怪しいところリスト」を作ります。 リストには簡単なメモをつけておくとよいでしょう。 重要なことは「怪しいところの分布と関係」をつかむこ とです。 参考 : https://qiita.com/rokumura7/items/cb6302102f5805996ef9
前提の復習 : プログラムとは? • プログラムとはデータを変換する手順のことです。 • 入力と出力があり途中に何段かの変換処理があります。 • 中身を調べる前に、各段の入り口と出口で何をやっているか知ることが全 体像を把握する場合にとても重要になります。 プログラム 入力 : ■ 処理A ■→□ 処理B □→○ 出力 : ○
CodeReadingルール その6 : 関係を絵にす る : コールグラフ あやしいリストにある関数の呼 び出し前、呼び出し後を図にし ます。 このような図の事を「コールグ ラフ」と言います。 コールグラフを使って処理の位 置関係を調べます。 作成してくれるツールもありま す。 参考 : https://i.loveruby.net/ja/rhg/cd/callgraph.html
CodeReadingルール その6 : 関係を絵にす る : データフロー • コールグラフの作成が出来たら、関数の呼び出しと戻り値としてどのよう なデータが処理間で受け渡しされているか調べます。 • これにより、これから読もうとしている処理の全体像がが見えてきます。 プログラム 入力 : ■ 処理A ■→□ 処理B □→○ この関数は塗りつぶしのあるデー タを読み込んで、塗りつぶしが無 いデータに置き換える処理なんで すね。 出力 : ○
CodeReadingルール その7 :ブロックで読 む なんか、入力値のチェックかな? いよいよ、コードを読みます。 ここでも、漫然と最初からコード をよんではいけません。 コードをブロック単位に分けて何 をやっているか推測して読むべき 場所を絞り込みます。 そして、本当に自分が知りたい塊 を見つけたら、そこを時間をかけ て丁寧に読みます。 処理の実態関数みたいだな。 画面にフラッシュしているな。 https://github.com/mirror/busybox/blob/master/coreutils/pwd.c
本日のお品書き • 読む/書くではゲームのルールが違う • CodeReadingルール • コードとはまだ見ぬ誰かへのお手紙
コードとはまだ見ぬ 誰かへのお手紙 • コードを読むことということは推理でした。 • コードを書く人は、読む人が読みやすいコードを意 識して書きましょう! • それは、まだ見ぬ誰か(未来の自分を含む)へのお手 紙なのです。 • だからそこ、論理的に丁寧にわかりやすく、読む相 手の事を考えて書きましょう!