コードリーディングやコーディングの効率を爆上げしてくれる機能のまとめ

コードリーディングやコーディングをする時に、知っているか知らないかで効率が段違いになるオススメの機能について、まとめて紹介しておきます。

私がIT業界に入った頃に知りたかったことなので、初心者向けの内容になります。

具体的にどんな機能をどう使えば開発作業の効率を上げられるのか、一挙にまとめて体系的あるいは俯瞰的に簡潔に説明してくれる人や記事があればなーと思っていたので、載せておきます。

普段の開発現場で実際に使用してお世話になっているありがたい機能たちです。

 

コードリーディングやコーディングの効率を上げてくれる開発環境の前提

まず、大前提として、プログラムを開発するときに、IDE(統合開発環境)を使用しているでしょうか?

開発現場やプログラミング言語によっては、IDEを使わないということもあるそうですが、私はIDEもしくは高機能なソースコードエディタの使用をオススメします

便利な開発環境の方が開発の効率は段違いだからです。
(特に私のような低スキルのエンジニアにとっては必須です)

ちなみに、世の中には、たくさんのIDEやエディタがあるわけですが、正直なところ、どれが使い勝手が良いのか私は知りません。
良いのがあったら、私が教えて欲しいです

また、私はIDEの機能を知り尽くして、使いこなしているわけではありません。

けれど、全くの初心者の頃に比べると、コードリーディングやコーディングをするときに役立つ機能を少しは知ったので、どんな機能があるのかをまとめておこうと思います。

重要度については、現時点における私の使用感によるものになります。
(重要度については、エンジニアのスキルレベルや担当作業範囲によって変わってくるのだろうと思います)

この記事に書いてある内容は、私が知っているというか業務で使用しているIDEであるEclipseが持っている機能を元にした紹介と簡単な説明になります。
(私が他に使用したことがあるのは、サクラエディタとVSCodeとAtomとPyCharmくらいです)

また、プログラミングは言語はJavaを想定しています。(単語の意味もJavaに準じます)
(PHP、Pythonで使用した際でも問題はなかったと思いますが、うろ覚えです)

どのIDE、プログラミング言語でも似たような機能を持っていると思いますので、各自が使用しているIDE、プログラミング言語の機能を調べてみたください。

どんな機能があるのか、その存在すらも知らないと調べるのは大変ですが、知っていると多少は調べやすくなると思いますので、Eclipseを知らない人にも役立つかもしれません。

 

grep機能、横断検索機能、文字列検索機能【重要度:★★★】

これを知らない人は誰もいないだろうというレベルでよく使う機能。
私も初めて知った機能はこのgrep機能だったと思います。

漠然とした文字列検索のときに使用する機能です。

ある処理を改修するときの、影響範囲を調べるときなどに使用します。

このgrep機能しか知らない、全くの初心者の頃にはとてもお世話になりました。

クラス名、メソッド名、変数名、コメントのキーワードなど、とにかく使用できる場面は多いかと思います。

ちなみに、調べるフォルダの範囲を絞る機能、調べるファイルの拡張子を絞る機能、正規表現で検索する機能、大文字小文字を区別する機能があります。

ただ、この文字列検索機能は汎用的でなんでも調べることができる便利な機能ですが、プログラミングの意味的構造を活かした検索ができるわけではないので、非効率な検索になることも多いです

なので、下記に紹介している各種機能では調べようがない時だけ使用する機能になるかと思います。

 

デバッグ実行機能、デバッガ機能【重要度:★★★】

この機能なくして、(私のような低スキルでは)コードリーディングには不可能とも言える機能。

ソースコード(プログラム)の処理を、ある程度任意の処理単位で、手動で実行できる機能です

この機能があると、全く知らないプログラミング言語だとしても、自分の調べたい機能について、何パターンかエントリポイントからエンドポイントまでをデバッグ実行して、ひたすらコールスタックや処理の動きを見ていると、だんだんと文法すらわかってくるような気さえする最強便利な機能かなと思っています。

ソースコード上の好きな箇所にブレイクポイントを張って処理を止められるので、自分が知りたい箇所の処理の流れを追うことができます。

また、自分の好きなように変数の値を書き換えたり、処理を発生させたり色々とできますので、処理の変更をしたときに、動作がどう変わるのかを簡単に確認するときにもよく使います。

 

型階層検索機能【重要度:★★】

インタフェースやクラスの継承関係を階層構造で示してくれる機能です。

プロジェクト内の全ソースコードから、調べたい該当クラスのクラス階層を検索して表示してくれます。

クラス図を描きたいときなど、クラスの継承関係を把握したいときに使用します。

よく使う使用する場面としては、
着目したクラスのソースコードを読んでいて、その親クラスの存在が気になったときと、
ソースコードをデバッグして読んでいるときに、インタフェースに行き着いて、それ以上先に進めなくなったときでしょうか。
特にインタフェースを見ただけだと、どんな動きをするのかイメージが湧かなくてもやもやした気持ちになったときに、この機能を使って、実装クラスを見ることで、実際にどんな使われ方をするのかイメージを掴むことができます。(コードリーディングしていた箇所で、どの実装クラスが使用されているのか推測もできますし)

また、全サブクラスを見ることができるので、その使用影響範囲を見ることもできます。

クラス(オブジェクト)、メンバ参照機能【重要度:★】

クラスやオブジェクト、メソッドやフィールドが参照されているソースコード上の箇所をすべて検索してくれる機能です。

私はあまり使用することはない機能。

クラス間の依存関係を見るときやクラスの影響範囲を見るとき、フィールドがどこでどんな使われ方をしているかを見れます。

 

メソッドの呼び出し階層検索機能【重要度:★★】

メソッドの呼び出し階層を検索する機能です。

着目したメソッドが、ソースコード上のどのメソッドから呼び出されるのかを検索する機能と、
着目したメソッドが、ソースコード上のどのメソッドを呼び出しているかを検索する機能。

検索結果であるメソッド呼び出しは、階層を次々と辿っていくことができます。

メソッドの呼び出し関係を素早く把握するのに重宝します。
コードリーディングで処理の流れを追うとき(メソッドが次々と呼び出されて、階層が深すぎて迷子になるし、追いかける気にならないとき)や、シーケンス図を書くときに助けになります。

また、メソッドの影響範囲を調べるときにもよく使用します。
例えば、メソッドを改修してコーデイングした時に、デグレが起きていないかを確認するために、そのメソッドを使用している全クラスの単体テストを実施するために調べるときなどですね。

ただ、この便利な機能はインタフェースやリフレクションを利用したメソッド呼び出しに対しては、残念ながら無力なので、そんなときは型階層検索機能と文字列検索機能で補完しながら使用する必要があります。

リソース検索機能【重要度:★】

ソースファイル名やソースファイルパスから、ソースファイルを検索するための機能です。
(ソースファイルに限らず、設定ファイルなどあらゆるリソースファイルを検索できます)

最初に知ったときは、あまり有難みを感じなかったのですが、

ソースファイルが万単位にあって、パッケージ数も多いときなど、
この機能があると、ソースファイルを探して開く作業が地味にラクになるというけっこう便利な機能です。

ソースファイルがある程度以上のプログラムを扱うなら、知っておくべき機能だと思います。

 

UML図の作成機能【重要度:★】

IDEや高機能エディタは、(たいてい)プラグインを導入すれば、UML図の作図を補助してくれる機能まで備えています。

私は周りに教えてくれる人もいなかったので、自分でコードリーディングしたときのメモとしてUML図を書くときには、エクセルに書いていたのですが……無駄な作業でした。

ソースコードファイル群をドラッグ&ドロップすると、クラス図を自動生成してくれる機能があったりします。
自分でクラス関係を一から把握して、作図しないといけない事情でもない限り、私はできれば自動生成に任せています。

また、最近はクラス図でもシーケンス図でもER図でも、単純なテキストの記述言語で簡単にUML図が書ける機能がありますので、使用するようにしています。

 

コードリーディングやコーディングの効率を上げくれる機能のまとめ

コードリーディングやコーディングの効率を上げてくれる機能について、内容の見にくさは申し訳ないのですが、これらの機能の存在を最低限知っておけば、既存のコードを読んで少しコーディングするくらいならなんとかなるのではないかと思います。思いたいです。

私はこれくらいの知識でなんとか開発現場でモタモタと作業しております。

「こんな機能、知らなかったよ」という方の参考になれたなら幸いです。

私もモタモタした作業スピードから脱却して、もっと効率的に作業できるエンジニアになれるように考えていきたいと思います。

(もし、この記事を上級プログラマの方が見ているのなら、「いやいや、この機能も必要でしょ」という便利機能などがあれば、教えて頂ければ幸いです)

 

タイトルとURLをコピーしました