良いソフトウェアの作成

概要

講義: 15 分
演習: 0 分
質問
  • 他の人も使えるソフトウェアを書くにはどうしたらよいですか?

目標
  • R のプログラミングのベストプラクティスとその理由が説明できるようになりましょう。

プロジェクトフォルダーを構造化する

プロジェクトフォルダーを、コードファイル、マニュアル、データ、バイナリー、プロットの出力などのサブフォルダーを作ることで、構造化し、整理し、片づけておきましょう。全部手作業でできますが、RStudioの New Project 機能、または、ProjectTemplate のように、その目的で作られたパッケージの助けを借りることもできます。

ヒント:解決策の一つ:ProjectTemplate

プロジェクトの管理を自動化する方法のひとつは、第三者パッケージである ProjectTemplate をインストールすることです。 このパッケージは、プロジェクト管理に理想的なディレクトリ構造を作成します。 自分の分析パイプライン(またはワークフロー)が整理、構造化されるので、これはとても役に立ちます。 RStudioのデフォルトプロジェクト機能とGitと組み合わせれば、自分の作業の履歴を保存し、他の共同作業者とシェアすることもできます。

  1. ProjectTemplate をダウンロードする
  2. ライブラリを読み込む
  3. プロジェクトを開始する:
install.packages("ProjectTemplate")
library("ProjectTemplate")
create.project("../my_project", merge.strategy = "allow.non.conflict")

ProjectTemplate及びその機能についての更なる情報は、 次のホームページから入手可能です: ProjectTemplate

コードを読めるようにする

コードを書く際に一番重要なのが、読みやすくて理解のしやすくすることです。 他の誰が自分のコードを取り上げ、何をするものかを理解してもらわなければなりません。 多くの場合、この誰かさんは、6か月後の自分なので、もしコードが読めない、 理解できない場合は、昔の自分に悪態をつくことになるでしょう。

文書化:「どうやって」ではなく「なぜ」を伝えて下さい

初めのころは、コメントにそのコマンドが何をするかを記したものが多いはずです。 なぜならば、学び始めたばかりで、概念をはっきりさせるのに役立ち、後で思い出せるからです。 しかしながら、後々、それらのコメントは、コードがどんな問題を解決しようとしていたのかを思い出そうと する際には役に立ちません。 自分は の問題を、 なぜ 解こうとしているのかを、コメントに含めるようにしましょう。 どうやって 問題を解いたのかについては、その後の話です。導入の詳細は、理想的にはそこまで心配する必要はありません。

コードをモジュール化しましょう

関数を分析スクリプトと分けて、別のファイルに保存しておき、 プロジェクトでRのセッションを開いたときに、 source することをオススメします。 このアプローチを取ると、分析スクリプトに無駄がなくなり、プロジェクト内のどの分析スクリプトでも 使える関数をストックする場所ができるので、便利です。 また、同じような関数をまとめるのが簡単になります。

問題をひとくち大に分ける

初めは、問題解決と関数の記述は気が滅入るタスクで、 コードの経験不足とは別の問題として分けることができないと思うかもしれません。問題を消化できる塊に分け、 導入の詳細についての心配は後回しにしましょう: 問題をコードで解決できるまで、どんどん小さい関数に分けていきしましょう。 そして、解決されたものを積み上げていけば、問題を解決できるでしょう。

コードが正しいことをしているか確かめましょう

関数をテストすることを、くれぐれも忘れないように!

同じことを繰り返さないようにしましょう

関数は、プロジェクトの中で簡単に再利用できます。もし、プロジェクトで同じようなコードの行の塊を 見つけたら、それらを関数に移す候補にしましょう。

もし、計算が一連の関数で行われていた場合、プロジェクトはよりモジュール化され、変更するのが簡単になります。 これは、特定のインプットが必ず特定のアウトプットを返す場合など、特にそうです。

常にスタイリッシュであろうとする

自分のコードに一貫性のあるスタイルを適用しましょう。

まとめ

  • 常にプロジェクトフォルダーを構造化し、整理し、片づけておく。

  • どうやって、ではなく、何であるかとなぜであるかを文書化しておく。

  • プログラムは一つの用途に絞られた短い関数に分割する。

  • 繰り返し行えるテスト内容を書いておく。

  • 同じことを繰り返さない。

  • 同じことを繰り返さない。

  • 名前やインデント、そして他のスタイルに関して一貫性を保つ。