Rubyに限らず既存のプログラムを修正するためには、そのプログラムのソースコードを読み、どう修正するかを検討します。しかし、プログラミング言語の文法を知っているからといって、他の人の書いたソースコードを読めるとは限りません。どのように動作しているかを理解しながら読むためのスキルが必要です。
今回はRubyでソースコードを読むために必要なスキルについて解説します。
ソースコードを読めるとは
プログラムのソースコードを一言で表現すれば、コンピュータの命令を人が読めるようにしたテキストファイルです。コンピュータが何のために使われるか、また、そのためのコンピュータの動作を理解していないと、ソースコードを読んでも何をやっているかが理解できません。
そのためプログラマーにはソースコードを読むためにはスキルが必要とされます。そしてこれはRubyでプログラミングする場合も例外ではありません。まずはソースコードを読むためスキルの概要について解説します。
ソースコードを読むという事とは?
Rubyのソースコードを読むためには、最低限Rubyの文法を知らなければなりません。しかし、それだけでは不十分です。ソースコードには、コンピュータに実行させる命令が書かれています。そのため、なぜその命令が実行されるかを理解できないと、ソースコードを読んだことにはなりません。
実際には多くのプログラマーがソースコードを読んでその意味を理解し、必要な箇所を修正しています。そして、プログラマーがそのようなソースコードを読めるようになるには、必要なスキルを身に付けなければなりません。
高度なプログラムを作るスキルも重要ですが、他の人の書いたソースコードを読んでそれを理解するスキルはプログラマーにとって必須のスキルと言えます。
ソースコードを読むスキルとは
ソースコードを読むスキルを身に付けるにはどうすれば良いでしょうか。プログラミング言語は言語の一種です。外国語の学習には、その言葉を使うことに慣れることが大事です。そのためプログラミング言語の学習でも、多くの良質なソースコードを読み、それを使えるようにするのが方法の1つです。しかしそれだけでは不十分です。
プログラミング言語にはコンピュータの命令が書かれているので、コンピュータのことを知らなければソースコードに書かれていることを理解できません。そのためソースコードを読むには、次のことも必要です。
- コンピュータに何を実行させるかを理解している。
- ソースコードから、コンピュータの動作を推測できる。
- ソースコードを動作させて、推測どおりに動いていることをチェックできる
まずはソースコードを読む目的を明確に
ただしスキルを身に付けたからといって、どんなソースコードでも読めるようになるとは限りません。短時間にシステムを構成する全てのソースコードを読んで理解するのは誰にとっても困難なことです。
そのためソースコードを読む目的を明確にし、それに合わせてソースコードの必要な箇所のみを読み理解するのが一般的です。
またソースコードに書かれていることは、コンピュータへの命令の組み合わせです。人にとって理解しやすく書かれているとは限りません。処理の流れを図にしたり、重要な変数名やオブジェクト名をメモしながら理解するなどの工夫が必要です。そのような作業の中で目的を見失わないように、目的を明確にして取り組みましょう。
ソースコードを読むスキルの学習方法
先ほど紹介したようにソースコードを読んで理解するにはスキルが必要です。その点Rubyは読み易いプログラミング言語なので、スキルを身に付けるのが比較的容易です。次からRubyのソースコードを読めるようになるための学習方法について紹介します。
コンピュータの役割を理解する
Rubyのプログラミングに慣れてくると、一見難しい処理も条件に合わせて数字を計算させたり、文字列を加工しているだけだと気が付きます。
何度も言っているようにプログラミング言語はコンピュータに対する命令の組み合わせなので、コンピュータができることしか書けません。そのため、コンピュータに何ができるかを理解していれば、ソースコードで何をさせたいかが理解できます。
Rubyのソースコードを読む前に、Rubyを実行するコンピュータで何ができるか、そしてそのコンピュータがどのような枠割を担当するかを理解してください。
データの流れを読む
先ほどプログラムとは、条件に合わせて数字を計算させたり、文字列を加工するのが主な役目です。そして、ソースコードを読むには、そのような処理がどんな順序で実行されているかを理解しなければなりません。
なおRuby on Railsは、「MVCモデル」をベースにしたWebシステム開発用のフレームワークです。そしてこの「MVCモデル」の処理の中心は、モデルすなわちデータです。データをコントローラで加工して、それを基にビュー、すなわちWebブラウザに表示するコンテンツを生成します。
このようなソースコードを読むためには、データがどのように処理されているかをイメージできるスキルが必要です。イメージが浮かばない場合は、ソースコードに書かれたデータの流れを図に書き出してみてください。このデータの流れを図にする作業を繰り返すことで、データの流れが見えてきます。
途中のデータをチェックする
ソースコードを読んでデータの流れを理解できたとしても、その理解が正しいかどうかは、実際に動作させなければなりません。そしてソースコードを動作してデータの流れをチェックするにはデバックツールを活用します。そのためソースコードを読むスキルには、デバックスキルも必要です。
なお実際のWebシステムの開発では、いろいろな用途でデバックが使われます。例えばテストでエラーとなる原因を解析したり、処理が正しい順序で実行されているかをチェックするケースです。そして理解したデータの流れどおりに処理されているかも、デバックでチェックできます。
なおソースコードを実際に動かしてみることで、そのソースコードに対する理解が深まります。Rubyのソースコードを読むためには、Rubyでソースコードをデバックするスキルを身に付けましょう。
ソースコードを読める方は、読み易いソースコードの書き方も知っています。ぜひ、ソースコードの書き方を解説した書籍もぜひ参考にしてください。
リーダブルコード
――より良いコードを書くためのシンプルで実践的なテクニック
Dustin Boswell、Trevor Foucher著、角征典訳
2012年06月発行、260ページ
ソースコードを読む前に
経験豊富なベテランのプログラマーは、修正を依頼されたソースコードをいきなり読み始めたりしません。これまで紹介したようにソースコードだけでプログラム全体を理解することは、誰にとっても大変なことです。ソースコードを理解するうえで必要な情報を揃えてから、ソースコードを読み始めます。
ではソースコードを読む前にチェックしておきたい情報とは何でしょうか。次からその情報を紹介します。
ドキュメントをチェックする
Webシステムを構築したら、そのドキュメントが作られているのが一般的です。もし既存のシステムの改修を任せれたら、そのドキュメントを読んでどのようなシステムなのかを理解しましょう。
なおRubyにはドキュメントを自動生成するコマンドが標準で付属しています。また、GitHubには標準のドキュメント生成ツールよりも使い易いコマンドも用意されているので、Ruby on RailsによるWebシステムの開発や修正に関わった場合は利用を検討してください。
モデルをチェックする
Ruby on Railsの「MVCモデル」のうち、Mはモデルを意味しており、実際にはデータベースに保存されているデータを指します。そして、このWebシステムは、モデルにあたるデータを加工して表示する仕組みだと言えます。
そのため、モデルにあたるデータの構成は、これから扱うソースコードが何をやっているかを理解するうえで必須の情報です。もしデータの構成表があれば、それをチェックしておきましょう。
データの構成を理解するためには図にまとめると便利です。そして「MVCモデル」のモデルを図で表現する手法がUMLです。ぜひ下記のようなUMLの入門書で学んでください。
UML モデリングのエッセンス 第3版
マーチン・ファウラー著, 羽生田栄一訳
2005年6月16日発行、192ページ
テストデータをチェックする
もしこれから編集するソースコードをテストするためのデータがあれば、それもチェックしてください。テストデータはソースコードが実現するシステムの仕様を具体的に表したデータです。テストデータがどのように処理されると正しい結果になるかは、デバックで実際に動かした際に役に経ちます。
なお、Webシステムを手作業でテストするのは面倒です。できれば自動でテストする仕組みを用意しておけば、デバック時間を短縮できます。もし、そのような仕組みが用意されているのなら、ぜひその仕組みを使えるようになりましょう。
まとめ
これまで解説したように、プログラマーとして働くにはプログラムを書けるスキルと同時にプログラムを読むスキルが必要です。そしてRubyの文法を知っていれば、ソースコードを読めるとは限りません。ソースコードを理解するとは、ソースコードが実現する処理を理解することです。そのためのスキルを身に付けてRubyのスキルアップを目指しましょう。
ソースコード(source code)のソースとは、物事の源泉、元になるもの、といった意味の言葉です。昔のプログラムは、人が読めるソースコードを元に、コンピュータの実行に使われるバイトコード(byte code)に変換するものでした。そのためプログラムの書かれたテキストファイルのことをソースコードと呼びます。
Rubyではバイトコードに変換しませんが、他のプログラミング言語のようにソースコードを使います。