シェルコーディング標準・基準書テンプレート
私は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
細かな構文指定は組織によってわかれているため省く
以上。
株式会社エスアイイー
杉山
エンジニア転職・人材紹介サービス 【正社員】システムエンジニア(動画配信関連開発)/株式会社Jストリーム(100%子会社Jクリエイティブ ワークス出向) | |
エンジニア転職・人材紹介サービス 【正社員】システムエンジニア(CMS連携開発ほか)/株式会社Jストリーム(100%子会社Jクリエイティブ ワークス出向) |
エンジニア転職・人材紹介サービス 【正社員】インフラ構築エンジニア/株式会社ITI | |
エンジニア転職・人材紹介サービス 【正社員】スマートフォンアプリの企画開発エンジニア(100%自社内開発)/株式会社ITI |
エンジニア転職・人材紹介サービス 【正社員】システムエンジニア・プログラマー(PG・SE)/株式会社クレアーレ | |
エンジニア転職・人材紹介サービス 【正社員】ITエンジニア(第二新卒)/インターソフト株式会社 |
未経験OKの仕事 | 上場企業の仕事 | 高待遇の仕事 | 外資系の仕事 | 社内SEで検索 | 自社サービスで検索