読者です 読者をやめる 読者になる 読者になる

wolfmasa's blog

フロンターレとプログラミング関係の話題を、気が向いたときにつぶやくブログです。

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

SOFT SKILLS ソフトウェア開発者の人生マニュアル

全体を通して

ソフトウェアエンジニアの生き方みたいな本はいくつも出ているし、ほとんどが海外の話なのはちょっと残念ではあるけど、例えば情熱プログラマーみたいな本かなと思って読み始めた。

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

読んでみると、確かにそういう部分はあるのだが、それ以外の部分、例えば筋トレとか健康とか、本当に過不足なく体系的によくまとまっているような気がした。

matzが書いているように、お金の話や仕事の話は、ある程度アメリカで書かれた本ということを鑑みて読む必要はあるが、それ以外は十分今後の人生の参考にしたい本の1つだ。

キャリアを築こう

キャリアをどう考えるかという話。

自分のキャリアパスは、まず目標を決めて、それに向かって仕事を選ぶべし、という流れ。

会社での社交術、スタートアップの起業や、フリーランサーになること、仕事を辞めることなど、幅広く取り上げられているのがすごい。

こういう話は、ある程度抽象的にならざるを得ないので、参考として聞いておく他ない。

自分を売り込め!

情熱プログラマーとかでも言われている通り、自分をブランドとして確立させるためにブログやポッドキャスト!?を通して、日頃から活動すべし、などがある。

確かにその通りなんだけど、なかなか実行できないので、それだけで差別化になるという話。

これもそうだけど、ブログはどうしても埋もれやすいので、質と量を追求していかないと難しい気がしているし、ポッドキャストも続けるためにはゲストの問題など、難しい側面がある。

とはいえ、できることを1つ1つやることが、きっと次につながっていくので、やはり今年はアウトプットを意識的にしなきゃなと思う。

学ぶことを学ぼう

新しいことを学ぶことは良いことだ。

ただそれで終わらずに、どうやって新しい技術を学んでいくべきか紹介している。

とても参考になったので、簡単に紹介しよう。

  1. 全体像をつかむ
  2. スコープを決める
  3. 成功の基準を決める
  4. 参考資料を見つける
  5. 学習プランを決める
  6. リソースをフィルターにかける
  7. 使い始められるようにする方法を学ぶ
  8. 遊びまわる
  9. 役立つことができるところまで学ぶ
  10. 教える

1−6までが最初に行う準備のステップで、7−10が繰り返して学んでいくステップだ。

新しいことを学び始める時って、なんとなく本を読んだり、サンプルをダウンロードしたりして始めるけど、その後詰まってしまうことがある。その理由はいろいろあるけど、学びがスピードに乗ってきたときに、再度資料を探したり、どこまでやれば終わりかわからずにマンネリ化してしまったりする。それを避けるために、まずステップを決めて、それに乗って準備をして、その後の学習のプロセスをスムーズに、そして過不足なく進めることができる。

繰り返し学んでいくステップでは、よく言われることではあるけど、まず遊んで使ってみて、最終的には人に教えることでわからないところを埋めていく。自分なりに発見だったのは、9の役立つことができるところまで学ぶという、ゴールを意識して学びを繰り返していくところだ。どうしても言語のを学ぼうとすると、例えばGO言語やJavascriptなど最近の言語であれば、できることは際限なく、やっている中で自分を見失いがちだ。それを、自分が必要としているところから逆算することで、達成基準を明確にし、達成感を得られるという心理的効果も含めて、とても良いことのように思える。

生産性を高めよう

このあたりから徐々にエモい話になってくる。生産性を高めるツールや考え方の話。特にハードワークをしろ!という根性論が印象的だった。

ポモドーロなどは、その筋では有名な集中のためのツールではあるが、それ以外にもルーチンを決めることや、習慣を作るために必要なことなど、ソフトウェアエンジニアに限らない、一般的な生産性を高める話がある。

アジャイルな時間管理術 ポモドーロテクニック入門

アジャイルな時間管理術 ポモドーロテクニック入門

個人的にはこういう自己啓発のような話は参考になるし、結構好きだ。最近、AppleWatchを使ってポモドーロもやっているし、この本を読んでいきちんとルーチンワークを管理し始めたところだ。

自分を動かすということは難しいことだが、生涯使える技術なので、やっておいて損はない。

お金に強くなろう

エンジニアといえどもお金は重要だ。著者が、不動産運営を副業で行なっていたため、30代で現役を引退するほど資産を貯めることができたということに由来し、お金についてきちんと考えることの重要性と、その手法を説明している。

とはいえ、読んでいてとても違和感があるのは、前提としてアメリカ、特に西海岸では、ソフトウェアエンジニアの給料はとても高いということにある。

ソフトウェアエンジニアは給料をたくさんもらっているので、その給料を運用することで、より安定した人生を送ることができる、というロジックは理解できても、前提の給与水準については日本はむしろ逆のことが多いので、あまり参考にならない。

人月産業、よくSIerと呼ばれる産業ではなく、アメリカのようなきちんとエンジニアが評価される社会であれば、どんなに生きやすいことかと考えることは、1度や2度ではないと思う。

やっぱり、体が大事

健康は重要という章だが、ほとんどを筋トレやトレーニングの話が占めている。

ダイエットの話も出ているし、知識としては参考になるが、今の自分からしたらあまりすぐ実践するようなものではない。

ただ、運動することは重要だと思うし、少し意識が弱かった木がするので、時間があれば走ったりしようかなと思っている。

負けない心を鍛えよう

体だけじゃなくて、心も大事だ、ということはよくわかる。

おそらく、ナポレオン・ヒルの思考は現実化するという本に大きく影響を受けたようで、プラス思考でいくことの重要性を説き、そのためにどういうマインドでいるべきかを説明している。

個人的には、この本はあまり刺さらなかったというか、強い思いを持つことで、それが結果的に実現するという内容だが、それをひたすらにたくさんのページで説明しているだけの本のように思えて、いい思い出はない。

ただ、思いの持つ重要性というものは、価値を再認識しても良いとこれを読んで感じたので、そこのところについてはもう少し意識的にプラス思考で行こうと思っている。

最後に

この本はお勧めできる本か?と言われれば、間違いなくYESと答える。

細かい章立てで、幅広い話題に言及しているし、内容に関しても偏りは少ない方(こういう本の大体は自説を主張しすぎる気がする)だと思う。

あとは、ポモドーロのような手法に言及したり、ハードワークが大事だと根性論を持ち出したり、お金の話をして現実に引き戻したり、変化にも飛んでいる。

気になるのは、どうしてもそのページ数が多いので、全てを読もうとすると結構タフだということだ。それさえ気にしなければ、とても良い本だと思う。

ゼロから作るDeep Learning

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

GitHub - oreilly-japan/deep-learning-from-scratch: 『ゼロから作る Deep Learning』のリポジトリ

飛ぶように売れているというDeep Learning本を読んでみた。

Rebuild.fmでもnaoyaさんが絶賛していたけど、その前評判?を裏切らないわかりやすさ。

GitHubリポジトリを見ながら少し写経とかして見たら、たちまちわかった気になれた(笑

難しい内容ではあったが、説明が丁寧でわかりやすいので、詰まることなく読めたので、好評なのも頷ける。

Python入門

インストール方法などを丁寧に解説。この辺が初心者向けっぽくてほのぼのしている感じ。

パーセプトロン

パーセプトロンの基本的な考え方の解説。確かに、画像処理のブロック図と似ているし、自分のバックグラウンドからするととてもわかりやすい。

ニューラルネットワーク

いよいよ、ニューラルネットワークの構築が始まる。多分、一番重要な章ではないか。ここを理解すれば、半分は理解できたと同じ。

ニューラルネットワークの登場人物の説明だけでなく、自分の書いたコードで、実際にMNISTを使って手書き文字の認識ができてしまうのが、地味に感動する。達成感大事。

ニューラルネットワークの学習

ニューラルネットワークを使って、どう学習していくかという基本的な考え方。その後の話につながるもう一つの柱。

勾配法とか、概念は分かっていたけど、改めて実装してみると、こちらもなんだか分かった気になってしまう。

誤差伝搬法

徐々に、どうやって効率的に学習を進めるかという現実的な話になる。

誤差伝搬法の考え方は、ちょっと難易度が上がる気がしたので、繰り返し読んでようやく概要がわかった気がする。

全体を通して、説明が丁寧で素晴らしい。特に数学的な説明を丁寧に行うので、それだけでも精神的に嬉しい。

学習に関するテクニック

いかに学習を早く終わらせるか、という課題の続き。いくつかの方法を提案。

だんだん、理論でスッキリ説明というよりも、実際に動かしてみるとうまくいく、的な話が増えてくる。おそらく内容が難しいので説明しきれないと思うので、その辺のさじ加減も筆者はよく考えていると思う。

畳み込みニューラルネットワーク

ニューラルネットワークと言っても、基本的には今までの考え方と同じだが、pythonのライブラリなどの話を交えつつ、畳み込み計算に持ち込むことでより高速に実行する話を加えてある。どこまでが汎用的(python以外でも同じ)で、どこからがpython独自の話なのか、ちょっとわかりにくかったような気がする。

ただ、事例はよくありそうな話だし、CNNの解説もわかりやすかったので、なんとか話についていくことができた。

ディープラーニング

hotな話題を、軽く流す。

歴史的な話や、今取り組まれている課題など、ディープラーニングにまつわる雑学をまとめた感じ。

ある種、エピローグ的で、おまけ的なので、気軽に読むことができた。

2017年の抱負

2017年になって、いくつか目標を立ててみようと思います。

  • 毎日英語に触れる
  • 毎週ブログを書く
  • 毎月1冊以上技術書を読む

きちんと技術を勉強して、それをブログで情報発信すること。

そして、自分の幅を広げるためにも、もう一回り英語の力をアップしていく、ということが目標。

さて、毎日頑張りましょう。

2017年の抱負

2017年になって、いくつか目標を立ててみようと思います。

  • 毎日英語に触れる
  • 毎週ブログを書く
  • 毎月1冊以上技術書を読む

きちんと技術を勉強して、それをブログで情報発信すること。

そして、自分の幅を広げるためにも、もう一回り英語の力をアップしていく、ということが目標。

さて、毎日頑張りましょう。

フロンターレ 2016年通信簿

今年も全選手の今年の通信簿を、自分なりにつけてみようと思います。

採点は5段階で、だいたいこんな感じ。

  • 1点:ほとんど試合に出れず、チームに貢献できず
  • 2点:出場もできたが、活躍したとは言い難い。
  • 3点:期待通りの活躍はしたが、突出したものではなかった。
  • 4点:期待以上の活躍をしてくれ、チームへの貢献度も高い。
  • 5点:文句なしの活躍。これ以上を期待する方が酷というもの。

きっと、いろんな意見があってしかるべきだと思うので、コメントお待ちしています。

GK1 / チョン ソンリョン:4点

期待の代表クラス、即戦力GKの加入で、期待通りの実欲を遺憾無く発揮。今シーズンのチームの躍進はソンリョンが支えたと言っても良いだろう。スーパーセーブが多い、というわけではないが、さすがの安定感で最終ラインを含めて失点を大きく減らした功績は大きい。その存在の大きさは、彼が怪我をした時期とチームが調子を落とした時期がリンクしていることに現れている気がする。

DF2 / 登里享平:3点

怪我がちではあったが、出た時は安定のパフォーマンス。古株だけに頑張ってほしいところだが、もう一つ存在感を示すプレーをしてほしいところ。サイドバックの時ほど走力が生かせないチームスタイルもあるが、ドリブルかパスがもう一段階レベルアップすれば、代表が狙える位置にくるのではないか。

DF3 / 奈良竜樹:3点

序盤の快進撃を支えた間違いなく今シーズンの功労者。ただ、怪我が長引いてしまい、本当にもったいなく、またその後の戦いが厳しくなってしまった。出場した試合で見せる球際の強さや、ゴール前の危機察知能力はピカイチなので、きちんと怪我を治して、まずは万全で来シーズンに臨んでほしい。

DF4 / 井川祐輔:3点

怪我人続出で大変な時期に、きちんと仕事をしてくれた、もういつの間にか安定感のあるベテランの風格。最低限の仕事をしてくれたことは評価できるが、やはり個人的にはスタメン争いにもっと加わっている姿が見たかった。

MF5 / 谷口彰悟:4点

今年も一年間きちんと最終ラインで仕事をした職人。調子の上下は相変わらずで、不安定な試合もいくつかあったが、怪我人続出の最終ラインをきちんと年間守り通したことは素晴らしい。この調子で成長してくれることと、もう1ステップできれば、日本代表の常連が現実的になってくるのではないか。

MF6 / 田坂祐介:3点

怪我の影響もあって、前半はなかなか絡めなかったが、武岡くんが不在の中3バックの右にコンバートされると真価を発揮、最後まできちんと責務を全うした。来年を考えると、このまま守備の人として頑張るのか、もう一度攻撃の選手として挑戦するのか、タッピーの決断がとても興味がある。やっぱり見ている方としては、もう一度攻撃の選手として輝いてほしいものだけど。

MF7 / 橋本晃司:2点

2列目での出場はありつつも、本来橋本くんに期待しているものからしたら、やはり物足りない。特に、大島くん、けんご、ネットの2人が欠けた時に、ボランチ候補としてカウントしてもらえないのは、やはり力不足なのか、チームのスタイルに合っていないのか。昨年よりは良くなっている木がするので、もっとフィールドで躍動する姿が見たい。

DF8 / 小宮山尊信:2点

期待のコミであり、復活仕掛けた時期もあったが、怪我の影響で長期離脱もあり、今後の去就が不安な内容になってしまった。怪我をしたナビスコの新潟戦などはとても体が動けていて良かっただけに、怪我さえなければまた活躍できるのではと期待してしまう。あの鉄人と呼ばれたコミが怪我でほとんど出場できないとは、なんとも無念だ。

FW9 / 森本貴幸:2点

なかなかフィットできず、怪我もあり、期待通りの活躍とは言えなかった。それでも得点を決めるところはさすがだけど、ボールを納める動きとか、周囲の連携とか、動きの質を見ているとまだまだ不十分なのは否めない。来年は正念場になるだろう。

MF10 / 大島僚太:5点

10番を背負って、最初こそ気負いすぎていたが、オリンピックの年だったこともあり、徐々に実力を出し、球際やシュートの意識など弱点も克服し、日本代表に呼ばれても恥ずかしくない選手に成長した。怪我をしないこと、そしてチャンスがあれば海外に行くことも考えるだろう、来年はさらに飛躍の年にして欲しいと思うが、期待はどんどん高まって行くのが辛いところだ。

FW11 / 小林悠:5点

怪我をしなかったことが、何よりも良かったところだろう。怪我をしなければこれくらいの実力はあると思っていたが、連続ゴールの記録や、苦しいときのゴールなど、嘉人の存在感が霞んでしまうほど輝いていた一年だった。チャンピオンシップの怪我だけが悔やまれるが、自他共に認める看板選手になってしまって、入団当時を知っているサポーターとしては感無量だ。

FW13 / 大久保嘉人:4点

4年連続得点王にはならなかったが、チームの快進撃を支え続けた一年だった。ゴール数は少し物足りないが、その分悠や周りの選手を生かしたことは十分に評価できる。来年はFC東京で相対することになるが、一人の選手として、これからも活躍を期待したい。

MF14 / 中村憲剛:5点

言わずと知れたJリーグMVP。1stステージの正念場、Away福岡戦で、欠場した試合に限って勝ちきれないなど、随所随所で存在感を感じるシーズンになってしまった。今まで、2列目に上がった際にはあまり活躍できないことも多かったが、大島くんの成長と、ネットの発掘とでそれも解決。あとは怪我さえなければ、来年も活躍してくれるだろう。

MF15 / 原川力:1点

オリンピック予選で素晴らしい活躍をしたこともあり、サポーターの中では期待がすごく高かった原川くん。しかし終わってみればほとんど試合には絡むことができず、存在感0のシーズンだった。ボランチに怪我人が出ようと、2列目に怪我人が出ようと、とにかく出番が来なかったのは、それだけチームにフィットしていないということだろうか。来年レンタルということなので、心機一転レベルアップして帰ってきてほしい。

MF16 / 長谷川竜也:3点

新人とは思えないほど、ナビスコなどを通してあっという間にチームにフィットし、スタメン争いに加わってきた。特にその果敢なドリブルは、攻撃を得意とするチームの中でも光っていたし、今後をとても感じさせるものだった。怪我に悩まされたのが、ちょっとこれからが心配になってくる。

DF17 / 武岡優斗:3点

出場した試合では、今年も抜群の安定感、対人の強さを見せたが、怪我による離脱が長引き、ほとんど貢献できない時期が続いた。攻撃はともかく、守備に関しては安心の武岡くんだけに、早く戻ってきて、また右サイドに鍵をかけてほしい。

DF18 / エウシーニョ:4点

今年も素晴らしい攻撃力を見せつけてくれたエウソンだが、特にサイドバックを武岡くんやタッピーに任せることが多く、前目のポジションでプレーする時間が増えて、より心置き無く攻め込めたのではないだろうか。チームにもなくてはならない存在で、今後も末長くフロンターレにいて、あっとみんなを驚かせるプレーやゴールをお願いしたい。

MF19 / 森谷賢太郎:3点

森谷くんといえば浦和戦、浦和戦といえば森谷くん、という感じだったが、逆にそれ以外では存在感を示すことができなかった。それでも、ポリバレントなプレースタイルは健在で、怪我人が多かった今年も、何度となく森谷くんのマルチポジションに助けられたことか。願わくば、ドリブル、パス何でも良いので、1つ武器になるようなプレーを磨き、それを持ってスタメン争いに堂々と食い込んで行きたい。

DF20 / 車屋紳太郎:4点

年間通して左サイドに君臨し、攻撃、守備両方で着実な成長を見せたと思う。サイドバックは競争が激しいが、日本代表も見えてきたと思うし、彼であればそれを目標に頑張って欲しい。ゴールが少ないのが気になっていたが、ようやく1点取れたので、来年はシュートも打てる、より怖いプレイヤーに進化して欲しい。

MF21 / エドゥアルド ネット:4点

多分今年いちばんの掘り出し物。初めはフィットしなかったが、あっという間にチームの中心になり、以後チームに欠かせない存在になった。高い身長から空中戦はできるし、体も張れるので、バイタルエリアの防波堤として(けんごや大島くんが小さいので)獅子奮迅の働きをすることも多かった。また、侮れないのがネットから入る意表をつく縦パスで、これが攻撃のスイッチになることも多かった。CB上がりでボランチを目指す人は、まずはネットのプレーを研究するところから始めてはどうだろうか。

MF22 / 中野嘉大:2点

確かな技術とともに、今年も攻撃の切り札として使われることが多かったが、ゴールという結果はほとんど残せなかった。ドリブルやパスなどの技術が高いのは誰もが認めるので、あとはペナルティエリアでのシュート意識が改善されることだけだと思うのだが、なかなかそれが遠いようだ。来シーズンはレンタルということなので、ガムシャラにその辺のレベルアップがされれば、かなり楽しみな選手だと個人的には期待している。

DF23 / エドゥアルド:4点

途中から(開幕直後?)入ってきたと思ったら、あっという間にCBの重要なピースになった。奈良くんと同じで、とにかくゴール前で体が張れるし、あと一歩というところで足が伸びるので、エドゥのおかげで命拾いするシーンは数知れず。肩は心配だが、完全移籍ということで、実に頼もしい限り。

GK24 / 安藤駿介:1点

高木くんにも負けて、GKで4番手。ほとんど出番なし。ユース出身だし、頑張れとしか言えない。。。

MF25 / 狩野健太:2点

開幕戦でスタメンだったものの、その後あまり声がかからなくなってしまった。技術が高いのはわかるのだが、彼を選ぶストロングポイントがもう一声欠けていたような気がする。来シーズンは勝負の年になるだろう。

MF26 / 三好康児:3点

期待のシーズンであったが、まだまだ好不調の波が大きく、思ったように試合に絡めない日々が続いた。それでも着実に成長し、最後の方はずいぶん安心して試合で使ってもらえるようになったので、来シーズンが一番楽しみな選手なのではないか。ドリブルシュートだけでなく、周りを使ったプレーなど、状況判断も、試合を重ねるたびに良くなっているような気がする。

FW27 / 大塚翔平:3点

一瞬ブレイクしたが、好不調の波が大きいということか。足元の技術が高いのはわかるし、ゴール前の判断の正確さもあるので、もうちょっとプレー時間を延ばしたかった。守備の部分だったり、全体的なプレーの質が上がらないので、使う方としては使いにくいという部分があるのか。もうちょっとブレイクするかと思ったんだけど・・・

DF28 / 板倉滉:3点

何よりもサポーターが驚いたのは、その度胸。どんな試合でも物怖じせず、堂々とプレーし、空中戦などの守備だけでなく、ドリブルやパスなどの攻撃面でも、どんどん自分のプレーを出していく。まだ足りない部分はあるが、十分に戦力になるレベルになってきたし、伸びしろを考えると本当に楽しみ。

GK29 / 高木駿:2点

3番手だと思っていたら、あれよという間に出番があったのでびっくり。J2なら全然やれるということはすでに証明されているので、来季は移籍してしまうが、移籍先でも是非頑張って欲しい。

GK30 / 新井章太:3点

ソンリョンが抜群だったため出番なし。ただし、ソンリョンが不在の時はきちんと仕事を全うし、サポーターからの信頼はさらに高いものになった。ソンリョンとの差は技術的なことだけじゃなく、どうしても安心感というか、GKとしての存在感でやはり劣ってしまうのだろうか。他のチームにいけば正GKになれるかも知れないので去就が心配ではあるが、彼がベンチにいてくれることは、本当に頼もしい。今年もありがとう。

MF31 / 田中碧:1点

出場していないためコメントなし。来年に期待!

MF32 / デューク カルロス:1点

出場していないためコメントなし。来年に期待!

監督 / 風間八宏:4点

今年も調子を見極め、怪我人が多い中できちんと選手を使い分けて、快進撃を演出した。後半厳しい試合も多かったが、それでも大崩れしなかったのは、強いチームを作ってきたことが、ようやく花開いたということだろう。ここで退任とは本当に残念だが、タイトルが取れなくても、この限られた戦力の中では十分な成果を出してくれたのではないだろうか。

2017年

元旦から天皇杯決勝を見に行くという強行軍だったため、あまり新年という感じがしないけど、

とりあえず明けましておめでとうございます。

今年の抱負ということもないですが、昨年末に読んだ日本マイクロソフト会長の樋口さんの本が面白かったです。

元々、就活の時に、こちらを読んで感動して以来、樋口さんの隠れファンでした。

「愚直」論

「愚直」論

今年はもうちょっとブログを(特に技術系の話題)更新したいと思います。

メタプログラミングRuby パート1

Rubyを学習する上で、避けて通れないメタプログラミングRubyを読んでいる。

大事なことなので、メモを残しておこうと思う。

ちなみに、読むのは2回目だが、難しい内容が多くて、前回は半分くらいからおいてけぼりをくってしまったので、今回は改めてリベンジを。

第1章:頭文字M

ActivereRecordの例を用いて、メタプログラミングとはという定義を紹介する章。

class Movie < ActiveRecord::Base
end

movie = Movie.create
movie.title = 'タイトル'
movie.title #=> 'タイトル'

のように、定義されていないフィールドを動的に生成する。

第2章:オブジェクトモデル

オープンクラスと、オブジェクトの中身、そしてメソッド探索の方法だ。 この辺まではまだついていける。

と思ったら、オブジェクトのインスタンス変数やメソッドの格納方法を理解していないことに気づく。1回読んだくらいではなかなか頭に入らない。。。

考えれば当たり前ではあるが、インスタンス変数はオブジェクトに、メソッドはそのクラスに格納されている。

オブジェクトはクラスのインスタンスであるが、クラスはClassクラスのインスタンスである。つまり、クラス変数は、Classクラスのインスタンスという観点で考えれば、そのインスタンス変数に過ぎないということである。

また、ClassクラスはModuleクラスを継承しており、各クラスはObjectクラスを継承しているという関係を持っている。継承するということは、継承元のメソッドが使えるということだ。これは、継承元の、さらに継承元のメソッドも使えるということになる。

こう考えていくと、継承とインスタンス化の区別がややこしく思えてくる。

継承とは、メソッドが存在しない場合に探索をたどっていくパスである、これはわかりやすい。継承は続くよ、どこまでも。

インスタンス化とは、クラス変数やクラス(共通の)メソッドを格納している先だとも言えるし、複数のインスタンスをグルーピングした取りまとめ先がクラスとも言える。

この考え方を元にして、メソッドの探索が行われる。

メソッドの探索は、 ・オブジェクト自身が持つかどうか? ・オブジェクトのクラスが持つか? ・オブジェクトのクラスの継承元のクラスが持つか? ・オブジェクトのクラスの継承元のクラスの継承元のクラスが持つか? ・・・ とたどっていく。あら簡単。

だいたいこれで2章は終わりだが、途中でさらりとネームスペースのことが書かれている。

ライブラリを作ったり、ソースを読む上では、個人的にはこれが結構重要だと思う。

module MyNameSpace
  class MyClass
  end
end

としておいて、MyNameSpace::MyClassでアクセスするのは割とよく使う。

第3章:メソッド

この辺から徐々に難解な話になってくるが、まだまだ私でも理解可能な範囲。

そもそも動的にメソッドを呼ぶだけであれば、obj.send(:method_name)を用いればよい。

sendメソッドは、かなりアルティメットウェポン的な感じで、privateだろうとなんだろうと、呼び出せてしまう。カプセル化もクソもあったものではない。(いやいい意味です、たぶん)

似たようなメソッドを用意する必要がある場合に、メソッドを動的に用意することでコードの重複を避けようという話。コピペの嵐になるよりは、スマートで、メンテナンスしやすくて、なによりもコードがかっこいい。

ここでは、メソッドを動的に定義する方法を2種類紹介している。

1.define_methodを利用する

あらかじめメソッド名がわかっていれば、文字列として保持しておき、define_methodで同じようなメソッドを動的に生成することが可能だ。

class MyClass
  define_method :method_name do |arg|
    # 2乗する関数
    arg*arg
  end
end

まぁ、スマートかどうかは微妙だが(よほど規則的で大量のメソッドがあれば別だけど)、define_methodの応用はもっと高度なところにあると思う。

実際にやっているかはわからないけど、たとえばDBなどの外部要因に応じてメソッドを用意しておくこともできるし、微妙に変えたメソッド、たとえばto_XXXのようなサポートメソッドなども簡単に作成できる。

2.method_missingを利用する

継承をたどっていき、メソッドがない場合には、対象オブジェクトのmethod_missingを呼び出すため、あらかじめmethod_missingを定義しておき、その中で引数に応じた処理を行う方法。

method_missingはtypoした時などに、発生しないとも限らないので、他のコードへの影響という意味では、ちょっと危険なにおいがする。個人的には。