求められた成果物(コード・手順・設定・答え)が、同種の状況にもそのまま使える一般的な形で書けるなら、その形で書いてください。 一般化しても適用範囲が広がらない場合や、成果物が複雑になる場合は、局所的なままで構いません。 その場合、一般化しなかったことの説明は不要です。 調査の進め方、切り分けの手順、心構え、判断の姿勢といった、 技術的内容から離れた一般論は書かないでください。
症状や差分を説明するときは、まずそれを生んでいる仕組み(どの機能が、何を根拠に、どう動いた結果か)を書き、その後に結果を書いてください。
外部のコマンドやツールの挙動について書くときは、ドキュメントで確認した内容か、実際に動かして確認した内容か、そうでない推測かを区別して書いてください。 推測のときは、確認する方法を添えてください。 実際に動かして確認したときは、試した条件と、結果が変わりうる条件を書いてください。
#// AI-generated code というコメントを書くこと# のすぐ右に // を書くこと(#// から始める)。ただし、分類コメントは例外#region: SectionName (分類名は Pascal ケース、名前にアンダースコアを付けない、C# と異なり #region の後にコロンは必須、前後の行に空行)と、
#endregion: を分類の最後に書き、次の #region: __SectionName__ との間に 1行の空行を入れる。
関数は必ず分類に入れる。Options_ から始め、case を使って1行に書くOptions_ から始め、オプションの長い名前を PascalCase にした名前にしてください() { を書く#// function stdin というコメントを書くことnc -w 5 __ServerName__)$( ) で囲むコマンドは $( の右に空白文字を入れ、) の左に空白文字を入れる__Command__ || Error のように呼び出す__Command__ || true のように呼び出す__Command__ にパラメーターが無ければ、Error 関数に引数を指定しない__Command__ || Error のように呼び出してください。return 1(1は例)は上記「return を書かない」の対象外であり、書いてもよい"${ }" で囲む。ただし、関数の引数など変数名が数字のときは { } を書かず "$1" のように書く( ) のようにカッコの中に空白を入れる。 要素がある配列は、( ) の内側に空白を入れるlocal array=( ) && SetArrayFromLines array "__Text___" のように、local 宣言と SetArrayFromLines を同じ行で書くこと$ echo "${Variable%%.*}" #// left of "."
$ echo "${Variable#*.*}" #// right of "."
$ echo "${Variable%.*}" #// left of last "."
$ echo "${Variable##*.}" #// right of last "."
$ echo "${Variable#pre}" #// remove "pre" prefix
$ echo "${Variable%.gz}" #// remove ".gz" suffix
[ ] で囲む、== などの演算子を使う(( )) で囲み、-eq などハイフンから始まる演算子ではなく == などの演算子を使う-n や -z を使わず ${var} == "" のように判定すること[ や [[ や (( から始まる処理を書く代わりに、if 文を使うことif [[ ]] の中で glob パターンを使う場合、その if と同じ行に #shellcheck disable=SC2053 というコメントを書くこと。
ただし、glob パターン以外の部分は " " または ' ' で囲むこと。EOF などではなく、_HERE_DOCUMENT にすることPositionalArgs=()
while [[ $# -gt 0 ]]; do
case $1 in
-s|--search-path) Options_SearchPath="$2"; shift; shift;; #search: bash default values
-*) echo "Unknown option $1"; exit 1;;
*) PositionalArgs+=("$1"); shift;;
esac
done
set -- "${PositionalArgs[@]}" #// set $1, $2, ...
unset PositionalArgs
echo "\$SearchPath = \"${Options_SearchPath}\""
echo "\$1 = \"$1\""
echo "\$2 = \"$2\""
function Error() {
local errorMessage="${1-""}" #// "${1-""}" means that "$1" default is "".
if [ "${errorMessage}" == "" ]; then
errorMessage="ERROR"
fi
echo "${errorMessage}" >&2
exit 1
}
function SetArrayFromLines() {
#// Sets lines to array except for empty line
#// local __Array__=( ) && SetArrayFromLines __Array__ "a"$'\n'"b b"$'\n'$'\n'"c"$'\n'$'\n'
#// #// __Array__ == ( "a" "b b" "c" )
local -n arrayRef="$1"
shift
#// local texts="$*" #// Use "$*" instead of "${texts[@]}" for faster
local IFS=$'\n' #// "$*" joins arguments with newline, and read splits by newline
arrayRef=( ) && read -r -d "" -a arrayRef <<< "$*" || true
}
以下についてコメントを書く場合、書く位置を以下のようにしてください。:
( の直後、最初の引数より前の単独行))の行末(目的は、折りたためるようにすることと、@ を書かないドキュメント生成ツールに対応するため)
export function getOverlays(
// composite() に渡すオーバーレイの配列を作る
regions: Region[],
// 塗りつぶす領域の配列。各要素は画像左上を原点とした
// ピクセル座標
imageWidth: number, // 合成先の画像の幅
imageHeight: number, // 合成先の画像の高さ
color: string = '#000000', // 塗りつぶす色。'#000000' や 'black' などの CSS 色名
): sharp.OverlayOptions[] // composite() にそのまま渡せる配列
{
...