ディレクトリ名

ディレクトリの整理をして思った。
スペース区切りのディレクトリの表記法が統一されていない。
こだわりが無いので困る。なので、次のことを考えてみた。

[目的]ディレクトリ名の表記法を決める

一般的には次の表記法が使われているよう。
例として「This is an example.」というディレクトリ名を考えてみる。

参考元
IT用語辞典バイナリ
WebSpaceの中の人

  1. パスカル記法: ThisIsAnExample
  2. キャメル記法: thisIsAnExample
  3. アンダースコア記法: this_is_an_example

自分なりにそれぞれの特徴を考えてみる。
パスカル記法とキャメル記法はアンダースコアを使用しないので文字数が短くなる。

・しかし、大文字が含まれているのでShift同時打ちという作業が増える。この作業は小指に良くない。そのことを考えるとパスカル記法よりもキャメル記法、それらよりもアンダースコアー記法が小指に優しい。

・一般的にシェルには補完機能が含まれているので、初動動作が早くて負担が少ない方が良い。そのことを考えると一文字目が小文字のキャメル記法とアンダースコア記法が良い。

Linuxの生みの親リーナスさんが書いた Coding Styleの第1章のインデントに次のように書いてある。このことを考えるとアンダースコア法が目に優しい。


論拠 - そもそもインデントとは、ブロックの始まりと終わりをはっきりさせるた
めのものです。大きなインデントの恩恵は、20時間連続してモニタを眺めてい
るときなどに特に実感できます。
ここまでの表記法ランキング(独断と偏見)は、
1位 アンダースコアー法、2位 キャメル記法、3位 パスカル記法


現在使用しているノートPC(Ubuntu12.10)でのそれぞれの表記法でのディレクトリ数を調べてみた。ソースコードを一番下に載せる。

ホームディレクトリ以下
 パスカル記法: 244  キャメル記法: 180  アンダースコアー記法: 439
ルートディレクトリ以下
 パスカル記法: 2138  キャメル記法: 976  アンダースコアー記法: 2053

どうせなので、他の計算機でも調べてみた(大学の計算機遅いので除外)。ルートディレクトリ以下のみ。
CentOS
 パスカル記法: 756  キャメル記法: 174  アンダースコアー記法: 484


大まかに見ると。1位 パスカル記法、2位 アンダースコアー記法、3位 キャメル記法となる。
最下位のパスカル記法がトップに躍り出る。なぜ?
目に優しいのはアンダースコアー記法としたが、ファイル名が小文字のみの場合はディレクトリとのコントラストが効いてパスカル記法の方が目に優しいのかもしれない。ディレクトリとファイルで色を分けている場合があるので効果は薄そうだが。

ファイルの場合の記法数を調べてみた。
現在使用しているノートPC(Ubuntu12.10)
ホームディレクトリ以下
 パスカル記法: 4387  キャメル記法: 3139  アンダースコアー記法: 16398
ルートディレクトリ以下
 <パスカル記法: 47697  キャメル記法: 13064  アンダースコアー記法: 88972

CnetOS(ルートディレクトリ以下)
 パスカル記法: 5173  キャメル記法: 809  アンダースコアー記法: 19045


予想通りファイルは小文字のみのアンダースコアー記法が多い。
上の記法以外の小文字のみのファイル、大文字を含むファイルの場合の数も調べる必要がありそうだけど考えない。

まとめ

ディレクトリ名もファイル名もアンダースコアー記法に決定する。
理由は大文字打つのつらいから。

備考として
初めてLinuxマシンを触ったときルートディレクトリ以下の大まかな概要が分からなかった。
大まかに知りたい人は次のコマンドを打つと良い。
「 man hier 」

残っている問題として、ディレクトリ名を長くするか階層に分けるか。



#!/bin/bash
# source_dir以下のディレクトリの記法をカウントする
source_dir=$PWD

pascal_cnt=0
camel_cnt=0
under_cnt=0

for file in $(find $source_dir -type d -print 2> /dev/null); do
    tmp=$(basename $file)
    case $tmp in
    	[A-Z]*[A-Z]* )
    	    pascal_cnt=$(($pascal_cnt + 1))
    	    ;;
    	[a-z]*[A-Z]* )
    	    camel_cnt=$(($camel_cnt + 1))
    	    ;;
	[a-z]*[_]* )
    	    under_cnt=$(($under_cnt + 1))	    
    esac
done 

echo "パスカル記法:" $pascal_cnt " キャメル記法:" $camel_cnt \
    " アンダースコアー記法:" $under_cnt

exit 0