私がLintを愛する3つの理由

Lint好きですか???

普段はRubyJavaScriptを利用しているfumihumiです。 最近はTypeScriptが楽しくなってきました。

突然ですが、 私はLintが好きです。 初めてLintを導入する時ってちょっとしたルールについて揉めたりしませんか????(した) リアル(現実)の揉め事なんかちっちゃく感じるくらいLintからもらえる恩恵って大きいと思っています。

はい。

というわけで MakeIT AdventCalendar 2日目は技術ポエムで投稿したいとおもいます。 明日は @wh1tecat が投稿してくれるはz...

ところでこのカレンダー5日分ほど空いてしまっている様ですね。 きっといい記事を納めてくれる人がいることを僕は信じたいとおもいます... :thinking: せっかくなので全日程埋めたい!!!!!!!!!

まぁ余談はこの程度にして、

lintを導入することで得られる恩恵とその効能について考えてみたいなと。

と、いうのもLintって基本的にカッチカチに設定した方がいいと考えてる私の設定ファイルでCIを回していると学校でLintを使ってる時に

tslintで怒られた件 eslint硬い件

のような意見をもらったので改めて考えてみたいなと思って考えていたことをあらためてまとめていきたいとおもいました

ところで皆さんはLintのルールってどの程度の粒度で設定していますか?????

例えば、JavaScriptなら

const bool = true;

// ver 1
if(bool){return;}
// ver 2
if (bool) {return;}
// ver 3
if (bool) { return; }

のように if一つとっても↑みたいにかけますよね?????? これらのルールってどうやって決めてますか??????

他にも疑問になりがちな

  • 文末セミコロン
  • ブレース前後のスペース
  • 同じく丸括弧前後のスペース
  • 文章のシングル(ダブル)クォーテーション

これらのルールって決めた方がいいのでしょうか?

先に自分の結論から言うとルールは硬い方が良いんじゃないでしょうか?????

ルールを決める

細かいルールはルールを考える人、Lintを導入する人、もしくはチームで相談すると思いますが、例えば

  • クォーテーションに関して であれば私は '式展開が不可能な方' && 'US配列で打ちやすい'という理由からシングルクォーテションを採用しています。
  • インデントはスペースを使ったりとしています。

ただ、こういった細かいルールに関しては開発者およびコーディング担当者は気にする必要ってないと私は思っています。 とは言ってもコード書くときに意識しないと怒られが発生しますよね?w

ただ、そういった怒られ案件(ストレス)っていい感じに回避できそうだとは思いませんか? そうです。 EditorConfig や エディターの拡張機能たちを使えばそういったことが可能です。 私はVSCodeを利用していますが、tslint, stylelint,prettierの様な拡張機能、editorConfigといったものも導入することでストレスが少なく開発に専念することに成功しています。

これらは保存時にいい感じに整形する様な設定を加えることができる(もしかしたら他の拡張機能かも)のでコードを書く際はほとんどストレスがなく開発することができます。 また細かいLintのバグはCLIから tslint **.ts --fixの様にすることでAutoCollectができますね(めっちゃ便利

なので今回はこういった細かいルールについてではなくその他のルールについて考えていきたいなと思っています。 基本的な設定はeslint:allもしくはeslint:recommended これのどちらかを採用し、そこから好みに応じてルールを緩和するのが良いと思っています。

...本題からそれてしまいましたが、

私がLintを好む3つの理由について話したいと思います。

  • 自身のコーディングを規制することができる
  • チームとしてコードに統一感を持たせることができる
  • 潜在的なエラー(バグ)を潰すことができる

Lintの導入にはこの様な3つのメリットがあると思っています。

それぞれについて掘っていくと。

自身のコーディングを規制することができる

これは

  • 独学で学んでいる人
  • いろいろな言語に触れていてその言語特有の書き方に慣れていない人
  • レビューされる機会がなく各々のコーディングになってしまう人

といった人に対して抜群の効果を発揮します。

自分がそうなのですが、プログラミング初めてまもない頃はすごい適当にコードを書いてしまい、可読性が抜群に悪かったり、動くプログラムを雑に書いてしまったり、という様なことが起きていました。

こういった

  • 可読性が悪い
  • とりあえず動くコード(汚い処理)
  • 言語特有の書き方でなくぱっと見読みづらい

という事象をLintの活用で避けることができます。

ね?Lint便利でしょ?

チームとしてコードに統一感を持たせることができる

複数人で開発を始めると当然の様に人それぞれの好み(インデント・ブレース・カンマ)などで宗教戦争が発生しますよね。(?しますよね)

こういったものを前述した

  • EditorConfig
  • Linter
  • Editor設定(Extension)

を活用することでいい感じにすることができます

おすすめはVScodeとLint,EditorConfigの活用です。気になる方はググってください。

ね?Lint便利でしょ?

潜在的なエラー(バグ)を潰すことができる

Lintを活用することで潜在的なエラーを消すことができます。 未宣言の変数の利用や、本来もってないメソッドを使った時に怒られたり、といったことがLintによってできます。 (これがかなり便利なわけですがいい例えが思い浮かびませんでしたw。)

と、いうわけでいい感じにコードを書くために硬いLintと一緒に生活するのはいかがですか??? (雑すぎるまとめ方)

ね?Lint便利でしょ?

番外編:lintをCIと活用する

LintはCircleCIやTravisCIのようなCIツールと一緒に使うとよりよい Lint人生を歩けます

CIツールの設定はいい感じに調べてみれば出てくると思います。

その中でも私のオススメは他人のGitHubからパクることですね。 選択肢としては、 1. 知り合いのGitHubのRepoを漁る。GitHubの検索を活用する。 2. もしくはググって導入事例と設定ファイルを見つける。

などなどをすると良いと思います。

私もそうでしたが、CircleCIの設定は最初は難しく感じがちですが、 他人の設定を真似するとかなり楽に設定することができます。 毎回手元のTerminal(CMD)でLintの実行することもできますが、GitHubなどにPushした際を発火材にしてLintを実行することができます。 またCIツール使うことのメリットはLintだけでなくテストの実行などもテスト環境から行うこともできる様になりますよね。 初めてのCIでテストは難しいかもしれませんがテストも楽しいので明日から!楽しいCI人生を歩きましょう?!

ね?Lint便利でしょ?

まだLint入れてない人は 新規ISSUEに Lint入れたい てやってみてはいかがでしょうか???? きっと考えている人が他にもいるはずです。 良いLintライフを!


さてお粗末な文章となってしまいましたが MakeIT AdventCalendar 2日目は@fumihumiが担当しました。

この記事をみてLintを好きになってもらえたら嬉しいですねw 明日もMakeIT AdventCalendarを楽しみにしていてください!