シェルコーディング標準・基準書テンプレート

Posted 3月 10 2015 by Teachers  

私はOS・ミドルウェアが既存の機構だけでは
満足に動かせない時に何かコード書いた程度。
大昔にコーディングマナーを大学で学んだような気もします。

セキュアOSの標準設計書を過去に起こしたりしてますから、
コーディング標準もWEBに転がってると思ったら、
日本語では転がっていませんね。

以下にコーディング標準の参考テンプレート(案)を記載します。

シェルコーディング標準/ガイドライン

概要
本稿では、シェルスクリプトを作成するうえでの記述要件と構文ルールを明示する。

シェル内部記述文
すべてのシェルスクリプトには、冒頭に記述文を記載すること。

 利用目的
 入力、出力、その他の環境変動値の一覧化:
 スクリプト起動の詳細
 入力オプション・引数
 必要環境変数値
 出力変数
 出力(または変更)環境変数
 標準出力と標準エラー出力
 エラーステータスの出力
 依存するプログラムやスクリプトの明示
 本スクリプトを利用するプログラムやスクリプトの明示
 注意事項

ヘッダー文のひな形例:
#==============================================================================
# スクリプト名:
# 作者:
# 作成日:
# 部署:
# 概要:
# 利用目的:
#
# オプション/引数:
# 起動起点:
# 依存ファイル/データベース:
# 環境変数:
# ローカル変数:
# スクリプト入力:
# スクリプト出力:
# 終了ステータス/リターンコード:
#==============================================================================

構成と構文基準
KISS(Keep it Simple Stupid)原則、不必要な複雑性は避け設計の単純性を優先すること。

モジュール化
 開発~初期リリース時は、WET(Write Everything Twice)方式でスクリプト群を作成。
既存スクリプトの流用は行わず(コピー活用は可、直接利用は避ける)、外部スクリプト依存を最小限にし、単純化する。

 共通機能スクリプト等を共用利用するDRY(Don’t Repeat Yourself)方式は、スクリプトの構造・リリース管理環境が台帳整備されている場合のみにする。

インデント
インデントは、各種変更コードや制御コード等のブロック(処理)単位で行う。
インデント幅は半角空白3つとし、「TAB」の利用は禁止する。

悪い事例:
for file in $DIR_LISTING
   do
   if [ -s $file ]
      then
      echo “$fileは存在し0以上です。”
   else
   echo “$file は存在しないか0以下です。”
fi
done

良い事例:
for file in $DIR_LISTING
do
   if [ -s $file ]
   then
      echo “$fileは存在し0以上です。”
   else
      echo “$file は存在しないか0以下です。”
   fi
done

インラインコメント
インラインコメントは、処理構文のコードブロック(1連の処理)の前に記述すること。
構文の読みやすさを優先し、処理構文間にコメント記述を行わないこと。

悪い事例:
for file in $DIR_LISTING
do
   if [ -s $file ]
   then
# ファイル名を出力し、サイズが0以上であることを回答する
      echo “$fileは存在し0以上です。”
   else
#ファイル名を出力し、存在しないか0以下のサイズであることを回答する
      echo “$file は存在しないか0以下です。”
   fi
done

良い事例:
#ファイル名を検索し、存在するか確認の上、サイズが0以上であることを回答付随する

for file in $DIR_LISTING
do
   if [ -s $file ]
   then
      echo “$fileは存在し0以上です。”
   else
      echo “$file は存在しないか0以下です。”
   fi
done

スクリプトの命名規則
記憶しやすいように過度な省略を行わないこと。
形容詞や動詞を分けて記載する場合、「_」を挟み冒頭文字は大文字とする

悪い事例:
Run_dec
良い事例:
Run_Decoder

悪い事例:
Cl_logs
良い事例:
Clear_Logfile

ローカル変数
環境の変動時にスクリプトの改変が効率的に行えるようにディレクトリパス等の固有値は、変数設定をすること。
例:
Script_Home=/usr/bin/scripts

条件文と変数
Null値とUndifined対応のため、条件文内の変数はダブルクォーテーション(””)で囲むこと。
悪い例:
if [ $HOST = “lx1” ]
then
   statement 1
   statement 2
   statement n
fi

良い例:
if [ “$HOST” = “lx1” ]
then
   statement 1
   statement 2
   statement n
fi

行幅
コードの行幅は80文字以内にすること。
悪い例:
find /users/hads/shef_reports/abrfc/delivered/via_ftp –name ‘*’ –mtime +0 –print –exec rm{} ;

良い例:
Ftp_Dir=/users/hads/shef_reports/abrfc/delivered/via_ftp
find $Ftp_Dir –name ‘*’ –mtime +0 –print –exec rm{} ;

エラーメッセージ
スクリプトエラー発生時には、発生対象と発生時間が出力されるように処理を組み込むこと。
エラー出力はログファイルに出力を行うように設定すること。

クーロン設定の悪い例:
Test_Script >/dev/null 2>&1

クーロン設定の良い例:
Test_Script > Test_Script.out 2>&1

細かな構文指定は組織によってわかれているため省く
以上。

株式会社エスアイイー
杉山 




  未経験OKの仕事 |  上場企業の仕事 |  高待遇の仕事 |  外資系の仕事 |  社内SEで検索 |  自社サービスで検索





メールアドレス
ご質問・問い合わせ等、ご自由にお書きください。