Help us understand the problem. What is going on with this article?

コーディング規約的なもの

More than 5 years have passed since last update.

はじめに

コーディング規約と銘打っていますが、そんな大層なものではなく、
単に「こうすると少しは読みやすくなるかも、便利かも」くらいのレベルのものです。
参考になるものもあるかも知れません。

予めアクションタグの書き方の取り決めは、他のプログラミング言語同様、定義しておいた方が良いと思うので、良さそうな取り決めを書いてみました。

規約的なもの

特別な場合以外はStart~End内はインデントする

これは…説明不要かと思います。
Action系やIfなどはインデントすることで、始まりと終わりの対応が分かりやすくなります。

特別な場合と言うのは、下記の様な一行に収めないといけない場合です。

  • Record
  • Substring
  • DateFormat
  • etc...

特別な場合の方が数が多い気がするのは気のせいです。
使用頻度はきっとAction系やIfの方が多い…はず。

あとは、アクションタグとhtmlでインデントレベルを独立させるとかあるかと思いますが
これは好みの範疇だと思うので割愛します。

アクションタグは頭大文字、コンポーネント呼び出しは全て小文字

アクションタグは特に大文字小文字の区別が無いので全て小文字で書いても問題無く動作しますが、
コンポーネントの呼び出しと書き方が同じなので、大文字小文字で区別すると良いかと思います。
アクションタグは特にBasic ActionTag Guideを読むと頭大文字なので、それに準拠する、とかでも良いと思います。

[[---アクションタグの表記はBasic ActionTag Guideに準拠---]]
[[--ActionStart, category, row:*--]]
    [[---コンポーネントの呼び出しは定義の通り全て小文字---]]
    [[--tag_sample--]]
[[--ActionEnd--]]

IfとThenは同じ行に書く

これは何かと言うと、下記の様に書くと良いです、と言う事です。

[[--IfStart, exist:afield_link--]][[--ThenStart--]]
    <li><a href="[[--ArtFieldValue, field:afield_link--]]">[[--ArtFieldValue, field:afield_text--]]</a></li>
[[--ThenStart--]][[--ElseStart--]]
    <li>[[--ArtFieldValue, field:afield_text--]]</li>
[[--ElseEnd--]][[--IfEnd--]]

シェルスクリプトなんかでもそうですが、こう書くことでインデントレベルを節約出来ます。
Ifの入れ子をしたときに凄まじくインデントしなければならなくなるので、この表記はおすすめです。

例えばこれが、

[[--IfStart--]]
    [[--ThenStart--]]
        [[--IfStart--]]
            [[--ThenStart--]]
            [[--ThenEnd--]]
            [[--ElseStart--]]
                [[--IfStart--]]
                    [[--ThenStart--]]
                    [[--ThenEnd--]]
                [[--IfEnd--]]
            [[--ElseEnd--]]
        [[--IfEnd--]]
    [[--ThenEnd--]]
[[--IfEnd--]]

こうなります。

[[--IfStart--]][[--ThenStart--]]
    [[--IfStart--]][[--ThenStart--]]
    [[--ThenEnd--]][[--ElseStart--]]
        [[--IfStart--]][[--ThenStart--]]
        [[--ThenEnd--]][[--IfEnd--]]
    [[--ElseEnd--]][[--IfEnd--]]
[[--ThenEnd--]][[--IfEnd--]]

そもそもIfをネストしてしまうと重くなってしまうので、出来ればこんな処理は書かない方が良いのですが。

変数を使う時、固定値はDefine、変化する値はRecord

DefineとRecordの違いは、Start~Endの中のアクションタグを解釈するかどうかです。
つまり、処理速度はDefine > Recordです。
(これはBasic ActionTag Guideにも書いてあったと思います)

なので、単にテキストを変数に入れる場合はDefine、アクションフィールドの中身を変数に入れる、など
アクションタグの呼び出しがある場合にはRecordを使うと処理は効率的です。

[[--DefineStart, name:var--]]text[[--DefineEnd--]]
[[--RecordStart, name:var--]][[--ArtFieldValue, field:afield--]][[--RecordEnd--]]

あとは、好みの問題ですが、

[[--DefineStart, name:var, value:text--]]

の様な書き方はしない方が良いと思います。
Recordと書き方のレベルを合わせた方が良いかと思うので。

コンポーネントを変更するときは説明に識別子を書いておく

本番環境と開発環境が独立している場合に有用です。
コンポーネントの説明はエクスポートする時の検索に引っかかるので、
開発環境から本番環境に導入するときの作業がとても楽になります。

識別子は改修案件ごとに一意であれば何でも良くて、例えばコンポーネントソースを
gitなんかで別途管理している場合にはブランチ名にしておいたりすると良いです。
改修案件ごとにブランチを切る運用をすればとても分かりやすいです。

おわりに

書いていて全て好みの問題の様な気がしてきました…
内容はともかく、コーディング規約はあると良いと思います。
後から検索かけて一括置換したいときとか、担当者で思い思いの書き方をしていたら全く一括では無くなりますし。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away