SlideShare a Scribd company logo
リーダブル
リーダブルコード

   2012年7⽉6⽇
      ⾓征典
 kdmsnr@gmail.com


        1/58
御礼
2012年7⽉5⽇10:47KOUKeikokeiko@oreilly.co.jpWrote:


     2週間⾜らずで4刷というのはすごい
   スピードです。




                          2/58
Ebook版は秋ごろ予定




     3/58
お詫び




 4/58
⾃⼰紹介



 @kdmsnr

   5/58
⾃⼰紹介訳書(1/2)
Martin Fowler's Bliki (2003)
    ↓
『アジャイルレトロスペクティブズ』 (2007)
    ↓
スクラムガイド (2010)
    ↓
『メタプログラミングRuby』 (2010)
    ↓
『ウェブオペレーション』 (2011)
    ↓
『Facebookマーケティング』 (2011)
    ↓

                6/58
⾃⼰紹介訳書(2/2)
   ↓
『Clean Coder』 (2012)
   ↓
『リーダブルコード』 (2012) ←【イマココ】
   ↓
『Service Design Patterns』 (2012)
   ↓
『Seven Databases in Seven Weeks』 (2012)
   ↓
『Running Lean』 (2012)
   ↓
『...』(2012?)

                   7/58
TheArtof
ReadableCode




      8/58
『リーダブルコード』
     これはもう「翻訳放棄」と⾔ってもよ
   いレベルですねぇ。⾮道過ぎます。

http://twitter.com/ytaniike/status/211060068035207170

                 違うよ。全然違うよ。




                         9/58
リーダブルコードの理由
  タイトルは、あえて『 リーダブルコー
ド』にした。これは「リーダブルコード 」
という聞きなれない⾔葉にすることで、読
んだ⼈に「リーダブルコード 」というもの
について注意して欲しいからだ。

http://www.clear-code.com/blog/2012/6/11.html


                     10/58
続リーダブルコードの理由
   「リファクタリング 」という⾔葉を使
 っていて、「コードをよくすること」がよ
 り当たり前になっている。それと同じよ
 うに、読みやすいコードを⾒たら「リーダ
 ブルでいいね!」ということが⾃然に⾔わ
 れるようになるといい。

 http://www.clear-code.com/blog/2012/6/11.html

                      11/58
名前重要
      リーダブルコードは本のタイトルで勝
    ちだよなぁ。(中略)どんなコード⽬指し
    てるかすぐわかるし。

http://twitter.com/chiastolite/status/219793852087808003
           誰だか知らないけどありがとう!!!!



                          12/58
じゃあ、どんなコード?
  リーダブルコードの基本定理

  コードは他の⼈が最短時間で理解でき
るように書かなければいけない。(p.3)




          13/58
ハァ?なんで?
「コードのよさは重要だ」は危うい前提

  読むに耐えないコードが⼤⾦を稼いで
いる場⾯を散々⽬にしてきたので、商業的
に成功したり、広く活⽤されたりするう
えで、コードの品質が必要だとも、それさ
えあれば⼗分だとも思えないからだ。

    『実装パターン』KentBeck
           14/58
でもやるんだよ!
 ……誇りの持てない仕事で無駄にする
時聞はない。よいコードを書くこと⾃体が
喜びであり、そのコードを他の⼈が理解し
、評価し、使⽤し、拡張してくれれば、さ
らに喜びは増す。

    『実装パターン』KentBeck


           15/58
2章名前に情報を詰め込む



      16/58
名前をつけるのは難しい
 簡単に誤解・誤読されちゃう!

  変数の名前を決定する際には、最初の
⼦供の名前を決めるときと同じくらいの配
慮が必要なのです(JimCope)

   『CleanCode』RobertC.Martin



               17/58
本章のアドバイス
明確で具体的な単語を選ぶ
汎⽤的な名前は避ける
単位や情報を名前に追加する
スコープの⼤きさを考慮する
フォーマット規約を使う

       18/58
最も基本的なこと
  式は⾃分で⾳読するつもりで書こう。

『プログラミング作法』BrianKernighan,RobPike


  発⾳可能な名前を使⽤する。

     『CleanCode』RobertC.Martin


                 19/58
retval(何て読むの?)
     汎⽤的な名前を避ける(p.12)

var eulidean_norm = function(v) {
    var retval = 0.0;
    for (var i = 0; i  v.length; i += 1) {
        retval += v[i] * v[i];
    }
    return Math.sqrt(retval);
}


                    20/58
[ネタ]詠太2で⾳読する
http://www.justsystems.com/jp/products/ichitaro/feature6.html

            ※Windowsじゃないと動きません。




                           21/58
読み⼿のことを考える
  相⼿を意識したときに、よい⽂章が⽣
まれるように、よいプログラムも読み⼿を
意識したときに⽣まれる。

    『実装パターン』KentBeck




           22/58
とは⾔っても、難しいよ



     23/58
5章コメントすべきこと



     24/58
必要なことはコードに書く
  私はだらしのないプログラマなので、
⾃分が担当したコードが、どのように書か
れていたのかまったく覚えていません 。…
…私は常に、覚えておくべき情報をコード
内に書き込んでおくことにしているので、
わざわざ覚える必要がないのです。

   『リファクタリング』MartinFowler

             25/58
コードがドキュメントだ
  ※写真はイメージです。




       26/58
でも、ないものは⾒えない
コミットする前のコード
使わなかった選択肢
却下された要望や提案
これからやること


       27/58
監督コメンタリー
       p.60
映画DVDの特典のように
説明・思い・裏話をコメントに書く
うまくいかなかったことも書く
疑問を先回りして埋めておく

        28/58
理由重要
  ⼈に何かを頼み事をするときには理由
を添えた⽅が成功しやすくなる

『影響⼒の武器[第⼆版]―なぜ、⼈は動かされるのか』




            29/58
理由は何でもいいらしい
◯すみません……急いでいるので、
先にコピーをとらせてくれませんか
?
×すみません……先にコピーをとら
せてくれませんか?
『影響⼒の武器[第⼆版]―なぜ、⼈は動かされるのか』



            30/58
「なんとなく」が⼀番困る
「どうしてこうなってるんですか?」
「なにがですか」
「ここのコードが」
「ああ、なんとなくですよ」
「えっ」
「えっ」
「……」
「……」




            31/58
こじつけでも、つじつまが
合えばそれにこしたことは
    ない!!


     32/58
思考の断⽚を刻む場所
(コードではないかもだけど……)
コミットの情報
 須藤先⽣の「解説」も参考に
 チケット駆動開発(Ref,Fix,Close)

ドキュメント
 ReVIEW(ステマ)
 http://github.com/kmuto/review
 Sphinx
               33/58
たいせつなTODO.md
  多くのデベロッパは、この種の観察作
業のために簡単なtodoリストを作って
いる。

 『テスト駆動JavaScript』ChristianJohansen




                 34/58
TODO.mdの例
# 商品関連
* 在庫のトランザクション。楽観的ロックでいいの?

#   管理画⾯
*   Admin::ApplicationControllerにBasic認証
*   Twitter Bootstrap使うかもしれない
*   ■ Deviseのカスタマイズ → できたけど微妙

# 画像リサイズ
* ■ RMagicでやる → できた!



                     35/58
ドキュメント読まれないし
それでも「ポステルの法則」を参考に

  受信するものには寛容に、送信するも
のには慎重に

 http://ja.wikipedia.org/wiki/ジョン・ポステル




                  36/58
12章コードに
 思いを込める



   37/58
アインシュタインの⾔葉
       p.158

  おばあちゃんがわかるように説明でき
なければ、本当に理解したとは⾔えない。




         38/58
テディベアやアヒルちゃん
    に説明してみる(p.165)




『プログラミング作法』や『達⼈プログラマ』にも記述がある

             39/58
説明内容をコメントに書く
      (すごく⼿続き的だけど)
# originalディレクトリのhtmlファイルから

# code.literalの要素を削除する
# (ってか、Nokogiriの使い⽅わからねえ)

# それから、ファイルをテキスト形式に置き換えて

# ワード数を数える



               40/58
その下にコードを書く
# originalディレクトリのhtmlファイルから
Dir.glob(original/*.html).each do |html|
  doc = Nokogiri.HTML open(html)
  # code.literalの要素を削除する
  # (ってか、Nokogiriの使い⽅わからねえ)→できた
  doc.search(//code[@class='literal]).remove
  # それから、ファイルをテキスト形式に置き換えて
  text = doc.css(body).text
  # ワード数を数える
  wc = text.split.size
end


                    41/58
整形する
def count_word_in_html_files
  word_count = 0
  Dir.glob(original/*.html).each do |html|
    doc = Nokogiri.HTML open(html)
    doc.search(//code[@class='literal]).remo
    text = doc.css(body).text
    word_count = text.split.size
  end
  return word_count
end



                    42/58
説明とコードを可逆に
あまり⼤きなリファクタリングはしない

  読む側の少し上を⾏くのはよいが、あ
まり複雑すぎると、相⼿にされなくなって
しまう。

    『実装パターン』KentBeck



           43/58
例:本体のないif⽂
              p.159
//   権限があるのは、以下の2つ
//   1) 管理者
//   2) ⽂書の所有者(⽂書がある場合)
//   その他は、権限がない。




                44/58
例:本体のないif⽂
            p.159
// 権限を確認する
if (is_admin_request()) {
    // 1) 管理者は権限あり
} else if (...) {
    // 2) ⽂書の所有者は権限あり(⽂書がある場合)
} else {
    // その他は、権限がない。
   return not_authorized();
}


              45/58
⾃分の思いを込める前に
  その分野ですでにどんなことが解明さ
れているかを調べてみなければならない。
さもないと、優れた⼿法がすでに存在す
るのに、⾃⼰流の下⼿なやり⽅を考案する
のに時間を無駄にするはめになるからだ。

『プログラミング作法』BrianKernighan,RobPike


                 46/58
例えば、どういうふうに?



     47/58
13章短いコードを書く



     48/58
APIをぜんぶ読む
                     p.172

    yugui:Javaを覚えるとき『プログラミ
  ング⾔語Java』を読んで、それからリファ
  レンスマニュアルを頭から全部読みまし
  た。

http://www.atmarkit.co.jp/news/200907/24/ruby2.html


                        49/58
不要な要求を削除する
              p.168

  DOorDONOT.ThereisnoTRY.
やるか、やらぬかじゃ。試しなどいらん。

ヨーダの⾔葉(『CleanCoder』RobertC.Martin)




                 50/58
[余談]試しにやってみる
  「試しにやってみる」は前向きな感じ
がする。でも、それで何か「できた」ので
あれば、それまで⼒を温存していたことに
なる。

   『CleanCoder』RobertC.Martin



                51/58
あれ?
  だんだん
コードの話から
 離れてきた




   52/58
名著を読もう!
  p.218




   53/58
リーダブルコード
もよろしくお願いします。




     54/58
ぼくのかんがえた
 さいきょうの
リーダブルコード


   55/58
やり⽅
1. みんなでコードについて話し合う
2. 須藤先⽣の「ぼくならこう書く」
3. 質疑応答
   ※これを3ラウンド繰り返します。




          56/58
お題
0.   github.com/dproject21/yaruo_tdd_triangle
1.   github.com/mataki/fast_spork_runner
2.   github.com/randym/axlsx
3.   github.com/todesking/okura

          ※「0」のお題でやり⽅を説明します。




                      57/58
ENJOY!!




   58/58

More Related Content

What's hot (20)

PPTX
継続的インテグレーション3分クッキング
Takayuki Kondou
 
PDF
OpenJDK トラブルシューティング #javacasual
Yuji Kubota
 
KEY
Bundler kanazawa.rb meetup #2 2012/09/19
Hitoshi Kurokawa
 
PDF
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
 
PDF
インフラ自動化とHashicorp tools
Uchio Kondo
 
PDF
楽して JVM を学びたい #jjug
Yuji Kubota
 
PDF
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
torutk
 
PDF
レビューで保守性のためにした コメントをふりかえってみた
Takhisa Hirokawa
 
PPTX
ゲームインフラコンテナ実践導入
Hiroki Tamiya
 
PDF
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
ODP
Programming camp Codereading
Hiro Yoshioka
 
PDF
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
 
PDF
Android起動周りのノウハウ
chancelab
 
PDF
Task Spooler を試した
y-uti
 
PDF
minneで学ぶクラウド脳
Uchio Kondo
 
PDF
Xilinx SDSoC(2016.3)解体新書ソフトウェア編
Mr. Vengineer
 
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
 
PDF
Jvm言語とJava、切っても切れないその関係
yy yank
 
PDF
Nseg20120825
hiro345
 
PPTX
ゼロから始める自作 CPU 入門
Hirotaka Kawata
 
継続的インテグレーション3分クッキング
Takayuki Kondou
 
OpenJDK トラブルシューティング #javacasual
Yuji Kubota
 
Bundler kanazawa.rb meetup #2 2012/09/19
Hitoshi Kurokawa
 
Kink: プロトタイプベースの俺々 JVM 言語
Taku Miyakawa
 
インフラ自動化とHashicorp tools
Uchio Kondo
 
楽して JVM を学びたい #jjug
Yuji Kubota
 
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
torutk
 
レビューで保守性のためにした コメントをふりかえってみた
Takhisa Hirokawa
 
ゲームインフラコンテナ実践導入
Hiroki Tamiya
 
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
 
Programming camp Codereading
Hiro Yoshioka
 
Java SE 9の紹介: モジュール・システムを中心に
Taku Miyakawa
 
Android起動周りのノウハウ
chancelab
 
Task Spooler を試した
y-uti
 
minneで学ぶクラウド脳
Uchio Kondo
 
Xilinx SDSoC(2016.3)解体新書ソフトウェア編
Mr. Vengineer
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
 
Jvm言語とJava、切っても切れないその関係
yy yank
 
Nseg20120825
hiro345
 
ゼロから始める自作 CPU 入門
Hirotaka Kawata
 

Viewers also liked (10)

PDF
闇深めだったサービスのスタイルガイド作成までの真実
Yuriko Okabe
 
PDF
PHP 2大 web フレームワークの徹底比較!
Shohei Okada
 
PDF
プロダクトに 1 から Vue.js を導入した話
Shohei Okada
 
PDF
とにかく楽してVue.jsでTypeScriptを使いたい
さくらインターネット株式会社
 
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
 
PPTX
スタートアップの失敗を90%減らす10のポイント
Masa Tadokoro
 
PDF
片手間MySQLチューニング戦略
yoku0825
 
PDF
エンジニアのための経営学
Michitaka Yumoto
 
PDF
If文から機械学習への道
nishio
 
PPTX
本当は恐ろしい分散システムの話
Kumazaki Hiroki
 
闇深めだったサービスのスタイルガイド作成までの真実
Yuriko Okabe
 
PHP 2大 web フレームワークの徹底比較!
Shohei Okada
 
プロダクトに 1 から Vue.js を導入した話
Shohei Okada
 
とにかく楽してVue.jsでTypeScriptを使いたい
さくらインターネット株式会社
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
 
スタートアップの失敗を90%減らす10のポイント
Masa Tadokoro
 
片手間MySQLチューニング戦略
yoku0825
 
エンジニアのための経営学
Michitaka Yumoto
 
If文から機械学習への道
nishio
 
本当は恐ろしい分散システムの話
Kumazaki Hiroki
 
Ad

Similar to 20120706-readablecode (20)

PPTX
リーダブルコード 1.0'
Yamamura Takashi
 
KEY
リーダブルコード
Keita Otsuka
 
PDF
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 
PDF
リーンなコードを書こう:実践的なオブジェクト指向設計
増田 亨
 
PDF
Code Anything
Yoshitaka Kawashima
 
PPTX
良いコードとは
Nobuyuki Matsui
 
PDF
ソースコードの品質向上のための効果的で効率的なコードレビュー
Moriharu Ohzu
 
PDF
わかるコードを書くために For writing clean code
Eyes, JAPAN
 
PDF
20091030 Uncle Bob Said You Should Be A Professional With Clean Code
Koji SHIMADA
 
KEY
201207 ssmjp
th0x0472
 
PDF
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
 
PDF
Scala conf2013
Takafumi Ikeda
 
PPT
レガシーコード改善ガイド読書会
Hiro Yoshioka
 
PDF
プログラミング入門
Kenji Azami
 
PDF
Programming camp code reading
Hiro Yoshioka
 
PDF
アジャイルソフトウェア開発の道具箱
Koichi ITO
 
PDF
エンジニアがとるべき8つの行動
Hiroshi Ogino
 
PDF
テスト分析はじめの一歩 公開版
Asuka (飛鳥) Kamijo (上條)
 
PDF
良い?悪い?コードコメントの書き方
Shigenori Sagawa
 
PPT
第1回java実習(helloworld)2011
デジタルシープラーニング
 
リーダブルコード 1.0'
Yamamura Takashi
 
リーダブルコード
Keita Otsuka
 
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 
リーンなコードを書こう:実践的なオブジェクト指向設計
増田 亨
 
Code Anything
Yoshitaka Kawashima
 
良いコードとは
Nobuyuki Matsui
 
ソースコードの品質向上のための効果的で効率的なコードレビュー
Moriharu Ohzu
 
わかるコードを書くために For writing clean code
Eyes, JAPAN
 
20091030 Uncle Bob Said You Should Be A Professional With Clean Code
Koji SHIMADA
 
201207 ssmjp
th0x0472
 
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
 
Scala conf2013
Takafumi Ikeda
 
レガシーコード改善ガイド読書会
Hiro Yoshioka
 
プログラミング入門
Kenji Azami
 
Programming camp code reading
Hiro Yoshioka
 
アジャイルソフトウェア開発の道具箱
Koichi ITO
 
エンジニアがとるべき8つの行動
Hiroshi Ogino
 
テスト分析はじめの一歩 公開版
Asuka (飛鳥) Kamijo (上條)
 
良い?悪い?コードコメントの書き方
Shigenori Sagawa
 
第1回java実習(helloworld)2011
デジタルシープラーニング
 
Ad

More from Masanori Kado (20)

PPTX
優れた研究提案書の書き方
Masanori Kado
 
PPTX
優れた研究論文の書き方
Masanori Kado
 
PDF
Tokyo-Tech 2017 EDP-A #3 Prototype and Test
Masanori Kado
 
PDF
2017-07-19 エンタープライズアジャイル勉強会「リーンエンタープライズ」
Masanori Kado
 
PDF
Tokyo-Tech 2017 EDP-A #2 Ideate & Prototype
Masanori Kado
 
PDF
Tokyo-Tech 2017 EDP-A #1 Team Building
Masanori Kado
 
PDF
プロトタイピングとユーザーテスト
Masanori Kado
 
PDF
実践リーンエンタープライズ(20161027)
Masanori Kado
 
PDF
データからインサイト そして、アイデアの発想へ(CJM/POV/HMW)
Masanori Kado
 
PDF
データからインサイト そして、アイデアの発想へ(KJ法)
Masanori Kado
 
PDF
データからインサイト そして、アイデアの発想へ(タスク管理)
Masanori Kado
 
PDF
20160924 edp-b teambuilding
Masanori Kado
 
PDF
中高生のための夏休みプログラミング教室
Masanori Kado
 
PDF
hacku-titech-2016-briefing
Masanori Kado
 
PDF
ideathon 20160325
Masanori Kado
 
PDF
The Lego Scrum Awakens
Masanori Kado
 
PDF
デザイン思考のためのアイスブレイク
Masanori Kado
 
PDF
アジャイル開発のススメ@香川大学
Masanori Kado
 
PPTX
優れた研究論文の書き方―7つの提案
Masanori Kado
 
PDF
改善の型 コーチングの型
Masanori Kado
 
優れた研究提案書の書き方
Masanori Kado
 
優れた研究論文の書き方
Masanori Kado
 
Tokyo-Tech 2017 EDP-A #3 Prototype and Test
Masanori Kado
 
2017-07-19 エンタープライズアジャイル勉強会「リーンエンタープライズ」
Masanori Kado
 
Tokyo-Tech 2017 EDP-A #2 Ideate & Prototype
Masanori Kado
 
Tokyo-Tech 2017 EDP-A #1 Team Building
Masanori Kado
 
プロトタイピングとユーザーテスト
Masanori Kado
 
実践リーンエンタープライズ(20161027)
Masanori Kado
 
データからインサイト そして、アイデアの発想へ(CJM/POV/HMW)
Masanori Kado
 
データからインサイト そして、アイデアの発想へ(KJ法)
Masanori Kado
 
データからインサイト そして、アイデアの発想へ(タスク管理)
Masanori Kado
 
20160924 edp-b teambuilding
Masanori Kado
 
中高生のための夏休みプログラミング教室
Masanori Kado
 
hacku-titech-2016-briefing
Masanori Kado
 
ideathon 20160325
Masanori Kado
 
The Lego Scrum Awakens
Masanori Kado
 
デザイン思考のためのアイスブレイク
Masanori Kado
 
アジャイル開発のススメ@香川大学
Masanori Kado
 
優れた研究論文の書き方―7つの提案
Masanori Kado
 
改善の型 コーチングの型
Masanori Kado
 

Recently uploaded (7)

PDF
20250711JIMUC総会_先進IT運用管理分科会Connpass公開資料.pdf
ChikakoInami1
 
PDF
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
PPTX
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
iPride Co., Ltd.
 
PDF
Google Driveハブ型Obsidian同期環境:PC編集とモバイル閲覧を安全・効率的に実現するクロスデバイス構築ガイド
honeshabri
 
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
PDF
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 
PDF
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 
20250711JIMUC総会_先進IT運用管理分科会Connpass公開資料.pdf
ChikakoInami1
 
20250711_日本IBM ミドルウエア・ユーザー研究会(JIMUC)総会_中村会長資料.pdf
ChikakoInami1
 
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
iPride Co., Ltd.
 
Google Driveハブ型Obsidian同期環境:PC編集とモバイル閲覧を安全・効率的に実現するクロスデバイス構築ガイド
honeshabri
 
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
NTT DATA Technology & Innovation
 
20250717_Devin×GitHubCopilotで10人分の仕事は出来るのか?.pdf
Masaki Yamakawa
 
20250711JIMUC総会IBM Automation_Platform最新情報_Connpass公開版.pdf
ChikakoInami1
 

20120706-readablecode