オルタナティブ・ブログ > The Grouchy Bug >

米国東海岸発、とあるソフトウェア開発者のよもやま話

ソフトウェア開発:エレガントなコードというか、クリーンなコードの書き方

»

「ビジネスをデザインするブログ」 私がエレガントなコードを書くことにこだわらないいくつかの理由
おもしろく読ませていただきました。ソフトウェア開発っていろいろ悩みがあるんですよね。

ところで、エレガントという言葉よく聞くんですがいまいちしっくりこない、そんな言葉です。 
エレガントと言えば、私が想像するのは、高価なコップで紅茶を飲みながらクラッシックを聴く感じ?笑 でも、やっぱりきれいなコード、クリーンなコードは書きたいと思いますよね。ということで、デザインパターンとか難しい話なしの、私が普段考えるクリーンコードの書き方のお話です。(なんかソフトウェアの話ひさしぶりのような。笑)

なぜクリーンなコードを書かなくちゃいけないの?

ソフトウェア開発のサイクルとして、デザイン、コーディング、デバッグ、メンテナンスの繰り返しというのが一般的だと思います。既存のコードがきれいに、クリーンに書かれていると、デザインもすっきりできるし、新しい機能の追加などのコーディング、また、バグフィックス(修正)、そしてマイナーリリースなどのメンテナンス時のむかーし書いたコードのバグフィックス、こういったことが、悩まされずに気持ちよくストレスなくできたりします。クリーンなコードは、クリーンな開発サイクルを作ります。やっぱり気持ちよくお仕事するには、クリーンコードは重要だと思うワケです。

で、いったいどうすればクリーンなコードが書けるのか。

以下に、Eclipseのプロジェクトで見ることができる一般的なもの、簡単なものをあげました。他のオープンソースプロジェクトや、オープンソースを使っている製品などでも応用できると思います。

1. 郷に入れば郷に従えコーディングスタイル
インデントはタブ?スペース何個分?コメントのスタイル、空行はいつ開けるのか、中括弧の位置、括弧の中や外のスペースはきっちり開ける、ネーミングコンベンション、変数の名前の付け方、クラス、メソッド、関数の名前の付け方などなど、他のコードと同じコーディングスタイルをする。まずは見た目からしっかりと書くというのは重要です。

2. とにかく新規にコードを書くより、既存のコードのまねや再利用
特に大きなプロジェクトの場合、スクラッチから自分で新しいコードを書くより、既存のコードで使える物がないかとか、同じようなコードがすでにどこかに実装されていないか製品の中をざっと見てみます。既存のコードのパターンをまねする、既存の方言でしゃべろう。ってことです。既存のコードを再利用したり、まねしたりすれば、それは簡単に、誰に見せても恥ずかしくないコードになります。誰かにその実装を説明するとき、これと同じことをやってるとか、このパターンとか言えば、実装を説明しないでも相手にわかってもらえます。既存のコードの再利用、もしくは、まねることで、新規で書いたときに発生したはずの数多くのバグを自動的に見ないですむことになります。またこれを行うことで、短時間で開発ができるというのもポイントです。

3. コードはいつもクリーンアップを心がけて
汚いコードを見つけたらクリーンアップ。何か実装するとき、コードが汚くなってきた、読みづらくなってきたら他の人の書いたコード含めてクリーンアップ。製品のリリース直前はリスキーで難しいですが、そうでなければ遠慮せずにどんどんクリーンアップするくらいの意気込みで。

4. internalなクラスとpublicなクラス
外のコンポーネントからアクセスされるクラスがpublicなクラスです。また、internalなクラスはそのコンポーネントの中のみでアクセスされるコードです。ある新機能を実装していて、publicなクラスを実装したくなったら、ほんとうにそのコードがpublicでなければならないのかもう一度考えてみます。もしかしたらinternalなクラスでいいのかもしれません。常にpublicなクラスを最小限におさえることを考えるべきです。internal、public、同じことが、メソッドやメンバー、関数などにも言えます。例として、Eclipseでは、internalパッケージとpublicパッケージというのがあります。internalパッケージに含まれているクラスは基本的に公開されていないクラスです。

5. コードはレイヤーを意識する
例えば、Eclipseの場合は、SWTというUIウィジェットレイヤがあって、ToolBarとかTableとかButtonとかLabelとかTextとかいったクラスがSWTの中にあります。SWTレイヤの上が、JFaceで、Action/ContributionManager/ContributionItem、Viewerなどの同じパターンを使って、それら異なるUIウィジェットを同じパターンで管理しています。さらに、JFaceの上に、EclipseUIがあり、さらにJFaceのレイヤーをまとめあげています。レイヤーがきれいにできれば、クリーンなコードができます。新しいコードを作るときは、これはどのレイヤーなのかと常に意識するのは重要です。

6. 長ったらしいコードなんか読みたくない
あるクラス、メソッド、関数などのコードが長くなってきたら、別のクラス、メソッド、関数などを作ることによって、短くすることにします。また、共通なコードはベースクラスにして、あとはそれを継承するクラスに実装するなど。

7. 長いコメントなんか読みたくない
コメントが何行も書いてあって、意味がよくわからないのってありますけど、あれイヤです。わかりやすいコードが書いてあれば、そんな長いコメントは書かなくてもいいんじゃないっていうのがあります。コメントはシンプルなのが良いです。また、コメントも他のコメントの書き方をまねするというのは重要です。

8. 完璧じゃないコード
人間は完璧じゃありません。開発の時間も限られているし、常に完璧なコードなどは書いていられません。だけど、まだこれをやっとかないととか、こんな不具合があるとか、そんな完璧じゃないコードがあったら、TODO, FIXMEなどのコメントの中に書いてます。あとでサーチできるようにこれらのキーワードを使うのはいい習慣です。Eclipseは、これらのキーワードを持ったソースコード行をビューに表示することができます。

9. オープンソースプロジェクトへは、どんどんバグ報告、どんどんバグフィックス
オープンソースの製品を使っていたら、内部のソースコードを読んで、バグがあったらどんどん報告して、どんどんバグフィックス、新しいアイディアがあったら、新しい機能や実装の提案をどんどんしていきます。そのオープンソースのモジュールのソースを読んで、そのパターンを、自分のコードにも適用していくことにより、自分のコードの質も向上していきます。その人のコードをみるだけで、あ、この人はそのオープンソースのコード知っている人だなってわかったりします。

10. レビューは重要
コードレビューは常ににだれかに頼みます。相手が忙しそうだなとか思っても臆せずに必ずレビューを頼む。新しいアイディアがもらえたり、自分の間違いに気がつかせてもらえます。

特に上の2番目の「とにかく新規にコードを書くより、既存のコードのまねや再利用」おすすめです。特に、私自身、Eclipse plug-inがらみの開発をするようになって、これをを意識するようになって、私のコーディングスタイルががらっとかわりましたし、バグが少ない見やすいコードになったと思います。

ということで、えらそうに言える立場じゃないですが、クリーンコードを書くために私が思ってることを簡単に上げてみました。そうはいっても山あり谷ありのソフトウェア開発。あーでもない、こーでもないとがんばって行きたいです。

Comment(0)