SlideShare a Scribd company logo
1 of 64
Download to read offline
セッション
in
Javaで実践するリーダブルコードぷらす
2013.06.29
松本礼永
自己紹介
• 名前:
– 松本 礼永
• 普段の仕事:
– 主にJavaで Webアプリケーション開発してます。
• 最近興味あること
– Ruby, Scala (え、今更 !? )
リーダブルコード本
• 著
– Dustin Boswell
– Trevor Foucher
• 訳
– 角 征典
リーダブルコードって?
『読みやすいコード』(※)
どうなったらリーダブ
ルなの?
誰が判断する
の?
(※)書籍から抜粋
これってリーダブル?
If ( !isNotEmpty(str)){
}else{
do();
} それって、なくはないよね
どっちがリーダブル?
リーダブルの定義
『コードは他の人が最短時
間で理解できるように書か
なければならない。』(※)
(※)書籍から抜粋
今日やりたいこと
他の人が最短の時間
で理解できるようなコード
の書き方を改めて見直す。
他の人のため?
コードの品質、何より
未来の自分のため
どうすればリーダブルになるか?
リーダブルにするための要素
• 名前
• コメント
• 制御フロー
• 処理の分割と構成
リーダブルにするための要素
•名前
• コメント
• 制御フロー
• 処理の分割と構成
情報をつめこむ。
誤解されない名前。
名前に情報をつめこむ
明確で正確な単語
ページを外部から読み込み取得する
× ○
名前で人のリストを検索する
×
○
名前に情報をつめこむ
より具体的な名前
文字列Listの中からヒットしたindexのリスト
を返す
×
○
DateからyyyyMMdd形式の文字列に変換
する。
×
○
名前に情報をつめこむ
プレフィックス
と
サフィックス
ファイルサイズをチェックする。
×
○
名前に情報をつめこむ
本当に省略してもい
いのか?
意味不明な省略
×
○
意味が伝わる省略
『新しいチームメイトはその名前の意味を理
解できるだろうか』
○
○
○
○
誤解を生まない名前を付ける
指定した文字列を含む要素を除外する
×
○
ファイル上限のサイズをチェックする
×
min, max / first, last (以上、以下) /
begin, end(以上、未満)
○
booleanの変数やメソッド名
×
○
is,has,can,shouldな
どを頭に
名前を付ける時のポイント
『名前に情報をつめこむ』(※)
–複数の名前の候補から正確
で明確なものを選ぶ
(※)書籍から抜粋
名前を付ける時のポイント
『最善の名前とは誤解されな
い名前である』(※)
–読み手が自分の意図を正しく理
解できる名前か
–他の人の意見も参考にする
(※)書籍から抜粋
リーダブルにするための要素
• 名前
•コメント
• 制御フロー
• 処理の分割と構成
・意図を伝える
・伝わりやすい形
意図を伝える
価値のないコメント
をしない
コードをみればすぐに分かること
×
不要な変更箇所コメント
×
むしろコードを直す
×
○
優れたコード
> > ひどいコード + 優れたコメント
意図を伝える
自分の考え
を記録する
コメンタリー
○
欠陥に対するコメント
○
定数値の背景
○
意図を伝える
読み手を意識
してコメントする
質問されそうなことへの回答をあらかじ
め書いておく
○
はまりそうな罠、
全体像に関するコメントなど
伝わりやすく
簡潔にコメントする
代名詞を使わない
歯切れをよくする。
『情報の密度を高める。』
×
○
○
伝わりやすく
正確に伝わる
コメントを書く
動作を正確に記述する
×
○
実例で補足する。
コメントを書く時のポイント
『コードの意図を読み手に
理解してもらう』 (※)
–無駄なコメントをしない
–自分の考えを記録
–読み手の立場で考える
(※)書籍から抜粋
コメントを書く時のポイント
『コメントは領域に対する情
報の比率が高くなければな
らない』 (※)
–簡潔に、正確に
(※)書籍から抜粋
リーダブルにするための要素
• 名前
• コメント
• 制御フロー
• 処理の分割と構成
・自然な流れで立ち止り、読み
返しをなくす
自然な流れ
条件式の引数
の並べ方
変化する方を左に置く。
調査対象(変化) 比較対象(固定)
×
○
×
○
自然な流れ
if/elseブロック
の並び
ifの条件を素直に
×
○
If-elseの条件は、
否定より肯定
自然な流れ
ガード節で
ネストを浅く
メソッドでは早めにリターン
×
メソッドでは早めにリターン
○
ループでは
break,continueで早
めに返す。
制御フローを書く時のポイント
『制御フローはできるだけ自
然にする。コードの読み手
が立ち止まったり読み返し
たりしないように書く』 (※)
(※)書籍から抜粋
リーダブルにするための要素
• 名前
• コメント
• 制御フロー
•処理の分割と構成
一度に1つのことをやるように分割
コードのレベルをそろえるように構成
一度に1つのことをやる
タスクを列挙
して
処理を分割する
『一度に1つのタスク』
コードのレベルをそろえる
無関係の下位問題
を
抽出する
『高レベルの目標に直接効果が
あるのか?』
処理の分割と構成をするポイント
『コードは1つずつタスクを行
なうようにしなければならな
い。』 (※)
– タスクの列挙
– 処理の分割
(※)書籍から抜粋
処理の分割と構成をするポイント
『無関係の下位問題を積極
的にみつけて抽出する』 (※)
– コードのレベルをそろえる
(※)書籍から抜粋
リーダブルにするための要素
名前
コメント
制御フロー
処理の分割と構成
まとめ
• リーダブル = 読みやすさ
• 読みやすさ = 理解しやすさ
• リーダブルなコードをかくと…
『やったもん勝ちなんや!!
やらんもんは…勝たれへん!』 (※)
(※)書籍から抜粋
ご清聴ありがとうございました。

More Related Content

What's hot

リーダブルコード勉強会
リーダブルコード勉強会リーダブルコード勉強会
リーダブルコード勉強会TAKUYA YAMAMOTO
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code readingHiro Yoshioka
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」Hiromu Shioya
 
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答Kiyoshi Sawada
 
第4部「Tddとペアプロのめざめ」
第4部「Tddとペアプロのめざめ」第4部「Tddとペアプロのめざめ」
第4部「Tddとペアプロのめざめ」Hiromu Shioya
 
わかる LT@2
わかる LT@2わかる LT@2
わかる LT@2Shingo Inoue
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」y torazuka
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラムamusementcreators
 
可読性について リーダブルコード Part2(ループとロジックの単純化)
可読性について リーダブルコード Part2(ループとロジックの単純化)可読性について リーダブルコード Part2(ループとロジックの単純化)
可読性について リーダブルコード Part2(ループとロジックの単純化)tak
 
可読性について リーダブルコード Part3(コードの再構築)
可読性について リーダブルコード Part3(コードの再構築)可読性について リーダブルコード Part3(コードの再構築)
可読性について リーダブルコード Part3(コードの再構築)tak
 
Haml 学習コース 初級編
Haml 学習コース 初級編Haml 学習コース 初級編
Haml 学習コース 初級編介翔 鈴木
 
できる!Pmdカスタマイズ
できる!Pmdカスタマイズできる!Pmdカスタマイズ
できる!PmdカスタマイズSatoshi Kubo
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみたKengo Toda
 
Javakuche yono
Javakuche yonoJavakuche yono
Javakuche yonoyono05
 
「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラスKoichiro Ohba
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?ichirin2501
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるpospome
 

What's hot (20)

リーダブルコード勉強会
リーダブルコード勉強会リーダブルコード勉強会
リーダブルコード勉強会
 
Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
 
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
EWD 3トレーニングコース#9 複雑なewd-xpressメッセージと応答
 
第4部「Tddとペアプロのめざめ」
第4部「Tddとペアプロのめざめ」第4部「Tddとペアプロのめざめ」
第4部「Tddとペアプロのめざめ」
 
わかる LT@2
わかる LT@2わかる LT@2
わかる LT@2
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム読みやすいプログラム、書き換えやすいプログラム
読みやすいプログラム、書き換えやすいプログラム
 
フォントのホント
フォントのホントフォントのホント
フォントのホント
 
可読性について リーダブルコード Part2(ループとロジックの単純化)
可読性について リーダブルコード Part2(ループとロジックの単純化)可読性について リーダブルコード Part2(ループとロジックの単純化)
可読性について リーダブルコード Part2(ループとロジックの単純化)
 
可読性について リーダブルコード Part3(コードの再構築)
可読性について リーダブルコード Part3(コードの再構築)可読性について リーダブルコード Part3(コードの再構築)
可読性について リーダブルコード Part3(コードの再構築)
 
Haml 学習コース 初級編
Haml 学習コース 初級編Haml 学習コース 初級編
Haml 学習コース 初級編
 
できる!Pmdカスタマイズ
できる!Pmdカスタマイズできる!Pmdカスタマイズ
できる!Pmdカスタマイズ
 
Shortcodin
ShortcodinShortcodin
Shortcodin
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
 
Javakuche yono
Javakuche yonoJavakuche yono
Javakuche yono
 
「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考えるGoのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
 

Viewers also liked

コーディング入門以前
コーディング入門以前コーディング入門以前
コーディング入門以前Yutaka Kinjyo
 
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめリーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめKouhei Sutou
 
実践リーダブルコードの概要
実践リーダブルコードの概要実践リーダブルコードの概要
実践リーダブルコードの概要Kouhei Sutou
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツShunji Konishi
 
オブジェクト指向やめましょう
オブジェクト指向やめましょうオブジェクト指向やめましょう
オブジェクト指向やめましょうなおき きしだ
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
Writing Readable Code
Writing Readable CodeWriting Readable Code
Writing Readable Codeeddiehaber
 
The art of readable code (ch1~ch4)
The art of readable code (ch1~ch4)The art of readable code (ch1~ch4)
The art of readable code (ch1~ch4)Ki Sung Bae
 
実践リーダブルコードのコードチェンジ
実践リーダブルコードのコードチェンジ実践リーダブルコードのコードチェンジ
実践リーダブルコードのコードチェンジKouhei Sutou
 
The Art Of Readable Code
The Art Of Readable CodeThe Art Of Readable Code
The Art Of Readable CodeBaidu, Inc.
 
コーディングがラクになる!? “自分仕様”のさくさくコーディング法
コーディングがラクになる!? “自分仕様”のさくさくコーディング法コーディングがラクになる!? “自分仕様”のさくさくコーディング法
コーディングがラクになる!? “自分仕様”のさくさくコーディング法Rico Sengan
 
Introduction to Docker (and a bit more) at LSPE meetup Sunnyvale
Introduction to Docker (and a bit more) at LSPE meetup SunnyvaleIntroduction to Docker (and a bit more) at LSPE meetup Sunnyvale
Introduction to Docker (and a bit more) at LSPE meetup SunnyvaleJérôme Petazzoni
 
技術系文書作成のコツ
技術系文書作成のコツ技術系文書作成のコツ
技術系文書作成のコツHideo Terada
 
nanapi IGNITIONチームの開発フローとその構築
nanapi IGNITIONチームの開発フローとその構築nanapi IGNITIONチームの開発フローとその構築
nanapi IGNITIONチームの開発フローとその構築晃 遠山
 
iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -Toshiyuki Hirata
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでKouhei Sutou
 
ソフトウェア受託開発の未来
ソフトウェア受託開発の未来ソフトウェア受託開発の未来
ソフトウェア受託開発の未来Yoshihito Kuranuki
 
成功したチームと成功しなかったチーム 20160608
成功したチームと成功しなかったチーム 20160608成功したチームと成功しなかったチーム 20160608
成功したチームと成功しなかったチーム 20160608Keiichi Endo
 

Viewers also liked (20)

コーディング入門以前
コーディング入門以前コーディング入門以前
コーディング入門以前
 
リーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめリーダブルコード勉強会 in 筑波大のまとめ
リーダブルコード勉強会 in 筑波大のまとめ
 
実践リーダブルコードの概要
実践リーダブルコードの概要実践リーダブルコードの概要
実践リーダブルコードの概要
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
 
オブジェクト指向やめましょう
オブジェクト指向やめましょうオブジェクト指向やめましょう
オブジェクト指向やめましょう
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
Writing Readable Code
Writing Readable CodeWriting Readable Code
Writing Readable Code
 
The art of readable code (ch1~ch4)
The art of readable code (ch1~ch4)The art of readable code (ch1~ch4)
The art of readable code (ch1~ch4)
 
実践リーダブルコードのコードチェンジ
実践リーダブルコードのコードチェンジ実践リーダブルコードのコードチェンジ
実践リーダブルコードのコードチェンジ
 
The Art Of Readable Code.
The Art Of Readable Code.The Art Of Readable Code.
The Art Of Readable Code.
 
The Art Of Readable Code
The Art Of Readable CodeThe Art Of Readable Code
The Art Of Readable Code
 
コーディングがラクになる!? “自分仕様”のさくさくコーディング法
コーディングがラクになる!? “自分仕様”のさくさくコーディング法コーディングがラクになる!? “自分仕様”のさくさくコーディング法
コーディングがラクになる!? “自分仕様”のさくさくコーディング法
 
Introduction to Docker (and a bit more) at LSPE meetup Sunnyvale
Introduction to Docker (and a bit more) at LSPE meetup SunnyvaleIntroduction to Docker (and a bit more) at LSPE meetup Sunnyvale
Introduction to Docker (and a bit more) at LSPE meetup Sunnyvale
 
Xp祭り2013
Xp祭り2013Xp祭り2013
Xp祭り2013
 
技術系文書作成のコツ
技術系文書作成のコツ技術系文書作成のコツ
技術系文書作成のコツ
 
nanapi IGNITIONチームの開発フローとその構築
nanapi IGNITIONチームの開発フローとその構築nanapi IGNITIONチームの開発フローとその構築
nanapi IGNITIONチームの開発フローとその構築
 
iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -iOSアプリ開発のCI環境 - Jenkins編 -
iOSアプリ開発のCI環境 - Jenkins編 -
 
Apache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject IntrospectionでApache ArrowのRubyバインディングをGObject Introspectionで
Apache ArrowのRubyバインディングをGObject Introspectionで
 
ソフトウェア受託開発の未来
ソフトウェア受託開発の未来ソフトウェア受託開発の未来
ソフトウェア受託開発の未来
 
成功したチームと成功しなかったチーム 20160608
成功したチームと成功しなかったチーム 20160608成功したチームと成功しなかったチーム 20160608
成功したチームと成功しなかったチーム 20160608
 

リーダブルコード勉強会