徒然なるままに

子育てとプログラミングが同居する不思議な空間

幼稚園の入園式

昨日 (4/8)、上の子の幼稚園の入園式でした。

子どもが大きくなるのは早いもので、気づけば幼稚園児。親はたいして何も変わっていないのに、子どもはどんどん大きく育っていく。子どもがうまれると、毎日がどんどん過ぎ去っていく感じがします。

入園式では緊張した面持ちだったけど、ずっとお行儀よくしてくれていたので良かったです。集合写真撮影のときもおとなしく座っていてくれていました。

最近は妹に思いやりも見せるようになってきて、親としてはうれしい限りです。公園に行くと知らない子どもや親に自分から歩み寄っていって話しかけまくるというちょっと不思議な子どもではあるものの、まじめで優しい子どもに育ってくれていると思います。

幼稚園に入ったら自転車を買ってあげる約束をしているので、今月末までには補助輪付きの自転車を買うつもりです。そして連休中に公園で自転車の練習をする予定。

まだまだこれからも成長が楽しみです。

幼稚園に入る準備

ここ数ヶ月は仕事が忙しくてほとんどブログは更新していませんでした。平日は朝から夜遅くまで仕事をしていて、土日は子どもたちと遊んだり家族と出かけたりしています。仕事が忙しくなった関係で以前より子どもたちと関わる時間は減ったけれど、思っていたほど子どもたちは私から心離れしていない様子。

今年の4月から上の子は幼稚園に通うことになるので、最近はその準備もいろいろと忙しいです。私は入園式に普段仕事で着ているスーツを着用する予定ですが、妻と子2人は特にそういったものを持っていないので新しく購入しました。他にも靴を買ったり、散髪したりと週末はやることが目白押しです。妻は最近ミシンを買って、子どもの手提げ袋とかを夜な夜な作っています。

上の子は自転車に興味があるようで、「僕も乗りたい」とよく言っているので、幼稚園に入ったら自転車を買ってあげる約束をしました。入園したら自転車屋さんに行って買ってあげる予定。今年のゴールデンウィークは帰省する予定がないので、近所の公園で自転車に乗る特訓をする計画です。

なんだかつい最近うまれたような気がする上の子ももうすぐ幼稚園でもうすぐ4歳。早いものです。子どもがうまれると年月が経つのがものすごく速くなった気がします。

PostgreSQL の JDBC Driver メモ

jdbc.postgresql.org

PostgreSQLJDBC ドライバーのデフォルトフェッチサイズは制限なし、つまり1度にすべての行をとってくる。そこで fetch size を指定することになるのだが、fetch size を指定するためには以下のような制限を満たす必要がある。

  • auto commit モードは OFF でなければならない。
  • ResultSet.TYPE_FORWARD_ONLY でなければならない。
  • 複数ステートメントをセミコロンでまとめてはならない*1

*1:SELECT の場合、通常そのようなことはしないはずだが。

Spring と MyBatis の備忘録

Spring Boot と MyBatis を組み合わせて使おうと思ったら以下の選択肢がある。

github.com

もともと Java Configuration にはそんなに明るくなかったこともあって、少しはまったので備忘録として残しておく。

まず、application.properties *1 に mybatis.config で MyBatis の設定ファイルを追加するか、または mybatis.mapperLocations、mybatis.typeAliasesPackage、mybatis.typeHandlersPackage を設定ファイルに追加する。何を設定できるかは MyBatisProperties クラスを参照する。また、どう使われるかは MybatisAutoConfiguration クラスの sqlSessionFactory メソッドを参照する。

私たちの会社では Controller と Service と Mapper を組み合わせるのだけど、Application (Controller) → Service → Mapper というフローにすると、Application クラスに @MapperScan("com.example.monota.spring.dao") のように DAO *2 インターフェースの場所を指定する必要がある。そうしないと、MybatisAutoConfiguration の AutoConfiguredMapperScannerRegistrar が実行されるのだが、これが実行されると以下の例でいうと SampleService に DAO がインジェクトされるというよくわからない事象になってエラーが発生する。

@SpringBootApplication
@MapperScan("com.example.monota.spring.dao")
public class SpringSampleApplication {

    public static void main(String[] args) {
        try (ConfigurableApplicationContext context = SpringApplication.run(SpringSampleApplication.class, args)) {
            SpringSampleApplication springSampleApplication = context.getBean(SpringSampleApplication.class);
            springSampleApplication.runSampleApplication();
        }
    }

    @Autowired
    private SampleService sampleService;

    public void runSampleApplication() {
        sampleService.execute();
    }
}

参考までに @MapperScan をつけなかった場合のエラーは以下のような感じ。

Exception in thread "main" org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.monota.spring.service.SampleService.execute
    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:196)
    at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:44)
    at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
    at com.sun.proxy.$Proxy50.execute(Unknown Source)
    at com.example.monota.spring.SpringSampleApplication.runSampleApplication(SpringSampleApplication.java:25)
    at com.example.monota.spring.SpringSampleApplication.main(SpringSampleApplication.java:17)

AutoConfiguredMapperScannerRegistrar は MapperScan が指定されていない場合に Spring Boot の Scanner で Mapper を探し始めるので、com.example.monota.spring に SpringApplication があり、com.example.monota.spring.service に SampleService があり、com.example.monota.spring.dao に SampleDao があるような状況だと、SampleService も SampleDao もどちらもインターフェースなので、どちらも Mapper インターフェースとして認識するという結果になっているように思える。

要は @MapperScan つけましょうねというお話でした。

*1:Environment によって細かいところは変わるけど割愛

*2:正確には Mapper

平日の仕事の話

最近よく読むブログはハウツーだとか自己啓発だとか難しい内容だとかが多くて、昔ふつうに見ていたような日記はあまり見かけなくなったように思います。単にはてなホッテントリばかり見ているからなのかもしれないですけど。

今日は仕事について書いてみます。
職業はシステムエンジニアです。といってもマネージャーではなくアーキテクトとして仕事をしています。

わたしは平日は朝7時に起きて、8時前に家を出ます。朝は産経エクスプレスというタブロイド紙を読んでいます*1。その後、電車に乗って会社まで向かいます。ドアツードアでだいたい45分くらい。首都圏の通勤時間にしてはやや短いのかもしれないですね。

朝9時からプロジェクトのミーティングが始まります。いわゆる朝会というやつです。そこではプロジェクトメンバーが1人1人、昨日の作業進捗と課題、あとは今日の作業予定について報告します。いまは7人しかいないのに朝会は30分くらいかかるのでもう少し短縮する工夫をした方がいいのかもしれないと思っています。

わたし自身の仕事はあまりスケジュールがきっちり決められていなくて、やるべきことを少しずつ切り崩しては消化していく感じです。先月と今月はアプリケーションの基盤部分の実装をしています。私にしかできない作業が多い*2うえに全体の作業ボリュームも大きいから困りものです。

退社は日によって異なりますが、19時~23時くらいです。帰宅はその1時間後くらい。早く帰れた日は子どもたちをお風呂に入れたり、子どもたちと遊んだりしています。子どもたちが寝た後は、勉強したり、ゲームしたりします。そして夜0時~1時くらいに就寝します。

なんかあまり仕事の話にならなかったですね。
仕事の話はまたそのうち書きます。

*1:残念なことに今年3月いっぱいで廃刊になるらしいです

*2:と思っているのは私だけかもしれません

帰省してきました

あけましておめでとうございます。

この正月は妻の実家に行ってきました。

ちょうど帰省ラッシュのピークだった30日に移動したこともあり、新幹線ホームはこれまでに見たことのないくらい大混雑でした。小さい子どもが2人いるので、いつも1ヶ月前に新幹線の指定席予約を取るようにしています。上の子は乗り物が大好きなので新幹線にもテンションが上がっている様子でした。

妻の実家ではのんびり過ごし・・・たかったのですが、下の子が私によくなついていて・・・というより「父>母>曾祖母>>>他の人」という感じなので、私にべったりくっついてきて全然ゆっくりできませんでした。寝るときもお風呂もご飯もいっしょ。ありがたいことなのですが、少しはゆっくりしたかったという気持ちもあります。ただ、妻の実家でおいしい食事をたくさんいただけたのはありがたかったです。上の子はおじいちゃん・おばあちゃんにとてもかわいがってもらっていて、もうやりたい放題でした。

去年は育児に力を入れてきました。
今年は、育児が以前よりは落ち着きつつあるので、勉強にも力を入れていきたいと考えています。具体的には、Spring Frameworkソースコードを読み込んでトラブルシュートできるようになること、Spring Boot や Spring Cloud を使ったサービスを構築できるようになることを目標にして勉強していきます。余力があれば、NoSQL や Spark といったものも勉強していきたいです。英語のリスニングも再開しようかな。

本年もよろしくお願いいたします。

今日も子どもと遊びに出かける

育児って大変って思っている人と、そうじゃないって思っている人がいるようです。子どもの性格とか、親の性格とかも絡んでいて、一概には言えないのかなと思います。ですが私の感覚では、育児はかなり大変です。そもそも大変で、その大変さ度合いというのは、父親がどれくらい育児に関われるかとか、両親が近くに住んでいるかどうかとか、身近に助けてくれる人がいるかどうかで大きく変わってくるのかなと思っています。母親だったら、ママ友がいるかどうかも関係するかもしれないですね。

我が家は、私も妻も家から片道500km以上離れた場所に両親が住んでいて、身近に親戚もいないので、基本的には頼りにできる人はいません。なので、私たち夫婦だけで育児しています。子どもは2人(3歳と1歳)ですが、3歳の子は会話はある程度できるもののまだまだ下の子の面倒を見てくれるというわけでもないです*1。また、保育所などに預けるようなことはしていません。なので育児は真っ向勝負です。

育児に関する掲示板とか見ていると、悲痛な叫びがいろいろ見えてきます。我が家も大変な時期はありました。上の子が小さい頃、夜ぜんぜん寝なくて、毎晩9時頃になると私は子どもを抱っこひもで抱っこして外に出て、子どもが寝るまで1時間くらい外を歩いていました。それが終わったと思ったら今度は夜泣きがひどくて、また寝かしつけるために抱っこひもを使って、本当に大変でした。そんな上の子も今は普通に寝るし、まあ甘えん坊だったりわがままだったりはしますが、いい子です。下の子は割とおとなしくて夜泣きもしませんが、機嫌の悪い日は1日中ぐずぐずしてて親に泣きながらべったりっていうこともあります。

たぶん、子どもの性格による程度の差はあれど育児は大変です。親が愛情をかけようとすればするほど大変だと思います。誰かに丸投げすれば楽だと思います。ただ、どっちがいいのかは自明です。

さて、話は変わりますが、今日も上の子を連れて遊びに出かけてきました。今日はキドキドで遊んできました。ずいぶん楽しんでいたようで、親としても満足です。ただ3歳半になっても眠くなるとだんだんぐずぐずしてくるので対処に困ることはあります。妻はその間に家の大掃除の残りを片付けたり、帰省する準備をしたりしてくれていました。

子どもが2人もいると、1週間はあっという間に過ぎていきます。私の場合、昼間は仕事か育児で、夜に子どもたちが寝てからは勉強です*2。以前は育児が大変だったので仕事は残業しない宣言をしていました。今は昔ほど大変じゃないので残業も普通にしています。その辺はバランス重視で、今後も変えていくかもしれません。

*1:たまに下の子といっしょに遊んでくれることがあるので助かることもあるという程度です

*2:たまにゲームもしていますが