Try T.M Engineer Blog

多摩市で生息するエンジニアが「アウトプットする事は大事だ」と思って始めたブログ

「オブジェクト指向でなぜつくるのか 第2版」を読んだ話

少し古い本ですが「オブジェクト指向でなぜつくるのか 第2版」を読みました。
今年は、プログラミングをただ書くだけでなく、もう少し概念的なものも学んでおきたいと思ったので、この本を手に取りました。

オブジェクト指向でなぜつくるのか 第2版

オブジェクト指向でなぜつくるのか 第2版

  • 作者:平澤 章
  • 出版社/メーカー: 日経BP
  • 発売日: 2011/04/07
  • メディア: 単行本

自身の性格上こういった概念的な本は、読んでると眠くなってくるのですが、この本は読んでてとても面白く、意外にもスラスラと読むことができました。
意外に感じたのは、オブジェクト指向は Simula67(1967年)という言語で既に存在していたということ。一般的に広まってきたのは、Smalltalk(1970年)からとのことで、個人的に「ぇ、そんな昔からあったの・・・」と驚きました。
Smalltalkといえば、テスト駆動開発本でお馴染みのKent Beckリファクタリング本で有名なMartin Fowlerも使っていましたね。こういった著名人の繋がりも見えてきたので、個人的には面白かったです。

テスト駆動開発

テスト駆動開発

  • 作者:Kent Beck
  • 出版社/メーカー: オーム社
  • 発売日: 2017/10/14
  • メディア: 単行本(ソフトカバー)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

オブジェクト指向の解説は、こういった言語の歴史的背景から「何故オブジェクト指向が産まれたのか?」を説明していて、これまた面白く、とても納得のいく説明が書かれていました。
第2版では、第1版では語られていないアジャイル関数型プログラミングについても語られています。とはいえ、第2版が出たのは2011年なので、最近Web業界にやってきた私としては「2011年で関数型プログラミングアジャイルが既にあったのか!?」とこれまた驚きでした。

オブジェクト指向といえば

以下の3つですよね。

本書を読む前の私は、上記3つは理解していたつもりでしたが、改めて本書を読み進めてみるとポリモーフィズムについては、ちゃんと理解できていなかったことがわかりました。

例えば、PHPポリモーフィズムを書くと以下のように書けます。

// 継承クラス(親)
class ParentClass {
    public function echo_msg(String $msg){
        echo 'デフォルト値:' . $msg . PHP_EOL;
    }
}
// 継承先クラス(子)
class ChildClass extends ParentClass {
   public function echo_msg(String $msg) {
       echo $msg . PHP_EOL;
   }
}
// メインクラス
class MainClass {
    // オーバーライド。
    public function echo_child(ChildClass $obj) {
        echo $obj->echo_msg('子クラスを型にobjを呼ぶ');
    }

    // オーバーライド。
    public function echo_parent(ParentClass $obj) {
        echo $obj->echo_msg('親クラスを型にobjを呼ぶ');
    }
}

// 子クラスをインスタンス化して、メインクラスに渡す。
$obj = new ChildClass();
$instance = new MainClass();

$instance->echo_child($obj); // 「子クラスを型にobjを呼ぶ」と表示する
$instance->echo_parent($obj); // 「親クラスを型にobjを呼ぶ」と表示する

私も知らなかったのですが、メインクラスで継承先のParentClass(親クラス)を型にして呼び出せるんですね。ちゃんとオーバーライドしています。

ポリモーフィズムは概念で理解していても、こういったテクニックまでは理解できていなかったなぁ・・・と改めて思いました。 こういったテクニックは、おそらくデザインパターンに通じるものがあるような気がしたので、次回かどうかはわかりませんが、こちらの本も読んでみようと思います。

第2版では、関数型プログラミングについても書かれていました。
関数型プログラミングについては、私は知識がまったく無かったので、概要くらいは本書で掴むことができました。ただ、本書ではHaskellを使って説明していたので、理解に相当苦しみましたが・・・

もし、自分が関数型プログラミングを使うなら、JavaScripでしょう。React.jsが関数型プログラミングを採用しており、仕事で扱うWordPressのBlockエディターもReact.jsが使われているので、こちらも積極的に学んでいきたいですね。

というわけで、本書で説明していた関数型プログラミングの「高階関数」と「カリー化」をJavaScriptで書いてみました。

高階関数」は、引数に関数を設定したり、戻り値で関数を返したりする関数のことです。

// 引数と返り値に関数「n => n + 1」を設定
const p = (fn) => {
    return fn;
};

const hoge = p(n => n + 1);
console.log(hoge(1)); // 2

「カリー化」は、複数の引数を取る関数 を 引数を1つだけ取る関数 を使って順次表現することです。

const c = n => {
    return m => m * n;
}

// c(2)は、m * 2を返す関数。それを変数tに設定
// 「複数の引数を取る関数」= c(2)、「引数を1つだけ取る関数」=t(4)
const t = c(2);
console.log(t(4)); // 8

// cは、以下でも書けます。
console.log(c(2)(4)); // 8

うーん、慣れないと瞬時に理解できないですね。
関数型プログラミングも面白そうなので、順次学んでいきたいですね。

最後に、こういったテクニックを知るのも大事ですが、本書では加えて「プログラマーたるもの言語で扱うメモリーの仕組みも知っておくべき!」とも書かれていました。プログラマーたるものプログラミング言語の内部の動きも知っておけ!ってことですね。確かにプログラミング言語の内部の動きまでは、意識して学ぼうと思ったことはなかったので、ここは改めて気づかされました。

まとめ

本書は、オブジェクト指向の歴史や解説だけでなく、プログラマーが知っておくべき知識やオブジェクト指向から産まれたアジャイルや次世代の関数型プログラミングまで、幅広く解説されていました。

以下、本書を読んで改めて気付かされた点(ざっくり)です。

2019年を振り返るのと2020年の抱負について

さて、だいぶ遅くなってしまいましたが、2019年を振り返りたいと思います。
すでに1月の後半なので、今年の目標も添えて書いていきたいと思います。

2019年はどんな年だった?

うーん、なかなか一言で表現するのは難しいので、年初に抱負を書いていたので、これをベースにしたいと思います。

kodak.hatenablog.com

ブログの継続は?

2019年のブログ投稿数を2018年と比べてみます。

2018年 2019年
37 29

うーん、減ってますね・・・(= =;;)
2019年は後半にあまりアウトプットしていなかったので、そこで大きく差がついた感じですね。

やはり、なかなかブログを書く時間を確保できないのが辛いですね。ブログでのアウトプット仕方もいい加減になってきた気がします・・・

アウトプットは大事ですが、いい加減になってくるとあまり良くないと思うので、ここいらで見直したいところです。

踏まえての2020年は?

今年は「無理なアウトプットをしない。必要なアウトプットをしよう!」です。
下にも書きますが2019年は「勉強会やカンファレンスへ参加したのにアウトプットしていない」「本を読んだのにアウトプットしていない」など、本来アウトプットすべきタイミングで、アウトプットできていないことが多かったので、ただブログを書くのではなく「必要なアウトプットをしよう!」そんな年にしたいなぁと思います。

勉強会・コミュニティ・カンファレンスへの参加

正直、休日の勉強会やコミュニティの参加は無理でした。
そして、これからも難しいと思っています。

平日での勉強会やカンファレンスへの参加していましたが、アウトプットはできていなかったですね。
ううっ・・・これは反省(; ;)

踏まえての2020年は?

継続です!引き続き自身の興味のある勉強会やカンファレンスの参加(平日限定)で続けて行きたいと思いますっ!

スキル向上

2019年の年初に抱負を書いた通り、JavaScriptPythonPHPAWSCMSWordPress)を中心に、技術と知識を学んだ一年だったと思います。 Vueでポートフォリオを作ったりもしましたし、LaravelやAWSの勉強もしました。転職前と比べると技術も知識もかなり増えた気がします。
とはいえ、技術レベルが初級レベルなので、今年は中級レベルに上げたいなぁというところ・・・

踏まえての2020年は?

継続してJavaScriptPythonPHPAWSCMSWordPress)を中心に、技術と知識を学んでいきます。
TypeScriptにも挑戦したいですし、WordPressのBlockエディターがReactで作られているので、Custom Blockを作るためにもReactを勉強したいと思います。
そうなってくると、オブジェクト指向関数型プログラミング等の知識も必要になってくるので、そこらへんも学んでアウトプットしていきたいと思います。

あとは、AWS認定資格の有効期限が迫っているので、再取得も狙いたいところです。
現在は、ディベロッパーの資格獲得に向けて勉強中(= = ;;)

Gitの可視化

ああっ・・・(察し・・・)

まとめ

今年も引き続き、ブログと勉強会・カンファレンスへの参加の継続しますっ!
スキルもJavaScriptPythonPHPAWSCMSWordPress)を中心に、新たにReactへの挑戦や概念理解(オブジェクト指向関数型プログラミングデザインパターンなど)を深めて、中級レベルに引き上げていきたいと思います。

Advent Calendar 2019で記事を書いた事の(ちょっとした)余談

もうすぐ12月が終わりますね。
今年も「あっ」という間でしたね。
なんか、1年前も同じことを言っていたような気がします。(笑)

さて、昨年に引き続き、今年もAdvent Calendarに記事を書かせていただきました。

qiita.com

今回は、WordPressWysiWygエディターの話です。

WordPressを使って開発をしている方々は、エディターってどうしているんでしょうか・・・
このあたりって調べてもあんまり情報が出てこないんですよねぇ(==;;

なので、今回は自分の実践している方法を書いてみることにしました。
こういった「調べても情報が少ない」「情報が出てこない」記事は貴重だと思うので、気になる方は是非参考にしてみてください。

とはいえ、Advent Calendarの記事でも少し触れていますが、現在のWordPressには、Gutenberg(グーテンベルグ)と呼ばれるBlockエディターがデフォルトになっています。
今後は、Blockエディターが主流になってくるので、タイトルに「今更」というコメントを付けました。

私自身Blockエディターをあまり使った事がないので、勉強した上で、どこかのタイミングでBlockエディターについても記事にしてみたいと思います。(ただ、このBlockエディター、VueじゃなくてReactで実装されてるのでReactを学ばねばならんのが辛い・・・)

あと、個人的に面白かったAdvent Calendarですが、以下ですね。

qiita.com

こういった本番でやらかしてしまった事って、恥ずかしかったり、黒歴史だったりして案外表に出ないんですよね。

これはこれで貴重だなぁ・・・なんて思ったりしていました。
Advent Calendarについては以上です。
続いて、過去に私が書いたQiita記事を少し紹介します。

qiita.com

qiita.com

この2つの記事は、実はセットなんです。
記事には書いていませんが、AWS SAMを使ってLambdaをのコードを書く時にこの2つはとても便利です。

VCRは、HTTP RequestのMockができるし、MotoはAWSのServiceをMockできます。そのため、この2つをAWS SAMのLambdaのコードを書く時に使えば、なんとAWSの内と外のMockができるようになるので、個人的にオススメです!!
気になる方は是非参考にしてみてください。

さて、次回は2019年の振り返り記事でも書こうかな。

【ネタ回】スキマスイッチの『私はロボットではありません』をRekognitionを使って当ててみた話

今回はネタ話です。

ちょっと昔の話ですが、Twitterスキマスイッチの『私はロボットではありません』の難易度が高すぎるwことが話題になりました。 詳細は、以下のTogetterに纏まっていました。

togetter.com

たしかに・・・難しい・・・

難しい・・・

わからんーーーーー!!

助けてーAmazon Rekognitionーーー!!

Amazon Rekognition

AIによる画像認識および画像分析を行うAWSのサービス。(雑っ)

検証開始

というわけで、Rekognitionさんならなんとかしてくれると思い、画像比較のデモを使ってスキマスイッチの『私はロボットではありません』が見破れるかを試してみました。

f:id:special-moucom:20191210000738p:plain

こんな感じで、左に参照画像。右に比較対象をセットします。
左の参照画像ですが、スキマスイッチの画像をネットで探していたら、BESTアルバムの画像が比較対象の2行目の一番端に該当したので、これをそのまま使いました。

Amazon Rekognitionの結果

こんな感じで、比較結果が出ました。

f:id:special-moucom:20191210001406p:plain
f:id:special-moucom:20191210001429p:plain
f:id:special-moucom:20191210001442p:plain
f:id:special-moucom:20191210001456p:plain
f:id:special-moucom:20191210001508p:plain

すごいっ、ちゃんとスキマスイッチを認識しているっ!!!
私自身、初めてRekognitionを使いましたが、これほどちゃんと顔認識するなんて驚きです。

というわけで、まとめ

Amazon Rekognitionがスキマスイッチと認めたのは以下の赤丸です。 f:id:special-moucom:20191210001657p:plain

Togetterによれば、正解の模様。
いやぁ、ネタでやってみたけどAmazon Rekognitionの凄さが垣間見れました。

近況

最後に近況でも・・・興味がない方は飛ばしてOK。
現在、AWS認定資格を取得すべく勉強中です。
2年前にも取得した資格ですが、2年前とはサービス内容が変わっており、ほとんど覚え直しです。(トホホッ)
2年前とは違い、子供もいてなかなか勉強時間が取れずに辛い状況が続いています。
とはいえ、2年前と比べて情報も増えてきたし、Udemyという動画教材もあるわけで・・・やりようはいくらでもあるはずっ!!
めげずに頑張りたいと思います。

という、自分に言い聞かせる近況でした。おしまい!

「主婦をサラリーマンにたとえたら想像以上にヤバくなった件」を読んで「共感」した話

はじめに

今回は技術ネタの話ではなく、子育ての話です。
先日、「主婦をサラリーマンにたとえたら想像以上にヤバくなった件」という本を購入したので、その感想を書いていきたいと思います。

主婦をサラリーマンにたとえたら想像以上にヤバくなった件

主婦をサラリーマンにたとえたら想像以上にヤバくなった件

著者は、日々、主夫の大変な日々をブログで書かれている河内瞬さんです。
私は、この方の書くブログ記事に共感することがとても多かったので、本も是非読んでみたいと思い、購入しました。

河内瞬さんはブログ記事で「家事育児の大変さ」を伝えています。
今回は、そのブログ記事が本になって纏まった感じですね。

河内瞬さんは普段、エッセイ漫画を書かれる事が多いのですが、今回出された本は漫画1割、文書9割という感じで文章が多めです。
エッセイ漫画の方が需要があるのは知っているが、エッセイ漫画を書く人は沢山いるし「家事育児の大変さ」を伝えるなら文章で伝えたい・・・ という本人の強い意志あってのことだそうです。

「共感」

私は現在、1歳になる娘と妻の3人で暮らしています。
私と妻は共働きで、朝は私が娘を保育園へ連れていき、夕方は妻が娘を迎えに行くというスタイルで生活しています。
育児は妻と私の2人で協力し合い、家事は妻が料理を担当、私が掃除を担当しています。週末・祝日は、3人で居ることが多く、どちらかが娘の面倒を見て、各自担当作業をこなしている感じです。

というわけで、ほぼすべての家事を担当している著者と比べて、私が担当する作業は少ないですが、それでもこの本からは「共感」の2文字を感じることができました。

著者の伝えたい事(その1)「料理」はとにかく手間が掛かる。 子供を見ながらの「料理」は絶望的だということ

上記にも書きましたが、料理担当は妻です。しかし、私も料理をまったくしない!というわけではないので、著者が言う「料理には多くの工程があり、非常にめんどくさい作業だ!」という主張はとても共感できた。

料理をすると台所が汚れるため、掃除をするという工程が増える。食洗機を導入しても、入り切らない大型調理器具は結局手洗しかなく、やはり「洗う」という工程が残り続けてしまう。
「料理」は作るだけではなく、献立を考えるところから後始末まで、非常に多くの工程があり、非常にめんどくさい。

加えて子供がいると、はやく終わらせたい工程がなかなか進まない。
我が家は、妻が料理をしている時は、私が娘の面倒を見ているのだが、それでも娘は「やっぱりママがいいー」といって台所に向かう。当然、お腹が空いていれば、大泣きもするし非常に大変だ。
もし、料理と子供の面倒を1度でしなければならない事態が発生するのなら、とても大変なのは目に見えている・・・

著者の伝えたい事(その2)子供が可愛いのと子育てが大変なのは別の話だということ

子供は可愛い。私も自分の娘が可愛いと思っている。
娘が産まれる前までは、子供に対して可愛いという感情はあまり感じていなかったかもしれない・・・。でも、自分に娘ができると考えは変わった。

子供は可愛い。
しかし、著者も言っているが「子供が可愛いのと子育てが大変なのは別の話」。

本では「子供は暴れる10Kgの米だ!!」と書いてあるが、まさにそのとおり。
私は娘を抱っこしていて、筋肉痛になったし、妻は指が腱鞘炎になった。それだけ、子供は重い。(というか暴れる)
以前、子育てによる疲労と体調不良(風邪)で、病院内で倒れて点滴を受けて帰る・・・なんて時もあった。それだけ子育ては大変なのです。

大変なのだから、大変だっ!!というのは、何も悪くないと思う。

著者の伝えたい事(その3)名もなき家事をやらない家族にフラストレーションがたまるということ

名もなき家事とは、たとえば箱ティッシュがなくなったら詰め替える、トイレットペーパーが切れたら替える等の名もなき家事のこと。
机が汚れたら拭く!床が汚れたら拭く!も含まれるだろう・・・

妻は、このあたりはとても協力的で、基本的に名もなき家事はやってくれる。
ただ、机が汚れたら拭く!床が汚れたら拭く!の部分は、人によって気になる許容範囲が違うのかもしれない・・・
というのも、妻はあまり汚れを気にしないタイプなのだが、私はすぐ気になってしまうタイプで汚れているとフラストレーションがたまっている(たぶん) そしていつの間にか机や床を拭いていることがある。

半分仕方ないのかな・・・と思う部分もあるが、こういったところから著者の言いたいことが非常に理解できる。

著者の伝えたい事(その4)子連れの買い物は超疲れるということ

子供をベビーカーに乗せて買い物に行くだけ・・・ではない!!
そもそもベビーカーは先頭なのだ!一番前なのだ!
たとえば、曲がり角で一番最初に出てくるのはベビーカーなのだ!

車はもちろん、自転車や歩きスマホしている人への注意が必要であり、それはとても疲れる。
加えて、子供は機嫌が悪かったりツマラナイと泣く。それをなんとかするために子供を(片手で)抱っこして、(片手で)ベビーカーを押したりもする。

子連れの買い物は、超疲れるというのはとても「共感」できる。

なんか私の愚痴みたいになってきた・・・そろそろ纏めに入ろう

著者の伝えたいことは、上記以外にもまだまだたくさんあります。でも、一番伝えたいことは以下だと思います。

  • 子供を持つ人は「家事育児の大変さ」をこの本を通してパートナーと共有してほしい。
  • 子供を持たない人は、この本を通して「家事育児の大変さ」を少しでも理解してほしい。

正直に言うと、この本は著者の「家事育児の大変さ」がストレートに出ているので、若干引いたり、クドイなぁと感じる部分も多々あると思います。
ですが、他の本に比べて漫画があって読みやすいですし、「家事育児の大変さ」がストレートに伝わると思います。
なので、この本を少しでも気になった方がいらっしゃれば、読んで見る事をオススメします。