としおの読書生活

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

2021年02月

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選を紹介していきました。

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

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






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








↑このページのトップヘ