Upload
masanori-kado
View
8.066
Download
0
Embed Size (px)
Citation preview
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
The�Art�of�Readable�Code
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
ハァ?なんで?「コードのよさは重要だ」は危うい危うい前提
読むに耐えないコードが⼤⾦を稼いで読むに耐えないコードが⼤⾦を稼いでいる場⾯を散々⽬にしてきたのでいる場⾯を散々⽬にしてきたので、商業的に成功したり、広く活⽤されたりするうえで、コードの品質が必要だとも、それさえあれば⼗分だとも思えないからだ。
『実装パターン』Kent�Beck14/58
でもやるんだよ!……誇りの持てない仕事で無駄にする
時聞はない。よいコードを書くこと⾃体がよいコードを書くこと⾃体が喜び喜びであり、そのコードを他の⼈が理解し、評価し、使⽤し、拡張してくれれば、さらに喜びは増す。
『実装パターン』Kent�Beck
15/58
2章�名前に情報を詰め込む2章�名前に情報を詰め込む
16/58
名前をつけるのは難しい簡単に誤解・誤読されちゃう!
変数の名前を決定する際には、最初の最初の⼦供の名前を決めるときと同じくらい⼦供の名前を決めるときと同じくらいの配慮が必要なのです(Jim�Cope)
『Clean�Code』Robert�C.�Martin
17/58
本章のアドバイス明確で具体的な単語を選ぶ汎⽤的な名前は避ける単位や情報を名前に追加するスコープの⼤きさを考慮するフォーマット規約を使う
18/58
最も基本的なこと式は⾃分で⾳読⾳読するつもりで書こう。
『プログラミング作法』Brian�Kernighan,�Rob�Pike
発⾳可能発⾳可能な名前を使⽤する。
『Clean�Code』Robert�C.�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
読み⼿のことを考える相⼿を意識したときに、よい⽂章が⽣
まれるように、よいプログラムも読み⼿をよいプログラムも読み⼿を意識したときに⽣まれる意識したときに⽣まれる。
『実装パターン』Kent�Beck
22/58
とは⾔っても、難しいよ
23/58
5章�コメントすべきこと5章�コメントすべきこと
24/58
必要なことはコードに書く私はだらしのないプログラマなので、
⾃分が担当したコードが、どのように書かれていたのかまったく覚えていませんまったく覚えていません。……私は常に、覚えておくべき情報をコードコード内に書き込んでおく内に書き込んでおくことにしているので、わざわざ覚える必要がないのです。
『リファクタリング』Martin�Fowler
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/reviewSphinx
33/58
たいせつなTODO.mdTODO.md多くのデベロッパは、この種の観察作
業のために簡単なto�doリスト簡単なto�doリストを作っている。
『テスト駆動JavaScript』Christian�Johansen
34/58
TODO.mdTODO.mdの例# 商品関連* 在庫のトランザクション。楽観的ロックでいいの?
# 管理画⾯* Admin::ApplicationControllerにBasic認証* Twitter Bootstrap使うかもしれない* ■ Deviseのカスタマイズ → できたけど微妙
# 画像リサイズ* ■ RMagicでやる → できた!
35/58
ドキュメント読まれないしそれでも「ポステルの法則」を参考に
受信するものには寛容に、送信するものには慎重に
http://ja.wikipedia.org/wiki/ジョン・ポステル
36/58
12章�コードに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.sizeend
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]").remove text = doc.css("body").text word_count = text.split.size end return word_countend
42/58
説明とコードを可逆可逆にあまり⼤きなリファクタリングはしない
読む側の少し上少し上を⾏くのはよいが、ああまり複雑すぎると、相⼿にされなくなってまり複雑すぎると、相⼿にされなくなってしまうしまう。
『実装パターン』Kent�Beck
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
⾃分の⾃分の思いを込める前にその分野ですでにどんなことが解明さ
れているかを調べてみなければならない。さもないと、優れた⼿法がすでに存在す優れた⼿法がすでに存在するるのに、⾃⼰流の下⼿なやり⽅⾃⼰流の下⼿なやり⽅を考案するのに時間を無駄にするはめになるからだ。
『プログラミング作法』Brian�Kernighan,�Rob�Pike
46/58
例えば、どういうふうに?
47/58
13章�短いコードを書く13章�短いコードを書く
48/58
APIをぜんぶ読むp.172
yuguiyugui:�Javaを覚えるとき『プログラミング⾔語Java』を読んで、それからリファリファレンスマニュアルを頭から全部読みましレンスマニュアルを頭から全部読みましたた。
http://www.atmarkit.co.jp/news/200907/24/ruby2.html
49/58
不要な要求を削除するp.168
DO�or�DO�NOT.�There�is�no�TRY.やるか、やらぬかじゃ。試しなどいらん試しなどいらん。
ヨーダの⾔葉(『Clean�Coder』Robert�C.�Martin)
50/58
[余談余談]試しにやってみる「試しにやってみる」は前向きな感じ
がする。でも、それで何か「できた」のであれば、それまで⼒を温存していたことになる。
『Clean�Coder』Robert�C.�Martin
51/58
あれ?だんだん
コードの話から離れてきた
52/58
名著を読もう!p.218
53/58
リーダブルコードもよろしくお願いします。
54/58
ぼくのかんがえたぼくのかんがえたさいきょうのさいきょうの
リーダブルコードリーダブルコード
55/58
やり⽅やり⽅1.� みんなでコードについて話し合う2.� 須藤先⽣の「ぼくならこう書く」3.� 質疑応答
※これを3ラウンド繰り返します。※これを3ラウンド繰り返します。
56/58
お題お題0. github.com/dproject21/yaruo_tdd_triangle1. github.com/mataki/fast_spork_runner2. github.com/randym/axlsx3. github.com/todesking/okura
※「0」のお題でやり⽅を説明します。※「0」のお題でやり⽅を説明します。
57/58
ENJOY!!
58/58