Airbnb | バケーションレンタル、ログハウス、ビーチハウスなど
どんな旅行にもぴったりの宿泊先が見つかるAirbnb → 700万件のバケーションレンタル → 200万件のゲストチョイス → 世界中の220を超える国と地域
https://www.airbnb.jp/
社内のコーディングルールについて
そもそもの目的
上記2点の目的を達成するためには?
結論:他社のコーディング規約導入
主なコーディング規約
スタイルの宣言
セレクタ
プロパティ
コメント
CSSのフォーマット
ディレクトリ構成
1-settings
2-mixin
3-base
4-layout
5-modules
6-utility
7-libray
まとめ
創業から弊社は様々な開発メンバーと協働しシステム開発に勤しんできました。
企業であれば当然だと思いますが、弊社はまだまだ小規模ということもありこの機会に社内外向けにコーディング規約をまとめてみました!
コーディング規約を作成する目的はざっくり2点あると考えています。
① コードの属人化を防ぐ
入社・退職など開発メンバーの入れ替わりによる引き継ぎがあった際に、コードの解析が容易になるため、第一目的に挙げられるかなと思います。
② 品質の担保
こちらも①の理由に通じますが、属人的なコードに依存すると、当該人がチームから離脱した際に、あからさまに質が低下するなどにつながってしまいます。
上記2点を担保するためにも弊社ではコーディング規約を設けることとしました。
上記の目的を達成するために必要なコーディングをする際に属人的になりやすい箇所を以下羅列してみました。以下の項目を解消してくれるコーディング規約を導入することとしました。
弊社が運営しているREADY TO FASHIONはRailsベースのアプリケーションになるため、同じ言語・フレームワークを使用している他社企業を真似することからはじめることとなりました。
結論から言うと、Airbnbのコーディング規約を導入することとなりました。
理由はいくつかありますが、何点か挙げると
この2点が大きかったです。
コーディング規約については以下のgithubを参照に進めました。(最近は更新されていませんが、日本語訳も置いておきます。)
以下Airbnbの規約から一部抜粋。
"スタイルの宣言"とはセレクタ(もしくは複数のセレクタ)とそれに伴う1つ以上のプロパティのことである。 以下、例。
.listing {
font-size: 18px;
line-height: 1.2;
}
スタイルの宣言において、"セレクタ"はプロパティによってどのDOMにおける要素をスタイリングするかを決定するものである。セレクタはHTML要素のclass,id,もしくはその他のattributeのどれかにあたるものである。以下はセレクタの例である。
.my-element-class {
/* ... */
}
[aria-hidden] {
/* ... */
}
そして、プロパティは要素に対してスタイルを実際に定義するものである。プロパティはキーと値のセットであり、スタイルの宣言は1つ以上のプロパティの宣言を含むことができる。プロパティの定義は以下のようである。
/* ここにセレクタを記述する */ {
background: #f1f1f1;
color: #333;
}
/* */
)ではなくラインコメント(//
)を使う:
の前でなく後ろにスペースを1つ入れる}
の前に改行を入れる✖️ 悪い例
.avatar{
border-radius:50%;
border:2px solid white; }
.no, .nope, .not_good {
// ...
}
#lol-no {
// ...
}
⭕️ 良い例
.avatar {
border-radius: 50%;
border: 2px solid white;
}
.one,
.selector,
.per-line {
// ...
}
cssのコーディング規約についてはAirbnbに基づき規約を作成したが、一方でディレクトリ構成については社内で協議し以下のように確定。
今後React実装に向けてディレクトリ構成を再考する必要があるのは宿題としました。
初期設定で必要なパラメータなどが定義されているSCSSファイルを格納するディレクトリ。
mixinが定義されているSCSSファイルを格納するディレクトリ
ベースとなるスタイルが定義さているSCSSファイルを格納するディレクトリ
ページのエリア分けを行うSCSSファイルを格納するディレクトリ
各ページのスタイルが定義さているSCSSファイルを格納するディレクトリ
以下_utility.scssにある通り使用する。
This means helper class like a snippet.
Utility should always have the prefix "u-".
And you should not feel free to add a new Utility class.
外部プラグイン、ライブラリ、パッケージのSCSSファイルを格納するディレクトリ
CSSのコーディング規約については、OOCSSとBEMの組み合わせが一番弊社にフィットすると言うことから、Airbnbの規約をもとに作成してみましたが、ベストかどうかは運用してからまた考察してみたいと思います!
今後はReact / Next.jsの導入に伴い再度規約を見直す必要があることも宿題として挙がっているので、まずは規約を開発メンバーが守るという意識のもと、随時アップデートしていきたいと思います!
READY TO FASHIONでは一緒に働くエンジニアを募集しています!
ファッションに興味があるエンジニアのご応募お待ちしております!