2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
読みやすいコードの書き方のススメ(全1記事)
リンクをコピー
記事をブックマーク
わたなべゆう氏:こんばんは。わたなべゆうと言います。今日は「読みやすいコードの書き方のススメ」ということで、読みやすいかどうかを気をつけていこうという内容のLTとなっております。
(スライドを指して)こちらが概要で、あとで見ていただければと思います。ちなみに先ほどTwitterのハッシュタグと、connpassの管理ページにもスライドのURLを貼っておいたので、もしよろしければあわせてご覧になってください。
僕は、株式会社g&hというところでエンジニアをやっています。あとはフリーランスというか、個人的に趣味でWebやアプリをいろいろやっていたりします。
基本的にエンジニアが僕1人なので、何でも屋というかたちです。「技術書典5」で本を出して、それがそのまま商業本として出るかたちになりました。
弊社の紹介です。3名でやっていまして、(メインは)「ストリートカルチャー×IT」ですね。「音楽とIT」「ダンスとIT」みたいな感じのサービスを運営しています。
今のメイン事業は「Weddy Weddy」というダンスアプリです。これはダンサー向けのプラットフォーム系アプリで、もしよろしければご覧になってください。
では本題ということで、今日のテーマの「読みやすいコード」についてです。
僕としてはざっくり2つあります。ほかの人と作業をするときに流れが理解しやすいとか、「半年ぶりに触るぞ~」みたいなときに迷わないというか、悩まないというか……コメントやファイル名、ディレクトリ構造、果てはコンポーネントの粒度、デザインシステムといった話にもなってきますね。
今回はもうちょっと簡単というか、パパッとやっておけばいいよねという内容になっております。
(スライドを指して)これはわかりづらい例というかたちで出しています。ライフサイクルのメソッド。これがどこにあるのかもよくわからない。didUpdateが一番上にあったり、didMountが一番下にあったりと、これはちょっと迷っちゃいますね。
例えばrenderメソッドの中のインデントの位置がすごくわかりづらい。あと、コンポーネントがmapされて書き出されているけど、これがどういうものなのかがパッとわからない。
あと、三項演算子ですね。入れ子にはできるんですけれども、入れ子にしちゃうと、「あれがこうで、これがああで」みたいなかたちでちょっと読みづらくなっちゃいます。
さらにもう1個例を出すと、importの順番がすごく適当になっている。だいたいの人はimport Reactから書くと思うんですけれども、こうやって書かない人も中にはいるだろうと。
また、パッケージ自体というか、コンポーネント自体が相対パスで書かれている。そうするとファイルの構造を変えたときにメンテナンスするのが大変だよねというところがあったりします。
そして、コンポーネントに名前がついていない。このexportしているコンポーネントの名前がついていないと、エラートレースといったときに、結局どこでこの問題が起こっているのかがわかりづらかったりします。
さらに、コンポーネントにpropsとして何が渡るのかなといったことがわかりづらかったりします。
これらを踏まえて、読みやすいコードにするためのポイントとして「3つプラスα」というかたちで紹介していきたいなと思ってます。
1つ目が、eslint-config-airbnbの導入です。
みなさんは、eslintとかは導入していたりすると思います。eslint-config-airbnbに関しては、ReactだろうがReactNativeだろうが、どちらでも使えるというか、どちらも推奨されています。
右上のコマンドで、そのままインストールしてもらえればよいです。基本的に行間やインデント、ライフサイクルメソッド、さらに三項演算子の中身うんぬんと、細かいところで言うと、分割代入するかしないかなど、いろいろあったりはします。
これらに関して、通常のeslintで設計すると、自分たちのマイルールみたいなかたちで、「これってどうだろうね?」「あれはこうだよね?」と、だいたいゆるくなりがちです。
だけど、eslintのairbnbに関しては、本当にガチガチです。これを導入されると困るような人もたくさんいるとは思うんですけれども、これで書くと基本的には誰もが似たような書き方になります。自分が半年前に書いたものでも、例えば変数の位置、分割代入されてるか、三項演算子がちゃんと三項だけになっているかが、わかりやすくなっています。
まとめです。eslint単体というよりも、airbnbのeslintを使うことで、基本的に「安心安全のairbnb」というか……Reactと言えばairbnbみたいな勢いもあるので、そういったかたちでいろいろとチームとしてまとまりやすいのかなと思います。
(スライドを指して)さらにこのESLint。おそらくご存じの方も多くいらっしゃると思います。VSCodeと組み合わせると、VSCodeのExtensionでESLintがあるので、それを一緒に組み合わせることでオートで自動整形してくれます。
例えば、vscode/settings.jsonというファイルを作ってあげれば自動的に保存時に整形してくれるので、その都度ワーニングとかエラーとかがいろいろチェックできるのでおすすめです。
次にdefaultPropsを使おうということです。defaultPropsの前に、コンポーネントを自分で作ってみようというかたちになっています。
(スライドを指して)これはまだわかりやすい方なんですけれども、テキストの中に、カラーやフォントサイズ、行間などをいろいろ設定できます。
でも、中にはもっとわかりづらいコンポーネントがあったりします。その場合にpropsを判断するとき、だいたいみなさんはコードの中身から判断していたりすると思います。
ほかの人が作ったものだと、命名規則にクセがあってちょっと困る。このコンポーネントを使いたいんだけど、そこに10分も時間をかけるんだったら、パッと判断したいよねということもあると思うので、defaultPropsを使いましょうというかたちになっています。
(スライドを指して)こちらは、カラーあたりの初期値として入れておきたいものを定義しておこうということです。何が便利かと言うと、VSCodeを使っている部分にマウスオーバーすると、(スライドを指して)このようなかたちで値の型とかが出てきてくれます。
TSを使っている方とかなら、なかなか想像が……まあTSを使っている方だと、そもそもpropsに型を定義したりするとは思うんですけれども。
普通のJSで書いている場合だとそれがないけれど、defaultPropsを設定してあげることで、VSCodeの方で判断してくれるので、なかなか便利かなということで、紹介でした。
次にimportの整理です。importは、特に順番は決まっていないですし、どういった順番で読み込もうが、なんでもいいとは思います。
正直を言うと、ちょっと上から相対パスのものとか、Reactの位置がいつもどおりの位置にないと気持ち悪いとか、そういったこともあったりします。
とくに、今流行りのAtomic Design、Atomic Componentのかたちでやるか……Atoms、MoleculesとかOrganismsなど、いろいろあったりします。判別しづらいわけではないけれど、気持ち悪いなあみたいな思いもあったりします。
それらに関してまずやるべきこととして、package.jsonのnameをちゃんと付けてあげましょう。nameを付けてあげると、そもそもpackageとして認識してくれるんですね。
例えば、(スライドを指して)これだったら「app」という名前で登録していますが、ほかの一意な名前を付けると、そこから絶対パスとして指定できるので迷いにくいです。
ファイルのディレクトリ構造が変更されたり、いろいろとリプレイスしているときでも、困らないというかたちになりますね。
次にimport ReactやModal、AtomsやOrganismsあたりも、結局上から順番にルールを付けておくといいよね、みたいな話です。
これはただのチーム間での共有や、自分の中の整理になると思うんですけれども、ちょっと気をつけてあげると、わかりやすい感じがします。
その他、まずはコンポーネントを返すメソッドをJSX内に書かないということです。例えば(スライドを指して)左側だったら、this.renderAnimalsというかたちで関数で中身を書いていたりはするんですけれども、なんとなく概要が掴みづらくなっています。
constAnimalsみたいなかたちで、renderの中に入れてリターンでコンポーネントとして返してあげると、例えば再利用がある……ほかの画面で再利用性があるよねといった場合に、そのまま簡単にコンポーネントとして分離しやすくなるので、これはなかなかいいんじゃないかなと思っています。
次に、コードの記述量を減らすということで、関数を使いましょうということですね。
React Nativeに限っては、画像などをrequireするとコード量が増えたり、一元管理しなければならないので、いろいろ面倒くさかったりします。一元管理すると、キャッシュ化も簡単にできたりしておすすめです。
今回のまとめです。
「読みやすいコードとは?」や「読みやすくするためのポイント」などをいろいろまとめてありますので、もしよろしければスライドをご確認いただければと思います。以上です。ありがとうございます。
(会場拍手)
関連タグ:
2024.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05