Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話

3,056 views
2,877 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,056
On SlideShare
0
From Embeds
0
Number of Embeds
327
Actions
Shares
0
Downloads
5
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話

  1. 1. Perl暦およそ10年(?)の僕がデータベースを使えるように なるまでの昔話 Perl Beginners #3 Lightning Talk @ytnobody
  2. 2. およそ10年前。Perlに触れて数ヶ月・・・● 先輩「そろそろデータベースつかってみようかー」● 自分「なんですかそれ」● 先輩「」
  3. 3. そもそもデータベース(=DB)とは 何なのかを 知らなかった
  4. 4. 説明しよう! ここで言うデータベースとは、正しくは「リレーショナルデータベースマネージメントシステム」 と呼ばれ、RDBMSなどと略されるものである。プログラム内で永続的にデータを保持するために 用いられる仕組みであり、 大抵はサーバソフトウェアとして提供される。プログラムはデータベースと情報をやり取りするために、SQLと呼ばれる専用の命令文を発行する必要が ある。
  5. 5. 初めてのDBを使ったプログラミング● 自分「先輩~、できましたー><」● 先輩「どれどれみせてごらん・・・」● 自分「これです!どうっすかね、動きますよ!ほら!」● 先輩「」
  6. 6. #!/usr/bin/perluse DBI;use DBD::mysql;my $DBH = DBI->connect(DBI:mysql:dbname, user, password);my $sth = $DBH->prepare(SELECT * FROM member WHERE area=12);$sth->execute();while (my @field = $sth->fetchrow_array()) { my $id = $field[0]; my $name = $field[1]; ... ...... .........}
  7. 7. 先輩「ダメダメだね」
  8. 8. #!/usr/bin/perluse DBI;use DBD::mysql;my $DBH = DBI->connect(DBI:mysql:dbname, user, password); 先輩: use strict してないでしょ?my $sth = $DBH->prepare(SELECT * FROM member WHERE area=12); よくないなー$sth->execute();while (my @field = $sth->fetchrow_array()) { my $id = $field[0]; my $name = $field[1]; ... ...... .........}
  9. 9. #!/usr/bin/perluse DBI;use DBD::mysql;my $DBH = DBI->connect(DBI:mysql:dbname, user, password); 先輩:my $sth = $DBH->prepare(SELECT * FROM member WHERE area=12); これはuseしなくてOK$sth->execute();while (my @field = $sth->fetchrow_array()) { my $id = $field[0]; my $name = $field[1]; ... ...... .........}
  10. 10. #!/usr/bin/perluse DBI;use DBD::mysql;my $DBH = DBI->connect(DBI:mysql:dbname, user, password);my $sth = $DBH->prepare(SELECT * FROM member WHERE area=12);$sth->execute();while (my @field = $sth->fetchrow_array()) { my $id = $field[0]; 先輩: $DBHを返す関数を作れば、 my $name = $field[1]; 毎回connectを書く必要がないよね? ... ...... .........}
  11. 11. #!/usr/bin/perluse DBI;use DBD::mysql;my $DBH = DBI->connect(DBI:mysql:dbname, user, password);my $sth = $DBH->prepare(SELECT * FROM member WHERE area=12);$sth->execute();while (my @field = $sth->fetchrow_array()) { my $id = $field[0]; my $name = $field[1]; ... 先輩: ...... こりゃひどいなー。バインド変数使おうよ。 .........}
  12. 12. 自分「え?バインド変数って何すか???」
  13. 13. #!/usr/bin/perluse DBI;use DBD::mysql;my $DBH = DBI->connect(DBI:mysql:dbname, user, password);my $sth = $DBH->prepare(SELECT * FROM member WHERE area=?);$sth->execute(12);while (my @field = $sth->fetchrow_array()) { my $id = $field[0]; my $name = $field[1]; ... 先輩: バインド変数ってのは、これ「?」のことだね ...... .........}
  14. 14. #!/usr/bin/perluse DBI;use DBD::mysql;my $DBH = DBI->connect(DBI:mysql:dbname, user, password);my $sth = $DBH->prepare(SELECT * FROM member WHERE area=?);$sth->execute(12);while (my @field = $sth->fetchrow_array()) { my $id = $field[0]; my $name = $field[1]; ... 先輩: で、executeするときに該当する値を渡すんだよ ...... .........}
  15. 15. ほえー・・・わかったようなわからんような・・・
  16. 16. あれから1年の月日が経過。 PHPつかってました! てへぺろっ☆
  17. 17. さらに月日は流れ、2年経ったある日のこと。● 上司「久々にPerlの案件だぞー」● 自分「ひさしぶりっすね。」● 上司「MySQL使うぜ。あ、今回はお前に開発任せるから。」● 自分「え?!」● 上司「もう大分なれてきたし、やれるだろ?」● 自分「はあ、まあ」● 上司「おーそうだ、今回開発期間短いぞ。3週間しかねえw」● 自分「」
  18. 18. 自分「どうにかして楽しないと、やばすぎる」
  19. 19. どうやって楽しようか・・・● 上司「CPANってのがあるからさ、そこからなんか探せばいいんじゃ ないのか?」● 自分「く、CPAN????」
  20. 20. 説明しよう!CPAN(しーぱん/くぱん??)とは、Perl向けに作られたモジュール(出来合いの使いまわし可能なパーツ)の 配布サイトだ。 Perlを使って開発するのなら、 便利なパーツがタダで手に入る、お得でクールな CPANを使わない手は無いぞ!
  21. 21. CPANに頼ってみよう!● 自分「自力でコードを書く量が減るってことですか!?」● 上司「たぶんそういうことじゃないかなー」● 自分「先輩に、いいパーツ知らないかきいてきます!」● 先輩「おれしらないよ」● 自分「」
  22. 22. 自分「もしかして、社内にCPANを使いこなせてる人がいない??」
  23. 23. 協力会社の開発スタッフにきいてみた● 協力「Class::DBIというモジュールを使うと楽だって聞きますけどね」● 自分「ドキュメント読んでみます」
  24. 24. 自分「え、英語・・・?!」
  25. 25. 英語の壁を乗り越えるが・・・● 自分「英語だけど、高卒英語レベルでも割と理解できる・・・」● 自分「でもしかしこれ、使うの難しいな。」● 自分「わざわざスキーマ用意するのが面倒だし・・・」● 自分「ほかにもDBを操作するモジュールは無いものか・・・」
  26. 26. 自分「こ、こ、これじゃー!!!!」
  27. 27. 人生初のORマッパー(?)それはDBIx::Simplemy $dbh = DBI->connect(...);my $sql = SELECT * FROM user WHERE id=?;my $sth = $dbh->prepare($sql);$sth->execute(123);my @col = $sth->fetchrow_array;.................. my $db = DBIx::Simple->new(...); $user = $db->select(user,*,{id => 1}); ... これがこうなった ...... .........
  28. 28. 自分「これはすげー!!!!」
  29. 29. その後のORマッパー使用遍歴● Data::Model ● キャッシュを意識せず、透過的に扱いたかった● Teng ● 最近はORマッパーといえばほぼこれ。● DBIx::Sunny ● 素のDBIにほんの少し手が加えられている。 selectとかの便利メソッドが追加 –● 自作のORマッパー ● 作ってみたかっただけ – スキーマ不要 – トランザクションをDSLっぽく書きたい – いくつかの制約(主キーが”id”固定とか)
  30. 30. でも結局・・・● 基本はDBI。 ● いまでもDBIだけで仕上げることがあるくらい。 ● Hachioji.pmの有志が開発しているwebチャット 「Yancha」も今のところDBIでDBアクセス● なんで? ● シンプルisベスト ● 基本に忠実=基本さえわかっていれば、読める理解で きる
  31. 31. これからDBを使ったプログラムを習得するなら● まずはDBI+MySQLの組み合わせでやってみよう● ORマッパーは「わかってる人間が楽をするためのもの」 ● 最初からORマッパーを使うのは避けたほうが無難かも● 使うなら「利用人口の多いもの」を選ぶと楽 ● 周りに訊けます – ツイッターとかで訊けばそれなりの回答があるかもしれない – 回答がつかなくても泣かない ● これ大事。● なれてきたら、データキャッシュ(memcached)の導入も視野に入れ てみる。 ● 負荷軽減、処理時間削減など、パフォーマンスに貢献
  32. 32. 質問タイム
  33. 33. ありがとうございました。

×