ソースコードの整理は大変な作業

# はじめに
世の中には、有料、無料のソース管理のパッケージはいろいろありますが、ここでは、それらの製品は使わず、使用している開発ツール(NetBeans8.2 IDE)内のフォルダーに保存しているソースファイルについての話です。
<strong><font color="red">NetBeans8.2 IDEの開発エデイターでプログラムを作成し、保存しますが、これが、大量に溜まってくると、あとで、見返したときに、何が何だか分からなくなっています。</font></strong>
一応、フォルダーはサイトごとに作成しています。その中に、さらにcss,images,js他を作成してファイルを保存しています。htmlとphpファイルは親フォルダーに保存しています。ここで、問題になるのは、例えばjsフォルダーや親フォルダー内のhtmlやphpファイルです。それらのファイルは、たくさん出来上がります。ファイルの名称をうまく命名できれば、まだ助かりますが、<strong><font color="red">面倒がって、いい加減に命名しているとあとで、何が何だか分からなくなります。</font></strong>この問題を少し、整理したいと思います。

# <strong><font color="red">何が問題か</font></strong>

小生は、Webサイトのページを作るのが趣味で、これまで、多くのサイトのページを作成してきました。主にyoutubeの動画を再生するページとプラグインです。サイトの数は、数十サイトで、プラグインも10から20数個作成しています。ブログはGoogleブログ、はてなブログ、あとQiitaへも投稿しています。これらの自サイト他への投稿で作成したプログラム数は、相当な数になります。すべて、NetBeans8.2 IDEのフォルダーに保管しています。

#### 問題は、このフォルダーの中です。<strong><font color="blue">
あまりにもその場その場で作成してきたため、似たような名称のファイルが数多く作成されてしまいました。あとで、見返しても訳が分からなくなっています。</font></strong>
どのような問題があるかといかに列挙してみます。あるサイトの例でみてみます。
参考までに、NetBeans8.2 IDEで管理しているサイトのフォルダー構成を表示します。
開発環境を構築するパッケージとして、xamppを使用しています。このフォルダーの下に、各サイトのソースファイルを格納しています。NetBeansのプロジェクト設定でこれらのフォルダーを指定しています。一つのサイトに一つのプロジェクトを割り当てています。
#### 以下は、その例です。
これは、Windowsパソコンのxamppフォルダーに保存したサブフォルダーの一覧です。 

```  
"\xampp\htdocs\favorite.tecoyan.net"
"\xampp\htdocs\common.tecoyan.net"
"\xampp\htdocs\sample-blog.tecoyan.net"
"\xampp\htdocs\screen.tecoyan.net"
"\xampp\htdocs\simplest.tecoyan.net"
"\xampp\htdocs\copy-free.tecoyan.net"
"\xampp\htdocs\category.tecoyan.net"
"\xampp\htdocs\table_manager.tecoyan.net"
"\xampp\htdocs\player-list.tecoyan.net"
"\xampp\htdocs\home3-1-26.tecoyan.net"
"\xampp\htdocs\php_mysql_test_env"
"\xampp\htdocs\culture.tecoyan.net"
"\xampp\htdocs\new_genre.tecoyan.net"
"\xampp\htdocs\statics.tecoyan.net"
"\xampp\htdocs\site-model.tecoyan.net"
"\xampp\htdocs\simpleplay.tecoyan.net"
"\xampp\htdocs\workbench.tecoyan.net"
"\xampp\htdocs\console-panel.tecoyan.net"
"\xampp\htdocs\error.tecoyan.net"
"\xampp\htdocs\kyoyu-tool.tecoyan.net"
"\xampp\htdocs\autoplay.tecoyan.net_x"
"\xampp\htdocs\kei.tecoyan.net"
"\xampp\htdocs\ichi.tecoyan.net"
"\xampp\htdocs\starter.tecoyan.net"
"\xampp\htdocs\jukebox.tecoyan.net"
"\xampp\htdocs\cate.tecoyan.net"
"\xampp\htdocs\blog-tool.tecoyan.net"
"\xampp\htdocs\2.拡張プラグイン"
"\xampp\htdocs\sample.tecoyan.net"
"\xampp\htdocs\service-tag.tecoyan.net"
"\xampp\htdocs\iframe.tecoyan.net"
"\xampp\htdocs\relax.tecoyan.net"
"\xampp\htdocs\mentenance.tecoyan.net"

```
htdocの下にあるのがそのフォルダーです。url形式のサブドメイン名とドメイン名をフォルダー名にしています。
その各サイトフォルダには、さらに以下のようなフォルダーがあります。

```
"\folder"
"\images"
"\js"
"\nbproject"
"\css"

```



#### ・(1)jsフォルダーのjavascriptファイルの問題

このフォルダーには、`<script>`タグで定義した、javascriptファイルを格納しています。jqueryファイルもそうです。自作のjavascriptファイルも格納しています。ここでの問題は、このサイト用に作成したメインのjavascriptファイルの派生的なファイルをたくさん作って格納したことです。例えば、このサイトの本番用とテスト用に作成したファイルで、テスト用には、...._test.jsとかして格納しています。また、バージョン毎には...._001.jsとかして格納しています。テスト用でも、いろいろなテストがありますので、都度、名称を変えて格納しています。しかし、あとでみると、これらのファイルの区別がわからなくなります。バージョン管理には、バージョン管理ツールがありますが、使いづらくて使用していません。
#### 共用の問題
また、このサイトのファイルを他のサイトでも共用して使用しているとさらに、メンテが難しくなります。<strong><font color="red">うっかり、修正すると、他サイトでは動作しなくなることもあります。共用は難しい手段です。</font></strong>


#### ・(2)親フォルダーのhtmlファイルの問題
このフォルダーにも、公開用のファイルとして、index.htmlやindex.phpファイルを置いています。しかし、ここにもテスト用のファイルがあります。さらに、このサイトの別の用途としてのhtmlファイルやphpファイルも名前を変えて置いてあります。フォルダーをつくればという考えもありますが、フォルダーはあまり作りたくはありません。
このようにして、ここにも、多数のファイルが存在することになります。これらの多くのファイルをどう識別すればいいのかという問題があります。

#### ・(3)親フォルダーのphpファイルの問題
<strong><font color="blue">ここのphpファイルは、主に動的生成のhtmlファイルを返却するためのものです。</font></strong>ポップアップ表示などの画面表示のhtmlファイルです。
ここでも、様々なphpファイルが存在します。親ページにあるボタンで表示するポップアップ画面生成ファイルなどです。画面生成をサーバへリクエストするには、<strong><font color="blue">$.ajax()メソッドを使用しています。</font></strong>この時、渡すパラメータのうち、urlパラメータ―で、phpファイルのパスを指定しますが、このphpファイルを識別するファイル名のつけ方が適当だと、後で見返したときに、何のファイルだったかが、わからなくなります。

#### ・(4)dbフォルダーのphpファイルの問題
このフォルダーのphpファイルは、データベースにアクセスするphpファイルを置いています。このフォルダーには、様々なテーブルへアクセスするphpファイルを置いています。テーブルが増えるとphpファイルも増えて行きます。また、SELECTやINSERT、UPDATEなどのSQL毎に別々のphpファイルを置いています。かなりの数のphpファイルが存在することになります。ファイル名には、テーブル名や_dbの文字を挿入してDBアクセスをわかりやすくしています。それでも数が多いと何の処理のphpファイルなのか、わかりにくくなります。

# <strong><font color="blue">どうすれば、整理できるのか</font></strong>
dbフォルダーの例
これは、あるサイトのDBアクセスするphpファイルの一部です。実際はもっとたくさんのファイルがあります。
このような命名をしても、後から見ると訳が分からなくなっています。
この一覧は、windowsのフォルダー一覧表示です。NetBeans8.2の表示形式とは異なりますが、参考として。
``` 
"\db\tag_append_to_list_plugin.php"
"\db\temp_save_tag_db.php"
"\db\toroku_genre_watch_list_.php"
"\db\toroku_genre_watch_list_plugin.php"
"\db\update_genre_watch_list_.php"
"\db\update_genre_watch_list_plugin.php"
"\db\update_max_value_db.php"
"\db\upload_publish_list_db.php"
"\db\user_get_detail_db.php"
"\db\user_get_mess_db.php"
"\db\user_get_nickname_db.php"
"\db\user_mess_exclamation_db.php"
"\db\watch_list_save.php"
"\db\watch_list_save_.php"
"\db\watch_list_save_plugin.php"
"\db\youtube_list_db_post.php"
....

```
これらのphpファイルは、$.ajax()で呼び出しています。
これだけを見ても何のためのphpファイルなのかがすぐには、思い出せません。ひとつのフォルダーに、処理内容は同じで、サイトページで使うphpファイルとプラグインで使うphpファイルが存在しています。
やはり、サブフォルダーを設けるベかとも思いますが、フォルダーを深くして行くとまた、見通しが悪くなりそうです。
機能追加やバージョンアップを続けて行くと、似たようなファイルがいくつもできます。その都度、少しファイル名を変えて行きます。
それらが蓄積されて訳が分からなくなります。あまりにも、乱雑に保存してきました。





# 対策は
結論はまだ、出ていません。ここでは、大規模プロジェクトで使用しているようなプロジェクト管理パッケージは想定していません。あくまでも個人の趣味の範囲でのソースの整理についての話です。
最も行いたいことは、経験上、拙速に共用を行おうとすると失敗するので、共用は、他のシステムやモジュールとの依存関係がない場合のみに限定し、一部でも依存する場合は、共用しないことにします。下手にスイッチなどで処理を分岐していると後で大失敗するためです。
<strong><font color="blue">面倒でも本番用とテスト用、バージョンごととかのフォルダーに分けて保存するのがいいのかと思います。</font></strong>その時、テスト用で完成したソースを本番用に移行するときも注意が必要です。ソースの中で、一部でもテストに依存した変数やコメントがある場合は、本番用に変更しなければなりません。
#### 不具合の温床になります
結局、このファイルの保存の仕方に問題があると、不具合のもとになります。個人の小規模のサイトの運営では、バージョン管理ツールまでは用いていません。バージョンはアップしますが、過去のバージョンへ戻ることは、ほとんどありません。そのため、直前のバージョンは残し、後は破棄しています。
#### 見通しがいい保存件数は
ひとつのフォルダーに、100個も200個も保存しているとみずらくなります。せいぜい、10個、20個程度がいいかもしれません。
#### ファイルの数を減らすには
一つの処理単位毎にではなく、関係する処理はまとめて、一つのファイルに入れるとかすると、ファイルの数は減らせます。
#### 実は、ソースファイルだけではなかった
データベースをphpMyAdminツールで見てみると、そこには、テーブル名がずらっと並んでいます。<strong><font color="red">これも同様で、テーブルの意味が分からなくなっています。</font></strong>過去に作成したテーブルなどは、すでに使用していないかもしれません。しかし、下手に削除はできません。テーブルの命名も問題かもしれません。このテーブルは、どこのサイトで何の目的で使用しているのか不明になっています。テーブル一覧を見ただけではわかりません。
このように、<strong><font color="red">きちんとしたポリシーとかルールもなく、行きあたりばったりで追加してゆくとこうなります。</font></strong>
以下はそのサンプルです。
```
access_tb
active_tab_id
api_auth
birth_table
blog_update_count
browser_language
button_click
button_click_time
button_mess
chosen_hokan
collect
commom_play_list
content_memo
culture_genre
customers
descript
dom
employees
episode
extension_id
family_video
gengou
genre_mess
get_list_count
group_list
hand_make
horidashi
ipAddress
jimaku_list
list_data
list_info
lylics
max_value
mokuji_list
mokuji_list_related
mokuji_title
mylist
news_table
offices
old_list
page_description
play_tm
post_to_db_list
post_to_db_list_genre
qiita_access
realtime_list
replace_key
reserve
rireki_list
singer
singer_vid
site-model-log
site_access_ip
site_link
site_title_name
source_code
special_list
speech_list
speech_page_script
system_mess
tag_list
template
temp_save_tag
thumbnail_curtm
thumbnail_player
todays_list
today_mess
usage_popup_tb
user_access_tb
user_id
user_mess
user_title
watch_list
watch_list_plugin
youtube_list
youtube_list_genre
youtube_list_save
```
メンテしているときは、わかりますが、しばらく経つとよくわからなくなります。これらのテーブルがどこで使われているのか、毎回、ソースコードを見て、<strong><font color="blue">ひとつひとつ、phpファイルを開き、その中から、SQL文をチェックし、テーブル名を確認して、該当するphpファイルを特定します。</font></strong>結構大変な作業です。

<strong><font color="blue">今後も、この辺の対策について、書き足して行きたいと思います。</font></strong>


# あとがき
現状は、ごちゃごちゃした状況ですが、少しづつ、整理したいと思います。また、不要になったコード、見極めが大変ですが、思い切って断捨離したいと思います。動かないモジュールが出てきそうですが、その時はあきらめるしか仕方がないかもしれません。<strong><font color="red">非常時のためと保存していると結局、使わないコードであふれてしまいます。</font></strong>
ソースコードの整理はやはり大変な作業です。