yagibrary

あだ名のやぎと図書館のlibraryを組み合わせてyagibraryです。本から学んだことをみなさんに紹介します。

【読書メモ】【物価とは何か】第1章 物価から何がわかるのか

物価から何がわかるのか

1. それは何の値段なのか

貨幣と商品の交換レート?

貨幣と商品の交換比率はいったいどうやって決まるのでしょうか。「自然に決まる」仕組みとはどのようなものなのか。ここにこそ、物価をめぐる経済学の探究の核心があります。

AとBという2つの商品の交換比率を考えます。交換比率は「魅力」によって決まります。では、商品の魅力は何で決まるかといえば、第一には、その商品の持つ特性によってです。その次に決め手となるのは、供給量です。

商品と貨幣の交換比率も同じように魅力によって決まるのでしょうか。

「狂乱物価」の真相

具体的な経済現象に照らして検討してみましょう。

日本で直近の大きな物価変動は、1974年のインフレです。CPI(消費者物価指数)が前年に比べ23%上昇しました。このインフレは、当時の福田赳夫蔵相の命名により「狂乱物価」とよばれています。

この時の現象は単純なものです。ガソリンなど石油関連製品の値段が上昇し、それと同時にCPIも上昇した。これだけです。

しかし、その後のデータを用いた検証によって、原油高→狂乱物価という因果関係ははっきりと否定されています。

真の原因は、日銀による貨幣の供給過剰です。

日銀によるドル買いと政府の財政拡張、この2つによって、中東戦争前夜の日本経済は、貨幣供給が過剰になっていたのです。

原油高でもインフレにならない理由

2. 物価はこうして「作られる」

3. 物価は誰のものかー企業の物価・地域の物価・個人の物価

【読書メモ】【物価とは何か】はじめに

はじめに

物価は「蚊柱」である

蚊柱ってなんだ?夏の水辺などでよく遭遇する、たくさんの蚊が集まって黒々とした柱のようになった群れのことです。

物価とは蚊柱である-これが「物価とは何か」という問いに対する、著者の最初の答えです。

商品の群れを全体として見たときにも、右に左に、上へ下へと、急速度で移動する状態が、インフレやデフレです。

物価が安定しているとはどういうことでしょうか?

個々の価格は忙しく動きまわるけれど全体としてみると安定している、というのが健全な姿です。ただ、同じ「全体が動かない」場合でも、個々の価格がまったく動かず、その当然の帰結として全体も動かないということもあり得ますが、それは病的だと言えるでしょう。後で詳しく述べますが、今の日本経済はこれに近い状態だと著者はみています。

多は異なり

蚊柱のたとえは、単にわかりやすいお話というだけではなく、物価を研究する者にとって大事なヒントを与えてくれます。物価の理解には、商品の群れをひとつの塊とみなし、その移動の仕組みを解明することが不可欠です。

実は、この蚊柱の比喩は、岩井克人がその著作『ヴェニスの商人資本論』で用いたものです。

物理学者のフィリップ・アンダーソンは、このことをMore is different(多は異なり)と語りました。「全体は部分の総和以上のもの」ということです。

【読書メモ】【WHOLE BRAIN(ホール・ブレイン) 心が軽くなる「脳」の動かし方】まえがき

目次

まえがき 心の安らぎはすぐそこに

TEDと著者は同時に世界中で有名になったのです。

www.youtube.com

www.youtube.com

著者がこの講演で語ったのは、重度の脳出血に見舞われて左脳の機能が停止し、右脳が優勢になったこと。そして、時間をかけて脳出血の後遺症を克服したこと。

TED講演から三か月もたたないうちに、著者はタイム誌の「世界で最も影響力がある百人」(2008)に選ばれました。

ここ何年にもわたり、「どうすれば、あなたが語るような、心安らかな幸福感を手に入れられるのでしょう?」という問合わせのメールを何十万通も受け取っています。

みんながお互いに、いっそうの敬意と思いやりをもって接することを著者は願っていたのです。

私たちは、一瞬ごとに、選ぶ力をもっているんです。

脳は、私たちの思考、感情、経験、行動の本拠地であり、壮大な道具です。

著者は人生の難局をみんなで乗り切るための旅について書いたのです。そして、最高の人生を送るためには、どんな選択をすればいいかを知るための本でもあります。

この本はあなたを安らぎへと導きます。じつはその安らぎは、あなたの目の前にあるのです。

第一部 脳のなかをちょこっと覗いてみる

第1章 私の物語、私たちの脳

第2章 脳の構造と人格

第3章 脳を支えるチーム —— 四つのキャラクター

第二部 あなたの「四つのキャラ」

第4章 <キャラ1>考える左脳

第5章 <キャラ2>感じる左脳

第6章 <キャラ3>感じる右脳

第7章 <キャラ4>考える右脳

第8章 脳の作戦会議 —— 平和をもたらすパワーツール

第三部 人間関係における「四つのキャラ」

第9章 自分とのつながり —— 「四つのキャラ」と体

第10章 ほかの人たちとのつながり —— 恋愛関係における「四つのキャラ」

第11章 社会との断絶と復帰 —— 依存症に立ち向かう「四つのキャラ」

第12章 この百年をふり返る —— 「四つのキャラ」と世代とテクノロジー

第13章 完璧で、ありのままで、美しい

訳者あとがき

【読書メモ】【天才読書 世界一の富を築いたマスク、ベゾス、ゲイツが選ぶ100冊】Chapter2 ジェフ・ベゾスが選ぶ本 その1

ジェフ・ベゾスの横顔 けたたましい声で笑う"狂気"の経営者

「ベゾスは芝居がかった怒り方をすることが多いが、社内ではそれをひそかに狂気(ナッター)と呼んでいる」。アマゾンのジェフ・ベゾスの伝記『ジェフ・ベゾス 果てなき野望』で、著者のブラッド・ストーンはこう述べています。

とりわけ印象的だったのは2005年のシアトルの本社でのインタビューです。ベゾスは奇妙に感じるほど、けたたましい大声でよく笑うのです。

当時は2004年11月に公開された『EPIC2014』という8分間のショートムービーが話題になっていました。

www.youtube.com
2008年にグーグルとアマゾンが合併して「グーグルゾン」が誕生し、インターネットとメディア、個人情報を支配するような存在になるという架空の物語です。

2005年の取材で印象的だったのが、「世界はもっと"透明"になっていく」とベゾスが繰り返し語っていたことです。

天才少年が本当にやりたかったこと

少年時代からベゾスは天才的な頭脳を持っており、学力判定試験で成績が優秀だったため、「バンガードプログラム」という英才教育を実施する小学校に通っていました。

後ほどベゾスが読んだ本を紹介する際に詳しく解説しますが、祖父に連れられてベゾスはよく図書館を訪れ、SFなどさまざまな本を読んで宇宙への関心を高めていきます。

宇宙飛行士になりたかったベゾスは名門のプリンストン大学に進学し、物理学を専攻しようとします。しかしさすがのベゾスも、量子力学を学んだ際に、優秀な同級生と比べて力不足だと感じ、電気工学とコンピュータサイエンスの専攻に切り替えて大学を卒業したそうです。

それからのベゾスの歩みは「宇宙に行くためにお金持ちになる」という目的で説明できます。

ベゾスがアマゾンで実践した"教科書経営"

取材を重ねる中で強く感じたのは、アマゾンの競争力の源泉はベゾスの哲学にあるということです。その象徴がアマゾンが掲げる世界共通の「Our Leadership Principles(リーダーの原則)」という14項目からなる信条です。

このような信条=哲学を末端のリーダーにまで浸透させることにベゾスは力を注いできました。

アマゾンのCEOを退任した2021年以降、ベゾスは少年時代から夢見てきた宇宙開発に本腰を入れています。

それではベゾスが読んでいる本にどのような特徴があるのでしょうか。

愛読書から得た知識を自分の頭の中だけにとどめず、部下にも共有するのがベゾス流といえます。ベゾスが選ぶ本を読むことは、強固な企業文化の作り方を学ぶうえで役立ちそうです。

PART01 経営 イノベーションを起こし、持続的に成長する企業の条件

【読書メモ】【プロになるためのSpring入門】第19章 セッションスコープ その1

第11章 Spring MVC + Thymeleaf

セッションスコープは、アクセスしているブラウザごとの固有のデータを、リクエストをまたがってサーバ側で保持するためのJava標準の仕組みです。本章では、Spring MVCを使ってセッションスコープを扱う方法を説明します。

19.1 セッションスコープとは?

AさんとBさんのブラウザがアクセスしている場合は、アプリケーションの中で、AさんとBさんそれぞれでセッションスコープが用意されます。

また、セッションスコープは、複数のリクエストをまたがってデータが保持されます。

なお、それぞれのリクエストごとにデータを保持するリクエストスコープというJava標準の仕組みもあります。

また、第11章で学習したModelもデータを保持する役割を持ちますが、Modelオブジェクトはリクエストごとに新しく生成され、レスポンスを返すと破棄されるため、リクエストをまたがってデータを共有することはできません。
yagibrary.hatenablog.com
yagibrary.hatenablog.com
yagibrary.hatenablog.com

19.2 セッションスコープの利用シーン

セッションスコープは、ショッピングカートを使って注文するときのように、複数の画面をまたがって完結させるような機能で使用されることが多いです。

図19.3は、オンラインショッピングのWebアプリケーションを想定した図になっています。左下の商品詳細画面から、商品をカートに入れるリクエストを送信すると、次の画面でカートの中身が表示されます。このときサーバ側では、カートの中の商品の情報をセッションスコープで保持します。ここでは、CartInputというInputオブジェクトが、カートの中の商品の情報を保持している想定です。

19.3 Spring MVCとセッションスコープ

Spring MVCでセッションスコープを扱う方法は、大きく以下の3種類あります。

  • セッションスコープのBeanを使用する

セッションスコープごとに個別のオブジェクトを管理してくれるBeanを使用する。

  • @SessionAttributesを使用する

Modelオブジェクトに格納したデータを、自動的にセッションスコープにも格納してもらうことができる。

  • Java標準のHttpSessionインタフェースを使用する

Javaが標準で提供するHttpSessionインタフェースを使用してセッションスコープを操作する(前述の2つの方法でも、裏ではHttpSessionインタフェースが使用されています)。

本書では、1つ目のセッションスコープのBeanを使用する方法について説明します。

19.4 セッションスコープのBean

▼ソース19.1 セッションスコープのBean定義

@Component
@SessionScope
public class ReservationSession {
    private ReservationInput reservationInput;
    ...Getter・Setterメソッド

Bean定義する方法は問いませんが、ソース19.1ではステレオタイプアノテーションの@Componentを使用してBean定義しています。@SessionScopeを付けることにより、ReservationSessionオブジェクトが、セッションスコープごとに生成されます。

ソース19.1の定義をすると、DIコンテナを生成した際に、裏ではSpringが自動生成したProxyと呼ばれるクラスのオブジェクトがBeanとして登録されます。Proxyオブジェクトの働きについては次節で説明します。

19.5 セッションスコープのBeanとProxy

自動生成されたProxyクラスは、開発者がBean定義したクラス(ソース19.1のReservationSessionクラス)を継承しています。

図19.4の真ん中にあるのが、ReservationSessionクラスを継承したProxyクラスのオブジェクトです。DIコンテナにはProxyオブジェクトがBeanとして登録されるため、ReservationSessionオブジェクトをインジェクションする側(図19.4ではReservationControllerオブジェクト)には、Proxyオブジェクトがインジェクションされます。このProxyオブジェクトの働きにより、セッションスコープごとに別のReservationSessionオブジェクトを使用することができるのです。

19.6 セッションスコープのBeanの実装サンプル

▼ソース19.2 セッションスコープのBeanのサンプル

@Component
@SessionScope@SuppressWarnings("serial") ❷
public class ReservationSession implements Serializable { ❸
    private ReservationInput reservationInput; ❹
    public ReservationInput getReservationInput() {
        return reservationInput;
    }

    public void setReservationInput(ReservationInput reservationInput) {
        this.reservationInput = reservationInput;
    }

    public void clearData() {
        reservationInput = null;
    }
}

❷と❸の行は、セッションスコープのBeanとは別の話になってしまいますが、Javaが標準で提供するシリアライゼーションを使用するための記述です。セッションスコープに格納されるオブジェクトは、シリアライゼーションを使用するための記述が必要になります。

❺の行のclearDataメソッドは、フィールドにnullを代入するだけのメソッドです。セッションスコープのデータは、サーバのメモリを消費するため、不要になったら破棄する必要があります。本来は、セッションスコープの中のReservationSessionオブジェクトを破棄したいですが、セッションスコープのBeanを使用する場合、セッションスコープの中のReservationSessionオブジェクトは削除することができません。ですので、ReservationSessionオブジェクトがフィールドで保持するReservationInputオブジェクトを破棄することで対応します。












【読書メモ】【Spring徹底入門】第11章 Spring + MyBatis その1

Chapter 11 Spring + MyBatis

11.1 MyBatisとは

MyBatisは、SQLJavaオブジェクトをマッピングするという思想で開発されたデータベースアクセス用のフレームワークです。

MyBatisは、SQLベースでデータベースアクセスを実現するというレガシーな手法を受け入れつつ、規模が大きめのアプリケーション開発で発生する課題を解決する仕組みを提供しています。MyBatisを使用することにより、以下のメリットを享受できます。

MyBatisの最大の特徴は、SQLを設定ファイルやアノテーションに宣言的に定義することで、Javaで書かれたビジネスロジックからSQL自体の存在を隠ぺいできる点です。Mapperインターフェイスと呼ばれるPOJOなインターフフェイスがSQLの隠ぺいを担っており、MyBatisがMapperインターフェイスのメソッドとSQLを紐付けています。そのため、Javaビジネスロジックからは、Mapperインターフェイスを呼び出すだけで、紐付いているSQLを実行できます。

MyBatisでは、Mapperインターフェイスに紐付けるSQLを定義する方法として「マッピングファイル」と「アノテーション」の2種類がサポートされています。

11.1.1 MyBatisとSpringの連携

Spring上でMyBatisを使用する場合は、MyBatisプロジェクトから提供されているMyBatis-Springというライブラリを使用します。このライブラリを使用することで、MyBatisのコンポーネントをSpringのDIコンテナ上で管理できるようになります。また、MyBatis-Springを使用することで以下のようなメリットも得られます。

  • Springのトランザクション制御を利用するため、MyBatisのAPIに依存したトランザクション制御を行う必要がない
  • MyBatisの初期化処理をMyBatis-Springが行なうため、基本的にはMyBatisのAPIを直接使用する必要がない
  • MyBatisやJDBCの中で発生した例外がSpringが提供するデータアクセス例外に変換されるため、MyBatisやJDBCAPIに依存した例外ハンドリングを行う必要がない
  • スレッドセーフなMapperオブジェクトを生成できるため、Mapperオブジェクトを他のBeanにDIして使用できる
11.1.2 MyBatisとMyBatis-Springの主要コンポーネント

表11.2 MyBatisの主要コンポーネント

コンポーネント/設定ファイル 説明
MyBatis設定ファイル MyBatisの動作設定を指定するXMLファイル
Mapperインターフェイス マッピングファイルやアノテーションに定義したSQLに対応するJavaインターフェイス。MyBatisは、実行時にMapperインターフェイスの実装クラス(以降、Mapperオブジェクトと呼ぶ)をProxyとしてインスタンス化するため、開発者はMapperインターフェイスの実装クラスを作成する必要はない

MyBatisとMyBatis-Springの仕組みの理解を深めるために、それらの主要コンポーネントがどのような流れでデータベースにアクセスしているのかを見てみましょう。

コンポーネントがどのように作用しているのかを、以下の2つのフェーズに分けて順を追って説明します。

  • アプリケーションの起動時に行うBean生成処理
  • リクエストごとに行なうデータアクセス処理

■アプリケーションの起動時に行うBean生成処理

  1. SqlSessionFactoryBeanをBean定義することで、SpringのFactoryBeanの仕組みにより、SqlSessionFactoryBuilderを用いてSqlSessionFactoryがBeanとして生成される。この際、DIコンテナ上にBean化されたデータソースをインジェクションすることで、捜査対象のデータベースを指定できる
  2. SqlSessionFactoryBuilderは、MyBatis設定ファイルの定義に基づいてSqlSesssionFactoryを生成する。生成されたSqlSessionFactoryは、SpringのDIコンテナによって管理される
11.1.3 MyBatis-Springの例外ハンドリング

11.2 Spring + MyBatisのセットアップ

本節では、MyBatisをSpring上で使用するためのセットアップ方法を紹介します。

11.2.1 ライブラリのセットアップ

【読書メモ】【プロになるためのSpring入門】第11章 Spring MVC + Thymeleaf その4

その1~その3に関してはこちらの記事を見てください。
yagibrary.hatenablog.com
yagibrary.hatenablog.com
yagibrary.hatenablog.com

第11章 Spring MVC + Thymeleaf

11.16 入力チェックの実施方法

入力画面が一通り完成したので、次は入力チェックの実施方法を見ていきます。

▼ソース11.32 入力チェックを行うハンドラメソッド

@PostMapping("/reservation/validate-input")
public String validateInput(@Validated ReservationInput reservationInput, ❶
                                            BindingResult bindingResult, ❷
                                            Model model) {
    if (bindingResult.hasErrors()) { ❸
        List<StudentType> studentTypeList = reservationService.findAllStudentType();
        model.addAttribute("studentTypeList", studentTypeList);
        return "reservation/reservationForm";
    }
    ...
    return "reservation/reservationConfirmation";
}

❶では、@Validatedを付けることで、ハンドラメソッドが呼ばれる前に入力チェックが実施されます。

入力チェックの結果は、❷で定義したBindingResult型の引数で渡されます。BindingResultは、Spring MVCが提供する型です。なお、BindingResultの引数は、Inputクラスの引数の右隣に指定しなければならないというルールがあります。

11.17 エラー文言の設定

11.18 リクエストパラメータを使用したハンドラメソッドの呼び分け

11.19 例外のハンドリング

たとえば、ソース11.37の❶の行で、reservationServiceのreserveメソッドを呼び出して研修の予約を行なっていますが、reservationServiceのreserveメソッドは、予約数が定員を超えた場合にCapacityOverExceptionという例外をスローする作りになっている想定です。

▼ソース11.37 研修の定員を超えた場合は例外がスローされる想定

...
@PostMapping(value="/reserve", params="reserve")
public String reserve(@Validated ReservationInput reservationInput, Model model) {
    // 予約数が定員を超えた場合にCapacityOverExceptionがスローされる
    Reservation reservation = reservationService(reservationInput); ❶
    model.addAttribute("reservation", reservation);
    return "reservation/reservationCompletion";
}
...

CapacityOverExceptionオブジェクトがスローされた場合、ソース11.37のハンドラメソッドの中で特に例外のキャッチを行なっていないため、呼び出し元(Spring MVCの内部のプログラム)に例外が伝搬されます。その場合、デフォルトのエラー画面が表示されます。

デフォルトのエラー画面は、ユーザに表示するには不適切です。

例外をハンドリングする方法はいくつかありますが、本章では、例外をスローする可能性があるControllerクラスの中で、@ExceptionHandlerを使用する方法を説明します。

▼ソース11.38 @ExceptionHandlerのサンプル

...
@PostMapping(value="/reservation/reserve", params="order")
public String reserve(@Validated ReservationInput reservationInput, Model model) {
    ...
}

@ExceptionHandler(CapacityOverException.class) ❶
public String displayCapacityOverPage() {
    return "reservation/capacityOver";
}
...