Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
20220227 可読性って大事
Search
kuma
March 14, 2022
Programming
0
80
20220227 可読性って大事
kuma
March 14, 2022
Tweet
Share
More Decks by kuma
See All by kuma
エンジニアの輪スライド
kumainataku
0
240
20220730[PHP]デザインパターン色々学んでみた
kumainataku
0
140
20220319[Laravel]想定外のN+1アラート
kumainataku
0
170
20211027_僕の転職活動の振り返り.pdf
kumainataku
0
110
オブジェクト指向(超基礎)
kumainataku
0
160
20210516 LT資料(PHP echo print)
kumainataku
0
54
20210425 LT会(基本情報技術者)
kumainataku
0
43
202104 読書LT会
kumainataku
0
190
Other Decks in Programming
See All in Programming
Pythonに漸進的に型をつける
nealle
1
130
GC25 Recap: The Code You Reviewed is Not the Code You Built / #newt_gophercon_tour
mazrean
0
130
外接に惑わされない自システムの処理時間SLIをOpenTelemetryで実現した話
kotaro7750
0
110
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
950
オンデバイスAIとXcode
ryodeveloper
0
260
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
190
品質ワークショップをやってみた
nealle
0
650
はじめてのDSPy - 言語モデルを『プロンプト』ではなく『プログラミング』するための仕組み
masahiro_nishimi
4
16k
あなたとKaigi on Rails / Kaigi on Rails + You
shimoju
0
210
What's new in Spring Modulith?
olivergierke
1
170
ALL CODE BASE ARE BELONG TO STUDY
uzulla
28
6.8k
Cursorハンズオン実践!
eltociear
2
1.2k
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
640
Building a Modern Day E-commerce SEO Strategy
aleyda
44
7.9k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Building an army of robots
kneath
306
46k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Designing for Performance
lara
610
69k
Six Lessons from altMBA
skipperchong
29
4k
Unsuck your backbone
ammeep
671
58k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
For a Future-Friendly Web
brad_frost
180
10k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.2k
Transcript
「きれいなコード」って大事 2022 / 2 / 27 クマ
自己紹介 • 実務入って半年 • PHP(Laravel)、JavaScript(Vue)を書いてます。 • 仕事もマッチングアプリも伸び悩み中。。。 • 好き↓ •
タガが外れたように満腹まで食べる • ラーメンハシゴ、次郎マシマシ…etc • 甘いもの • ミスド食べ放題15個の実績(尚、ぼっち参戦) • スイパラ行くのが直近目標(もちろん、ぼっち参戦) P-01
目次 • 話すこと • 話さないこと • 本LTのゴール • 動機 •
なんで「きれいなコード」は大事か • どうやって「きれいなコード」を実現するか • 俺的ピックアップ • おわりに P-01
話すこと P-01
話す事 • 「きれいなコード」って大事だよねって話 • 朴訥(ぼくとつ)とした、当たり前な記述ルール P-01
話さないこと P-01
話さない事 • 「~」を使ったら爆速開発できた的な話 • 「~」で「***」を作ってみた話 ↓ 業務に直接影響しないかもしれません。スイマセン。。。 (いづれできるように精進します!) P-01
本LTのゴール P-01
本LTのゴール • 「きれいなコード」の重要性再認識 • リファクタリングへの意識微増 • 「ウチでは~」とか「~もあるよね」みたいな情報共 有(これが一番したい) P-01
はじめに P-01
はじめに ちょっとだけ、業務に慣れてきた感がある。 しかし、最近ちょこちょこ受ける指摘が。。。 P-01
はじめに 「この変数名イケてないね」 「(if文で早々にreturnすれば)ここのelse文て消せるよ ね?」 ⇒おうふ。 P-01
はじめに タスク進捗を優先で「コードのきれいさ」がないがしろに ↓ レビューで指摘受け、修正工数増 これは改めて見直すいい機会だと P-01
なんで「きれいなコード」が大事か P-01
なんで「きれいなコード」が大事か 言わずもがなですが • 改修時のメンテナンス性 • バグの早期発見 P-01 “「他の人が理解できるって誰が得するんだよ」 …「他の人」というのは…6か月後の「君自身」かもしれない” (「リーダブルコード」より)
どうやって「きれいなコード」を実現するか P-01
どうやってきれいなコードを実現するか 当たり前ですが2点 1, ポイントを抑える 2, 実務で実践+フィードバック ↓ 今回は1, の意識が薄れてきたなあ、と実感 P-01
どうやってきれいなコードを実現するか 上述の通りこちらでインプット ⇒個人的ポイントをピックアップ P-01
俺的ピックアップ8選 ※” ”(引用符)は参考書籍から引用 P-01
1, 【変数】明確な単語を選ぶ P-01
1, 【変数】明確な単語を選ぶ “「空虚な」単語は避けるべき” Ex, ‘get’ P-01 // pageをどこからとってくる?ローカルキャッシュ?データベース? def GetPage(url):
… Ex, ‘Stop’ // どんな操作を指す?取り消しができないならKill、あとから再実行できるならPause()のがいい class Thread { void Stop(); … } ※プログラミングでよく使う英単語のまとめ【随時更新】 https://qiita.com/Ted-HM/items/7dde25dcffae4cdc7923
2, 【変数】値の単位 P-01
2, 【変数】値の単位 “計測できるものであれば変数名に単位を入れる…” Ex. ‘getTime()’ P-01 // getTime()はミリ秒を返すので、start_ms, elapsed_ms…のがいい var
start = (new Date()).getTime(); … var elapsed = (new Date()).getTime() – start; Document.writeIn(“読み込み時間: ” + elapsed + “秒”);
3, 【変数】重要な属性を追加する P-01
3, 【変数】重要な属性を追加する “危険や注意を喚起する情報も追加した方がいい” Ex. ‘password’ P-01 // 暗号化前であることを明示的にする password ⇒
plaintext_password Ex. ‘comment’ // エスケープ処理されてないことを明示 comment ⇒ unescaped_comment
4, 【変数】不要な単語を投げ捨てる P-01
4, 【変数】不要な単語を投げ捨てる “含まれる単語を削除しても情報が全く損なわれないこと もある。” Ex. ‘ConvertToString’ P-01 // 「文字列に変換ね」ってなる ConvertToString
⇒ ToString Ex. ‘DoServeLoop’ // 「ループに入る(※)のね」ってなる ※日本語訳が正直不明…ゴメンナサイ… DoServeLoop ⇒ ServeLoop
5, 【変数】 スコープが小さければ短い名前でもいい P-01
5, 【変数】スコープが小さければ短い名前でもいい “識別子の「スコープ」が小さければ、多くの情報を詰め 込む必要はない” P-01 if (debug) { map<string, int>
m; // 引数mはすぐ近くにあるmap<string, int>だとわかる Print(m); } // 個人的にはやりすぎ(省略しすぎ)感あるけど… ※個人的主観:今はこれが主流では? ⇒これまで話した1~4のルールは発行時期的にグローバルスコープへの定義 とかやってた時代を考慮してのルールかと思う
6, 【コメント】 入出力のコーナーケースに実例を使う P-01
6, 【コメント】入出力のコーナーケースに実例を使う “慎重に選んだ入出力の実例をコメントに書いておけば、 それは千の言葉に等しい” P-01 // ‘src’の先頭や末尾にある’chars’を除去する // 実例 :
Strip(“abba/a/ba”, “ab”)は”/a/”を返す String Strip(String src, String chars) { … }
7, 【制御文】関数から早く返す P-01
7, 【制御文】関数から早く返す “関数で複数のreturn文を使ってはいけないと思っている 人がいる。あほくさ。関数から早く返すことはいいことだ。” P-01 public boolean Contains(String str, String
substr) { if (str == null || substr == null) return false; // 早々にreturnする if (substr .equals(“”)) return true; // ここでもreturnする … } ※個人的にはelseを書かなくて済むから好きな書き方です。
以上。 P-01
おわりに P-01
おわりに~その1~ • ここまで書いたものの、既存プロジェクトのコーディン グルール(暗黙のルール含む)等との兼ね合いもあり、 インプットした通りにならないことも多いことも実感 • 純粋にリーダブルコードの内容がそのまま反映できる とは限らない • 「命名は長くていい」とか「getとか曖昧な単語を使う
な」とか… ⇒土台(基本知識)としてのインプット、と捉える P-01
おわりに~その2~ • かつ、「きれいなコード」を作るのに工数を割くのも良 しとされないことも会社によってはある • PHP Conference Japan 2021: 20年モノの巨大
Webサービスの開発… (https://youtu.be/ZJHX7o1mYJE) • 意見交換しましょう P-01
ご清聴ありがとうございました。 P-01