『リーダブルコード − 忘れてもいいコードを書こう。』に参加してきた #devlove
- 7月6日 リーダブルコード − 忘れてもいいコードを書こう。(東京都)
- 書籍『リーダブルコード』発売後の反響つぶやきまとめ - Togetter
- 2012/07/06 リーダブルコード − 忘れてもいいコードを書こう。#devlove - Togetter
今回のDevLOVEのテーマは、リーダブルコード です。 「リーダブルコード」がより多くの人が普通に使う言葉となるよう Oreillyのリーダブルコードの発刊にあわせて、企画しました。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
- 購入: 68人 クリック: 1,802回
- この商品を含むブログ (140件) を見る
The Art of Readable Code: Simple and Practical Techniques for Writing Better Code
- 作者: Dustin Boswell,Trevor Foucher
- 出版社/メーカー: O'Reilly Media
- 発売日: 2011/11/26
- メディア: ペーパーバック
- クリック: 7回
- この商品を含むブログを見る
最初に、翻訳者の角征典さんより「私と良いコード」というテーマで 発表を頂きます。その後、サンプルコードをもとに参加者同士で これはリーダブルコードなのかどうか、どうすればリーダブルコード となるかをディスカッションする時間を設けました。 皆さんが検討した後に、コードを添削解説するのはもちろん、 須藤功平さんです。 この企画を通し、リーダブルコードが現場に生まれ、多くの人々に 読み継がれることを、願う。
先月の発売後、かなりの勢いで増刷を重ね、書店で手に入れるのも現状かなり大変な状況となっている書籍『リーダブルコード』。
この日企画: Oreilly & DevLOVE 共同企画という形で書籍販売記念イベントが開催されていたので、事前に書籍を購入→目を通し、参加してきました!
(※ちなみに参加定員50名は速攻で埋まってしまっていました。ここにも書籍の人気の高さが伺えますね。
開催会場は株式会社インターネットイニシアティブ@神保町。個人的には、社会人以降、家のネット回線プロバイダとして現在まで長〜く利用させて頂いております。(*^_^*) ありがとうございます、IIJ!
(※関係無いが、行きの最寄り駅(神保町)で目にした『もやしもん』の広告。)
また、会場内には書籍『リーダブルコード』を含めた関連書籍の販売所も設けられておりました。
講演:「私と良いコード」改め『リーダブル リーダブルコード』
- 20120706-readablecode
- View more presentations from Masanori Kado
- 『お足元の悪い中、お越し頂きありがとうございます。』
- 早速第4刷決定!
- eBook版に関しては秋頃の発売を予定。
- お詫び:現在第1刷、第2刷分については情報あり。詳細は以下の情報を御参照下さい。
- 自己紹介
- 『リーダブルじゃないTwitterIDです』
- 本業はプログラマ。
- 訳書多数。
- 作者: Robert C. Martin,角征典
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2012/01/27
- メディア: 大型本
- 購入: 12人 クリック: 645回
- この商品を含むブログ (36件) を見る
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2010/08/28
- メディア: 大型本
- 購入: 18人 クリック: 533回
- この商品を含むブログ (125件) を見る
アジャイルレトロスペクティブズ 強いチームを育てる「ふりかえり」の手引き
- 作者: Esther Derby,Diana Larsen,角征典
- 出版社/メーカー: オーム社
- 発売日: 2007/09/01
- メディア: 単行本
- 購入: 10人 クリック: 1,282回
- この商品を含むブログ (117件) を見る
ウェブオペレーション ―サイト運用管理の実践テクニック (THEORY/IN/PRACTICE)
- 作者: John Allspaw,Jesse Robbins,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/05/14
- メディア: 大型本
- 購入: 10人 クリック: 923回
- この商品を含むブログ (50件) を見る
その他年内発売予定の訳書も数冊待ち構えているらしいです。以下は原著。併せてもう1冊、翻訳を進めている書籍があるとの事ですがこちらについては書籍名等は秘密のまま。進行中の書籍共々発売が楽しみですね。
- 作者: Robert Daigneau
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2011/10/25
- メディア: ハードカバー
- クリック: 4回
- この商品を含むブログを見る
Seven Databases in Seven Weeks: A Guide to Modern Databases and the NoSQL Movement
- 作者: Eric Redmond,Jim Wilson
- 出版社/メーカー: Pragmatic Bookshelf
- 発売日: 2012/05/21
- メディア: ペーパーバック
- クリック: 3回
- この商品を含むブログ (1件) を見る
Running Lean: Iterate from Plan A to a Plan That Works (Lean Series)
- 作者: Ash Maurya
- 出版社/メーカー: O'Reilly Media
- 発売日: 2012/03/09
- メディア: ハードカバー
- クリック: 3回
- この商品を含むブログ (4件) を見る
- 原著タイトル:『The Art of Readable Code』から翻訳版タイトル:『リーダブルコード』へ
- 名前重要
- じゃあ、どんなコード?
- リーダブルコードの基本定理
コードは他の人が最短時間で理解できるように書かなければいけない。(書籍P.3)
- ハァ?なんで?
- コードの良さは重要だ…は危うい前提
... 読むに耐えないコードが大金を稼いでいる場面を散々目にしてきたので...
- 作者: ケント・ベック,Kent Beck,永田渉,長瀬嘉秀,株式会社テクノロジックアート
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2008/12/22
- メディア: 単行本(ソフトカバー)
- 購入: 30人 クリック: 502回
- この商品を含むブログ (90件) を見る
- でも、やるんだよ!
- 良いコードを書くこと自体が喜び。
- 色々言っても結局徒労に終わる部分も。結局自分でやるしかない。
- 作者: ケント・ベック,Kent Beck,永田渉,長瀬嘉秀,株式会社テクノロジックアート
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2008/12/22
- メディア: 単行本(ソフトカバー)
- 購入: 30人 クリック: 502回
- この商品を含むブログ (90件) を見る
- 2章:名前に情報を埋め込む
- 名前をつけるのは難しい。子供の名前をつける時くらいに真剣に。
- 最も基本的なこと
- 式は自分で音読するつもりで書こう。
- 作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博
- 出版社/メーカー: アスキー
- 発売日: 2000/11
- メディア: 単行本
- 購入: 58人 クリック: 1,152回
- この商品を含むブログ (209件) を見る
…あれ?これショウ君の声じゃね?w (でもイベント当日はソースコードを女性の声で読み上げておりました。ソフト自体に幾つか音声が入ってるのかな?)
やべぇ、これ欲しくなってきたかも(笑)
- 出版社/メーカー: ジャストシステム
- 発売日: 2012/02/10
- メディア: DVD-ROM
- クリック: 9回
- この商品を含むブログを見る
- 読み手の事を考えよう。...とは言っても難しいよ。
- 5章:コメントすべきこと
- 必要なことはコードに書く
- 覚えておくべき情報をコード内に書き込んでおく事…
- コードがドキュメントだ。
- でも、無いものは見えない
- コミットする前のコード
- 使わなかった選択肢
- 却下された要望や提案
- 必要なことはコードに書く
- 監督コメンタリー(書籍 P.60)
- 映画DVDの特典のように
- 説明・思い・裏話をコメントに書く
- うまく行かなかった事も書く
- 疑問を先回りして埋めておく
- 理由重要
- 影響力と武器
- 理由は何でもいいらしい
- [◎]すみません、急いているので、先にコピーを…
- [×]すみません、先にコピーを取らせてもらえませんか‥?
- 理由をつけたもん勝ち。【なんとなく】というのが一番困る
- 思考の断片を刻む場所
- コードではないかもだけど…
- コミットの情報
- ドキュメント
- コードではないかもだけど…
- 大切なTODO.md
- 多くのデベロッパはこの種の観察作業の為に簡単なtodoリストを作っている。
- 作者: Christian Johansen,長尾高弘
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2011/11/25
- メディア: 大型本
- 購入: 19人 クリック: 331回
- この商品を含むブログを見る
- ドキュメント書いても読まれないし
- それでも『ポステルの法則』を参考に
- 受信するものには寛容に、送信するものには慎重に
- 12章 コードに思いを込める
- 以下のアインシュタインの言葉
おばあちゃんがわかるように説明できないと、本当に理解したとは言えない。
- 作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博
- 出版社/メーカー: アスキー
- 発売日: 2000/11
- メディア: 単行本
- 購入: 58人 クリック: 1,152回
- この商品を含むブログ (209件) を見る
- 作者: アンドリューハント,デビッドトーマス,Andrew Hunt,David Thomas,村上雅章
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/11
- メディア: 単行本
- 購入: 42人 クリック: 1,099回
- この商品を含むブログ (347件) を見る
- コードの書き方
- 1.説明内容をコメントに書く
- 2.その下にコードを書く
- 3.整形する
- 説明とコードを可逆に
- あまり大きなリファクタリングはしない
- 読む側の少し上をいくのはいいが、あまり複雑すぎると...(実装パターン)
- 例:本体の無いif文
- あまり大きなリファクタリングはしない
Javaを覚えるとき「プログラミング言語Java」を読んで、それからリファレンスマニュアルを頭から全部読みました。
-
- 不要な要求を削除する(P.168)
Do or DO NOT . There is no TRY やるかやらぬかじゃ。試しなどいらん。
- 余談:試しにやってみる
『試しにやってみる』は前向きな感じがする。でも、それで何か『できた』のであれば、それまで力を温存していた事になる。
- 作者: Robert C. Martin,角征典
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2012/01/27
- メディア: 大型本
- 購入: 12人 クリック: 645回
- この商品を含むブログ (36件) を見る
色々な書籍や格言に言及されており、それだけで聞いててとても楽しくなる講演内容でした。
そしてそのまま、休憩無しでディスカッションのコーナーへ。
ディスカッション:「ぼくのかんがえたさいきょうのリーダブルコード」
- コード解説&質疑応答:須藤 功平氏
1. サンプルコードに対し参加者同士でどうすればリーダブルコードとなるか、ディスカッションを行います。 2. 須藤功平氏によるコード解説&質疑応答 ※このラウンドを3回繰り返します
このディスカッションでは、
- 1.みんなでコードについて話し合う
- 2.須藤先生のぼくならこう書く
- 3.質疑応答
というサイクルを計3回実施しました。
コンセプトはこういう感じで。
このディスカッションに先立ち、告知ページ経由で『githubアカウントのソースコードをレビューする際の題材にさせて欲しい』というやり取りが運営側と参加者側であり、結果選ばれたのは以下の4つのアカウント。
そして、アカウントを4つ選んだ理由としては以下のような基準だったそうです。
- ここ1ヶ月くらいにコミットがあること。
- イニシャルコミットだけじゃないこと。
- Forkじゃなくて自分のプロジェクトであること。
- リリースされたプロジェクトであること。
- 今回のレビューの観点からWebアプリ系フレームワークとかは外している。(フレームワークのコード内容を見たい訳では無いので)
偶然なのか、選ばれたソースコードは全て『Ruby』。自分も事前にメールで通知された際には『あれ〜?』と不思議に思ったのですが、これについては
との須藤さんからの厳しいお言葉。反省ですね…(U_U;)w
進行については0.の題材で角さん&須藤さんが『演劇』でやってみせる(そしてそれを生暖かく見守る)→以降1〜3について[参加者同士がディスカッション、質疑応答]×3セットという流れ。以下はその際のメモです。
0.yaruo_tdd_triangle / triangle.rb
- コードが詰まってますね〜(※メソッド間に空白が無い)。コード間が空いてないと読みにくい。(須藤さん)→スペースを入れた
- ホワイトスペースが空いてないのが気になります。(※同じような表記で == 周りのスペースが空いてるとこと空いてないとこが混在していた)→同じ体裁になるように調整
- rubyだとisとか使いたくないよね〜→置き換える。
- いいところも褒めよう!(須藤さん)
- スペースが入ってないのが気になる。一貫性を求める。
- 同じような事をする場合は同じように書く。
- 一貫性の観点で見ると
- 最後だけキャメルケースになってるのが気になる。
- Returnを1箇所だけ使ってるのが気になる。
- Unlessを使ってるのは必要の無いコードである
- コードの意味を把握する前に、見た目の整備をしておきたい。
- 読みやすいコード:という観点であれば、フォーマットとかは些細な問題では?(※ここまでの指摘事項に対し)
- 対して須藤さん
- いや、大事なことですよ!
- 一見本質じゃない所をちゃんとする→本質に集中する事が出来る、というのが私の考え。
- でも『コードの意図はどこだろう?』と考えるのも大事です。
- まぁ、(小芝居の流れとして)段階的な部分もあったので.. (角さん)
1.mataki / fast_spork_runner
ここからはチーム(テーブル)間でディスカッション開始。チーム間で出たのはこの辺のポイントでした。指摘と言うよりも『へぇ、Rubyってこう書くんだ〜』というポイントへの言及が多かったような気がします。(4人中3人Java、残る1人がRubyという状況だったので。というか、そのRubyの方がソースコード提供者という偶然(笑)もあり、経緯とかコードのRuby解説的なお話を聞いた感じでした。)
- 空行
- 変数は外出しにすべき(localhost)
- Begin – rescue – endの使い方について
- returnが重なっている箇所
- if else との違い
- コメントあるの?
- <<の使い方
角さん、須藤さんのやり取りはこんな感じでした。
- 全体として一貫性とれているかをみます。
- メソッド間に改行を入れる。
- 『to_argument』:ピンと来ない?
- line.to_argumentとかに変えれば
- line/line、同じ意味合い?
- 何なんですかね〜(しばし黙考の後)私も悩みますよ?(須藤さん)
- "1行"はrspecでなんて言うんだろう…
- Config << file, STDERR, STROUT
- この箇所、字面からだと想像がしづらい。
- 『モヤモヤしまくりですよ。』
- 『都度、メモったりしないんですか?』(角さん)
- 『メモらないですねぇ〜』(須藤さん)
- 一旦見て、次見てもやっとしなければ大丈夫
- あ、でもホントにやばいのはTODOコメントとか書きますよ。
- ソースコード全体を見ればわかるんだけど、一部分だけを見てもわかるように書いてあった方がいい。(須藤さん)
- result って何を意味している?
- configってよりもoptions何じゃないのか?(メソッド名について言及)
- localhostの値は統一?
- 冒頭のコメントは意図があるのか?(角谷さん)
- 『いいとこに気が付きましたね〜ミムラくん』(須藤さん)
- IRBサーバ起動に関する"気持ちの流れ"が書いてある。全部読んでからでないと把握しづらい?(角谷さん)
- 『さすがミムラ君』(須藤さん)
(注:このくだり、2回程繰り返されていたようですが、個人的には謎でした。 何が元ネタだったんだろう?w)
- 『角さんがサインしまくりたいそうなので、たまたま書籍を持っている人は是非サインを貰って下さい。』(須藤さん)
と言うわけでこのディスカッション後の休憩時間を利用して、サインを頂いてきました〜♪ありがとうございました!
また、当日イベントにはRails Contributorになった事で一躍脚光を浴びた@suginoyさんも来ておられました。『動画観ました!』とちゃんと伝えましたよ〜。
- @suginoyさんがRails Contributor になるまでのドキュメンタリーが作られる様子のまとめ - Togetter
- The GitHub poweredby Agile渋谷 に参加してきた #Agile渋谷 - Shinya’s Daily Report
- 参加のSOCIAL CODING // Speaker Deck
2.axlsx/lib/axlsx/workbook/worksheet/worksheet.rb
※ブログエントリ用にソースコードを拝見してみたところ、既に修正が施されておりました!
- make to_xml_string more #readablecode · b937c69 · randym/axlsx
- make fit_to_page MOAR readable · 8df90fd · randym/axlsx
- 横とか縦に長いと、危険な匂いを感じます。(須藤さん)
- もっと分割したほうがいいのでは。(縦に長い場合)
- そこでやらなくてもいい事をしてるのでは。(横に長い場合)
- メソッド分割
- 一文字変数 o → key, valueにした方が。
- If文を設けることで理解をしやすくする
- エラーメッセージ
- これがダメならこっち使いなよ!的なエラーメッセージは良い。
- とてもいいです。皆さん真似しましょう。
# Indicates if gridlines should be shown in the sheet. # This is true by default. # @return [Boolean] # @deprecated Use {SheetView#show_grid_lines=} instead. def show_gridlines=(v) warn('axlsx::DEPRECIATED: Worksheet#show_gridlines= has been depreciated. This value can be set over SheetView#show_grid_lines=.') Axlsx::validate_boolean v sheet_view.show_grid_lines = v end
- XML構造体を模したメソッド
と言うわけで、時間もこの辺りで終了時刻となっていたので、最後は角さん・須藤さん、スタッフの方々のご挨拶などを以てお開きという形に。
(時間の都合もあり、最後の3つめの課題は行いませんでした)
- リーダブルコード、ピンときましたか?
- 気をつけてコード書いていってください。
- コード書く事は楽しい。楽しく書いていた時期が皆さんにもあるはずです。
- そういう時期を得る事に、この本を使いましょう。
- 本は殴るためのものではありません。
- 本買ってください。保存用と読書用と普及用と。
角さん、須藤さん、会場をご提供頂いた株式会社インターネットイニシアティブ様、参加者及びスタッフの皆様、ありがとうございました!
(※これまた関係無いが、帰りの駅(神保町)で目にした映画『ダークナイト ライジング』の広告。)
その他関連:
- イベント前の関連エントリ