mahiro-ism

データエンジニアリングと日常生活。

爆速で赤ちゃんにミルクをデリバリーするためにやっていること

こんにちは、mahiroです。

突然ですが、みなさま、調乳していますか?

新生児は夜中であろうと2, 3時間おきに授乳する必要があります。調乳に時間がかかってしまうと、眠い目をこすりつつ頑張る親は非常に大変です。また、何よりにも、赤ちゃんがお腹を空かせて待っています。

そこで、我が家では少しでも調乳を終わらせるための方法を考え、実践しています。

結論

我が家では、以下の2点を用意し、後述の手順で調乳することにしました。

  • 電気ケトル
    • ティファールジャスティン プラス」を利用しています。
    • 少量のお湯を短時間で沸騰させられるものであれば何でもOKでした。
  • ピュアウォーター*1
    • 和光堂「ベビーのじかん 赤ちゃんの純水」を利用しています。
    • 赤ちゃん向けを謳っている、加熱殺菌済みのものを選びました*2

手順

簡単にまとまめると、沸騰させた少量のお湯で粉ミルクを溶かし、事前に冷蔵庫で冷やしておいたピュアウォーターを混ぜて温度を下げます。

詳しい手順は以下のとおりです。

  1. 電気ケトルで少量のお湯を沸騰させる。
  2. 粉ミルクを規定量だけ哺乳瓶に入れる。
  3. 最初に沸騰させたお湯を、規定量の半分程度に達するまで哺乳瓶に入れる。
  4. 哺乳瓶をよく振って粉ミルクを完全に溶かす。
  5. 冷蔵庫で冷やしたピュアウォーターを、規定量に達するまで哺乳瓶に入れる。
  6. 哺乳瓶を振って混ぜる。
  7. 温度を確認する。もし熱い場合は冷水を張ったボウル等に入れて十分冷ます。
  8. 完成!

考え方

調乳は主に以下の2ステップに分解できます。

  1. 調乳に適した温度(70℃以上)*3のお湯を用意し、粉ミルクを溶かす。
  2. 授乳に適した温度(40℃程度)まで冷ます。

それぞれのステップについて、複数の選択肢を挙げて比較・検討しましたので、そのときのメモをご参考までにご共有します。

なお、実はステップ1に比べてステップ2にかかる時間が圧倒的に長いです。よって、ステップ1についてはどれを選んでも実際の授乳時にかかる時間は大差ありません*4。そのため、ステップ1は好みで選んでしまってよいと思います。

一方で、ステップ2の時間短縮は大きなポイントとなります。

ステップ1: 調乳に適した温度のお湯を用意する

①電気ポット
  • 授乳複数回分のお湯を沸かし、保温しておくことができます。
  • お湯の量が多い場合、沸騰までにかかる時間が長いことを考慮して不採用としました。
ウォーターサーバー
  • お湯が出せるタイプを選べば、沸かす時間を考えずいつでもお湯を使うことができます。
  • 他の選択と比較して、管理が面倒である点、維持費が比較的高価である点を考慮して不採用としました。
電気ケトル
  • 授乳1回分のお湯を短時間で沸かすことができます。
  • 毎回お湯を沸かす必要があるのが若干気になるポイントではありますが、水を入れてスイッチを押せばすぐに沸くのであまり問題にはならないと考えました。

ステップ2: 授乳に適した温度まで冷ます

①冷水を入れた容器や、流水を用いて温度を下げる
  • オーソドックスな手法です。
  • 100℃近い温度から40℃程度まで下げる場合にはかなり時間がかかってしまい、夜中の授乳におけるステップ2をこれのみで対応するのは厳しいと判断しました*5
②冷やした水を混ぜて温度を下げる
  • 一気に温度を下げることができるため、ステップ2にかかる時間を大きく削減することができます。
  • 水を別途購入する必要がありますが、一度に使用する量はそれほど大きくないためあまり問題にはならないと考えました。*6

最後に

ステップ2の時間が短縮できたことにより、夜間でもあまり体力を使わず、爆速でミルクをデリバリーできるようになりました。

今後も、工夫して減らせる負担を減らしていくことで、楽しみながら育児をやっていけたらよいなと考えています。

*1:ミネラルの過剰摂取を防止するため、ミネラルウォーターではなくピュアウォーターを採用しています。

*2:「ベビーのじかん 赤ちゃんの純水」は、ミルクの調乳に湯冷ましとして使えますか?

*3:世界保健機関(WHO)及び国連食糧農業機関(FAO)が共同作成し、厚生労働省が仮訳した「乳児用調製粉乳の安全な調乳、保存及び取扱いに関するガイドライン」(仮訳)によると、粉ミルクは70℃以上のお湯で溶かすことが推奨されています。

*4:電気ポットやウォーターサーバーについては、事前準備が完了しており、すぐにお湯が出せる状態になっていることが前提です。

*5:最初はステップ2においてこちらの方法のみを採用していましたが、(特に夜間は)体力的に非常に厳しかったです。

*6:手順で説明したとおり、実際の運用では①の方法も必要に応じて併用しています。

エンジニア未経験からデータエンジニアを目指すまでに学んだこと

こんにちは、mahiroです。

近年、データ基盤の重要性はますます高まっています。これに伴い、データ基盤の構築・運用・管理を担うデータエンジニアの需要も増しています。ところが、その一方でデータエンジニアリングを担う人材は不足しています。

データエンジニアとして働く方々はソフトウェアエンジニアやインフラエンジニア、SREといった経歴を持ち、エンジニアとしてのスキルを持った状態でスタートしている場合が多いです。データエンジニアリングに関する書籍や資料等についても、エンジニアリングについての知識をある程度前提としているものが多く、エンジニア未経験からデータエンジニアになるのはハードルが高い*1のが現状です。

そこで、本記事では、エンジニア未経験からデータエンジニアになった経歴を持つ筆者が、エンジニアになるために学んだ内容のうち「これはデータエンジニアになってからも非常に役に立った」と感じているものを「データエンジニアになりたい非エンジニア」の方々へ向けてピックアップした上で、筆者がどのように独学したかをまとめてみました。

これらを勉強することで、データエンジニアリングの土台となる基礎が身に付き、今後の学習をスムーズに進められるようになるかもしれません。

注意

  • 「これを身に付ければデータエンジニアになれる」というものではありません
  • 「これをすべて身に付けないとデータエンジニアになれない」というものでもありません
  • あくまで、筆者個人の経験をベースにしたものなので、万人に当てはまるとは限りません。
  • 書籍は原則として当時採用したものをそのまま記載していますが、新しい版が出ている場合はそちらを優先的にご紹介しています。

学んだスキル・技術

情報処理技術の基礎

まずは情報処理技術の基礎をざっくりでよいので一通りは学んでおきましょう。

すべての知識がデータエンジニアリングに必要というわけではありませんが、全体像を掴んでおくことは大事です。必要になったときに思い出して調べることができるように、頭の中に地図を作成するイメージで学習しましょう。

もちろん、興味があればさらに詳しい書籍を読んだりしてもよいですが、この段階で無理にすべてを理解しようとする必要はありません。

私は「独習 情報処理技術 入門編」で学習しましたが、情報処理やコンピュータ・サイエンスの全体像を俯瞰できる教材であれば何でも構いません。基本情報技術者試験応用情報技術者試験の参考書とかでもよいと思います。

スプレッドシートExcel

簡単な集計など、実務では結構使う機会があるので、不慣れな方はこの機会に身に付けておきましょう。

以下のような内容を理解して、スムーズに使える状態になっている状態が目安です。

  • 相対参照と絶対参照
  • 条件付き書式
  • データの入力規則
  • ピボットテーブル
  • データ分析で頻出する関数
    • SUMIF(S), COUNTIF(S) 関数
    • XLOOKUP(VLOOKUP, HLOOKUP) 関数

こちらは手を動かしながら1冊走り切りましょう。上記の項目がサクっと扱えるようになると、スプレッドシートでカバーできる範囲がかなり広がるはずです。教材については、Excelの教科書のうち評価が高めのものであればどれでもよいと思います。

ここでは、私が利用した本(「たった1日で即戦力になるExcelの教科書」)をご紹介しておきます。

SQL

SQLは利用頻度が非常に高く、データエンジニアの必須スキルと言えます。データソースとなるDBからのデータ抽出(Extract)や、データ基盤に格納したデータの加工(Transform)など、様々な場面で利用することになります。

SQLについては、定番ではありますが「SQL」をおすすめします。SQLの基本をしっかり学べる良書です。こちらもきちんと手を動かして、簡単なクエリであれば反射的に書けるレベルを目指しましょう。

もし余力があれば「達人に学ぶSQL徹底指南書」にも挑戦してみるとよいです。少し難しめの内容ですが、SQLについてより深く学べます。

また、興味があれば「達人に学ぶDB設計 徹底指南書」にも手を出してみましょう。DBを設計する側の視点を持っておくことで、データソースとなるシステム担当者とのやり取りがスムーズになる場面があります。

Linux

データエンジニアはサーバにSSH接続してコマンドを実行するなど、Linux環境で操作を行う機会もあります。そのため、基本的な操作については、コマンドラインからスムーズに実施できるようにしておきましょう。

ここでは、Linuxの基本がわかりやすく解説されている「新しいLinuxの教科書」をおすすめします。これまでの例に漏れず、呼吸をするようにコマンドを叩けるようになるまで手を動かしましょう。

また、実務ではシェルスクリプトを扱う機会も出てくるので、余力があれば「新しいシェルプログラミングの教科書」もやることをおすすめします。

Python

まずは1つ、プログラミング言語を身に付けておきましょう。複雑なデータの加工や、シェルスクリプトでは煩雑になりがちな自動化スクリプトの作成など、活用できる場面は多いです。

なお、1つの言語を習得してしまえば他の言語を学ぶハードルは下がるので、特にPythonでなくてもOKですが、今回は以下の理由よりPythonをおすすめしています。

まずはPythonの基本的な書き方を習得しましょう。「独学プログラマー」がおすすめです。バージョン管理やパッケージ管理などについても併せて学習してしまいましょう。

もし「独学プログラマー」が難しければ、先にProgateをサクッと1週して文法を学んでしまうのがおすすめです。有料プランへの登録が必要ですが、1ヶ月以内にやり切れると思います。

基本的な文法をマスターしたら、公式ドキュメントの標準ライブラリにざっと目を通しておくとよいです。「こんなことができるライブラリがあったような気がする」と必要なときに思い出せる程度で大丈夫です。もし興味があるライブラリがあれば実際に動かしてみてもよいでしょう。

また、今後は様々な公式ドキュメントを読むことになるので、ぜひこの機会に慣れておきましょう。

さらに、自身の興味に応じて以下のような書籍にもチャレンジするのもおすすめです。

  • Pythonのよい書き方を身に付けたい → 「Effective Python
  • Pythonについての深い知識を身に付けたい →「エキスパートPythonプログラミング」
  • Pythonによる実践的な開発の知識を身に付けたい →「Pythonプロフェッショナルプログラミング」

なお、「Effective Python」については原著第3版が出版予定なのでご注意ください。

最後に

これらのスキルを身に付けていれば、わからないことを自分で調べたり、詳しい人に質問したりしながらデータエンジニアリングの学習を進めていくためのハードルがかなり下がっているはずです。ここからは、業務で必要となるスキルや、ご自身が興味のある技術をどんどん学んでいきましょう。

本記事がデータエンジニアになりたいみなさまのお役に立てば幸いです。ぜひデータエンジニアリングをやっていきましょう。

*1:たとえば、未経験者がいきなり「データエンジニアリングの基礎」を読んでも、理解するのはそれほど簡単ではないと思われます。

「赤いライトで朝までぐっすり 赤ちゃん寝かしつけの新常識」を実践してみる

こんにちは、最近子どもが生まれ、父親になったmahiro(@hrkhjp)です。

「子どもの寝かしつけの本は、睡眠不足になってからでは読めないので早めに読んでおいた方がよい」というアドバイスをいただいたので、評判のよい「赤いライトで朝までぐっすり 赤ちゃん寝かしつけの新常識」を読みました。

寝かしつけのポイント

この本によると、主に以下の2点がポイントになるようです。

  • 夜は遮光カーテンなどを用いて光を完全にカットする
  • 授乳などを行う際には、赤いライトを利用する

光のカット

  • シャッターがついている窓はシャッターを下ろす
  • シャッターがついていない窓は遮光1級のカーテンをつける

という形で対応しました。

ただし、以下の理由よりこれだけでは完全に遮光できませんでした。

  • 遮光1級は完全に遮光できるわけではない
  • カーテンは少し浮いているので隙間から光が漏れてしまう
  • ドアの隙間からも光が入ってきてしまう。

そこで、100均で購入した防草シートを数枚重ねたものを、窓枠の内枠にマジックテープで貼り付けることで解決しました。また、ドアの隙間については、これまた100均で購入した隙間テープで光が入ってくるのを防ぐことができました。

なお、遮光フィルムが利用可能な場合*1はこれを窓に貼り、隙間を黒いマスキングテープで埋めるのが一番簡単です。実家への帰省時はこれを利用しています。

赤いライト

探してみたものの、赤いライトなんて都合のよいものはなかなか見つかりませんでした。

そこで、「TP-Link Tapo L530E」を購入しました。これはWi-Fi接続することでスマホアプリから光の色を変更することができる電球です。普段は白色にしておき、夜だけ赤色に変更する、という使い方ができるので非常に便利です。

ただし、このままでは天井に付けられないので、併せて「ヤザワ 角型引掛ランプソケット SF34101」も購入しました。これを利用することで、シーリングライトの代わりに電球を取り付けることが可能になりました。

まとめ

遮光環境が完成したので、あとは本の通りに実践するだけです。まだ生まれたばかりでほぼずっと寝ているような状態なので効果が見えるのはまだ先だと思われますが、うまく寝てくれるよう祈るばかりです。

最後に、遮光+赤いライトの環境作りについては、「ジーナ式 遮光」などのワードで検索すると他にも多くの事例が見つかりますので、ぜひ参考にしてみてください。

*1:窓に複層ガラス等の特殊なガラスが使われている場合、遮光フィルムを貼ると熱割れが発生するおそれがあるのでやめておくのが無難です。

GoogleスプレッドシートのIMPORT系の関数の結果を即座に更新する方法

やりたかったこと

GoogleスプレッドシートでIMPORTDATA関数を使ってCSVデータを取り込んでいるが、元データが変更されているのに反映されないことがあったのでなんとかしたかった。

結論

GASで値を入れ直せばよかった。ただし、clear()したあと、setValue()する前にflush()する必要があった。

詳細

まず、普通にIMPORTDATA関数を試す。↓をシート1のA1セルに入力してみる。

=IMPORTDATA("https://hogehoge.csv")

すると、CSVのデータがシートに展開される。

ところが、CSVのデータが更新されていたとしても、シートを開き直しても即座に反映されない。

そこで、以下のように、ファイルを開くたびにGASで関数を消去し、再度入力するようにしてみるとうまくいく。

const onOpen = () => {
    const spreadSheet = SpreadSheetApp.getActiveSpreadSheet();
    const sheet = spreadSheet.getSheetByName("シート1");
    const cell = sheet.getRange(1, 1);
    cell.clear();
    SpreadSheetApp.flush();  // これが重要
    cell.setValue(`=IMPORTDATA("https://hogehoge.csv")`);
};

試したがうまくいかなかったこと

  • 「ファイル」>「設定」>「計算」>「再計算」 を「変更時と毎分」にする
    • これは「NOW、TODAY、RAND、RANDBETWEENの更新頻度を設定します」と書いてあるとおり、IMPORT系関数には適用されないらしい
  • clear()してからすぐsetValue()する
    • 関数がクリアされて再度セットされる様子は確認できるが、結果の値が更新されない
  • clear()のあとにUtilities.sleep()を挟んでからsetValue()する
    • これも同様にうまくいかず、結果の値が更新されなかった

注意

今回はIMPORTDATAのURLをハードコーディングしているので特に問題はないが、他のセルを参照してURLを取得しているような場合、参照先のセルが行や列の挿入でずれたときに参照するセルがずれてしまい、正しいセルを参照できなくなることがあるので注意が必要。

gsutilコマンド使用時のサービスアカウントを環境変数で切り替える方法

GCPのCloud SDK (gsutil) で使われるサービスアカウントを環境変数で切り替えて利用しようと思ったところ、なかなか上手くいかなかったので備忘録として残します。

やりたかったこと

gsutil コマンドでGCSを操作するにあたって、実行するスクリプトごとにサービスアカウントを切り替える必要があった。 gcloud auth activate-service-account コマンドでサービスアカウントを切り替えることはもちろん可能だが、これは他のスクリプトにも影響を与えてしまうため避けたかった。

解決策

gcloud named configurationを複数作成しておき、環境変数 CLOUDSDK_ACTIVE_CONFIG_NAME でconfigurationを指定すればよかった。

詳細

  1. configurationを作成する

     $ gcloud config configuration create <configuration_name>
    
  2. サービスアカウントをactivateする

     $ gcloud auth activate-service-account <account> --key_file=<path/to/key_file>
    
  3. 元々activeになっていたconfigurationをactivate (今回はdefaultと想定)

     $ gcloud config configuration activate default
    
  4. 設定を確認する

     # 元々のアカウントの設定になっていればOK
     $ gcloud config list
    
     # 今回設定したサービスアカウントになっていればOK
     $ CLOUDSDK_ACTIVE_CONFIG_NAME=<configuration_name> gcloud config list
    
  5. サービスアカウントを指定してgsutilコマンドを実行する

     # gsutilコマンドが指定のサービスアカウントで実行できているはず
     $ CLOUDSDK_ACTIVE_CONFIG_NAME=<configuration_name> gsutil ls
    

試したが上手くいかなかったこと

  • 環境変数 GOOGLE_APPLICATION_CREDENTIALS でサービスアカウントを指定する
    • これはクライアントライブラリ(Python APIなど)のサービスアカウントを指定するものらしく、Cloud SDKでは無視されてしまう
  • 環境変数 CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE でサービスアカウントを指定する
    • gcloud コマンドや bq コマンドでは動くようだが、gsutil コマンドでは無視されてしまう

References