SlideShare a Scribd company logo
1 of 40
Download to read offline
SQL
アンチパターン
  和田 卓人 (@t_wada)
Feb 15, 2013 @ デブサミ
和田 卓人
id: t-wada
@t_wada
github: twada
諸君は自らの経験からいくらか学ぶことがで
きるという、全く愚かな考えであろうが、
余はむしろ他人の失敗を学ぶことで、自分の
失敗を回避することを好む。
     ─オットー・フォン・ビスマルク


Nur ein Idiot glaubt, aus den eigenen Erfahrungen zu lernen.
Ich ziehe es vor, aus den Erfahrungen anderer zu lernen, um
von vorneherein eigene Fehler zu vermeiden.
Agenda


1. 本書の構成
2. アンチパターンとは
3. おわりに
4つの部
25のパターン
1.   論理設計
2.   物理設計
3.   クエリ
4.   アプリケーション
1.   論理設計
2.   物理設計
3.   クエリ
4.   アプリケーション
論理設計のアンチパターン
1.   ジェイウォーク(信号無視)
                       ざわ…ざわ…
2.   ナイーブツリー(素朴な木)
3.   IDリクワイアド(とりあえずID)
4.   キーレスエントリ(外部キー嫌い)
5.   EAV(エンティティ・アトリビュート・バリュー)
6.   ポリモーフィック関連
7.   マルチカラムアトリビュート(複数列属性)
8.   メタデータトリブル(メタデータ大増殖)
1.   論理設計
2.   物理設計
3.   クエリ
4.   アプリケーション
物理設計のアンチパターン

09. ラウンディングエラー(丸め誤差)

10. サーティワンフレーバー(31のフレーバー)

                        否定意見多し
11. ファントムファイル(幻のファイル)

12. インデックスショットガン(闇雲インデックス)
1.   論理設計
2.   物理設計
3.   クエリ
4.   アプリケーション
クエリのアンチパターン

13. フィア・オブ・ジ・アンノウン(恐怖のunknown)

14. アンビギュアスグループ(曖昧なグループ)

                   様々な解決策
15. ランダムセレクション

16. プアマンズ・サーチエンジン(貧者のサーチエンジン)

17. スパゲッティクエリ

18. インプリシットカラム(暗黙の列)
1.   論理設計
2.   物理設計
3.   クエリ
4.   アプリケーション
アプリケーションのアンチパターン
19. リーダブルパスワード(読み取り可能パスワード)

20. SQLインジェクション

21. シュードキー・ニートフリーク(疑似キー潔癖症)

22. シー・ノー・エビル(臭いものに蓋)

23. ディプロマティック・イミュニティ(外交特権)

24. マジックビーンズ(魔法の豆)

25. 砂の城      奥野さん書き下ろし!
Agenda


1. 本書の構成
2. アンチパターンとは
3. おわりに
アンチパターンとは
べからず集
あるある集
   だけでは無い!
本書のアンチパターンの構成

           名前重要!!
0.   名前
1.   目的
2.   アンチパターン
3.   アンチパターンの見つけ方
4.   アンチパターンを用いても良い場合
5.   解決策
例: ナイーブツリー
   (素朴な木)
なぜカタカナ!?
パターン名が英語そのままカタカナ表記であ
るのは、目次を見ただけではビックリするポ
イントですね。


ただ、チーム内で相談するときなどに目立つ
名前が付いているのはむしろありがたいです
し、何よりなんかカッコよくておもしろかっ
たです!
         http://d.hatena.ne.jp/moro/20130205/1360044434
アンチパターン名で議論できるようになる


「 マルチカラムアトリビュート とか 10 年
      前に通ったわー」

「あーはいはい インデックスショットガン 乙」
Explain の結果も見ないでインデックス貼りまく
           る奴いるよねーーー



http://yoshiori.github.com/blog/2013/02/10/sql-antipatterns/
実例: ナイーブツリー(素朴な木)
0.   名前
1.   目的
2.   アンチパターン
3.   アンチパターンの見つけ方
4.   アンチパターンを用いても良い場合
5.   解決策
目的: 階層構造を格納し、クエリを実行する
実例: ナイーブツリー(素朴な木)
0.   名前
1.   目的
2.   アンチパターン
3.   アンチパターンの見つけ方
4.   アンチパターンを用いても良い場合
5.   解決策
アンチパターンとは何でしょうか。それは、
問題の解決を意図しながらも、しばしば他の
問題を生じさせてしまうような技法を指しま
す。
             ─ Bill Karwin



         よかれと思って裏目
         に出てしまうもの
アンチパターン: 常に親のみに依存する

CREATE TABLE Comments (
   comment_id  SERIAL PRIMARY KEY,
   parent_id   BIGINT UNSIGNED,
   comment     TEXT NOT NULL,
);



 親idが入る
アンチパターンにより起こること


SELECT c1.*, c2.*, c3.*, c4.*
FROM Comments c1 -- 1階層目
  LEFT OUTER JOIN Comments c2
    ON c2.parent_id = c1.comment_id -- 2階層目
  LEFT OUTER JOIN Comments c3
    ON c3.parent_id = c2.comment_id -- 3階層目
  LEFT OUTER JOIN Comments c4
    ON c4.parent_id = c3.comment_id -- 4階層目


                     素朴すぎる故に
                     アンチパターン
実例: ナイーブツリー(素朴な木)
0.   名前
1.   目的
2.   アンチパターン
3.   アンチパターンの見つけ方
4.   アンチパターンを用いても良い場合
5.   解決策
直面している問題の種類や、メンバー間の会
話での何気ない言葉が、そこにアンチパター
ンがあるかもしれないことに気づくヒントに
なります。
             ─ Bill Karwin
アンチパターンの見つけ方

「このツリーでは、深さを何階層までサポー
トすればいい?」

「ツリー型のデータ構造を扱うコードなんて
二度と書きたくないな」

「ツリーの中で孤児になった行をきれいにす
るために、定期的にスクリプトを実行しなけ
れば」
実例: ナイーブツリー(素朴な木)
0.   名前
1.   目的
2.   アンチパターン
3.   アンチパターンの見つけ方
4.   アンチパターンを用いても良い場合
5.   解決策
アンチパターンを用いても良い場合
共通テーブル式(CTE:common table expression)
    を使って再帰クエリを書ける場合

WITH CommentTree
     (comment_id, bug_id, parent_id, author, comment, depth)
AS (
     SELECT *, 0 AS depth FROM Comments
     WHERE parent_id IS NULL
  UNION ALL
     SELECT c.*, ct.depth+1 AS depth FROM CommentTree ct
     JOIN Comments c ON ct.comment_id = c.parent_id
)
SELECT * FROM CommentTree WHERE bug_id = 1234;
アンチパターンを用いても良い場合

本書にはアンチパターンを適用しても良い状況の
説明もあって好感が持てます。 (略) この本は単な
る「べからず集」ではなく「パターン本」だから
です。コンテキストや制約が異なれば導かれる解
法も異なるというわけです。




http://yojik.hatenablog.jp/entry/2013/02/13/235729
実例: ナイーブツリー(素朴な木)
0.   名前
1.   目的
2.   アンチパターン
3.   アンチパターンの見つけ方
4.   アンチパターンを用いても良い場合
5.   解決策
解決策: 代替ツリーモデルを使用する
             策1: 経路列挙 (Path Enumeration)
comment_id       path    発言者            コメント


    1            1/       Fran      このバグの原因は何かな?


    2           1/2/      Ollie   ヌルポインターのせいじゃないかな?


    3          1/2/3/     Fran    そうじゃないよ。それは確認済みだ。


    4           1/4/      Kukla   無効なインプットを調べてみたら?


    5          1/4/5/     Ollie    そうか、バグの原因はそれだな。

                                  よし、じゃあチェック機能を追加して
    6          1/4/6/     Fran
                                       もらえるかな?

    7         1/4/6/7/    Kukla      了解。修正したよ。
解決策: 代替ツリーモデルを使用する

2. 入れ子集合
NestedSet




            3. 閉包テーブル
            Closure Table
解決策: 代替ツリーモデルを使用する

              解決策の比較表
         テーブ 子へのクエ ツリーへの               参照整合性
 設計                        挿入    削除
         ル数   リ実行 クエリ実行                  維持

隣接リスト     1   簡単    難しい    簡単    簡単     可能


再帰クエリ     1   簡単    簡単     簡単    簡単     可能


経路列挙      1   簡単    簡単     簡単    簡単     不可


入れ子集合     1   難しい   難しい    難しい   難しい    不可


閉包テーブル    2   簡単    簡単     簡単    簡単     可能
Agenda


1. 本書の構成
2. アンチパターンとは
3. おわりに
アンチパターンを共有しよう!
この本の素晴らしいところは、よく
見る「悪い」方法を「悪いこと」
としてまとめてくれたことです。
    http://bleis-tift.hatenablog.com/entry/2013/02/14/SQLアンチパターン




     この問題!
 進研ゼミでやったところだ!
                   http://yojik.hatenablog.jp/entry/2013/02/13/235729
Developers
    Summit

               アンチパターンを共有しよう!
N E X T 	
   A C T I O N !




• 経験した失敗に、名前、目的、アンチパター
    ン(裏目に出た方法)、その見つけ方などを考
    えてみよう。
• 「どうすればよかったか」を考えてみよう。
• それを共有しよう!


                             Developers Summit 2013 Action !
                                                               39
ご清聴ありがとうございました

本書のハッシュタグは
  #sqlap です!

More Related Content

What's hot

What's hot (20)

「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
なぜコンピュータを学ばなければならないのか 21世紀の君主論
なぜコンピュータを学ばなければならないのか 21世紀の君主論なぜコンピュータを学ばなければならないのか 21世紀の君主論
なぜコンピュータを学ばなければならないのか 21世紀の君主論
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
データベース設計徹底指南
データベース設計徹底指南データベース設計徹底指南
データベース設計徹底指南
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか「顧客の声を聞かない」とはどういうことか
「顧客の声を聞かない」とはどういうことか
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
 

Viewers also liked

Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)
Soudai Sone
 
Firebird.performance.testing
Firebird.performance.testingFirebird.performance.testing
Firebird.performance.testing
Mind The Firebird
 
SQLアンチパターン読書会 レジュメ
SQLアンチパターン読書会 レジュメSQLアンチパターン読書会 レジュメ
SQLアンチパターン読書会 レジュメ
Norito Agetsuma
 

Viewers also liked (20)

SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリーSQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
 
MySQLアンチパターン
MySQLアンチパターンMySQLアンチパターン
MySQLアンチパターン
 
unassert - encourage reliable programming by writing assertions in production
unassert - encourage reliable programming by writing assertions in productionunassert - encourage reliable programming by writing assertions in production
unassert - encourage reliable programming by writing assertions in production
 
ペアプログラミング ホントのところ
ペアプログラミング ホントのところペアプログラミング ホントのところ
ペアプログラミング ホントのところ
 
OSS についてあれこれ
OSS についてあれこれOSS についてあれこれ
OSS についてあれこれ
 
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
SQLアンチパターン読書会 4章 キーレスエンエントリ(外部キー嫌い)
 
コーディングを考慮したWebデザインガイドライン
コーディングを考慮したWebデザインガイドラインコーディングを考慮したWebデザインガイドライン
コーディングを考慮したWebデザインガイドライン
 
AWS Black Belt Online Seminar 2016 Amazon ElastiCache
AWS Black Belt Online Seminar 2016 Amazon ElastiCacheAWS Black Belt Online Seminar 2016 Amazon ElastiCache
AWS Black Belt Online Seminar 2016 Amazon ElastiCache
 
SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料
 
MySQLerの7つ道具 plus
MySQLerの7つ道具 plusMySQLerの7つ道具 plus
MySQLerの7つ道具 plus
 
大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術大規模Perl初心者研修を支える技術
大規模Perl初心者研修を支える技術
 
Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2
 
Firebird.performance.testing
Firebird.performance.testingFirebird.performance.testing
Firebird.performance.testing
 
Firebirdの障害対策
Firebirdの障害対策Firebirdの障害対策
Firebirdの障害対策
 
High-load performance testing: Firebird 2.5, 3.0, 4.0
High-load performance testing:  Firebird 2.5, 3.0, 4.0High-load performance testing:  Firebird 2.5, 3.0, 4.0
High-load performance testing: Firebird 2.5, 3.0, 4.0
 
人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか人類は如何にして大切な データベースを守るべきか
人類は如何にして大切な データベースを守るべきか
 
SQLアンチパターン読書会 レジュメ
SQLアンチパターン読書会 レジュメSQLアンチパターン読書会 レジュメ
SQLアンチパターン読書会 レジュメ
 

Similar to SQLアンチパターン - 開発者を待ち受ける25の落とし穴

ぼくとしりとりの約3.0*10^3日間戦争
ぼくとしりとりの約3.0*10^3日間戦争ぼくとしりとりの約3.0*10^3日間戦争
ぼくとしりとりの約3.0*10^3日間戦争
Eric Sartre
 
Jubatusにおける機械学習のテスト@MLCT
Jubatusにおける機械学習のテスト@MLCTJubatusにおける機械学習のテスト@MLCT
Jubatusにおける機械学習のテスト@MLCT
Yuya Unno
 
PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)
nishikawa_makoto7
 
オープンソースコミュニティへのライトな貢献
オープンソースコミュニティへのライトな貢献オープンソースコミュニティへのライトな貢献
オープンソースコミュニティへのライトな貢献
Keiichi Kobayashi
 
アジャイルな見積りと計画づくり1
アジャイルな見積りと計画づくり1アジャイルな見積りと計画づくり1
アジャイルな見積りと計画づくり1
Arata Fujimura
 

Similar to SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (20)

Perl で自然言語処理
Perl で自然言語処理Perl で自然言語処理
Perl で自然言語処理
 
ダブル配列の豆知識
ダブル配列の豆知識ダブル配列の豆知識
ダブル配列の豆知識
 
パターンを活用したチーム活動を体験しよう
パターンを活用したチーム活動を体験しようパターンを活用したチーム活動を体験しよう
パターンを活用したチーム活動を体験しよう
 
Database smells
Database smellsDatabase smells
Database smells
 
ぼくとしりとりの約3.0*10^3日間戦争
ぼくとしりとりの約3.0*10^3日間戦争ぼくとしりとりの約3.0*10^3日間戦争
ぼくとしりとりの約3.0*10^3日間戦争
 
Jubatusにおける機械学習のテスト@MLCT
Jubatusにおける機械学習のテスト@MLCTJubatusにおける機械学習のテスト@MLCT
Jubatusにおける機械学習のテスト@MLCT
 
PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)PFPファシグラ(2009/07/03)
PFPファシグラ(2009/07/03)
 
オープンソースコミュニティへのライトな貢献
オープンソースコミュニティへのライトな貢献オープンソースコミュニティへのライトな貢献
オープンソースコミュニティへのライトな貢献
 
リガーのお仕事のお話|『階層構造の設計について』語ってみる
リガーのお仕事のお話|『階層構造の設計について』語ってみるリガーのお仕事のお話|『階層構造の設計について』語ってみる
リガーのお仕事のお話|『階層構造の設計について』語ってみる
 
研究発表で失敗しないための8つのTips
研究発表で失敗しないための8つのTips研究発表で失敗しないための8つのTips
研究発表で失敗しないための8つのTips
 
伝わるプレゼン
伝わるプレゼン伝わるプレゼン
伝わるプレゼン
 
TDDを研ぎ究める
TDDを研ぎ究めるTDDを研ぎ究める
TDDを研ぎ究める
 
困らない程度のJDK入門
困らない程度のJDK入門困らない程度のJDK入門
困らない程度のJDK入門
 
マインドマップを使った 仕様分析&テスト設計
マインドマップを使った 仕様分析&テスト設計マインドマップを使った 仕様分析&テスト設計
マインドマップを使った 仕様分析&テスト設計
 
アジャイルな見積りと計画づくり1
アジャイルな見積りと計画づくり1アジャイルな見積りと計画づくり1
アジャイルな見積りと計画づくり1
 
Groongaドキュメント読書会5の進め方
Groongaドキュメント読書会5の進め方Groongaドキュメント読書会5の進め方
Groongaドキュメント読書会5の進め方
 
まじめに!できる!LT
まじめに!できる!LT まじめに!できる!LT
まじめに!できる!LT
 
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第五回講義資料(ワークスアプリケーションズ & AtCoder)
 
上級ユーザビリティテスト手法
上級ユーザビリティテスト手法上級ユーザビリティテスト手法
上級ユーザビリティテスト手法
 
Ruu031222
Ruu031222Ruu031222
Ruu031222
 

More from Takuto Wada

More from Takuto Wada (20)

OSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
 
power-assert, mechanism and philosophy
power-assert, mechanism and philosophypower-assert, mechanism and philosophy
power-assert, mechanism and philosophy
 
アジャイルサムライの次に読む技術書
アジャイルサムライの次に読む技術書アジャイルサムライの次に読む技術書
アジャイルサムライの次に読む技術書
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
テスト用ライブラリ power-assert
テスト用ライブラリ power-assertテスト用ライブラリ power-assert
テスト用ライブラリ power-assert
 
Reviewing RESTful Web Apps
Reviewing RESTful Web AppsReviewing RESTful Web Apps
Reviewing RESTful Web Apps
 
power-assert in JavaScript
power-assert in JavaScriptpower-assert in JavaScript
power-assert in JavaScript
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテスト
 
愛せないコードを書くには人生はあまりにも短い
愛せないコードを書くには人生はあまりにも短い愛せないコードを書くには人生はあまりにも短い
愛せないコードを書くには人生はあまりにも短い
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 
TDDBC お題
TDDBC お題TDDBC お題
TDDBC お題
 
DevLOVE DDDBC
DevLOVE DDDBCDevLOVE DDDBC
DevLOVE DDDBC
 
TDDBC Fukuoka Day1
TDDBC Fukuoka Day1TDDBC Fukuoka Day1
TDDBC Fukuoka Day1
 
js テスト放浪記
js テスト放浪記js テスト放浪記
js テスト放浪記
 
xUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase ClassxUTP Chapter19 (2). Testcase Class
xUTP Chapter19 (2). Testcase Class
 
xUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency InjectionxUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency Injection
 
xUTP Chapter27 Generated Value
xUTP Chapter27 Generated ValuexUTP Chapter27 Generated Value
xUTP Chapter27 Generated Value
 
The only one big thing every programmer should know
The only one big thing every programmer should knowThe only one big thing every programmer should know
The only one big thing every programmer should know
 

Recently uploaded

Recently uploaded (11)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

SQLアンチパターン - 開発者を待ち受ける25の落とし穴