java-ja『LOG.debug("nice catch!")』に参加してきた #java_ja
- LOG.debug("nice catch!") - connpass
- 2012/06/27 java-ja 『LOG.debug("nice catch!")』#java_ja #javaja - Togetter
(写真:会場入り口。あれ、イベント名が…こちらが正式名称だったのかな。)
try { java-jaで例外とロギングについて勉強します 話していただくのは 俺たちのt-wadaこと和田さんと PFIの田中英行さん 歩く萌え要素こと西尾泰和さん 歩くモヒカン太一 です try { LT.add(ヨシオリ) LT.add(crexista, 'クライアント側でナイスキャッチ') LT.add(@shomah4a, 'PyconJPのCfPの宣伝') } catch (LTTimeoutException lte) { LOG.debug(ドラ) } try { 他にも発表いただくかもです あとLTやりたい人連絡ください 発表、LTしていただける方は、人数が埋まっていても参加可能です。 } catch (Exception e) { //OK } 例のごとく懇親会をそのまま会場でビアバッシュ形式でやりたいと思います。 2000円の予定です } catch (Exception e) { //nice catch }
その存在自体は勉強会に興味を持ち始めた頃から知ってはいたものの、なかなか参加する機会が無かった『java-ja』。(※伝え聞く内容によるとマサカリが飛び交う的な側面が強そう…とあったので少し躊躇う部分も無くは無かった)
今回、"ログと例外処理"というテーマについての勉強会が開催されるという事で、告知開始を受けて光の速さで申込!&参加してきました。
開催場所はグリー株式会社@六本木。直近では何回か来てる建物ではあります。(第30回 HTML5とか勉強会とか)
開始時刻を過ぎたものの、参加者の入り度合いやトーカー集合の度合いを鑑みつつ若干のタイムテーブル変更(開始時刻を延ばす)。主催のやましろ(TwitterID:@yamashiro)さん、Yoshiori (TwitterID:@yoshiori)さん等によるトークが入りました。
- 『java-ja始めてのひと〜』(割と多くの人が挙手。予想外の量に驚かれていました。ちなみに自分も今回java-jaが初参戦。)
- 『ともだちいないひと〜』(こちらも半数近くがなぜか挙手し、こちらの反応にも『いや、リアルな友達の話じゃなくてね...ごめんそうじゃないんだ』)
- 『何かちょっと寂しいひと〜』『近くの人、話しかけてあげよう。僕らは内輪だ』
- 会場について
- Yoshioriさん
準備が整った所で、いよいよ本編開始。『俺たちのt-wada』こと和田卓人さんからスタートです。
例外設計における大罪
- タワーズ・クエスト株式会社取締役社長 和田卓人さん (TwitterID:@t_wada)
- 例外設計における大罪
- View more presentations from Takuto Wada
- 自己紹介
- 『下心(アカウント:t_wadaを指す:バーの位置("アンダー"バー))の和田です…と(自己紹介は)これくらいで良いんじゃないかな』
- 今回の勉強会開催のきっかけ
- Yoshioriさんとの会話(at 地下鉄の中, 焼き鳥屋での会話)から発展。
- TDDだとログを書き忘れやすい?
- 動作確認が出来る状態なので、ログコードを入れるのを忘れがち。
- マイナーな勉強会やってみようよ。
- 当初はもっと少ない人数規模だったものが、あれよあれよとここ(100人規模)まで拡大。
- TDDを行うとロギングコードを書き忘れやすい仮説
- (ちなみに例外は忘れにくい)
- プロとしてのたしなみ、どこへ行ったのか…
- 上手く動くときは無音で動くけど、本番環境等で追うときに分かりにくい。
- 皆どうしているのか聞きたい。
- 俺のモチベーションで始めたんだ!
- よろしくおねがいします。
例外設計の大罪
- 大罪:『放置』
-
- 『(資料中の)サンプルコードはワイルドさを意識しています』
それぞれの書籍からテーマを引用しつつ解説。

- 作者: 和田卓人,Kevlin Henney,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/12/18
- メディア: 単行本(ソフトカバー)
- 購入: 58人 クリック: 2,107回
- この商品を含むブログ (350件) を見る
- きのこ93:エラーを無視するな
- 例外処理を行わない言い訳
- コードの流れが負いにくくなる(クリーンコードにも書かれていた)
- 納期が迫っている
- エラーが戻ることが無い関数である
- 遊びで書いただけのプログラムだから
- 『例外処理はgoto文ダメだよね』
- やっていいgoto文をコードとしてサポート:例外処理。Try/catch
- 要はgoto文、帯域脱出
- 大きいところだと例外投げさせない、キャッチさせない、そもそもthrowsって書かせない
- goto文、歴史には良くないよね
- 帯域脱出の代表的なものが例外処理
- 『例外処理はgoto文ダメだよね』
- エラーを無視してもあんまり良い事は無い
- 不安定なコード
- セキュリティ上問題のあるコード
- 貧弱な構造とインタフェース
- どうする?
- 戻り値など
- 例外処理を行わない言い訳
- 大罪:『隠蔽』

- 作者: 和田卓人,Kevlin Henney,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/12/18
- メディア: 単行本(ソフトカバー)
- 購入: 58人 クリック: 2,107回
- この商品を含むブログ (350件) を見る
- 大罪:『例外の乱用』

Effective Java 第2版 (The Java Series)
- 作者: Joshua Bloch,柴田芳樹
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2008/11/27
- メディア: 単行本(ソフトカバー)
- 購入: 77人 クリック: 936回
- この商品を含むブログ (264件) を見る
-
- 57.例外的状態にだけ例外を使用する
- 和田さん『必読です!』
- 57.例外的状態にだけ例外を使用する

- 作者: アンドリューハント,デビッドトーマス,Andrew Hunt,David Thomas,村上雅章
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/11
- メディア: 単行本
- 購入: 42人 クリック: 1,099回
- この商品を含むブログ (347件) を見る
-
- ヒント34:例外は例外的な問題のみに使用する事
- 全ての例外ハンドラーを除去しても、このプログラムは動作することが出来るだろうか?
- 答えがノーであれば、例外では無い状況下で例外が使われている
- ヒント34:例外は例外的な問題のみに使用する事
- 大罪:『過剰防御』
(写真:"フルアーマーダブルゼータ"。)
-
- 通常フローを無視しても行けないし、例外を無視しても行けない
- 全ての引数、状態を疑おう。
- Defensive Programmingの適用
- 思いっきり重複するエラーチェック
- 自らが自分の中で完結するようにディフェンスである、という一派。
- →重複しがち、DRYではない。
-
- 発表時、サンプルコード中の『return null;』という記述を責められる和田さん。(オブジェクトを返すべき所、その記述のまま発表されていた。※スライド資料は既に修正されています)
-
- 『いや、あの、うん、すいません…』『意図したネタでは無いので恥ずかしい…』
- 更に参加者からの指摘『さらに、これは数え年を考慮していない仕様エラーでもありますね…』
- 契約による設計

オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)
- 作者: バートランド・メイヤー,酒匂寛
- 出版社/メーカー: 翔泳社
- 発売日: 2007/01/10
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 307回
- この商品を含むブログ (132件) を見る
-
- 『奥さんには"青いレンガ"って言われた』Bertrand Meyer著。
- Design by Contract DbC
- あるルーチンにおける全ての事前条件が呼び出し側によって満足された場合、そのルーチンは作業完了時に全ての事後条件と全ての不変表明を保証する。
-
- 冗長性のある検証は実際損傷を与える
- システム全体の視点で見るとき、シンプルさが重要になる
- 複雑さは品質の敵である
- 過剰に防御するのではなく、誰の責任なのかをはっきりさせる
-
- 例外処理は、予想外の実行時状態に対処するメカニズム。
- ルーチンはリトライか組織的パニックのどちらかで例外を処理する
-
- 11章は契約による設計、12章は例外について記載あり。
- 『これだけでご飯が食べられます』
- 11章は契約による設計、12章は例外について記載あり。
-
- きのこ21:技術的例外とビジネス例外を明確に区別する
- これらを同じ例外階層構造に入れないこと。
- 技術的例外は貫通させてフレームワークに任せる。
- ビジネス例外はじゅん正常系なので呼び出し側で対処する。
- きのこ21:技術的例外とビジネス例外を明確に区別する
-
- きのこ27:見知らぬ人ともうまくやるには(by 小飼弾)
- 『出来てはならぬ事を禁じる』のではなく、はじめから『出来て良い事だけを出来るようにする』と考えるのです。
- 特定条件が買えればtrue、でなければfalse。
- きのこ27:見知らぬ人ともうまくやるには(by 小飼弾)
-
- Effective Java:第9章にも関連テーマで記載アリ。
- まとめ
- 良い本を読みましょう。
- 特に青いレンガの本はおすすめ。
- おまけ:
- 書籍『Clean Code』でも、Robert Martin a.k.a アンクル ボブ 氏も『チェック例外の代償は、開放/閉鎖原則に違反する点です』と言及している。

- 作者: Robert C. Martin,花井志生
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2009/05/28
- メディア: 大型本
- 購入: 27人 クリック: 914回
- この商品を含むブログ (83件) を見る
本人による補足つぶやき:
ログ、その時の為に。
- 佐藤 太一(taichi#1881) さん (TwitterID:@ryushi)
スライド資料についてはこちら。画像をクリックすると資料URLに飛びます)
また、スライドに合わせたテキスト資料についても既に公開?されておりますのでリンク。
(これがあるので、この講演に関するメモは割愛。以降気になった点、テキストに無かったコメントなどをメモ。)
- 自己紹介
資料の内容については事前に公開されていた&テキスト情報もgistから辿れたりしますので割愛。質疑応答箇所と気になったつぶやきを抜粋して並べてみます。
- [Q].僕のシステムのポリシー:レベルを設定出来るようにしている。
- 開発:info以上はアラートなげる。
- 運用:error及びfetalをアラートとして出す。
- ログを使わず、メールで運用。
- メールが飛ばない場合は?ファイルを見る。でも気付かないかも?
- メールが飛ぶ事で確認する。飛ぶ事を確認、でもエラーではない。
- →でも見落としがちだよね〜。
- ホントに大事な場合、外部から監視する。
- [Q].本番でinfo以上のログを出さないのって運用者に厳しいよね?
- 本当に運用者の事を考えるなら、ログを見るな、と言う。
- 上手く行ってる時にはログ観る必要が無い。
- [Q].今居るシステムは、まったくログがない。
特に最後のつぶやき(のシーン)は一同大爆笑(笑)
例外処理の歴史
- 西尾泰和さん (TwitterID:@nishio)
- 自己紹介
- 詳しくはこちらを参照。
- 『特集:言語設計の基礎知識 (WEB+DB PRESS vol.60)』の続編を執筆中!今回は執筆中の書籍からのネタバレです。
- 資料は本が出たら公開。(本が出るまで公開されません。)
- 例外処理って何がしたいの?
- 失敗するかも知れない処理を呼び出すとき:『これが失敗したときには〜をしたい』
- 失敗するかも知れない処理を実装するとき:『失敗したと言うことを呼び出し元に伝えたい』
- 返り値で返せばいいじゃない?でも読み辛い!
- ごちゃごちゃせずに書けるようにしたい!
- [問題1]
- 次の中で、最初に生まれたのはどれ?
- 『try』:失敗しそうな処理の前に置かれるキーワード
- 『except』: 失敗しそうな処理とエラー処理の前に挟まるキーワード
- 『throw』:失敗させる命令
- 次の中で、最初に生まれたのはどれ?
- [問題2]問題1の選択肢がそれぞれ生まれたのは、どの年代か?
- [回答]
-
- try:tryなんて飾りですよ…
- 全く不必要だったが、説明するのが難しいと分かったので、混乱したユーザからサポートスタッフを守るために余計なものを導入したらしい。
- try:tryなんて飾りですよ…
- まとめ
質疑応答の最中には、なんと!今現在執筆されている件の原稿を見せながら回答していくという光景も!(一応ボカシ入れときました)
なお、今回の発表の結果を受けても、今後発売予定となる(続編が載っている)書籍の記事の価値は何ら下がることはないので、皆さん買いましょう!(by ヨシオリさん)との事なので、皆さん発売の折には是非購入を!
基調講演:エラー処理の抽象化

- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 25人 クリック: 580回
- この商品を含むブログ (73件) を見る
発表資料はこちら。(※画像押下で資料URLにも飛びます)
既にブログも上がっておりますので、詳細については以下のエントリを参考にされると良いと思います。
最初の方はエラー処理詳説、的な内容で話が進んでったのですが、知らないうちになぜかHaskellの話題になり(笑)そしてHaskellの世界にどっぷり…という感じでした。割と皆さんポカーンとしたなか、西尾さんがJavaの世界に例えて時折解説を挟んでくださったので、だいぶ助かりました。ありがとうございます!
この時点で時間は22:30を過ぎ、結構いい時間だったような。引き続きLTへとなだれ込みます。
LT
LOG.debug(maker, "使え")
- Yoshiori SHOJIさん Yoshiori (TwitterID:@yoshiori)
- 自己紹介
- java-jaに所属
- 例外の話:『WEB+DB PRESS vol.58』
- 例外設計に関する話が載っている。読みたい場合は総集編を買おう。
- Marker使ってる?
- Marker使っていない人はSlf4jもう使うなよ。log4jに戻れ!
- 日本語で触れている記事
- lsf4j marker
- マーカー的に使えるよ。嘘。
- 記事見つかった!と喜ぶも、知り合い(太一さん)のエントリだった。
- ログは、もっと立体的であるべきか。 - 設計と実装の狭間で。
- 太一さんとSkypeでしていた
- ログを探したが…『モンハンやるぞ』『AC5やるぞ』的なログしか見つからない…(該当ログが流れてしまっていた)
- lsf4j marker
- 特徴:
- ログの次元を増やす。
- パッケージ→ログレベル
- markerが追加、次元が更に増える。
ライ麦畑で捕まえて
- 芝山奇 有β - Kaoru. S さん (TwitterID:@crexista)
資料はこちら。
- クライアント側でつかまえて
- View more PowerPoint from Kaora Shibacaki
- 皆さん、ナイスキャッチしてますか?
- 本当のNICEなキャッチを提案。
- NICEじゃ無い例
- 例外のメッセージをそのまま表示するのみ、何が起きたか分からない。
- アドレスとかどうすればいいのよ?怖いよ!
- 分からないのにOKボタンしかない?
- 原因よりも方法を先に、簡潔に。
- 1.ユーザの選択は絶対!
- ユーザの選択は例外じゃない
- 居ひられた事はもうしない。
- 2.真実にむかおうとする意志
- 2回やってダメだった処理は繰り返さない。
- 3覚悟したものは幸福である
- それでは、良いナイスキャッチを!Have a nice catch
PyCon JP 例外とロギング
しょーま(ただのプログラマ) さん (TwitterID:@shomah4a)
すみません、この辺で既に力尽きていてメモ取れてませんでした...orz 基本的にはイベント告知などがメイン。
scribedはやめとけ。fluentdマジオススメ
tagomorisさん (TwitterID:@tagomoris)
既に参加&発表に関するエントリがUPされているので、詳細は上記エントリをご参考ください。以下の内容について、ブラウザを立ち上げながらのLTでした。(リスト項目はエントリから拝借致しました)
logrotateマジちゃんとやんないと悲劇が起きる scribedというものがあるがネットに基本的に情報は無い scribedのインストールは大変 scribedのインストールはマジ大変 scribedはいろいろ大変過ぎるので避けたほうがよい というようなことが こちらのエントリ に書いてあるので興味があれば読むのもよいでしょう fluentdイイヨ!
以上で本編終了。ちなみにこの時点で時刻は22:45過ぎ。この後は懇親会ですよ〜と言いつつも撤収が23時だったため、
java-jaへの参加は今回が初めてであり、会の雰囲気やモヒカン度合等にも驚き、圧倒される事が多いイベントでしたがトピック的にも面白いものが多く、何より雰囲気を楽しむ事が出来ました!和田さんに関しては縦サミ→TDDBCでの和田さんしか見たことがなかったので、別の一面(?)な和田さんを見る事が出来たのも良かったと思います。:-)
java-jaスタッフの皆様、登壇者&LTトーカーの皆様、御参加の皆様、楽しい時間をありがとうございました!
そして冒頭の
帰ってブログを書くまでがjava-jaです。『GREEさんパネェな!』と書きましょう。
の言葉に倣って、締めはこれで。
GREEさんパネェな!
その他関連:
- 発表者エントリ
- 発表者スライド資料
- 例外設計における大罪 / 和田卓人さん
- ログ、その時の為に。 / 佐藤太一さん
- クライアント側でつかまえて / Kaoru Shibasakiさん
- エラー処理の抽象化 / 田中英行さん
- 参加者エントリ
- その他
- Java の語彙で Maybe を説明してみる - ぐるぐる〜:今回のテーマのうちの1つに関する解説エントリ。