2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
読みやすいコードの書き方のススメ(全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.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略