としおの読書生活

田舎に住む社会人の読書記録を綴ります。 主に小説や新書の内容紹介と感想を書きます。 読書の他にもワイン、紅茶、パソコン関係などの趣味を詰め込んだブログにしたいです。

PXL_20210227_032531375


瀬尾まいこさんの『君が夏を走らせる』を読みました。

たった一ヶ月の短い夏を描いている作品ですが、二歳に満たない鈴香と高校生の大田君の成長を見ることができ、読んでいるだけで癒されるし、ところどころ感動するシーンもある良作でした。

以下、あらすじと感想になります。



『君が夏を走らせる』のあらすじ


中学三年生のころ駅伝に出場して以来、何かに夢中になることの楽しさをしった大田。

高校生になったら不良をやめて堅実に生きようと思っていた矢先、大田は目指していた高校の受験に失敗し、地域の不良が集まる学校に進学することになった。

周りとの温度の違いもあり、大田は徐々に高校から足が遠のいていった。

新しく夢中になることができるものを見つけることができず、日々をやり過ごしていた大田のもとに、中学のときに仲良くしていた先輩から一本の電話が入った。

その電話の内容は、妻が入院することになったので一ヶ月ほど、一歳の娘である鈴香の子守をしてくれないかというものだった。

高校生の自分が人の子守なんてすることができないと思った大田は、先輩からの頼みを断ろうとしたが、断り切れず一か月の子守を引き受けることにした。

子守を初めたはいいが、鈴香は泣き止まないし、ご飯も大人しく食べてくれない。

小さな鈴香に振り回された大田は、振り回されながらも鈴香とともに過ごす時間を幸せに過ごし、徐々に何かに夢中になるということを思いだすことになる。

二度と戻らぬ記憶に温かい、涙あふれるひと夏の奮闘記。



感想(ネタバレあり)


鈴香ちゃんと大田君の成長を描いているとても良い作品でした。

鈴香ちゃんの世話を頼まれたばかりの頃の大田君は、断り切れなくてしかたなく世話をしてあげている感がすごく強かったです。しかし、時間がたつにつれて鈴香ちゃんとともに過ごすことの楽しさを知った大田君を見ていると心がほっかりしました。

二人が仲良くなるにつれて別れの時が少しずつ迫っている様子が切なく感じました。

もちろん鈴香は先輩の娘なので二度と会えなくなるというわけではないのですが、二人で今までのような濃密な時間を過ごすことはもうないんでしょうね…。


大田君の成長


私は『君が夏を走らせる』のテーマは”成長”だと思っています。

一方大田君は、高校受験に失敗してしまい、物語の序盤では自分が成長することはないと感じながら自堕落な生活を送っていて、自分が成長することはできないと思い込んでいるような様子でした。

しかし、鈴香との出会いをきっかけに大田君は、どんな経験からでも人は成長できるということをしります。

  • 大田君が話しているのを聞いて「すげー」という言葉を使えるようになる
  • 大田君のまねをしておもちゃのフライパンで料理をする
  • 大田君が買ってきてくれた積み木で遊ぶ鈴香

鈴香は、まだ二歳なのでどんな些細な経験でもすべてを糧にして成長していきます。
その様は、大田君を通して学習をしているとも言えます。

そんな鈴香の成長を見てきた大田君はラストシーンで以下のように思います。

記憶のどこにも残っちゃいないけれど、俺にも鈴香と同じように、すべてが光り輝いて見えたときがあったのだ。もちろん、今だってすべてが光を失っているわけじゃない。こんなふうに俺に「がんばって」と声を送ってくれるやつがいるのだから。俺はまだ十六歳だ。「もう十分」なんて、言ってる場合じゃない。
『君が夏を走らせる』より

上記の大田君の想いから、大田君が閉じこもっていた殻をやぶって、これからも成長していくだろうということが分かりますね。





子育ての難しさ


大田君が鈴香に苦戦する様子や公園で出会ったママさんたちの様子を見ていると、子育てって大変なんだなと感じました。

それと同時に子育てには、子どもに好きなことをさせてあげることと、親が子どもが学ぶことができる環境を整えてあげることが大切なんだと本作から学びました。

大田君は基本的には鈴香ちゃんのしたいことに対して否定することはなく、適切な遊び方で遊ばせてあげていました。

また、大田君と鈴香ちゃんの様子を見ていると将来自分に子どもができたら、レトルト食品ばかり与えるのではなく、大田君のように子どもが満足するような料理を作ってあげたいなとも感じました。

その他にも鈴香ちゃんは昼食後必ず大田君に買ってきてもらった絵本を読んでもらうのが習慣だという場面がありました。

このシーンを読んで子どもが自ら絵本を読んでもらいだがるような環境を作りが必要だと感じさせられました。

とりあえず、将来子育てをするときは大田君の子育てを参考にすればなかなか良い子が育つような気がしました。



まとめ


『そして、バトンは渡された』を読んだことをきっかけに『君が夏を走らせる』を読みましたがとても面白く大満足でした。

大田君や鈴香のように常に自分は成長することができるということを忘れずに今後の人生を歩んでいきたいです。

余談になりますが、あとがきで、本作には『あと少し、もう少し』という前作があったということを知りました。

こちらでは、中学時代の駅伝のときの大田君の様子などを描いているみたいなので是非読んでみようと思います。






3753817_s


本記事では、デザインパターンの名著である結城浩さんの『Javaで学ぶデザインパターン入門』を参考にアダプターパターン(Adapter)をC++で実装してみました。



アダプターパターン(Adapter)とは


アダプターパターンとは、「すでに提供されているもの」と「必要なもの」の間にある「ずれ」を埋めて再利用するためのデザインパターンです。

提供されたAPIなどを手直しするために使われます。

アダプターパターンには、以下の2種類の実装方法があります。

  • クラスによるAdapterパターン(継承を使ったもの)
  • インスタンスによるAdapterパターン(委譲を使ったもの)



クラスによるAdapterパターン(継承を使ったもの)


継承を使ったアダプターパターンは以下のようなクラス図になります。


アダプターパターン_継承



継承のAdapterパターンは、Adaptee役のメソッドがほぼそのまま使えそうなときに使われます。


Target(対象)


今必要となっているメソッドを定める役で、インタフェースとなっています。

C++では、二重継承を非推奨としているため、継承を使ったアダプターパターンでは、Targetは省略されることが多いです。


Client(依頼者)


Target役(省略する際はAdapter役)のメソッドを使って仕事をする役です。

main関数のようなAPIを呼び出すやつだと思ってもらえば大丈夫です。


Adaptee(適合される側)


すでに用意しているメソッドをもっている役です。要するに使いたいAPIを持っているクラスのことですね。

Target役が使いたいAPIがAdaptee役ですでに実装していたら、Adapter役は必要ないんですけどね…。


Adapter


Adapterパターンの主役です。Adaptee役のメソッドを使用して、Targetが求めているメソッドを作り出すやくですね。



インスタンスによるAdapterパターン(委譲を使ったもの)


委譲を使ったアダプターパターンは以下のようなクラス図になります。


アダプターパターン_委譲


委譲を使ったAdapterパターンは、Adaptee役のメソッドを呼び出す前に手を加えたいことが多い場合に有効です。

Adaptee役のメソッドをそのまま呼び出したい場合は、メソッドを再定義する必要があり、コード量が増えるというデメリットもあります。

C++では多重継承(インタフェースと親クラスの同時継承)が推奨されていないこともあり、委譲を使ったAdapterパターンのほうがよくつかわれるような気がします。



C++で継承をつかったアダプターパターンを実装


今回は、与えられた文字列を

(Hello)
*Hello*

のように表示する簡単なものをAdapterパターンを使用して実装していきます。

クラス構成は以下の通りです。


アダプターパターン_サンプル1



二重継承をしないようにTargetクラスを省略した実装にしています。


Bannerクラス


Bannerクラスは、事前に用意されていたAPIクラスだと思ってください。

■ヘッダファイル

#ifndef BANNER_H
#define BANNER_H

#include <iostream>

class Banner{
public:
    Banner(std::string string);
    
    virtual ~Banner();

    void showWithParen();

    void showWithAster();

private:
    std::string m_string;
};
#endif // BANNER_H


■ソースファイル

#include "Banner.h"

Banner::Banner(std::string string)
m_string(string
{

}

Banner::~Banner(){}

void Banner::showWithParen(){
    std::cout << "(" << m_string << ")" << std::endl;
}

void Banner::showWithAster(){
    std::cout << "*" << m_string << "*" << std::endl;
}



PrintBannerクラス


PrintBannerクラスがアダプターの役目を果たします。

今回はm単純な実装のためBannerクラスのAPIをそのまま呼び出すだけになります。

■ヘッダファイル

#ifndef PRINTBANNER_H
#define PRINTBANNER_H

#include "Banner.h"

class PrintBanner : public Banner{
public:
    PrintBanner(std::string string);

    ~PrintBanner();

    void printWeak();
    
    void printStrong();

};
#endif // PRINTBANNER_H


■ソースファイル

#include "PrintBanner.h"

PrintBanner::PrintBanner(std::string string)
Banner(string)
{

}

PrintBanner::~PrintBanner(){}

void PrintBanner::printWeak(){
    showWithParen();
}

void PrintBanner::printStrong(){
    showWithAster();
}



main関数


ここまで作ってきたAdapter役のPrintBannerクラスを使って、"Adapter Sample"という文字列を括弧付きと*ではさんで表示します。

■ソースファイル

#include "PrintBanner.h"

int main(void){
    PrintBanner printBanner("Adapter Sample");
    
    printBanner.printWeak();
    printBanner.printStrong();

    return 0;
}


■実行結果

(Adapter Sample)
*Adapter Sample*






C++で委譲をつかったアダプターパターンを実装


委譲を使ったアダプターパターンのサンプルプログラムのクラス構成は以下の通りです。


アダプターパターン_サンプル2


Bannerクラス


■ヘッダファイル

#ifndef BANNER_H
#define BANNER_H

#include <iostream>

class Banner{
public:
    Banner(std::string string);
    
    virtual ~Banner();

    void showWithParen();

    void showWithAster();

private:
    std::string m_string;
};
#endif // BANNER_H


■ソースファイル

#include "Banner.h"

Banner::Banner(std::string string)
m_string(string
{

}

Banner::~Banner(){}

void Banner::showWithParen(){
    std::cout << "(" << m_string << ")" << std::endl;
}

void Banner::showWithAster(){
    std::cout << "*" << m_string << "*" << std::endl;
}



Printクラス


JavaでいうインタフェースはC++では抽象クラスとして実装していきます。

■ヘッダファイル

#ifndef PRINT_H
#define PRINT_H

class Print{
protected:
    virtual ~Print(){};

    virtual void printWeak()=0;
    
    virtual void printStrong()=0;
};
#endif // PRINT_H



PrintBannerクラス


■ヘッダファイル

#ifndef PRINTBANNER_H
#define PRINTBANNER_H

#include <iostream>
#include "Print.h"

class Banner;

class PrintBanner : public Print{
public:
    PrintBanner(std::string string);

    virtual ~PrintBanner();

    void printWeak() override;
    
    void printStrong() override;

private:
    Banner *m_Banner;

};
#endif // PRINTBANNER_H



■ソースファイル

#include "PrintBanner.h"
#include "Banner.h"
#include "Print.h"

PrintBanner::PrintBanner(std::string string)
{
    m_Banner = new Banner(string);
}

PrintBanner::~PrintBanner(){
    delete m_Banner;
}

void PrintBanner::printWeak(){
    m_Banner->showWithParen();
}

void PrintBanner::printStrong(){
    m_Banner->showWithAster();
}



main関数


■ソースファイル

#include "PrintBanner.h"

int main(void){
    PrintBanner printBanner("Adapter Sample");
    
    printBanner.printWeak();
    printBanner.printStrong();

    return 0;
}


■実行結果

(Adapter Sample)
*Adapter Sample*




まとめ


個人開発ではなく、会社などで集団で開発する場合は、いきなりAPIの使用が変更することが多々あります。

いきなりの変更でも困らないようにアダプターパターンを使って、修正箇所ができる限り少なくなるようなプログラムを作っていきましょう。







DSC_3832


住野よるさんの『麦本散歩の好きなもの』を読みました。

今までの住野よるさんの作品は学生を主人公とした作品ばかりでしたが、今回は新卒の社会人が主人公となっており、若い人から大人まで楽しめる作品でした。ただ、普段のテイストとは少し異なる作品であるため人によっては物足りなく感じるかもしれません。

本作は図書館勤務の新卒女子、麦本三歩のなにげない日常のショートストーリーが描かれている作品です。

タイトルが『麦本三歩の好きなもの』ということで、各ショートストーリーのタイトルが "麦本三歩は歩くのが好き "、"麦本三歩は図書館が好き" といいった風に "麦本三歩は~~が好き" という風になっており、麦本三歩が好きな色々なものについて語られています。

読み進めていくにつれキュートな麦本散歩の日常に癒されまくりました。

以下、あらすじと感想を書いていきます。




『麦本三歩の好きなもの』のあらすじ


図書館勤務の20代新卒女子、麦本三歩のなにげない日々を三人称で描いた日常短編小説です。

麦本三歩の好きなものは朝寝坊とチーズ蒸しパンと本。性格は、ぼうっとしていて、おっちょこちょいで少し間抜けです。

彼女の周りは優しい人やおかしな先輩、怖い先輩など様々な人がいて三歩は日々翻弄されています。

この小説は特別な物語ではなく麦本三歩の当たり前の毎日を面白おかしく描いています。



感想(ネタバレあり)



キュートな麦本三歩


本作の主人公である麦本三歩はどこにでもいる普通の女性を描いていますが、なぜかとてもかわいらしく感じてしまい、魅力的です。

多くの読者が麦本三歩の可愛らしさに惹かれてしまったのではないのでしょうか。

私は、本作を読み進めていくにつれて麦本三歩のかわいらしさの虜にされてしまい、読み終わったころには麦本三歩のような友達がほしいと感じてしまいました。

麦本三歩には私たちが日ごろ当たり前だと思っている行動に対しても、好きになることができるポイントを見つけることができる力があります。

例えば作中で麦本三歩が紅茶を飲み、スーパーに売っているチーズ蒸しパンを食べているだけで幸せだと感じるシーンがあります。

こういった行動も初めて実行したときには私たちも幸せに感じるかもしれませんが、ルーティンにしてしまうと当たり前のことだと思い幸せには感じなくなってしまうでしょう。

しかし、麦本三歩ならばそんな当たり前の日常ですら毎日のように幸せであると感じることができます。

このように、あたりまえのことを幸せに感じることができる女性で、毎日を楽しそうに生きているからこそ、私たちは麦本三歩を可愛いと感じてしまうのでしょう。


また、麦本三歩には少し大食いであり、少しドジであるという二つの特徴があします。多くの人はこういった特徴を持つ人をかわいいと思ってしまう傾向があるのではないのでしょうか。

もちろん、ただ大食いだから好きになるのではなく、幸せそうに食事をしている描写が多いというのもあるとは思います。ドジなのもおかしな先輩のように好きではないと感じる人もいるかもしれませんが、多くの人は怖い先輩のようにかわいい奴だなと感じるでしょう。






『麦本三歩の好きなもの』の魅力


本書の魅力は先ほど述べた麦本三歩のかわいらしさもあると思いますが、それ以上に主人公が普通の女性であるため読んでいて共感ができるというところにあると思います。

たとえば "麦本三歩はモントレーが好き" では三歩は朝通勤しようとはしたもののなんとなく仕事に行きたくなくなったという理由で仕事をさぼってしまいます。

しかし、仕事をさぼったはいいものの罪悪感から翌日以降ずるをしてしまったということで三歩は一人苦しむことになります。

多くの人が三歩のこの状況を見て、自分もそんなことが過去にあったなどと共感できるのではないのでしょうか。しかも本書ではこの悩みを解決するために、ひとつの解決案を提示しているので三歩に見習って読者も次からはそうしようということができます

主人公がどこにでもいそうな普通の女性であるがゆえに、読者が共感をしやすいというのが本書の魅力だと私は思います。




この作品が伝えたいこと


本作は麦本三歩の日常を描いている作品です。この作品を通して住野よるさんは、読者に好きなものが増えれば人生が楽しくなるということを伝えたかったのではないのでしょうか。

忙しい現代社会では意味を見出すことができない行動を無駄であると感じがちです。

しかし、三歩のように意味がない行動の中に魅力を見出すことができれば、その無駄だと思っていた行動をすることが楽しくなり、人生が今より少し豊かになるのでしょう。

忙しいからこそ、少しの時間を楽しめる人間になることはとても大切だと思います。

私も三歩のように朝でかけるまでのわずかな時間を幸せに感じたり、色んなスーパーにそれぞれの特徴を見つけてその日の気分で買い物をするような自分の生活を楽しむことができる人間になりたい。



最後に


当たり前の日常を描いている作品でここまでおもしろい作品を久しぶりに読んだ気がします。

男性目線からは三歩がすごく好きになったのですが、女性の読者は本作を読んでどんな風に感じたのかが気になります。

*追記(2021/02/27)
『麦本三歩の好きなもの』の第二集が発売されました!!

また、第一作が文庫化されたみたいです!!








647498_s


windowsでtimeGetTime関数を使用して時間計測のプログラムを作ろうとしたろころ、コンパイルの段階で

undefined reference to `__imp_timeGetTime'

というエラーが現れて少し苦戦したので対処法を残します。



コンパイルしたいコード


コンパイルしたいと思ったコードは、timeGettime関数を使って実行時間を計測するコードです。
ソースファイル名はsample.cppとします。

#include <iostream>
#include <windows.h>

int main(void){
    DWORD start_tm = timeGetTime();

    for(int i=0i<1000; ++i){
        for(int j = 0j<10000000; ++j){}
    }

    DWORD end_tm = timeGetTime();
    std::cout << end_tm - start_tm << std::endl

    return 0;
}



コンパイル失敗


何も考えずにコンパイルすると…

g++ -o sample sample.cpp

以下のメッセージがでて、そんなもの定義していないぞと怒られてしまいます。

undefined reference to `__imp_timeGetTime'




`__imp_timeGetTime'の対処法


エラーについて調べてみるとtimeGetTime関数を使用するためにはwinmm.libをリンクする必要があるということが分かりました。

なのでコンパイルコマンドを以下に直すと

g++ -o sample sample.cpp -lwinmm

コンパイルが成功しました。



まとめ


windows.hで定義しているAPIを使用するためには、必要に応じてライブラリをリンクする必要があるということが分かりました。

普段Visual Studioばかりつかっていたら、そのあたりをそこまで意識しなくていいので気をつけなければなりませんね…。




3753817_s


本記事では、デザインパターンの名著である結城浩さんの『Javaで学ぶデザインパターン入門』を参考にIteratorパターンをC++で実装してみました。

C++のSTLでは、すでにイテレータは実装されているので、改めて実装することはないのですが、今回は設計思想を学ぶために実装していきます。




イテレータパターンとは


イテレータパターンとは、何かが同じようなものがたくさん集まっているときに、それを順番に指し示していき全体をスキャンする処理を行うためのものです。

例えば、本棚から本の名前を順番に表示するといったときに使うことができます。

ちなみにイテレータ(Iterator)とは、日本語で繰り返すという意味です。



イテレータパターンの登場人物


イテレータパターンは以下のようなクラス構成になっています。



イテレータパターン


Iterator


要素を順番にスキャンしていくAPIを定める役。

次の要素を得るためのhasNextメソッドや次の要素を得るためのnextメソッドなどを定めます。


ConcreateIterator


Iterator役が定めたAPIを実際に実装する役。

この役はスキャンをするのに必要な情報をもっている必要があります。


Aggregate


Iterator役をCreateするためのAPIを定める役。

今回の場合、IteratorがIteratorを作成する、メンバ関数になります。


ConcreateAggregate


Aggregate役が定めたAPIを実際に実装する役。

ConcreateAggregateが自信をサーチしてもらうために必要な具体的なIteratorであるConcreateIteratorを作成します。





C++による実装


今回は、本棚から本の名前を順番に表示するといったイテレータパターンを使ったサンプルプログラムを実装していきます。

クラス構成は以下の通りです。


イテレータパターン (2)



Aggregateインタフェース


JavaでいうインタフェースはC++では抽象クラスとして実装していきます。

#ifndef AGGREGATE_H
#define AGGREGATE_H

#include <iostream>

class Iterator;

class Aggregate{
public:
    virtual Iterator* iterator() = 0;

    virtual ~Aggregate(){};
};
#endif // AGGREGATE_H



Iteratorインタフェース


こちらもAggregateインタフェースと同様に抽象クラスでの実装です。

#ifndef ITERATOR_H
#define ITERATOR_H

class Book;

class Iterator{
public:
    Iterator(){};

    virtual bool hasNext() = 0;

    virtual Book next() = 0;

    virtual ~Iterator(){};
};
#endif // ITERATOR



Bookクラス


Bookクラスは本を表すクラスです。

今回の場合できることは、本の名前を設定することと取得することだけです。

■ヘッダーファイル

#ifndef BOOK_H
#define BOOK_H

#include <iostream>

class Book{
public:
    Book();

    virtual ~Book();

    void setName(std::string name);

    std::string getName();

private:
    std::string m_name;
};
#endif // BOOK_H


■ソースファイル

#include "Book.h"

Book::Book()
m_name("")
{
    
}

Book::~Book(){
}

void Book::setName(std::string name){
    m_name = name;
}

std::string Book::getName(){
    return m_name;
}



BookShelfクラス


BookShelfクラスは本棚を表すクラスです。

こちらのクラスが先ほどのBookクラスの集合体になります。

■ヘッダーファイル

#ifndef BOOKSHELF_H
#define BOOKSHELF_H

#include <iostream>
#include "Aggregate.h"

class Book;
class Iterator;

class BookShelf : public Aggregate{
public:
    BookShelf(int maxsize);

    virtual ~BookShelf();

    Book getBookAt(int index);

    void appendBook(Book book);

    int getLength();

    Iterator* iterator();

private:
    Book *m_books;
    int m_last;
};
#endif // BOOKSHELF_H


■ソースファイル

#include <iostream>
#include <unistd.h>

#include "BookShelf.h"
#include "Book.h"
#include "BookShelfIterator.h"

BookShelf::BookShelf(int maxsize)
m_last(0)
{
    m_books = new Book[maxsize];
}

BookShelf::~BookShelf(){
    delete m_books;
}

Book BookShelf::getBookAt(int index){
    return m_books[index];
}

void BookShelf::appendBook(Book book){
    m_books[m_last= book;
    m_last++;
}

int BookShelf::getLength(){
    return m_last;
}

Iterator* BookShelf::iterator(){
    return new BookShelfIterator(this);
}



BookShelfIteratorクラス


BookShekfクラスのスキャンを行うクラスです。

■ヘッダーファイル

#ifndef BOOKSHELFITERATOR_H
#define BOOKSHELFITERATOR_H

#include "Iterator.h"
#include "BookShelf.h"

//class BookShelf;
class Book;

class BookShelfIterator : public Iterator{
public:
    BookShelfIterator(BookShelf* bookShelf);

    virtual ~BookShelfIterator();

    bool hasNext() override;

    Book next() override ;

private:
    BookShelf *m_bookShelf;
    int m_index;
};
#endif // BOOKSHELFITERATOR_H


■ソースファイル

#include "BookShelfIterator.h"
#include "BookShelf.h"
#include "Book.h"

BookShelfIterator::BookShelfIterator(BookShelf *bookShelf)
m_index(0)
{
    m_bookShelf = bookShelf;  
}

BookShelfIterator::~BookShelfIterator(){

}

bool BookShelfIterator::hasNext(){
    if (m_index < m_bookShelf->getLength()){
        return true;
    }
    else{
        return false;
    }
}

Book BookShelfIterator::next(){
    Book book = m_bookShelf->getBookAt(m_index);
    m_index++;
    return book;
}


main関数


今まで作成してきたクラスを使って実際に小さな本棚を作っていきます。

■ソースファイル

#include <iostream>
#include "BookShelf.h"
#include "Book.h"
#include "BookShelfIterator.h"

int main(void){
    BookShelf bookShelf(4);

    Book book1;
    book1.setName("Around the World in 80 days");
    bookShelf.appendBook(book1);

    Book book2;
    book2.setName("Bible");
    bookShelf.appendBook(book2);

    Book book3;
    book3.setName("Cinderella");
    bookShelf.appendBook(book3);

    Book book4;
    book4.setName("Daddy-Long-Legs");
    bookShelf.appendBook(book4);

    Iterator *it = bookShelf.iterator();

    while(it->hasNext()){
        Book book = it->next();
        std::cout << book.getName() << std::endl;
    }

    delete it;

    return 0;
}



■実行結果


Around the World in 80 days
Bible
Cinderella
Daddy-Long-Legs



まとめ


C++では既存の実装があるため、実装する必要のないイテレータパターンを作成することでイテレータの動きが以前より分かるようになりよかったです。

今後も勉強がてらデザインパターンを実装していきます。







3884509_s


勝間和代さんの『勝間式ネオ・ライフハック100』を読みました。

色々自分の生活に取り入れたいと思ったことがあったのですが、その中で特に自分の生活に取り入れたいと思ったライフハック7選を紹介していきます。



すぐ実践したいライフハック7選



毎日のルーティンの負担は秒単位で減らす


料理や掃除、洗濯といった家事や化粧や服選びなども毎日していて手慣れていることでも、負担に感じることがあります。

こうした毎日のルーティンにかけられる時間は決まっているのに、時間以上のことをしようとすると気持ちが疲弊してしまいます。

こうしたことで疲れをためないために、やることを決めてから時間を捻出するのではなく、時間内にできることを決めてやることを決めましょう。

例えば朝化粧にかけられる時間が4分しかない場合は、4分でできる化粧方法をみつけましょう。
化粧道具を持ちすぎると道具を選ぶのに時間がかかりすぎるので、最低限の道具を使うことで時間を節約できます。


毎日やる必要があるルーティンは、空いている時間内でしかできないことを自覚しましょう。

時間を節約するために便利な道具を使用するのも、毎日のルーティンの負担を減らすコツです。



時間を生む3つのコツを実践する


時間管理のコツは3つあります。

①完璧主義にしない

どんなことでも、最後の最後まで完璧に仕上げようとすると時間がかかります。

例えば洗濯物をたたむのでも、ショップのように綺麗にたたもうとすると時間がかかるので、ざっとたたむだけで大丈夫です。生活するのに困りません。

なので全てのことを完璧にこなそうとせず、だいたいこなすぐらいで過ごしましょう。


②移動時間をなるべく取らないようにする

移動時間は人生の中で非効率的な時間の1つです。

仕事でも遊びでも、移動時間をなるべく短くすることは重要です。

短くできないときは、移動時間を無駄にしないために、オーディオブックを聞いて情報収集するなど時間のクオリティをあげましょう。


③時間を1日単位で最適化しようとするのではなく、1年、5年、10年単位で徐々に最適化していく

時間を1日単位で最適化しても、その最適化はその場しのぎでしかありません。

毎日のルーティンを短くするなど長期的に見て時間を最適化していきましょう。

毎日の料理の時間が1分減れば、1日3食作ると考えると365日で1095分最適化することができます。

お金を貯蓄するように、時間も貯蓄していき好きなことに少しでも多くの時間を使えるようにしましょう。



3分以内にできることは積み残さずにやる


3分以内にできることは積み残しをしないようにしましょう。

すぐできるからと言って、色々なことを積み残していき後でまとめてやろうとするとすごく手間がかかり面倒に感じます。

また、どんなことでも、やった直後なら大して手間もかかりませんが、いったん時間を置くと余計に時間がかかります。

様々な作業を積み残していくと、自分が遊んでいるときもそのことを思い出してしまい心から楽しめなくなります。

食器洗いなどすぐに終わることは積み重ねずにすぐにやってしまうように心がけましょう。



本を速くたくさん読むための3つのコツ


本を買ったはいいけどなかなか読めないという方の悩みを解消するために、3つのコツを教えます。

①全部読もうと思わない

本1冊の文字数はだいだい7万~12万じなのですが、文字が少なすぎると本として成り立たないのでこれだけの文字数が書かれているだけです。

本当にいい情報は5000~1万字しかありません。

目次を見て興味がある部分だけ読むようにしましょう。


②1行1行熟読しない

本に書かれている内容を1行1行熟読しようとすると、1分間で500~600文字ほどしか読めません。

なので少しでも多くの情報をインプットしていくために本はどんどん斜め読みしていきましょう。

自分が気になるところだけ熟読すれば良いのです。


③読むのではなく聞く

最近はオーディオブックというものが存在しています。

移動時間などの暇な時間に、本を聞くようにしましょう。

聞くだけで理解できるのと思う方もいるかもしれませんが、分からない部分だけを本を開いて確認すればよいのです。

読書の最大の敵は完璧主義です。

全ての内容を覚えようとするのなんで不可能なので、キーアイデアだけを読み取るようにしましょう。





苦労・我慢・努力依存症から抜け出す


人の中には無駄な苦労や我慢、努力が好きな人が多くいます。

こうした人が多くいる理由は、何かを達成する報酬として分泌される、ドーパミングというホルモンが影響していると考えられます。

その結果、成果よりも我慢や苦労、努力の量が大事だというふうに履き違える人が生まれます。

もし、得られる成果が同じなら努力や苦労なんて少ないほうがいいに決まっています。

本当に大切なことは何かという視点で、仕事や家事を見直して無駄な苦労や我慢、努力を生活から排除していきましょう。



苦手な人との関係は積極的にマネジメントする


世間一般では、人の好き嫌いはよくないと言われていますが、好き嫌いがない人なんていません。

人によって知識や価値観が違うので、お互いに嫌いあうことはどうしても出てきます。

このことを前提に人間関係をマネジメントしていきましょう。

自分の先輩や上司だからと言って苦手な人に無理に話しかけにいく必要はありません。

その先輩や上司からどんなにすぐれたアドバイスなどを聞くことができても、自分が嫌いな人の意見なのでなかなか受け入れることはできません。

苦手な人とは必要な時だけコミュニケーションをとることができればOKです。

普段は自分が一緒にいたい人とか、一緒にいて苦にならない人とどんどんコミュニケーションをとるようにしましょう。



普段使わないものは、とにかく捨てる


冠婚葬祭の服などを除いて普段使わないものは基本的に必要のないものばかりです。

「使う・使わない」の基準は1ヶ月に1回以上使うかどうかで判断しましょう。

使わないものを捨てることで、収納にどんどん余裕がでてきます。

収納に余裕がでれば、探しているものも見つかりやすくなるため心にも余裕が生まれます。

使わないものでも捨てるのがもったいないと思うものは人にあげたり、メルカリなどで出品してしまいとにかく家に物を置かないようにしましょう。



まとめ


本記事では私が、『勝間式ネオ・ライフハック100』を読んで実践したいと思うライフハック7選を紹介していきました。

人によって実践したいと感じるライフハックは異なると思うので、他のライフハックにも興味がある人はぜひ本書を読んでみてください。

余談になりますが、本書でやたらとヘルシオが便利だとおしていたので少しほしくなりました…。






本記事を読んでくださった人には以下の記事もおすすめですので是非読んでみてください。








PXL_20210221_023209166.MP_1


本屋大賞受賞作である瀬尾まいこさんの『そして、バトンは渡された』 を読みました。

最初は、主人公の親が何度も変わっているということで鬱系な感じの小説を予想していたのですが、読み終わってみるととてもすっきりした作品で、爽やかな気持ちになることができました。

以下、あらすじと感想を書いていきます。



『そして、バトンは渡された』のあらすじ


幼いころに母親を亡くし、父とも海外赴任を機に別れ、継母を選んだ森宮優子。

その後も大人の都合に振り回され、優子は3人の父と2人の母を持つ女の子だ。

何度も住む場所や名字が変わり、高校生の今は、20歳しか離れていない、血のつながっていない"父"である森宮さんと一緒に暮らしている。

優子は、そんな複雑な家庭環境であるにも関わらず、健気で強い女の子だ。学校の先生などからは、家庭のことを気にされるが、彼女は気を使われることに困った様子を見せる。

なぜなら、血のつながらない親の間をリレーされながらも出会う家族皆に愛情をいっぱい注がれてきたため、家庭環境で困ったことがないからだ。

そんな優子自身についに伴侶を持つときが来た…。

優子の成長を描く中で、彼女の過去の回想がつづられる愛にあふれた家族小説。



感想(ネタバレあり)


読了後とりあえず感じたことは、
  • 森宮さんみたいな父親がほしい!
  • 森宮さんかっこよすぎる!
  • 優子のような幸せな人生が送れるならたくさんの親がいるということも悪いことではないかも!

ということでした(笑)

『そして、バトンは渡された』を読む前は、本屋大賞のほんだけどそこまで面白い」のかなと疑問に思っていました。

しかし、読了後は、こんな作品を発売してから1年以上読んでいなかったなんてどんだけもったいないことをしていたんだと感じさせられました。

瀬尾まいこさんの作品もいままで一度も読んだことがなかったのですが、『そして、バトンは渡された』をきっかけに他の作品も読んでみたいと思いました。


森宮さんと優子のW主人公


「そして、バトンは渡された」は優子と森宮さんのW主人公で描かれている作品です。

第一章では、大人の都合で振り回される優子が主役で、第二章では、娘を送り出す森宮さんが主役となっています。

W主人公の作品として書かれているのは、分かるのですが男性の私からしてみたら優子より森宮さんの方が主役という感じが強いような気がします。

森宮さんは、梨花さんとの結婚を機会に優子を娘として迎えます。自分が優子の本当の父親ではないけど、優子に父として認めてもらえるように本当の父親以上に父親らしくしようとします。

父親らしくしようとして、朝からかつ丼を作ったりなど少し空回りしている感じもありますが、優子と森宮さんの関係は、本当の家族以上に理想の家族なんだなという感じがします。

血がつながっていないからこそ、少しお互いに気を使いあうため、優子と森宮さんは良い距離感を保てているのかなと思います。

血がつながっている家族だといっても、お互いのことを完璧に分かりあうことはできないので少し距離感があるぐらいがもしかしたら理想の家族なのかもしれませんね。


第二章で森宮さんだけが、早瀬君と優子の結婚をなかなか認めないあたりも、森宮さんが優子の将来を本当に心配していることが分かりけっこうエモいです。

ラストシーンの優子がバージンロードを一緒に歩く相手に森宮さんを選んだときは、優子と森宮さんの信頼関係が分かりむちゃくちゃ泣いてしまいました。





たくさんいる優子の父と母


優子にはたくさんの父と母がいますが、全ての父と母に愛されている優子がすごく羨ましいです。

『そして、バトンは渡された』を読むまでは、再婚などがきっかけで義父や義母が増えることに関してマイナスのイメージしかありませんでした。

しかし、本作を読んでみんながみんな義父や義母が増えることにマイナスのイメージを持っているわけではないということが分かりよかったです。

優子の父と母で一番好きなのはもちろん森宮さんなのですが、私が二番目に素敵な人だなと思ったのは梨花さんです。

梨花さんは、優子と離れたくない一心で水戸さん(優子の実の父)からの手紙を優子に渡さないなどのマイナスのシーンもありましたが、それも優子を想う愛情故です。

個人的な偏見になりますが、今まで義母って血のつながっていない娘のことを邪魔に思うものだと思っていました。(グリム童話の読みすぎが原因かも…)

しかし、梨花さんそんな私のイメージを覆す良い母でした。

優子にピアノを弾かせたい一心で泉ヶ原さんと結婚したり、自分が病気になり優子を育てることができなくなると自分の代わりに優子を大切にしてくれる森宮さんを探したりして、梨花さんが自分の人生以上に優子のことを大切に思っていることが分かりました。

梨花さんや森宮さんを見ていると家族関係は血のつながりなんかより、相手のことをどれだけ大切に思っているかどうかということが大切であると分かりますね。



まとめ


『そして、バトンは渡された』は、『家族』というテーマをすごく上手に描いている作品ですごく面白かったです。

登場人物みんながいい人であり優子を大切に思っているので、終始涙が止まらない作品でした。

読了後はきっと、皆さん幸せな気持ちで胸がいっぱいになると思いますので未読の方がぜひ読んでみてください。

優子の人生を知って、皆で幸せを共感していきましょう。








DSC_3153


2016年に芥川賞を受賞した村田紗耶香さんの『コンビニ人間』が文庫化され本屋に大量に積まれていたので購入してみました。

様々な国で翻訳されている人気作品ということで読むのが楽しみでしたが、読んだ後はなんともいえない感情に襲われてしまいました。

以下あらすじと感想になります。





『コンビニ人間』のあらすじ


「いらっしゃいませー!」お客様がたてる音に負けじと私は叫ぶ。小倉恵子、コンビニバイト歴18年。彼氏なしの36歳。ひびコンビニ食を食べ、夢の中でもレジを打ち、「店員」でいるときのみ世界の歯車になれる。ある日婚活目的の新入り男性・白羽がやってきて……。




感想と考察(ネタバレあり)


ミステリー要素や恋愛要素などがなくただのコンビニ店員を主人公としてためリアルさがとても強い作品でした。リアルさゆえに人間の気持ち悪い部分や現代社会の問題などのメッセージが分かりやすい作品であったともいうことができます。

『コンビニ人間』というタイトルを見たときは変わったタイトルだなぐらいにしか捉えていませんでしたが、本作を読んだ方にはこのタイトルがどれだけこの作品にふさわしいタイトルであったのかが分かるでしょう。

本書は本当にメッセージ性が強い作品であるため、主人公である恵子や白羽を除く作中に登場する全ての人物が普通なように見えてとても気持ちの悪い存在でした。


恵子


恵子は、子ども時代の小鳥のエピソードから分かる通り子どもの頃から奇妙な思考回路を持つ人間です。

普通の子どもであればかわいい鳥が死んでいる、かわいそう、お墓を作ろうとなります。しかし恵子は鳥が死んでいる、お父さんは焼き鳥が好きだ、お父さんのために死んだ鳥を焼いて食べようとい発想がでてきます。

恵子の行動は合理的ですが一般的な社会で受け入れられないもので、このことから恵子はおそらく「サイコパス」であるということが分かります。

成長していくにつれて恵子も徐々に自分がおかしいということに気が付きます。しかし、どうすれば治るのかが分からないためコンビニで働くまでは自分から何もしない、しゃべらない人間になります。

人と関わらない生活を送っていた恵子に変化が現れたのは大学時代に "コンビニ店員" というアルバイトを始めたのがきっかけです。徹底的なマニュアルがあり店と客のために働き社会に沽券できる "コンビニ店員" という仕事は恵子にとって天職でした。

コンビニで働き始めたことをきっかけに人とどう関われば嫌がられないかという生き方も学んでいきます。

それから18年たち36歳になった現在でも他のことに興味を持たずコンビニのためのみに人生をささげており、正に "コンビニ人間" ですね。


白羽


白羽も客観的に見れば恵子と同じで人と関わるのが苦手な社会不適合者です。

しかし本質を見ると二人の違いは一目瞭然です。恵子が人の目などを全く気にしていないのにたいして、白羽は他人からどう思われているのかということを気にしています。

恵子が人間ではない新たな生物である "コンビニ人間" であるのに対して、白羽は普通の生活を送ることができる人間に憧れているだけという印象があります。

白羽という存在がいるおかげで恵子の異質感がより際立ちますね。


"普通" の人々


『コンビニ人間』に登場する恵子と白羽以外の人物は一見普通に見えますが、彼らは "異物を排除したい" という白羽のセリフで言うと縄文時代からプログラムされている人間の本能にしたがって生きています。

この本能こそが "普通" の人間を気持ち悪く見せる要因となっています。

おかしな存在である恵子や白羽に対して普通の人々はアドバイスをしようとするが、その行動の実態は彼らにとって異常な人間の内側に入り込み自身の異物を排除したいという欲求を達成しようとしているだけです。

社会では個性を尊重することができないということ作者の村田紗耶香さんが強調しているように感じます。

個性を尊重できない社会では恵子のような特別おかしな存在でもない限り、白羽が言うように少数派の人間は人生を他者に強姦されているように感じてしまうでしょう。

また作中で恵子は普通の人々は周りの人の行動と同じ行動をとると言うような発言をしていますがこれも人間の本能で人に嫌われないために同調行動をとろうとしているだけなんでしょうね。



まとめ


ここまでご覧になっていただきありがとうございます。

『コンビニ人間』は読む人によってとても後味が悪く感じる作品となってしまうのかもしれませんが、作者の村田紗耶香さんは社会の少数派の人を排除するためにこの作品を書いたのではないと思います。

世の中の多くの人に個性的な人も世の中にはいて個性を尊重するのは悪いことではないと伝えたかったのではないのでしょうか。

『コンビニ人間』を多くの人の手に取ってもらうことでいつか個性を尊重することができる社会になればいいですね。



4267000_s


本記事では、pythonのlambda(ラムダ式、無名関数)の使い方を紹介していきます。



lambda(ラムダ式、無名関数)とは


Pythonでは一般的に関数を定義するときは、def文を使用します。

しかし、関数には通常の関数の他に無名関数というものが存在します。

無名関数とは、その名前の通り、名前を持たない関数で、関数をその場に定義することができます。

pythonではこの無名関数を書くためにlambda(ラムダ式)というキーワードを使います。



lambdaの使い方


def文を使用して入力値の2倍の値を返す関数は以下のように書くことができます。

def calcDouble(num):
    return num*2

if __name__ == "__main__":
    num = calcDouble(5)


これをlambda式で書くと以下のように書くことができます。

if __name__ == "__main__":
    num = (lambda num: num*2)(5)


ここで「lambda num:」というのが「def calcDouble(num):」に相当する部分です。

そして「:」の区切りのあとに処理を書くのが、lambda式の使い方になります。



lambdaのメリット


lambdaを使うことのメリットは、リストなどの要素に対して何か特別な動作はしたいけれど、関数を定義するほどではないなというときにぱっと使うことができることです。

[1, 2, 3, 4]というリストの要素に対して先ほどdefで定義したcalcDouble関数を実行したいときは以下のように書けます。

def calcDouble(num):
    return num*2

if __name__ == "__main__":
    nums = [1234]
    nums = list(map(calcDouble, nums))


こんなことをするためだけに、毎回calcDouble関数のような関数を定義するのは面倒なのでlambdaを使います。

lambdaを使うと以下のように書くことができ、コードが先ほどよりすっきりしていますね。

if __name__ == "__main__":
    nums = [1234]
    nums = list(map((lambda num: num*2), nums))


lambdaは、map関数と合わせ使うことが多いです。
map関数の使い方については以下の記事をご覧ください。









lambdaのデメリット


lambdaを使うことのデメリットはコードの可読性が悪くなることです。

コードは基本的に他人が読めるように書かなければならないので、処理が複雑な関数などはlambdaを使わずにdefを使って定義するようにしましょう。
(他人が読めないコードは自分が読み返すときにも分かりづらく公開することになります)



まとめ


lambdaを使うことでコードが簡潔に書くことができることが分かりました。

ただ、lambdaには可読性が下がるというデメリットもあるため、状況を判断して使用するようにしましょう。



4267000_s


本記事では、pythonのmap関数の使い方を紹介していきます。




map関数とは


map関数とは配列などのイテラブルのすべての要素にアクセスし、関数を適応させることが可能にすることができる関数です。

ちなみにイテラブルとはlist、dict、strなどのfor文の後のinの部分に入れることができる要素のことです。

for i in イテラブル:


map関数を使うことで、for文などの繰り返し処理を使わずともすべての要素にアクセスすることができます。

そのためソースコードがシンプルになりfor文を使う場合よりも可読性があがります。



map関数の使い方


for文を使ってリストのすべての要素に対して、関数を適応させる場合、以下のように書くことができます。

def calcDouble(num):
return num*2

if __name__ == "__main__":
nums1 = [1, 2, 3, 4]
nums2 = []
for i in nums1:
nums2.append(calcDouble(i))
print(nums2)


上記と同じ処理をmap関数を使用して書くと以下のようになります。

def calcDouble(num):
return num*2

if __name__ == "__main__":
nums = [1, 2, 3, 4]
nums = list(map(calcDouble, nums))

print(nums)


for文を使った場合と比べるとかなりシンプルになったのが分かりますね。

また、for文では条件ミスのエラーがよく起こるため、そうしたミスを減らすのにもmap関数は有用です。





dictに対してmap関数を使う


map関数は、イテラブルのすべての要素にアクセスできると最初に紹介したので、以下でdictに対してmap関数を適用させるコードを紹介します。

ソースコード


def outputKey(dictType):
print(dictType[0]*dictType[1])

if __name__ == "__main__":
test = {"list": 2, "dict": 3, "map": 4}
list(map(outputKey, test.items()))


出力結果


listlist
dictdictdict
mapmapmapmap



キーの文字列を値の回数表示させるという単純なコードですが、dictに対してもmap関数がしようできるということが分かりましたか。



まとめ


map関数は配列などのイテラブルのすべての要素に対して関数を適応させたいときに有効であることが分かりました。

また、map関数はlambdaと組み合わせることでコードをさらにシンプルにさせることが可能です。

labbdaの使い方については以下で紹介しているので興味のある方は読んで見てください。






↑このページのトップヘ