my $newface = Family->new; ― 2016年01月19日 22時20分33秒
妻の妊娠を知ってから、生活が大きく変わった。妻の実家に越してった時も妻の実家から追い出された時も変わったけど、とにかく今回もガラッと変わった。
それまでの仕事では到底子どもを産み育てて養えるだけの稼ぎを得られないことは明白だった。とりあえず喫緊の出産費用を捻出することがまず無理だった。取引先の人に事情を話し、幾つかの仕事を片付けることを条件に「けじめ」をつけた。フリーランスでの仕事を仲介してくれる某所を介して仕事を探し、昨年9月から通いの仕事に切り替えた。
その間も妻の体は彼女の意志とは関係なく変遷を繰り返し、初産のさまざまな初体験に戸惑いを繰り返すばかりだった。
こっちに越してきてふてくされるばかりだった頃、よく二人で最寄りではない駅まで歩き、昼間っぱらから大阪王将で餃子をつまんでビールを呑んだりしていた。生活を少しでも楽にするため、あるいは彼女がかねてより働きたいという意志を持っていたこともあって、半年間の短期契約で見つけてきた派遣の仕事に通いながら、職場と水が合わなくて時折涙していたこともあった。
彼女が妊娠してからのこの数ヶ月間、そんな日々がとても楽しくて、とても懐かしい物のように思えたりもしていた。
出産直前の、よりにもよって心身ともに一番デリケートな時期に、おいらはといえば仕事がどうしようもなく忙しい時期と重なってしまい、毎日のようにおいらの帰りが遅いのを嘆く LINE のメッセージに焦りを感じながら、9:00~22:00 の重労働で 12連勤なんてことをやっていて、本当に申し訳なく思う。
しかしながら、今日、こうして特に大きな障害もなく、母子ともに健康な状態で、無事に生まれてくれた我が子の姿を見て、あるいはこの子と触れ合って、本当に何事も無く生まれてきてくれたことに、夫婦共々ホッとしているし、つくづくありがたいことだと思う。
そして、そんな我ら夫婦を、心から祝福してくれる友人たち、あるいは家族がいることを、嬉しくも思うし、誇りにも思う。
さて… 明日からまた遅い時間まで障害対応ですか。リリースまでになんとか片付けばいいけど… ('A`)=3
曖昧なのは「死」という言葉の使い方の方なのでは… ― 2015年06月29日 17時04分45秒
曖昧な言葉というのは存在します。その言葉が使われるようになった経緯上、はっきりとした意味合いが定義づけられていないような言葉のことです。インターネット関連の言葉でいうと、例えば「クラウド (コンピューティング)」は曖昧な言葉と言えるだろう。今でこそそれなりの共通認識を以って使われる言葉となりつつはあるようだが、その言葉が使われ始める前後を比較するような議論に、ビジネス上の宣伝文句以上の意味はないのではないかと思われる。
ところで、スマートフォンなどに代表されるモバイルデバイスの普及と、 Web アプリのクライアントがモバイルデバイス用に実装された個別の専用アプリに置き換えられてゆく現象 (あるいは、これまで Web アプリとしてリリースされてきたようなサービスがモバイルアプリとしてリリースされるようになってきている現象) を以って、「Web は死ぬ」のではないかとする議論が一部で持ち上がってきているらしい。へー。
リンク先記事の主張を要約すると以下のようになると思う。
- この議論において、「Web」という言葉が曖昧に扱われているので、「Web は死ぬ (or 死なない)」という時の「Web」という用語について、その定義を各々明確にしておくべきである。
- (モバイル) アプリによって Web は死ぬと思われる。但し、このとき著者が「Web」という言葉を持って指し示される概念は、以下の通りである。
- Web サイト
- Web ブラウザ
- Web アプリ
記事中ではこれに対し、死ぬことはないだろうと思われる概念についても記述されている。詳しくは当該記事本文をご参照願いたい。
「Web」という言葉の曖昧性?
さて、のっけから前提事項を覆すようで申し訳ないのだが、そもそも Web という言葉自体はそこまで曖昧な言葉だろうか? 確かに、経済学者やビジネスコンサル、ネットビジネス評論家含むメディア関係者などに言わせればとたんに曖昧な言葉になってしまうものかもしれないが、クラウドみたいな命名経緯自体が曖昧な言葉に比べれば、ティム・バーナーズ=リーの発明品である Web はそれよりずっと明快な言葉であると言えるだろう。
一応おさらいしておくと、ここで言う Web とは World Wide Web の略称であり、以下の 3つの技術を柱として構成されるハイパーテキストシステムのことである。
-
HTTP
Hypertext Transfer Protocol の略。情報処理技術全般を学んだことのある人であれば「アプリケーション層のプロトコルの一種」という説明で通じるのだが… 要するに Web で扱われる通信上のやり取り (GET: (コンテンツの)取得、 POST: (フォームデータの)送信、等々…) を処理する通信方式の規格である。ポート番号が標準的に割り振られていて、通常、平文のものは 80番、 SSL を用いたセキュアなものは 443番を使用する。
-
URI (URL)
コンテンツを同定する場所を表す名前として定義された URL (Uniform Resource Locator) という概念は、そのままあらゆる固有概念を同定する名前として URI (Uniform Resource Identifier) という概念へと拡張された。スキーマ名、ドメイン・ホスト名 (または IP アドレス) (+ポート番号)、ロケーションパス、プラスアルファの情報を一行の文字列にぎゅっと押し込めたもので、通常 Web ブラウザのアドレスバーに表示されるアレのことである。
この名前をメモっておく (ブックマークに入れておく) ことで同じコンテンツに何度でもアクセスできるし、この名前を指定して記事から記事へとリンクを貼ることもできる、と説明すれば、これが Web において如何に重要な概念であるかは理解できるだろう。
-
HTML
Hypertext Markup Language の略。通常、 Web ページはこれを使って書かれていて、 Web UA (User Agent) がこれを読み込んで画面表示をレンダリングする (UA は通常 Web ブラウザのことだが、 UA としての機能が組み込まれたものであれば良く、必ずしも Web ブラウザであるとは限らない)。
Markup とある通り、マークアップ式の言語である。例えば、文中でこのように強調して表示したい箇所には、
<strong>
〜</strong>
というタグを、強調したい部分の前後に挿入して挟み込んでやる、といった要領で、文章にマークアップを加えていくことで整形したり、意味合いや機能を加えていったりするものである。また、 Hypertext と言われる所以は、<a>
タグによる Hyperlink にあり、この Hyperlink が文書から文書へ相互に参照を張り巡らす様が、まさに Web を Web (蜘蛛の巣) と言わしめる所以でもある。
…以上のうんちくは適当に読み流して頂いて構わないんですが(^o^;A、この辺の基礎知識を理解している方であれば、 Web という言葉を、少なくともインターネットそのものの意味で使っちゃうような事にはならないと思う。
ところで、言葉が曖昧に扱われる理由には、言葉自体が実際定義があやふやで曖昧である場合を除いても、他に以下のいずれかの場合がありうるのではないかと思う (他にもあるかもしれんけど)。
- 話者がその言葉をよく理解していない場合。
- 話者がその言葉を敢えて曖昧に用いたい意図がある場合。
結局のところ何が言いたいのかというと、よーするに「Web は死ぬのか?」というテーマで議論に参加している人々というのは、そもそも Web という言葉をあまり理解していないまま議論に参加しているだけなんでねーの? ということである。(うわーひどーい)
Web 技術を細分化して評価する
とはいえ、 Web の周辺技術はこれまでに様々な変遷を遂げ、多くの拡張や応用が施されており、そういう意味では、リンク先記事が試みた、 Web (周辺) 技術の切り分け評価は、本論においては意義のあるものだと思う。 Web 周辺のこの技術は今後も使われ続けるだろうし、この技術は今後は廃れていくだろう、みたいな話であればそれなりに興味深いとは思う。
なので、その辺の説明についても一応補足とか加えておきたかったりするのだが…、
4. Web アプリ
Web アプリという言葉も曖昧な言葉ですが、ここでは、
<meta name="mobile-web-app-capable" content="yes">などに対応していて、Web サイトのアイコンをホーム画面に追加でき、起動するとアドレスバーなどはなく、その Web サイトがフルスクリーンで表示されるものを Web アプリと呼ぶことにしましょう。
どうやらリンク先記事の著者的には、モバイルアプリのように見えるものとして動作するものでなければ Web アプリとは呼ばないようである。 Web アプリという語感からこうした語弊が広がっている可能性はあるが、通常、 Web アプリケーションと言えば、 Web サーバーがユーザー操作に応じてプログラマブルに動作し、コンテンツを動的に生成したり蓄積したりするようなものの総称であって、古くは掲示板の CGI から、ブログや Wiki などのいわゆる CMS、データベース的なものから検索サイト、はては SNS やネット通販、地図や天気予報などに至るまで、 アプリケーションとして動作し Web UA でアクセスできるものであればすべて Web アプリケーションの一種である。
※ゲームの類を含めたがる人も多いと思うが、過去に Web 上で公開されたゲームであったり、あるいはいわゆる「ネットゲーム」「ソーシャルゲーム」の類なんかは、その実態が本質的には単に Web 上で「配布」されているだけだったり、通信はしているけど Web の要件を満たさなかったりすることが多かったようにも思うので、 Web アプリケーションとは分けて考えたほうが良いと思う。
特に、 CMS の類 (特に、例えばニュースサイトなど) なんかは、サイト来訪者から見れば単なる Web サイトのように見える一方、サイト制作管理者的には Web UA 上での操作のみでコンテンツを追加・編集することができるれっきとしたアプリケーションとして動作するものであり、このことは、 Web アプリケーションがすべてのユーザーに対して必ずしもアプリケーションっぽく振る舞う必要のないものであることさえ表すものである。
それ以外の用語の説明については概ね問題なさそう。
んで、「死ぬ」ってどういうこと?
そこで、それぞれの概念に対する、死ぬもの、死なないものとしての評価について検討してみるのですが、 Web アプリが App Store や Google Play などのアプリストアに登録できない
ことを以って死を宣告するという乱暴な論展開についてはそもそも Web アプリケーションそのものへの誤解があったっぽいことから目をつぶるにしても、 Web ブラウザが使われなくなるから Web サイトも衰退するとする議論についてもいささか横暴だと感じずにはいられない。
純然たる「Web ブラウザ」の利用がモバイルデバイスにおいてはそれほど多くないというのは恐らく事実なのだろう。そもそも Web ブラウザそのものを起動しようとする一番の目的は、検索サイトを介した調べものになる。 PC からの利用ではそういう形での調べものからよく利用するサイトをブックマークし、常に Web ブラウザからアクセスするような形を取ってきたが、モバイルデバイスではこれが一変して目的別にアプリとして細分化され、ニュースを読みたければニュースアプリ、お天気を調べたければお天気アプリ、場所へのアクセス方法を調べたければ鉄道路線情報アプリや地図アプリ、そして SNS にアクセスしたければ SNS 用の専用アプリと、目的に応じて個別のアプリを起動するのが普通になり、その分 Web ブラウザを敢えて起動する機会はぐんと減っていった。
ここまではいい。
問題は、 Web ブラウザそのものを起動しないことが、果たして Web ブラウザが使われなくなる理由となりうるのかという点。現状、 iOS にせよ Android にせよ、ハイパーリンクの URI に対する処理は、そのスキーマや MIME 情報、ものによってはドメインなんかも加味して、対応するアプリケーションを起動するというようなものになっている。 Android の場合だと、 Google Map にアクセスしようとした時点で Google Map アプリが起動しだしたり、 YouTube コンテンツにアクセスしようとした時点で YouTube アプリが起動し出したりするなど。
そうやって個別のアプリで処理できる場合には良いが、インストールされているアプリでは対応できないコンテンツ、要するに、単なる野良 Web ページだったり、かなり専門性の高い (よーするにマニアックな) サイトだったりすると、対応するアプリがないので、 OS としては Web ブラウザに任せざるを得ない。
Web というのはその名のとおり、サイトを横断的にリンクし合うものなので、利用者の端末にとって未知のアプリケーションにアクセスするようなリンクを踏んでしまった場合には、 Web ブラウザに頼らざるを得ない。 Web 通販を語る際に「ロングテール」という言葉がよく使われてきたが、モバイルユーザーにとっての興味のロングテールをカバーする存在として、 Web ブラウザは今後も使われ続けるだろう。
なお、こうした横断的リンクによって Web ブラウザを起動せざるを得ないケースにおけるユーザー体験の悪さを回避するために、 Facebook が Instant Articles を始めたのも、SmartNews が SmartView 機能を搭載しているのも、これらの理由からです
といったような流れが出てきていることが指摘されているが、これはそのとおりだと思う。ただ、こうした動きはむしろ Web サイトを延命することになるのではないかと思う。 Instant Articles や SmartView、いや、古くは Yahoo News なんかでさえ本質的には同じものだったりするわけだが、こうしたものに賛同し、 RSS に乗せて記事を出稿する Web メディアが、それを理由に自社 Web サイトを潰してしまうとは (媒体のブランディングなどを考慮すれば) 考えにくいように思う (零細メディアが経営判断により潰してしまうケースがないとは言い切れないが…)。
以上のことからおいらの個人的な見解としては Web サイトも Web ブラウザも衰退というほどの状況には至らないだろうと思っているのだが、ここまで考えたところで、そもそも「Web は死ぬ」と言っている人と、「Web は死なない」と言っている人との間で、本質的には議論が噛み合っていない可能性があるのではないかと気がついた。
どういうことか。それは、「死ぬ」という言葉のニュアンスをどう解釈するかによって議論が割れるのではないか、ということだ。つまり、
- 「死ぬ」という言葉がその概念そのものの衰退、すなわち「ほとんど使われなくなって、やがて廃止に追い込まれる」ぐらいの意味合いを指すのであれば、「そんなことはない」と反応する人が多数派になるだろう。
- 「死ぬ」という言葉が、その概念に乗って行う商売が成り立たなくなる、という意味合いを指すのであれば、賛同する人は割と多くなるかもしれない。
Web をめぐる商売
Web 上で展開される商売にも様々なものがあるし、その関わり方も様々なので、結局は一様に言い切ることができるものではないとは思う。そもそもモバイルアプリ界隈がそこまで儲かっているのかというところも正直怪しいもので、結局は Web を使うかモバイルアプリという形を取るかは方法論でしかなく、むしろそこで提供されるサービスそのものの内容や質、そしてブランディングが勝敗を決めるのではないかとも思う。結局はね。
Web 界隈を周辺技術で切り分ける議論もそれなりに意義深いものであるとは思うのだが、それに加えて、業務 (サービス) 内容ごとに切り分ける議論もあっても良いんじゃないかと思う。そうすれば、今後、モバイルデバイス自体がどういう発展を遂げてゆくべきか、そして機能を補完するという視点からどんなアプリを作ったら受けるのか、なんて辺りも見えてくるんじゃないかな。しらんけど。
脱サラ、それから。 ― 2015年06月11日 13時40分21秒
サラリーマンだったおいらが某社を辞めたのは 2006年の 4月末。 4月いっぱいは有給を消化させてもらったので実質は 3月末で辞めたようなもんなんだけど、それから 1年はぶらぶらしていた。ニートってやつだ。何か明確な目的があって会社を辞めたわけでもなく、溜め込んでいた貯金を、精神と一緒に食いつぶしながら、自分が何をやるために時間を費やしたいのかを考えるために時間を浪費していた。
フリーランスとか起業とかってのは、当時はほとんど考えてなかった。 6年間もサラリーマンやっていながら、他所から仕事を取ってこれるようなコネというか、ツテというのはほとんど持っていなかった。本当はその当時にすぐにでも、かつての出向先の人とかに連絡でも取っていれば、そのツテで何かしらの仕事を回してもらえたのかもしれない。でも少なくともあの当時は、そういうふうに行動を起こす気にはなれなかった。
その後 1年間ほど派遣社員として某所で働いて、年度の変わり目近くになって、昔の同僚のツテで仕事を回して貰えそうな話が出てきた。更には今のかみさんの知り合いに、当時念願かなって司法書士の資格を取ったという人が、会社を起こすなら手続きを引き受けるとまで言ってくれた。こうしたありがたい縁が重なって、おいらはそれまでホームページのタイトルに使っていた「はらぺこ」という名前で、会社を起こした。
その後、最初にもらってくる予定だった仕事がポシャって、慌てて某首都圏のフリーランス向けに仕事の面倒を見る組織を訪ねて、そこに言われるがままに個人事業の開業やら青色申告承認やらの申請をやって、結局のところ経営者とフリーランスの二足のわらじを履くことになり、そこでもらってきた仕事をこなすも希望していた内容ではなく (仕様からテストを起こす仕事かと思ったらテストマシンをひたすらアドホックにいじり倒すだけの仕事だった)、半年そこいらで辞めてしまったらちょうどその時期にリーマン・ショックにぶち当たり、次の仕事も見つからないまま困り果ててしまうことに。
そんな折にまた昔の同僚 (一応さっきのとは別の方) のツテで仕事を回してもらえることになり、それでやっと会社の方の売上が立てられるようにはなったのだが…。
脱サラしてから 10年目、会社を起こしてから 8年目、更には結婚してから 4年目を迎えている今日この頃。脱サラ以降の仕事人生について、今ここで総括するならば、正直言って完全に失敗だったと思ってる。
何故。何が失敗なのか。
実は一番無駄だったように見えるあの最初の 1年、その終盤ぐらいになって、自分がやりたいと思える目的のようなものは大分掴めていて、当時はまだ技術的なネックはあったが、それを達成することはひとつの目標になると自分では考えていた。
それから 8年以上がたった今も、その目的に関して、ほとんど着手すらできていないような状況だ。この業界では、勤め人である限り、時間的にも体力的にも、業務以外のことに割くだけの余裕はなかなか得られない。いや、得られないものだとおいらは勝手に思い込んでいた。
実際のところ、サラリーマンだった頃も、派遣社員だった頃も、あるいはフリーランスとして出向していた頃も (上記で書いた半年以外にも、経済的事情により 1年間近くフリーランスとしていくつかの現場に出向していた時期があった)、仕事自体が夜遅くにまでなりがちだったり、通勤時間もまあまあ長かったりで、外で飯を済ませて家に帰ってシャワー浴びてぐぅ、となってしまうことは多かったように思う。
しかしその一方で、週一ぐらいでミーティングをし、持ち帰りで家で作業をこなす日々に、そこまで余裕があったのかというと、それも微妙だ。十分な報酬が得られていればまだいいが、様々な事情により報酬も十分に得られなくなると、かみさんを外に働きに出し、自分は家事に追われながら、必要な作業をなんとかこなす日々が続いた。とても自社開発にうつつを抜かす余裕はなかったように思う。
家族に我慢を強いたという意識も、自分で失敗だったと感じてしまう大きな一因になっている。出向で稼いでいるときには時間的に我慢を強い、稼ぎの少ない持ち帰り仕事の間は経済的に我慢を強いた。経済的なことについて言えば自分の親にも迷惑をかけたし、具体的なことは言えないが関係各所にも迷惑をかけ続けている。
前者についてはこのままでは埒が明かないという思いがあり、後者についてはもうこれ以上は迷惑をかけられないという思いもある。もうそろそろ潮時なんじゃないか。
起業を考えている人がもしこれを読んだならば、おいらのようになりたくないなら起業なんてやめてしまったほうが良い。勝てない喧嘩はするなというが、準備に準備を重ね、勝てる公算を立ててからでなければ、起業なんてするものではない。
つまりは気持ちの問題なのだ。精神論は笑えない。どんなに忙しい日々を送っていたとしても、成し遂げたい目的がもし出来てしまったのであれば、なんとかして時間を作って、少しずつでもそれをこなしていくべきだ。そしてその目的を一定のところにまで成就し、他者の評価の目に晒し、その結果、その成果に目を留め、その先にある進化に期待の声が寄せられるならば、その時にこそ、初めて起業を含めた新しい身の振り方について考え始めれば良い。それからでも全く遅くはない。
その一方で、見切り発車で居場所も経済的担保もかなぐり捨て、その先に待つ孤独や貧困に精神を蝕まれるくらいなら、ただ忙しいぐらいのほうがよっぽどマシだ。忙しすぎてボロボロになって精神を病むほどならさっさと転職を考えるべきだが、そこまででもないのであれば、そういう状況のうちにやれることはやってしまうべきだ。迷惑をかけない程度であれば多少のズルはしてもいい。
おいらは今のところ、まだその目的そのものについては諦めたつもりはないんだが、その一方で、そろそろ今の生活については、一度けじめをつけなきゃいけないだろうなとは思い始めている。それがどういう形になるのかは、今のところまだわからない。交渉次第では、現状維持もできるかもしれないが、正直それは期待していない。
歳を重ねてしまったからと言って、それが何かを諦めなければならない理由にはならないと思う。でもその一方で、歳を重ねれば重ねるほど、身体的には不利になる。焦っても仕方ないが、立ち止まっているわけにもいかないのだ。
剣道が某ヨットスクールみたいに扱われているらしい件 ― 2015年05月29日 12時13分43秒
今回の話題はこの tweet が発端。
剣道の指導をしている人が
「剣道やったからって礼儀は身につかない。やりたくない奴はやるべきではない。親の勘違いを何とかして欲しい。」
とことあるごとに言っていた。
— 石雲ゴミ助(ウオッカ) (@MtMikasa) 2015, 5月 27
んで、これに対して以下のような反応を示したのですが、
え、子どもの頃にやってた身としては礼儀もちゃんと教えてやれよって感じなんですが。 >https://t.co/KzdHvYhFvN
— T.MURACHI (@T_MURACHI) 2015, 5月 28
@T_MURACHI 3本勝負の試合で 1本獲ったところでガッツポーズしたのを審判に咎められて 1本が取り消され、そのあと 2本獲って勝つには勝ったけど先生にボロクソに怒られたなんてことがあったりもしたんだけど、今は時代が違うのかね…?
— T.MURACHI (@T_MURACHI) 2015, 5月 28
どうもそういうことが言いたかったわけではなかったようで (文脈追ってから反応しろよ>ヲレ)、その後、リプライをいただき、以下のようなやり取りが続きました。
@T_MURACHI 最初から当人が剣道に意欲があればいいのですが、「学校で落ち着きがないから…」と言った理由で親に連れてこられる子が多いのだとか。野球やサッカーと違って、「剣道」が何だかわからない子が半分以上だと大変だと言ってました。あくまで、ある少年団の話ですので…
— 石雲ゴミ助(ウオッカ) (@MtMikasa) 2015, 5月 28
@MtMikasa あー、相撲部屋とかに多い系の話ですね… 某ヨットスクール的な… ('A`)
— T.MURACHI (@T_MURACHI) 2015, 5月 28
@T_MURACHI 武道を奨励するオッサンって、スポーツとしての武道を衰退させているような気がするんですよ…
— 石雲ゴミ助(ウオッカ) (@MtMikasa) 2015, 5月 28
もしかしたらおいらが少年剣道やってたぐらいの時代でも似たような使われ方はしていたのかもしれないのですが (武道全般で似たようなことは多かれ少なかれ昔からあるのかも…)、なるほどたしかにこういう意味であるなら大人たちは剣道に限らず武道に子どもの人格形成を期待し過ぎなんだろうなとは思います。まぁ、大人問題ですよね。
おいらの世代ぐらいまでは、当時漫画からアニメ化もされてファミコンのゲームにまでなった「六三四の剣」の影響もまぁまぁあったような気もします。剣道がかっこいいって、スポットライトが当たってた時代も、あったんだぜ。おいらは単に兄貴がやってるのを見て始めただけだったんだけど。
るろうに剣心がどのくらい影響していたかは知りません (ワッキーがコミックスのコラムに「剣道少女=ポニーテール」みたいなことを書いていたのは覚えてる)。最近は歴女の亜流で「刀女子」なんてのもあるらしいですが、競技としての剣道には全く影響はないんだろうなぁ…。
あとやっぱり「サウスポーNG」とか「喜び表現NG」とか、あとは心技体一致の打とつでないと一本にならないみたいな審判のわかりにくさとかあって、そのへんが国際的には流行らない理由になってるのかなぁとか… なんか最後の方は与太話になってしまいました。かしこ。(汗
日本の経営者が人材不足を嘆いてる件 ― 2015年05月28日 15時39分15秒
おいらのブ米。
「日本では雇用主の83%が、職に適した人材を探すことが困難だと回答した。」ということらしいので、単に雇う側が無いものねだりしているだけの可能性が微レ存…。 / “世界で最も人材不足が深刻な国は日本(調査結果)” http://t.co/YpvXOmSGz4
— T.MURACHI (@T_MURACHI) 2015, 5月 27
微レ存どころじゃないですね…(^^;
Twitter ではここからさらに @shimashima35 の人とこんなやり取りを交わしていたのですが…
@T_MURACHI 元々日本では「欲しい人材は普通に探してもそうそう見つからない」という共通認識みたいなのが根底にあって、だからどうにかして自分のところで育てようと新卒採用にやっきになる文化が定着してるんじゃないかなとか思ってたりもする。
— T.MURACHI (@T_MURACHI) 2015, 5月 27
@T_MURACHI 明確なJob Descriptionが提示できていなければ、そりゃ適した人材以外もくるでしょうよ。
— しましま(偽) (@shimashima35) 2015, 5月 27
@shimashima35 人事部問題すなー(´・_・`)
— T.MURACHI (@T_MURACHI) 2015, 5月 27
@T_MURACHI 人事部だけでなく、会社として人事権をどこに持たせるかという話でもありますよ。人事部集中って世界的には少ないはず。
— しましま(偽) (@shimashima35) 2015, 5月 27
これはもう本当にそのとおりで、大きい会社が人事管理を補助するためのセクションとして人事部を持つのは理解できるけど、採用も含めて人事全体を人事部が主導して全部取り仕切る、なんてのが日本では慣習化していて、部署ごとの都合なり技術的な専門性なりを理解できてないような人が求人広告書いたり面談やったり全社的な都合を押し通すような異動を決めたりなんてやってたらそりゃあミスマッチで溢れますって、って話なわけで。
ブ米での反応としては、日本の経営者を責めるような発言もまあまあ見られましたね。 id:fromdusktildown の人の米が実に示唆的。
世界で最も人材不足が深刻な国は日本(調査結果)経営がうまくいかない時に「労働者のせいだ」と考える経営者は「人材不足」と答え、「経営が悪いせいだ」と考える経営者は「人材は足りている。間違っているのは経営のやり方だ」と答える。日本は前者が多い国。
2015/05/27 12:36
ところで、ブ米では「育てないから人材が不足するんだ」といった発言もちらほらと見かけたのですが、これについては少々疑問です。日本では新卒採用が慣習化しているので、タイミングさえ外さなければ、未経験者に対する雇用の間口は開かれている方だとも言えます。職種にもよるのかもしれませんが、そうした企業は職業経験を最初に構築し始める場としても機能していて、そこである程度の年数を在籍することによって、以降の転職活動等における経歴評価の土台を形成した人たちが、ひとつの場所にしがみつかなくともなんとかうまいこと生きながらえているというケースもままあるのではないでしょうか。
多くの会社が採用の際にその人の能力を職歴 (と面談してみた際の第一印象) ぐらいでしか評価できてないっぽいことについてはそれはそれで問題だとは思うのですが…。
日本の企業が他国に比べてどの程度の人材育成に金や時間を費やしているのかについてはあまり承知していないのですが、その点について単純比較した場合においてはそこまで何もやってないということもないんじゃないかと思うんですよ。むしろ頑張っている方なのかも。(OJT を育成に含めて良いのか否かについてはなんとも…)
ただ、技術継承の閉鎖性というか、ローカルノウハウばかりが大事にされてしまっているが故に、ある企業では通用していた人員が、同業他社に転職した時に全く通用しない、あるいはある人に任せていた仕事が、その人がいなくなった途端に全く回らなくなってしまった、みたいなことが頻発しているんじゃないかな、ということの方が、おいらとしては気になっています。ガラパゴスという言葉でよく物事が揶揄されていた時期がありましたが、これ、本当は日本という国単位でのスコープに当てはめるべきなのではなくて、日本に存在する 1つ 1つの企業単位でのスコープに当てはめるべき話なんだと思うんですよね。
日本でも雇用の流動性を上げるべきだ、という声は、特においらがやっているような業界界隈ではよく耳にするんですが、この辺の問題をよく認識しないまま、雇用の流動性だけ上げても、大抵の企業は業務の効率性を上げられないばかりか、むしろ落としてしまう一方だと思うし、それをある程度のところ以下には落ちないように、個々の作業の単純化を推し進めていった結果が、今の派遣期間工などに見られるような、よそでも通用するようなスキルが全く身につかないまま使い捨てられる非正規雇用の現実として、既に現れちゃってるんじゃないかな、っていう気もします。
アポ無し突撃とノウハウの継承 ― 2015年05月27日 10時49分52秒
Twitter 使ってると、 TL 上のアーリーアダプタ () な人たちがいろいろと糞RT してくれるので、ネタに困らなくていいですね。^^
ホント、テレビの制作スタッフのバカって自分のことしか考えてねぇな。「明日オンエアなので今しか時間がないのです!」って、知ったこっちゃねぇよ。「今は無理なのですが…」と言うと「明日オンエアなんですよ!」って知るかよ。うんこ食ってろ。貴様らは「ワシらはテレビ様だゾ」という気持ち改めろ
— 中川淳一郎 (@unkotaberuno) 2015, 5月 17
最近はバラエティとかでもアポ無しで突撃って多いですよね。ロケに行ってる芸人さんに行き当たりばったりでやらせちゃうやつ。あれなんてスタッフは楽だよなーとか思うんですよね。特にプロデューサーは楽でしょうね。番組制作スケジュールとか、そんなに緻密に考えなくてもいいんでしょうしね。
個人的にはこういうのって、古臭い因習としての「テレビ様」的価値観が未だに蔓延っている問題、というよりは、番組制作のノウハウが継承されないために、プロデューサーとかの制作首脳陣が無能化していっているとか、そっちの方の問題なんじゃないかなぁとか思うんですよね。本当は出来るんだけどやらないんじゃなくて、それをうまいこと順序立てて完遂する方法を、実はあんまりしっかり心得ている作り手が減ってきてるんじゃないかな、っていう。
とっくの昔に番組制作会社=テレビ局ではなくなってますし、下請け孫請け構造は複雑化の一途を辿っていらっさるようですし、局やめて独立した人が局から仕事をもらってきてた下請け会社が、その会社起こした人たち周辺とかもう定年で辞めちゃってたりしてて、そんな中で予算も時間もないしもういいやって感じでテキトーなやり方で番組作るのが習慣化しちゃってから、更にその中の人が独立して孫請け作ってとかやってたら、そりゃちゃんとやってた頃のノウハウなんて、継承されるはずもないでしょうしね。
気まぐれ再開 ― 2015年05月26日 13時29分04秒
思うところあって、これからまたしばらく、なるべく毎日時間を割いてブログを書こうと思う。といっても、あまりこれにばかり時間を割いてもいられないので、その日その日で話題になっていることなどについて、ぶっきらぼうに書き殴るスタイルでいくつもり。そりゃもう、その程度の内容なら Twitter でもいいんじゃないの? っていうぐらいの勢いで。
しかしまぁ、 40 近くにもなって今更… ねぇ? (謎
プログラミングをやりたいのか自己啓発をやりたいのか ― 2014年09月06日 10時25分14秒
前回「極力更新し続けたい」とか書いておきながらいきなり 2週間も空けちゃってるわけですが… もうどうしようもないですね、習慣づかないものは。
最近は Qiita などというプログラミングなどの開発周りの技術ネタしか投稿されないブログっぽいサイト (こういうのも SNS っていうんですかね?) でちょいちょい拾い読みすることが多くなりました。これまで、ソフトウェア技術者が集まりやすそうなサイトというのはいくつかあったと思うのですが、 Qiita みたいな、基本的に技術ネタのみという縛りがあって記事を寄せ合うサイトって、そういえばあんまりなかったなぁ、というか…。通常のブログサイトだと、やっぱりプログラマーであってもプログラミング以外のネタ (単なる日記であったり、一般に報じられているニュースや話題への反応であったり) も投じられていることが多くて、 /.-j なんかも基本はニュースサイトですし、そこで ID 持ってる人の日記も必ずしも技術ネタではないということが多かったので、 Qiita みたいなサイトが今後ますます盛り上がっていくんだとすれば、それはとてもいいことだと思うんですよね。
おいら自信も、今社長ブログの方で書いてる API デザインのネタも、本当は Qiita みたいなサイトで書いてたほうが色々と反響も得られていいのかなぁとか思い始めています (どーせアフィリエイト儲からんし)。そもそもコード引用して載せたりするのに WordPad 全然便利じゃないよね、っていうのもフラストレーションとしてはあったりもするのですが…。
で、先日、クラスの命名のアンチパターンという記事がまあまあ興味深かったので、ストックした上でさらにはてブでブクマしたのですが、後日ブクマページ覗いたら 700以上ものブクマ集めててびっくり、ということがありまして、さすがにクラス命名ぐらいのわかりやすい話だと興味示す人も少なくないんだなぁなどとも思ってみたり。 oop 全般ということで開発言語を選ばない話題ともなるとさすがに耳目も集めるものなんですかね。 ID 生成の話題なんかも結構ブクマ集めてましたし。
その一方で、もう少し専門性の高い話題、例えば特定のプログラミング言語やフレームワークなどの環境を限定する話題であったり、ソフトウェア工学やセキュリティ界隈などの学術的な話題であったり、ハードウェア関連の具体的な話題であったりとなってくると、関心をよせる人の数もどうしても少なくなっていく。それはどうしても仕方のない事で、 IT 関連の技術者を目指すすべての人が、それらのすべての話題を網羅して会得し関心を持ち続けるというのは、到底各人の時間的、体力的、その他あらゆる面でのリソースが追いつきっこないわけですから、それぞれがそれぞれの今与えられている仕事や直面している課題、あるいはもっと純粋な興味の末、なんでもいいのですが、そういった各人の境遇の末に抱く関心の方向が、それぞれみんなバラバラで、その結果としてそれぞれの専門に集まる耳目が少なくなるのは、まあ当然っちゃ当然ですよね、とは思うわけです。
実際の所、何らかの専門性の高い分野自体に、まだまだ踏み込めていないという人も多いと思います。まだ学習し始めたばかりという駆け出しの初心者さん、日々与えられた仕事をただなんとなくこなしているだけのサラリーマンSE、そして、憧れだけで「プログラマーになる」ことを目指してコの業界に飛び込んできちゃった方々とか…。
昨夜、寝る前になんとなーくはてブのホッテントリに、 18 till i die というプレゼン資料が上がっているのを見つけまして、ざっと内容をさらってみたのですが、正直、「ああ、またかぁ…」という感想だったんですね。
このプレゼンは Yoshiori さんという方が、Developers Summit 2014 というイベントに寄せて作られたものだそうで、そもそもこのイベント自体が、ソフトウェア技術者の自己啓発を目的としたイベントだったようです。この方自身は非常に有能な技術者さんなのだと思いますし、この資料自体もイベントの内容に則した、よく出来た発表内容だったのだと思います。
ただ、成功体験に基づいて綴られただけの自己啓発コンテンツを求め合う同業者の慣れ合いイベントを「サミット」などと呼んで盛り上がっていたり、そこで発表された資料を有難がって読んで「これはエモい」とか言って喜んでいる様を見るにつけ、彼らは一体何をしたい人たちなんだろうな、という疑問は沸き上がってくるわけです。
現在、多くの「勉強会」と呼ばれるイベントが、さまざまな専門分野において各地で行われていたりしています。それらも得てして「勉強会」と呼ぶにはあまりにイベントイベントしていて、その場で勉強をするために集まってきているというわけでは必ずしもなく、むしろ同好の士と顔を合わせ、その専門分野について話を聞き、あわよくば会話を交わし合うことで刺激を得、ますますその分野に邁進する力を得ることを目的としている節があります。そういう意味ではこういった「勉強会」イベントも、ある種の自己啓発イベントと言えなくもないのですが、そこで寄せ合う発表内容はあくまで専門技術に特化した内容であり、自分たちの関心の先に発展があることを確認しあう場であるからこそ、そういう力も強め合い、高め合うこともできているんだろうなという納得もあるのです。
言ってみれば、その専門分野に邁進する (あるいはそれによって各人の実際の興味対象や直面する課題の解決を目指す、というのでもいいのですが) という目的が大前提にあって、その目的を遂げるための力を得るために啓発しあう場として機能する、という点で、これらのイベントは役に立っているのだと思うのですね (もちろん、純粋に勉強する気でいらっしゃっている方も少なく無いと思います…)。
その一方で、割と純粋に自己啓発だけやってるイベントに喜んで参加する人たちとか、そういう場で発表された、自己啓発だけで技術的には特に内容のない資料を読んで喜んでいる人たちって、実際の所、自己啓発自体が目的になっちゃっていて、その後の各人の関心事を深めるという活動にまでは、残念ながら至っていない人も多いんじゃないかと危惧してしまいます。
取り越し苦労だといいんですけどね。
近況とか氷水とか ― 2014年08月23日 11時42分43秒
なんとなく気が向いたので久しぶりに更新。社長ブログの方はちょくちょく更新を続けているのですが、こちらは 1年以上開けてしまいましたか…。
去年の今頃は個人事業主として某原宿で仕事していたのですが、なんか C++ と Win32 を理解できる技術顧問的な立場に据え置こうという思惑があったようで、せっかく脱サラ独立したのに一私企業の組織に組み込まれて生きていかなきゃいけないんじゃ意味無いじゃんという思いから精神的に参ってしまってさっさと逃げ出してしまったということがありまして (^_^;A、それ以降、前々から付き合いのある某所から、そんなに根詰めて時間掛けなくてもいい調査やらプロトタイピングやらのゆるい持ち帰り仕事を頂いて何とか生活を凌いでおります…。
今の仕事もいよいよ本開発にさしかかろうとしているのですが、さまざまな政治的事情があって報酬は据え置きのまま、納品後の成功報酬も口約束だけで金額もどうなるかわからないという…。体調が相変わらずいまいち振るわないのでガッツリ常駐の仕事を寄越されるよりはまだマシなのですが、もうちょっとカネになるマシな仕事を紹介していただけるんであれば、責任が発生する前にさっさとそっちに流されたい気分ですね…('A`)
そういえば家庭の事情等も色々とありまして、 5月に引っ越した際にASAHIネット解約しました(^_^;。といっても事務所の方で法人として使わせて頂いてますし、ここのブログを継続するためだけに毎月 300円払い続けてはいるのですが…。
そんなわけで、 300円がもったいないのでw、今後はこちらのブログも極力更新し続けたいと思います。主に Twitter でつぶやくと連投になっちゃいそうな類の長いつぶやき (よーするに愚痴) を吐き出す場所として使うことになりそうですが…。
せっかくなので時事ネタに触れてみることにします。アイス・バケツ・チャレンジ、ですか…。
ネット界隈では賛否分かれていらっさるようですね。個人的にもなんだか気持ち悪い運動だなあと思っていて、何でかというとこれは多分、チャレンジを振ってくれる友人も、その後にチャレンジを振る相手の友人もいる人だからこそ楽しめる遊びだからだと思うんですね。で、それをつべだの Ust だので動画うpしたりして SNS 使って周囲に見せびらかしていらっしゃるわけですから、そういう行動に疎外感を勝手に感じてしまう方々というのは一定数いらっしゃるはずで、おいらとしてはそういう精神的に孤独な人々が実際に社会的に孤立してしまうがゆえに生じるさまざまな問題に対してこそ、お金というのは投じられるべきなんじゃないかと思っていたりもしているんで、結局のところは価値観の相違なんでしょうね…。
とはいえ、無名の難病への認知度を向上させ、実際に寄付金の向上に寄与したわけですから、仕掛けとしては大成功だったのだろうと思います。おいらが好きか嫌いかなどというのは激しく些細な問題で、己が最も関心をよせる物事への助力のために手段を選ばないというその姿勢は、見習うべきものがあります。結局のところ、資金というのはもぎ取るものなんですよね…。2匹めのどじょうを追って各方面が似たような真似っ子企画を立ち上げたらそれこそ迷惑以外の何物でもないですが、まぁ好きにしたらいいんじゃないかな(´∇`)♪。
ちなみに、仮にもそんなことはありえないとは思うのですが、もしオイラがこのチャレンジに指名された場合、恐らく取る行動は指名してきた相手によって変わると思います…。
とりあえず、面識のない人、見ず知らずの人から突然振られても、間違いなく無視します。例えば Boost.勉強会で隣の席に座ってたじゃないですかーとか言われても十中八九無視します(^_^;。それから面識がありすぎる人、たとえば某 BBS の面々とか、某元同僚さんとかに振られた場合、やっぱり笑顔で無視します。「やだよw」っつって無視します。
でもね、例えば顧客として取引のある人であったりとか、過去にお世話になったとおいらが勝手に思っている人 (某 O 社の DQN 社長とかw) とかに突然振られてしまった場合、残念ながらお断りできる自信がありません。これは言ってみれば飲み会の席でだいぶ酔いが回って気持ち悪くなってきているのにビールのお尺をされそうになった場合のシチュエーションに酷似します。大抵の場合はもう無理だからと笑顔でお断りできるのですが、様々な文脈や政治的な理由によりそれがしにくい相手というのはどうしてもいます。
つまるところ、アイス・バケツ・チャレンジに否定的な人というのは、飲みニケーションが苦手な層とだいたい一致するんじゃないでしょうかね…。
DB 操作の視点からオブジェクト指向を考える ― 2013年06月23日 22時18分58秒
シナリオ
出席簿をつけるアプリケーションを想定してみることにします。まずマスターとして、学生、講師、講義の 3つが存在するものとします。
学生
- 学籍番号 (PK)
- 氏名
- 性別
- 学年
- etc...
講師
- 教員番号 (PK)
- 氏名
- 性別
- 役職
- etc...
講義
- 講義識別番号 (PK)
- 講義名
- 担当講師 (教員番号)
- 場所
- 時間割
- 期間
- 単位数
- 概説
- etc...
それから、マスター以外のテーブルとして、受講者リストと出席記録があるものとしましょう。
受講者リスト
- 講義識別番号 (PK)
- 受講者 (学籍番号) (PK)
- 点数
- 成績 (優|良|可|不可)
- etc...
出席記録
- 講義識別番号 (PK)
- 受講者 (学籍番号) (PK)
- 講義回数 (N回目) (PK)
- 遅刻 (時刻)
- etc...
さて、ログインした講師が受け持つ講義の 1つを選択し、新たに出欠をとる画面を開いたとします (講義回数は自動でカウントされるべきでしょう)。その画面には講義に参加する全ての学生が学籍番号順にリストアップされており、点呼を受けて講師自らが学生たちの出欠状況を入力していくものとします。これをどうプログラムで表現し、実装するべきか。
ありがちな過ち
オブジェクト指向をメタファー (隠喩) の表現のために用いること自体は必ずしも間違いではありませんが、メタファー自体も手段の一つと捉えるべきです。メタファー自体が目的になってしまうと、パフォーマンスが犠牲になることが多くなります。
例えば学生と講師はどちらも人なので、 Person
クラスで抽象化して Student
と Teacher
に派生しよう、などと考えること自体は悪くないかも知れません。
// 人を表す抽象クラス public abstruct class Human { // 人を特定する番号 (学籍番号、教員番号等) public long Number { get; protected set; } // 名前 public string Name { get; protected set; } // 性別 ("M": 男性 / "F": 女性 / "O": その他) public string Sex { get; protected set; } // etc... } // 学生クラス public class Student : Human { // 学年 public int? Year { get; private set; } // ... } // 講師クラス public class Teacher : Human { // 役職 (11:助教 / 16:講師 / 21:准教授 / 26:教授 / 51:名誉教授 / 56:客員講師 / 99:その他) public int Roll { get; private set; } // ... }
あー、ちなみに言語は C# で書いてます。テストしてませんが。
で、ここまでは良いんですが、ありがちな誤りとして、それぞれのクラスのコンストラクタに DB からの読み込み機能を持たせちゃうという試みがあります。
using Db = MyNameSpace.DbAccessor; public class Student : Human { // ... // デフォルトコンストラクタ (マスタ登録時用) public Student() { } // コンストラクタ (学籍番号から情報を取得) public Student(long number) { DataTable table = Db.StudentTable.SelectByPk(number); if (table == null || table.Rows.Count == 0) return; DataRow row = table.Rows[0]; Number = number; Name = row["STUDENT_NAME"] as string; Sex = row["STUDENT_SEX"] as string; Year = row["STUDENT_YEAR"] as int?; // ... } // ... }
さすがに面倒くさいので Teacher
の方の実装例は割愛。
何故にこれがアカンのかと言いますと、まぁ例外との兼ね合いというのもあるのですが、何よりあまりにも気兼ねなく使え過ぎちゃって、知らず知らずのうちに無駄な DB アクセスが増えてしまう要因になりうるからです。あと、実際の使用に際しては実はあまり使われることのない存在になる可能性も小さくありません。
「データ取得用」のクラスは別に設ける
シナリオを読み返しましょう。講師が出欠をとるために開いた画面では、その講義への参加を登録している全ての学生が、学籍番号順にリストアップされるとしています。そのような複数の学生を特定する処理は、DB 側での SQL に任せてしまった方が効率がよいのは当然です。そこで、特定の講義に参加する学生のリストを取得するファクトリクラスを考えます。
using Db = MyNameSpace.DbAccessor; public class Student : Human { // ... // コンストラクタ internal Student(DataRow row) { Number = (long)row["STUDENT_NUMBER"]; Name = row["STUDENT_NAME"] as string; Sex = row["STUDENT_SEX"] as string; Year = row["STUDENT_YEAR"] as int?; // ... } // ... } // 学生情報管理クラス - とりあえずファクトリとして実装 public class StudentManager { // 学籍番号を指定して学生情報を取得 public static Student Get(long number) { DataTable table = Db.StudentTable.SelectByPk(number); if (table == null || table.Rows.Count == 0) return null; return new Student(table.Rows[0]); } // 講義を指定して学生情報のリストを取得 public static Student[] ListUpByLecture(int number) { // 特定の講義番号で登録されている受講者の学籍番号を受講者リストテーブルから // リストアップし、その学籍番号を用いて学生テーブルから学生の情報を引っ張る、 // までを全部 SQL でやっつけてデータを返すメソッドを想定 DataTable table = Db.LectureMembersTable.SelectByLecture(number); if (table == null) return new Student[] {}; var students = new List<Student>(); foreach (DataRow row in table.Rows) students.Add(new Student(row)); return students.ToArray(); } }
Student
のコンストラクタを internal
にするのがミソです。こうすることで、同一ファイル以外からのアクセスがコンパイラによって禁止されます。それによって、 StudentManager
クラスのメソッドを介さなければ Student
のコンストラクタは呼べない、すなわち Student
クラスのインスタンスを生成できないようになるわけです。同様のことは、 Java ならクラス内クラスにして protected
で、 C++ なら friend
を使う等で実現可能でしょう。
デフォルトコンストラクタは省いたのではなく敢えて書いていません。多分、マスタへの変更をする目的でわざわざ Student
インスタンスを生成するべきではありません。理由はいくつかあって、例えばマスタ登録のためだけにアクセサのセッターまで public
にしてしまうとメンテナンス性が損なわれるのではとか、そうではなくて全部の情報を引数に渡すコンストラクタを設けるぐらいならデータ管理用のクラス (まさにここで言うところの StudentManager
クラス) にて全部の情報を引数に渡すメソッドを書くんでも変わらないよねとか。ついでに INSERT はもとより UPDATE するためにわざわざ SELECT で情報を全部引っ張ってきてからそれをコード上で上書きして UPDATE を呼ぶとかするんでなしに最初っから PK だけ指定して UPDATE だけ呼んだ方が速いに決まってるよねとか。
NULL 可能なフィールドとかもあるし全部を引数に渡すメソッドは現実的じゃないだろうとか言うんであれば、内部データだけを持つデータ構造を定義して分離可能にしてしまっても良いと思う。こんな感じで。
public class HumanData { public string name; public string sex; // ... } public class StudentData : HumanData { public int year; // ... } public abstruct class Human { // フィールド構造体アクセサ protected HumanData Fields { get; set; } public long Number { get; protected set; } public string Name { get { return Fields.name; } protected set { Fields.name = value; } } public string Sex { get { return Fields.sex; } protected set { Fields.sex = value; } } // ... } public class Student : Human { public int Year { // こういうダウンキャストは酷くダサイですが… get { return (Fields as StudentData).year; } } // ... internal Student(DataRow row) { Number = (long)row["STUDENT_NUMBER"]; var fields = new StudentData(); fields.name = row["STUDENT_NAME"] as string; fields.sex = row["STUDENT_SEX"] as string; fields.year = (int)row["STUDENT_YEAR"]; // ... Fields = fields; } } public class StudentManager { // ... // 学生の情報をマスタに登録し、学籍番号を返す long RegistNewStudent(StudentData data) { // ... } }
まぁ、この辺は好き好きで…。
マスタデータをプールする
頻繁に見には行くけどそうそう書き換わることのないデータであり、それをプールさせておく時間をそれほど長くないセッション単位に限定するのであれば、マスタデータのメモリ上でのプールはそれほど悪くないアイデアだと思います。
public class StudentManager { // プール用コンテナ Dictionary<long, Student> pool = new Dictionary<long, Student>(); // プールをクリアする public static void ClearPool() { pool.Clear(); } // 学籍番号を指定して学生情報を取得 public static Student Get(long number) { if (pool.ContainsKey(number)) return pool[number]; DataTable table = Db.StudentTable.SelectByPk(number); if (table == null || table.Rows.Count == 0) return null; return pool[number] = new Student(table.Rows[0]); } // 講義を指定して学生情報のリストを取得 public static Student[] ListUpByLecture(int number) { // 特定の講義番号で登録されている受講者の学籍番号を受講者リストテーブルから // リストアップし、その学籍番号を用いて学生テーブルから学生の情報を引っ張る、 // までを全部 SQL でやっつけてデータを返すメソッドを想定 DataTable table = Db.LectureMembersTable.SelectByLecture(number); if (table == null) return new Student[] {}; var students = new List<Student>(); foreach (DataRow row in table.Rows) students.Add(pool[(long)row["STUDENT_NUMBER"]] = new Student(row)); return students.ToArray(); } }
但し、どういうタイミングで StudentManager.ClearPool()
を呼ぶべきかをちゃんと考えて使わないと、サーバー上で起動しっぱなしのプロセスでプールにデータがたまりっぱなし、しかもマスタメンテ画面で学生情報を修正したのに (学年とか) その変更が画面に反映されないぞー何でだーみたいなバグを誘引する原因になったりもするので、気をつけて使う必要はあると思います。特にグループ開発では。
まとめ
そんなわけで、結局のところ何が言いたいのかというと、オブジェクト指向というのは必ずしもメタファーのためだけにあるわけではないよということです。最近ではよく、「オブジェクト=物である、という説明を真に受けてはいけない」などと言われるようになりましたが、それは何でかというと、業務シナリオの中に出てくるような、実在する物だけをオブジェクトとして表現しようとすると、そのオブジェクトのクラスの中だけで何でもかんでもやり遂げなきゃならないような気になってしまうからです。学生を表現したいからと言って、必ずしも学生クラスの中だけで DB アクセスまで完結する必要はないわけです。あくまで、プログラム上での目的に応じたオブジェクト設計を心がけるべきなのです。
最近のコメント