1つのMTGが午前中をダメにする

基本的に、予定があることがわかっている時は、何も仕事を終わらせられません。時計を見て「1時間後に会議があるから、この大事な仕事はまだやらないほうがいいな」と思ったり、1時間を20分くらいに感じるせいか、一番小さな仕事ですら無意識のうちに先延ばしにします。

生産的な1日は「予定を入れすぎない」ことからはじまる

30分後にMTGが予定されているだけで次の仕事をやる気がしなくなります。中途半端にやるくらいなら、MTGが終わってからやろうと思うからです。そして、MTGが終わると何だか疲れてしまい、少し休憩してからやろうと思います。さて、休憩もしたので仕事に取り掛かったのもつかの間、昼休みになります。このような感じで午前中に1つMTGが入っただけで、ほとんど生産的なことができずに午前中が終わってしまいます。たった30分のMTGが午前中をダメにしてしまいます。

このMTGのように、それ自身は些細な時間でも与える影響は大きいものです。その影響についても考える必要があります。

サッカー日本代表がベスト16にしかなれない理由

サッカー日本代表がW杯の決勝トーナメントでベルギーに敗れ、ベスト16になりました。日本のメディアは大いに日本の選手を称えています。この世論の雰囲気こそがサッカー日本代表がベスト16にしかなれない理由だと思います。

もちろん、予選を突破してベスト16に入ったのはすごいことです。しかし、W杯で優勝するようなチームにとってベスト16に入るのは当たり前のことなのです。優勝候補のブラジルが決勝トーナメントの1回戦で負けたらブラジルの世論はなんと言うでしょうか。おそらく、酷いバッシングをするはずです。

この空気がブラジル代表の選手たちの潜在意識に強く影響をしているわけです。ブラジルの選手たちはベスト16で勝つのは当たり前。絶対に負けられないと100%信じているはずです。

対して、日本代表の選手たちはベスト16になったことで少なからず何処かに満足感があると思います。これは選手たちのせいではなく、日本の世論が作り出している雰囲気のせいです。

開催国のほとんどが予選を突破して決勝トーナメントに進出するのも同じ理由です。自国開催のチームは絶対に予選を突破しないといけないと潜在意識に強く刷り込まれているわけです。

日本の空気感こそがサッカー日本代表の最大の壁だと思います。

明日は台風なのでリモートワークします

明日は台風なのでリモートワークをします。リモートワーク制度があるので都合のいい時間に自分の働きたい場所で働くことができます。リモートワーク制度のいいところは、「台風がそれたから出社になった」なんてことがないことです。最初からリモートワークをすると決まっていれば朝はゆっくりと過ごすことができます。

朝から会社の判断を待ってどうするかが決まるなんてわずらわしくないですか。出社を判断する方も大変でしょう。会社が判断するのではなくて個々人で判断すればいいのです。会社で働いたほうが都合がいい人は会社で働けばいいですし、会社以外で働いたほうが都合がいい人はリモートワークをすればいいだけです。

SetterとBuilderの使いわけ

先日、「SetterとBuilderはどのように使いわければいいのか?」という質問を受けました。なかなかよい質問ですね。Builderを使うとクラスのインスタンスを柔軟に作ることができます。Builderを使ったサンプルコードです。

1
2
3
4
User user = User.builder()
.lastName("山田")
.firstName("太郎")
.build();

Builderを実装したUserクラスのサンプルコードです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class User {
private final String lastName;
private final String firstName;

User(String lastName, String firstName) {
this.lastName = lastName;
this.firstName = firstName;
}

public static UserBuilder builder() {
return new UserBuilder();
}

public static class UserBuilder {
private String lastName;
private String firstName;

UserBuilder() {
}

public UserBuilder lastName(String lastName) {
this.lastName = lastName;
return this;
}

public UserBuilder firstName(String firstName) {
this.firstName = firstName;
return this;
}

public User build() {
return new User(lastName, firstName);
}
}
}

Setterを使うと次のようになります(実装は省略)。

1
2
3
User user = new User();
user.setLastName("山田");
user.setFirstName("太郎");

Setterの問題点として、インスタンスの状態を変更してしまうことがあります。イミュータブルな実装にする場合、原則としてコンストラクタで値は設定するべきでSetterで変更するべきではありません。

では、Setterではなくコンストラクタで設定するようにしましょう。引数が少ないうちは問題がないのですが、次の例のように引数の数が増えてしまうとコードが煩雑になってしまいます。

1
2
3
// 姓、名、年齢、血液型、国が引数のコンストラクタの例
// 年齢と血液型は不明だが、nullを指定する必要がある
User user = new User("山田", "太郎", null, null, "日本");

そこで、Builderを使うメリットが出てきます。Builderを使えば柔軟にパラメーターの設定が行えるようになります。

1
2
3
4
5
User user = User.builder()
.lastName("山田")
.firstName("太郎")
.country("日本")
.build();

SetterもBuilderもやりたいことはオブジェクトにパラメーターをセットすることです。Setterを使うとオブジェクトの状態を変更してしまうことになります。イミュータブルな実装かつ柔軟にパラメーターを設定したい場合はBuilderを使いましょう。

そろそろlombokから卒業しようと考えています

便利なlombokですが、そろそろオワコンな感じがしています。理由はJavaのアップデートに追従することが困難になってきているからです。詳しくはLombok の Java9以降対応の記事に書いてあります。実際、Java9対応も遅かったですね。lombokを使い続けると、Javaのアップデートに追従していけなくなる未来が想像できます。

Spring Bootも2系からはlombokは使っていませんね。

lombokは便利ですが、別に無くてもなんとかなるライブラリなので、あえてこれから使う選択をする必要はないと思います。