ソースコードを読む方法(redmine on github)ruby on rails
Sal
else ちなみに私はweb開発の経験はあるがruby on railsはもちろんrubyですら真面に描いたことがない。

ソースコードを読む方法(redmine on github)ruby on rails

  1. 前情報
  2. 最初に見るべき場所
  3. 次に見るべき場所 2
  4. 良く知っているor自分の守備範囲の箇所を読む。 自身の喪失を防ぐためには自分が良く知っている機能や画面のコードを読むこと。
  5. 芋ずる式で読む
  6. #このwork_time_controller.rbファイルこそがこの「redmine_work_time」の核となる ファイルである。
  7. 気まぐれで読んでみる
  8. URLから逆算して読む
  9. Ctrl+Fと検索バーを見ておおよその位置と塊を把握する。
  10. 一つ目のyear : prepare_values(値の準備)
  11. 知らない言語はたまにググる
  12. 予測する
  13. どう使われるのかを見る
  14. 二つ目の関数 : update_daily_memo(日ごとのメモの更新)
  15. #この関数を見つけたことでredmineの知られざるメモ機能を発見する。
  16. ruby on railsのaction指定方法
  17. 予測と確認
##前情報
筆者はweb開発の経験はあるがruby on railsはもちろんrubyですら真面に描いたことがない
##最初に見るべき場所
1ディレクトリ構成 新しいプロジェクトを引き継いだ時に最初に見るべきはディレクトリ構成。 これをチェックしながら設計を頭に思い描くことで自分がどこを見ているのか迷子にならないようにする。 models views controllers そしてhelpers https://github.com/redmine/redmine/tree/master/app
##次に見るべき場所 2
何となく全体図がつかめたら次第に細部のコードを見ていく。 この細部を見ていく作業で最も注意しなければならないのが 自分がどこを見ているか分からなくなること。 コードのレベルで細かく見すぎることは自分の立ち位置を見失い、最終時に自身の喪失につながる。 そうなるとせっかく読み進めてきたソースを途中で放棄しかねない。 モチベーションを保ちながらコードを読むには自分が何をしているか理解することが大事。 https://github.com/tkusukawa/redmine_work_time/blob/master/app/controllers/work_time_controller.rb
##良く知っているor自分の守備範囲の箇所を読む。 自身の喪失を防ぐためには自分が良く知っている機能や画面のコードを読むこと。
自身が体験してきた経験と合致するソースを読むことで、経験とソースが結びつけることができる。 そして経験を足がかりにコードを読むうちにそのソースに対する知識が蓄積されていく。 新たに蓄積された知識をもとに新たに全く未知の機能に該当するソースを把握できればそれはソースを読めたと行ってもいいでしょう。 #検索しながら読む githubの左上の検索ボックスからはソースコードを検索することができる。 この検索ボックスに対して画面に表示されている文字列を入力してみる。 例えばredmineでは常に「工数」という文字列が右上のメニューに入っており、そこから 自身の作業記録入力ページへ移動できる。 この「工数」をgithubに入力すると次のソースが出現した。 https://github.com/tkusukawa/redmine_work_time/blob/d30876f176e899dfe6d57ddfd7d04e7dffdie39/config/locales/ja.ym! このことから ・configフォルダーは言語などの設定に使われる、設定用のディレクトリである。 ・clocalsは地方という意味であるため、複数言語対応可能であるための設定フォルダーである ・言語の設定はyml形式で設定する。 ということが分かる。
##芋ずる式で読む
上記の「工数」から複数言語対応なソースでこの「工数」に当たる言葉はwork_timeという変数名が付けられていることも分かった。 ではこのwork_timeを再び検索してみる。 https://github.com/tkusukawa/redmine_work_time/search?q=work_time いっぱい出てきた(リポジトリ名がwork_timeなので当たり前か) その中でも特に大事そうな(根幹にかかわりそうな)work_time_controller.rbを見てみる。 redmine_work_time/app/controllers/work_time_controller.rb https://github.com/tkusukawa/redmine_work_time/blob/master/app/controllers/work_time_controller.rb 親ディレクトリから見てみるとこのwork_time controller.rb しか入っていない。
###このwork_time_controller.rbファイルこそがこの「redmine_work_time」の核となる ファイルである。
##気まぐれで読んでみる
リポジトリのトップを見てみると「asset」というフォルダーが見える https://github.com/tkusukawa/redmine_work_time/tree/d30876f176e899dfe6d57ddfd7d024e7dffd1e39/assets 見慣れない英単語なので気になって見てみると... cssやjavascriptなど主要な基幹部分ではないものの、UIUXにかかわるファイルが見えてきた。 assetは「一式」のような意味なのだろうか。 調べてみると「資源、財産」のほかに「役に立つもの」という意味であることが分かっ た。 今後htmlやjavascriptの短いまとまりに命名するときはassetと名前を付けてもいいかも しれない
##URLから逆算して読む
redmineの工数登録ページには日付を指定した状態で遷移する。 その画面遷移方法はGETリクエストである。 GETリクエストとは次のURLのように?と&と=を使ったパラメータの指定である。 http://redmine.fq.---.jp/work_time/index?day=30&month=9&prj=false&user=1000&y ear%3D2021 上記のGETリクエストではindex.htmlにアクセスする際に次の条件を指定している。 year=2021 month=9 day=230 prj=false user=1000
##Ctrl+Fと検索バーを見ておおよその位置と塊を把握する。
ブラウザーによってはCtrl+Fでどのあたりにヒットするかの位置情報を色付けで示してく れる。 yearで検索を行ったところ、大きく分けて3つの塊が見えた。 一つ目が590-612行目 二つ目が932-938行目 三つ目が1324-1325行目 それぞれのどのような用途でyearが使われているのかを見ていく。
##一つ目のyear : prepare_values(値の準備)
ソースを細かく見る際には 関数名、変数名などのそのプログラム固有の表現 に注目する。 今回であればcrnt_uid, this_uid, this_user, account_start_day などなど これらの単語を追っかけるだけでも何がしたいのかぼんやりと見えてくる。
##知らない言語はたまにググる
@が先頭につく変数があるが、これがプロパティなのかそれ以外の意味を持つのか分からなかった。 こんな時は素直にググる https://www.javadrive.jp/ruby/class/index6.html 他の関数と比べて@が付く変数が多いこと、prepare_valuesは値の準備と補足があることから prepare_valuesは「プロパティの初期化を行っている変数でこの関数の実行した結果、yearを含めた基本的な変数に値が代入される」 ということが分かる。
##予測する
一般にプロパティを初期化したいときはどんな時か クラス自体の利用が終わるタイミングで初期化しても意味はない。 初期化するならクラスを利用する際の初期段階 コンストラクタで呼ばれる可能性が高いと判断。
##どう使われるのかを見る
コンストラクタでは呼ばれていなかった。(そもそもこのクラスにコンストラクタ等はなかったが 代わりにいくつかの関数の先頭で呼ばれていた。 このクラスではコンストラクタが存在しないが関数を呼び出すたびに初期化を行ってい る。
##二つ目の関数 : update_daily_memo(日ごとのメモの更新)
###この関数を見つけたことでredmineの知られざるメモ機能を発見する。
redmineの拡張ページを見てみる。 排画面から探す redmineのwork_timeプラグインをより詳しく見ていくと「データダウンロード」ボタンが 存在する。 このデータダウンロードボタンをリポジトリ検索すると「wt_data_download」として使わ れていることが分かる。 この、「wt_data_download」をもう一度検索する。 大量の言語設定用ファイルの中で、2,3個のhtmlファイルが見つかった。 https://github.com/tkusukawa/redmine_work_time/search?p=2&q=wt_data_download アイルをそれぞれ確認して、app/views/work_time/_user_month_table.html.erbが最もよく使うラァイルであると判断。 中身をよく見るとhtmlのinputボタンであることが分かる。 このhtmlでinputを押したとき、actionにあたる関数, ファイルが実行される。 member_monthly_data_table
##ruby on railsのaction指定方法
actionの値にrubyの関数名を指定してボタン効果時の行動を指定できる。 https://github.com/tkusukawa/redmine/work_time/blob/d30876f176e899dfe6d57ddfd7d024e7dffd1e39/app/controllers/work_time_controller.rb 上記の86行目が該当するmember_monthly_data_table 関数が呼ばれた際にはパラメーターの更新とログインしているかどうかの確認を行う。 その直後にcsv_dataという変数が宣言され、この変数に値が追加されている。
##予測と確認
変数名から分かる通り、これはcsv形式でデータを変数に詰め込んでいると予測される。 筆者は「ダウンロードボタン」を押したことはなかったが、予想通り実際に押してみると csv形式でファイルがダウンロードされた。 title:ソースコードを読む方法(redmine on github)ruby on rails description:ちなみに私はweb開発の経験はあるがruby on railsはもちろんrubyですら真面に描いたことがない。