一角獣は夜に啼く

ただの日記です。

思ってることとか考えたこととか適当に書きます。 主にソフトウェア開発の話題を扱う 「ひだまりソケットは壊れない」 というブログもやってます。

Kotlin に関して最近取り組んでいるもの

「Kotlin Fest 2018」 がいよいよ明日になりましたね! 私も何か LT しようというつもりだったんですが、チケット販売開始直後に LT 枠のチケットを買おうとしてカード決済周りでまごついてたらチケットが売り切れちゃってました! みんな熱い!!!

というわけで (?)、Kotlin を使った最近の個人的な取り組みを書き残しておきます。 「Kotlin Fest 2018」 に参加する人で何か興味があるものがあれば、ぜひ会場でお話ししましょう!

最近 Kotlin で取り組んでいるもの

DB アクセスライブラリを書いてる

個人的に Ktor で web アプリケーションを書こうとしているのですが、DB アクセスライブラリとして何を使うのかで悩んで、ExposedJdbi 3 を試してなかなかしっくりこず、最終的に自分で書いてみてます。

API はリレーショナルデータベースの思想にのっとるつもりで、インターフェイスに拡張関数として定義します。 んで、実際の DB アクセスの処理は拡張関数を持つインターフェイスの実装をリフレクションで提供する、という感じです。

// リレーションの各属性を持つタプルを表すクラスを定義。
data class FooTuple(
    @AttributeName("id") val id: Long,
    @AttributeName("value") val value: String
)

// リレーションを表すインターフェイスを定義。
@RelationName("foo")
interface FooRelation : BareRelation<FooTuple>

// リレーションの実態とリレーションに対する操作を定義。
interface FooRelationContext {
    val fooRelation: FooRelation

    @Insert
    fun FooRelation.insert(value: FooTuple)
}

// 複数リレーションを扱うコンテキストを複数集めてアプリケーション用の
// DB アクセスのコンテキストを定義。
// OrmQueryContext は、各種リレーションに対する select 操作を提供するインターフェイス。
interface AppOrmContext : OrmQueryContext, FooRelationContext

// 以下のような感じでインターフェイスの実装を生成できる。
val connection: Connection
val ormContext = JdbcOrmContexts.create(AppOrmContext::class, connection)

// 下記のような感じで insert したり select したりできる。
with (ormContext) {
    fooRelation.insert(FooTuple(1, "Hello"))
    val selected = fooRelation.select(where { FooTuple::id eq 1 }).toSet()
}

今のところは JDBC を使った DB アクセスの実装を軽く書いてるというぐらいなのですが、オンメモリでリレーションの実装を提供する仕組みも作るつもりです。 (そうするといちいちモックを定義しなくても DB アクセスを含むユニットテストが書けるようになって便利。 戦術的 DDD のリポジトリインターフェイスにしてテスト時にはオンメモリの実装を提供するなどすることでテストしやすくするのと同様のことをもう少し低レイヤで実現したい。)

内部的にはリフレクションでごりごりやっているので、Kotlin のリフレクション周りを触る人と知見交換したいなーという気持ちです!

Ktor での Twitter ログイン

Ktor の routing の中で以下のような感じでメソッドを呼ぶことで Twitter ログインのエンドポイントをはやすことができる仕組みも書きました。

        setupTwitterLogin(
            "/auth/twitter/start", "/auth/twitter/callback",
            "http://localhost:8080", twitterClientCredentials, env,
            object : OutputPort {
                override val success: OutputInterceptor<TwitterToken> = { token ->
                    // Twitter ログイン成功時の処理。
                }
                override val twitterCallFailed: OutputInterceptor<TwitterCallFailedException> = {
                    // Twitter との通信に失敗した時の処理。
                }
                override val temporaryCredentialNotFound: OutputInterceptor<TemporaryCredentialNotFoundException> = {
                    // Temporary Credential が見つからなかった時の処理。
                }
            })

こっちは普通に実装しただけですが、Ktor で Twitter ログインを実装したい人の参考になれば。 (そのうちライブラリ化するつもりではある。)

WebDriver 経由でブラウザ上で処理を実行してスクリーンショットを返す、という Ktor アプリケーションを書いてる

Ktor から WebDriver を使ってリモートエンドのブラウザ上で何か処理をして、そのスクリーンショットを Ktor のレスポンスとして返す、というような web アプリケーションを書いています。

Ktor へのリクエストをキューにためて WebDriver を使ってリモートエンドのブラウザ上で処理を行う、みたいな流れや、WebDriver のセッション管理、ヘルスチェックのための WebDriver へのリクエストをいい感じに割り込ませる、みたいな仕組みのためにコルーチンをいい感じ (?) に使ってます。 「Kotlin Fest 2018」 では八木さんのコルーチンについてのセッション 「Kotlin コルーチンを理解しよう」 もあるので楽しみです。

Kotlin を愛でていきましょう!

Kotlin がんがん使っていくぞ!!!

家用のモバイル PC を買い替えたい (20 万円前後で 1 kg ちょっとでそこそこいいスペックのマシン)

家で使ってる VAIO Z (2015 年モデル) が膨らんできて (おそらくバッテリーが……) 怖いので、そろそろ買い替えようと思っている。

何を買うか悩んでる

VAIO Z は結構良くて、1 kg そこそこの重量で (第 5 世代の) Core i7 を積んでて、20 万円台でわりとバッテリーの持ちも良い。 だいぶ気に入っているので、似たようなマシンが欲しい。 VAIO Z の後継機があったら多分それを買うところなのだけど、残念ながら VAIO Z は 2016 年を最後にモデルチェンジをしてないので、別の会社で探すことにした。

いくつか良さそうなマシンは見つけたのだけど、イマイチ決めてがなくてどれにするか悩んでる。

候補

(大体第 8 世代の Core i7 が載ってるマシンを選んでるけど、ADM 派なので Ryzen が載ってる PC があればそれも使ってみたい。 が、日本で手に入る欲しいスペックのマシンはなさそう。)

ASUS ZenBook S UX391UA

ASUS 製品。 重量やヒンジといった物理的な部分に特徴が見られる。

ASUS ZenBook S UX391UA | ノートパソコン

Dell XPS 13 (9370)

Dell の製品。 ASUS 製の上記製品とスペック的には結構近い。

Dell Cinemaと次世代InfinityEdge搭載のXPS 13ノートパソコン | Dell 日本

Razer Blade Stealth

ゲーマー向けブランドの RAZER の製品。 ゲーミング PC、とはいうものの GPU が積まれてるわけでも無くて、そこそこいいスペックの PC という感じ *1。 個人的には、ゲーミング PC というのは割とバランスが良くて開発者にも使い易い気がしている。 (会社でもゲーミング PC で仕事をしてる。) US キーボードじゃなければこれで決まりで良かったのだけど、US キーボードというところでだいぶ悩み中。

The New Razer Blade Stealth Ultrabook Laptop

HP EliteBook 830 G5

ディスプレイ周りは Full HD でタッチでもないので上記の製品よりやや見劣りする気もするけど、その代わりに非光沢液晶なのが個人的には嬉しい。 メモリも 32 GB 積めるので、割と良い気がする。

HP EliteBook 830 G5 製品詳細・スペック - ノートパソコン・PC通販 | 日本HP

  • 個人的に惹かれるところ
  • 個人的な気になりどころ
    • 他と比べると薄さや重量の点で見劣りする。
    • ディスプレイ解像度も小さい。 (とはいえ Full HD あれば十分という気もする。)
東芝 dynabook (PRZ63FS-NND または PVZ82FL-NNB)

RZ63/FS 2018春価格.com掲載モデル コスモシルバー | 【公式PC通販】東芝ダイレクト
VZ82/FL 2018春価格.com掲載モデル オニキスブルー | 【公式PC通販】東芝ダイレクト

  • 個人的に惹かれるところ
    • 非光沢液晶!
    • 安い! (東芝の公式サイトから 15 万円 / 17 万円ぐらい。 会員価格でさらに安くなる。)
  • 個人的な気になりどころ
    • プリインストールアプリがいろいろある……。
    • ディスプレイ解像度も小さい。 (とはいえ Full HD あれば十分という気もする。)
Surface Pro (Core i7 / メモリ 16 GB / SSD 512 GB)

Microsoft 製の Windows マシン。 基本的には家で使う用なので、タブレット型でもいいのかなーという気がしている。 (電車内などでタイピングするならラップトップ型がいいとは思うのだけど、そうでなければキーボードは Bluetooth 接続のものでいい気がしている。) 故障率が高いという情報と、CPU が第 7 世代の Core シリーズという点、それと価格がやや高いのが気になるところ。

新しい Microsoft Surface Pro | 思わず持ち歩きたくなるような、超軽量なノートパソコンを

*1:外に GPU ボックスをつなぐことができるらしい。

読んだ : 「便利な」 保育園が奪う本当はもっと大切なもの

保育園問題』 が行政側の視点で書かれていた書籍であった一方、こちらは保育園の理事長という立場の人による著書。

「便利な」保育園が奪う本当はもっと大切なもの

「便利な」保育園が奪う本当はもっと大切なもの

概論としては、下記のような感じ。

  • 国の施策として、経済政策の一環として出産前後の女性の就業率の向上などが図られている。
  • そのために必要な保育園の規制緩和がなされている。
  • また、子どもにとって良い保育ではなく、親にとって便利なサービス提供が求められるようになっている。 (行政的側から指導主事がそのようになっている。)
  • その結果、子どもにとっての保育の質が低下してしまい、子どもの健全な成長が阻害されるという状況が起こっている。
  • 子育ての主体者は保護者であり、保育園は子どもの成長・発達を保証するという役割と、子育てにおける親の役割の大切さを伝えていくという役割を果たすべき。

感想

概要だけ見ると良いことを言っているように思える。 特に保育の質については、『保育園問題』 でも触れられていたことではあるけれど、園側の視点で具体的にどういう状況が起こっているのかということが語られたので、より深く理解できた。 また、行政の施策に対して園側からの批判的な目線で語られるのも、行政側の意見だけでは見えない部分が見えて良かった。

一方で、細かい部分では感情的な論調もあったり、やや過激な主張があったりするので、そこは気になった。 例えば 「母親を働かせるのではなく (ニートや引きこもりの) 若者を働かせるべきだ」 とか、「3 歳までは基本的に家で親が育てるべきだ」 とか。

良いことも書いてあるし、「ちょっと違うんじゃないかな」 って思えることも書いてあるけど、全体としては保育業界に対する理解が進んで良かった。

読んだ : 保育園問題

横浜市の副市長として、保育園にまつわる課題や待機児童問題の解決に取り組んできた前田正子氏による保育園問題についての書籍。 2017 年の発行で、こども園についてなどの、わりと最近の話題まで取り扱われている。

序章では保育園に子どもを預けるまで (いわゆる保活) の大変さが描かれ、1 章で日本の保育制度について説明される。 様々な形態の保育施設 (認可保育園、認可外、認定こども園、家庭的保育、事業所内保育など) について説明がなされ、また、認定区分や利用指数、保育料についても説明されるので、保育制度の全体像を掴みやすい。

2 章では待機児童がなかなか解消されない理由の説明。 働き手が不足する中で、国としては 「一億総活躍」 を掲げ、出産・育児中の女性にもどんどん働いてもらいたい。 そこで待機児童対策を重点課題として保育事業の規制緩和などを推し進めていて、保育園の定員数は増加傾向にある。 少子化もあり、全国的に見ると現在は定員割れしている状況になっている。 それでも待機児童問題が発生するのは、保育利用率が上がっていること、保育の需要が都市部に偏っていること、子どもの年齢によっても需要と供給の不一致が起きていること、供給が増えればそれに応じて需要も増えること、などの理由がある。 特に地域差や年齢差による需要と供給の違いといった部分は保育業界の仕事をしていくうえでは重要だなーと感じる。 (都市部しか見てないと地方では全く受け入れられないとか、いろいろある。)

3 章は保育士不足の話。 よく言われる給与が安いという理由 *1 だけでなく、子どもの命を預かるという責任の重さや事務作業の多さ、保護者への対応が大変といった理由や、キャリアパスを描きづらいといった理由がある。

4 章は、保育の量が求められる一方で質も担保していかなければならないという話。 本書の著者は行政の人なので行政側の視点で 「量を確保しながらいかに質を担保するか」 という視点で述べられている。 最近読んでいる 『「便利な」 保育園が奪う本当はもっと大切なもの』 という本では園長という立場から質の低下について述べられていて、この本よりもさらに園に近い視点で保育の質について知ることができる。

「便利な」保育園が奪う本当はもっと大切なもの

「便利な」保育園が奪う本当はもっと大切なもの

最後の 5 章では、育児しやすい環境にするためには単に待機児童を解消するだけでは不十分という話。 実情として、子育てに不安を覚える親は多く、また、父親が育児に参加せず、他に相談相手もおらず孤独感を抱える母親が多いという。 育児休業の期間は一般的に長くて 1 年であるが、保育園への入園をしやすい時期が 4 月であるために、本当は 1 年の育児休業を取りたくても 0 歳から子どもを保育園に預ける親が都市部では多い。 保護者が保育園へ過剰な要求をするのは、保護者がそれだけ過酷な労働環境にあるからとも言える。 その他、海外の状況なども挙げながら 8 つの提言がなされている。

  1. 育児休業を原則 1 年取ることを徹底する。 0 歳児保育を減らすことで、1 歳児以降の定員を増やすことができる。
  2. 育児休業を父親と母親で交代で取ることを推進する。
  3. 育休の過度な延長よりは保育園整備を進める。 育休が長すぎるとキャリア形成に悪影響だったり、事業者の負担増といった問題がある。 (ドイツでは当初は育休を長くする方針だったが、うまくいかず保育所整備に方針転換したらしい。)
  4. 働き方改革
  5. 保育士の給与改善。
  6. 給与以外の面での保育士の待遇改善。
  7. 都心部への一極集中の解消。
  8. 幼稚園にも待機児童解消の役割を果たしてもらう。

単純に保育園を作ればいい、みたいな話ではなくて、都心集中・仕事中心になりがちな現代社会の生活を文化ごと変えてゆとりを持った生活を送るようにするのと、保育士の待遇改善、といったところが大きそう。

保育にまつわる課題をわかりやすく解説した良書だった。

*1:公立園は公務員の給与体系で年功序列で上がっていくが、私立園はそうではない

読んだ : マンガで読む 人生がときめく片づけの魔法

マンガで読む人生がときめく片づけの魔法

マンガで読む人生がときめく片づけの魔法

うちの汚さを見かねた恋人氏が部屋にこの本を置いていったので読んだ。

著者は 「片づけコンサルタント」 のこんまり (近藤麻理恵) さん。 2015 年には 「世界で最も影響力のある 100 人」 にも選ばれたらしい。 (まじか……!) 講演などもしていて、下記の動画などで見ることができる。


内容メモ

本書は、収納法の解説よりも、考え方に重きを置いている。 まずは、「片づけをすることでどういう生活をしたいのか。 理想の生活はどういうものなのか」 を思い描く。 それで、片づけに対する動機づけを意識したり、片づけの先に目を向けることができる。 それでいうと、あんまり 「理想の生活」 というのが自分にはないなー、ということをちょっと思ったりした。 (快適に生きていければそれでいいや、って思ってしまって片づけに対して動機づけできない。)

実際の片づけとしては、まず 「捨てる」 こと。 その時、捨てるものを選ぶのではなく、残すものを選ぶというのが重要。 残すものの基準だが、タイトルにも入っている 「ときめき」 を大事にする。 ひとつひとつのものを見て、それに自分はときめくのか、それは自分を幸せにするのか、ということを考える。

そして、片づけは 「場所ごと」 ではなくて 「モノごと」 で行う。 例えば服を片づけるときには、自分の全ての服を一度に片づける。 場所ごとだと、自分が持っているモノの全体を把握できないので、モノごとに片づけを行わなければならないとのこと。 実際に自分の服を全部まとめて片づけたのだけど、確かに自分が持ってる服が意外と多くてびっくりしてしまった。

書籍もときめくかどうかを判断基準にして、ときめかないものは捨ててしまう。 紙類は基本全捨て。 契約書などの後でもいるものと、しばらく必要なものと、未処理のものの 3 種類だけは (それぞれ別に扱いやすいように) 残しておいて、それ以外は捨ててしまう。 思い出品みたいな捨てにくいものは、最後に。 これもときめくものを残す。

ひととおり捨て終わったら収納。 収納は種類ごとにまとめる。 基本的には重ねずに立てる収納を行う。

感想

そもそもなんだけど、片づけについてのコンサルタントで生計を立ててる人が居るのすごいなー、と思ってしまった。 自分は片づけに対してそこまで情熱を持ってないけど、世の中には片づけをしっかりしたい人が結構居るんだろうなー。

「ときめき」 を判断基準にする、というのはすごくわかりやすくて良い基準だと思う。 「後で使うかも」 とか 「もったいない」 って思って残しておいてしまう種類の人間なので、ときめくかどうかを基準にばんばん捨てていきたい。

こんまりさんも言ってたけど、ときめくかどうか、というのは片づけ以外でも人生のあらゆる場面で判断基準として良いものだと思う。 仕事選びもそうだし、人間関係もそうだし。 ときめく生活をしていきましょう。