なかなかどうして、この有様よ。

へたれ系PG/SEの技術系メモ+育児日記。

SQLで対象のカラムのデータが複数のカラムのデータのいずれかに含まれている場合

ざっくり概要(ざっくり)

最近、SQLを書いていて「とあるマスタテーブルにあるカラムのデータが、とあるトランザクションテーブルにある複数のカラムのうちどこかに含まれている場合は対象にする」というSQLを書く機会があったので、メモとして残しておきます。

「めんどくさい」のは簡潔にしたい

この業界に入って久しいですが、SQLを極めるほどSQL文を書くということはほとんどなかったので、今回のSQLトランザクションテーブルの複数カラムを単純に「Where句にORで全てのカラムを書く」という方法を考えました。
しかし、複数カラムが実は10カラムあったので、それは大変「めんどくさい」ですし、「ORで全てのカラムをバカ正直に条件に書くのはなんかミスりそうでやだなー」という結論に至ったので、いろいろ調べてみたのでした。

そして、こちらの内容を見つけました。
MySQL - sqlで複数のカラムのデータにいずれかを含んでいる状態|teratail
上記の内容を確認すると、SQLでINで条件を設定する際に、対象の複数カラムを設定すればそれを対象として条件検索してくれるということでした。

SQL

以下の構造のテーブルがあったとします。
マスタテーブル(MST_TABLE)にはカラムはID、ITEM_CDとその他カラムがあり、トランザクションテーブル(TRN_TABLE)にはID、ITEM_CD1からITEM_CD10までの連番カラムとその他のカラムがある前提です。

SQL文としては以下になります。

Select 
    T.ID
From 
    MST_TABLE M
  , TRN_TABLE T
Where 
    M.ITEM_CD IN (
           T.ITEM_CD1
          , T.ITEM_CD2
          , T.ITEM_CD3
          , T.ITEM_CD4
          , T.ITEM_CD5
          , T.ITEM_CD6
          , T.ITEM_CD7
          , T.ITEM_CD8
          , T.ITEM_CD9
          , T.ITEM_CD10
        );

これで、SQLで対象のカラムのデータが複数のカラムのデータのいずれかに含まれている場合のデータを取得することができます。

保育園の入園準備は大変。

はじめに

この記事は、入園準備で食事用エプロンを自分で作らないといけないから作ってみたらこうだった、という記事です。
時間がないわ、とか長文読んでも、という方は下の方にまとめてあるのでスクロールしてまとめへどうぞ。
時間がある方で長文読んでもいいよ、って方はそのままお読みください。

入園が決まれば次は入園準備がいる

保育園への入園が決まって、そこで渡されるのが入園時に必要なものリストだったりするわけですが。
うちの園では食事用のエプロンをタオルとゴムで手作りしないといけないというのがありました。
しかも、1日におやつ2回とお昼ご飯1回の3回分、つまり毎日3枚いるわけです。
毎日洗濯するとして洗い替えと考えても最低6枚、そんな余裕なんてないわ!となる可能性を考えると平日だけでも3枚×5日の15枚いるということに。
めちゃ重労働。

で、まぁ保育園の年度初め(4月入園)の申し込みがうちの市だと前年の11月で、内定通知が年明けて2月で面接、そのご決定通知か来るのが3月末というハードスケジュールでした。
一応うちの地域では、内定通知が来た時点で自分が希望した園ではないからと辞退して待機児童にならなければ、よっぽどのことがない限りそのまま決定されるようなので面接時点で入園のしおりを配布されました。 しかし、まぁ初めての時はそれが確定なのかは判らないわけでして。
なので、準備を進めつつも「ホントにいいのかなぁ」と思いながら準備をしていました。
2人目にもなると「内定来た-!よし、入園準備取りかかるか!」みたいになっていましたが。。。w

食事エプロンを作ってみた雑感

で、そのエプロンを作る際に思ったことや2回目の時に変えたことをメモしておこうかと思います。

1人目の時

まず、園では「食事用のエプロンは子供達が自分で脱ぎ着できるようにご家庭で作っていただいています。フェイスタオルを半分に切っていただいて、それにパジャマのズボンに入れるゴムを付けていただければ完成なので。」という感じで説明されました。
で、その通りフェイスタオルを半分に切ってゴムを通して、とやっていたんですが、選んだフェイスタオルが問題でした。
「保育園だし、やっぱり可愛い柄の方が良いよね!」と色気を出してしまって、ミッキーとかの一枚絵になっているタオルを買ってしまったんですよ、全部。
さあ、フェイスタオルを半分に切ってさて、と気付くのが切り口をそのまま折ってしまうと絵柄が上下逆になる問題。
もう衝撃的でしたね。何せせっかく工場で奇麗に縫われている箇所があるのにそれが上側でゴムを縫い付けるために隠れてしまうわ、下側になった切り口を素人の仕事で奇麗に折り返して縫うという作業が発生するわで作業が増える一方でした。
また、厚手の総柄のフェイスタオルを使ったら縫いにくくて縫いにくくて泣きそうでした。
あと、ゴムをあとで通したらめちゃくちゃ時間かかるし手が痛いし、みたいになりました。
結局完成するまでに半日くらいかかっていたと思います。

2人目の時

なので、2人目の時には考えました。
やっぱり可愛い柄でエプロンは作りたい、しかしフェイスタオルはダメだ。
そこで気付いたのです。
ならば、フェイスタオルのほぼ半分のサイズであるハンドタオルを買えばいいのだ、と。
これはホントに当たりでした。
ハンドタオルって結構2枚組とかで売っていたりする事もあるんですよね。
キャラクターものは厚手のものも少ないですし。
なので、2枚組のものとか、1枚だけど可愛いのとかを全部で15枚になるように購入。
そしてエプロンを作る際は上側を折り返してゴムを縫い付けるだけ。
ゴムは折り返す時に一緒に折っておけば、縫うときに既に通っているし、そのあとゴムの端を縫い付けるだけ。
切る手間もなく、下側の処理も要らず、しかも可愛い柄満載。
これを勝利と言わずしてなんというのか!
みたいな感じでエプロンを大量生産しました。
以前に比べると2時間くらいは作業時間が減ったと思います。

まとめ

  • 開き直って1週間に必要な数のエプロンを作る。
    作るのは大変だけど、毎日の事を考えると「洗濯できてないのに!」というストレスを減らす。
  • タオルはなるべく薄手で縫いやすく。
    多少へたっててもせいぜい2年くらいしか使わないので割り切りも必要。
    どうしてもって時は数枚縫い直せばよし。
  • フェイスタオルを使うなら総柄か無地をチョイス。
    切り口を縫うだけにして作業効率アップ。
  • ゴムはタオルと一緒に折り返して通す時間を節約。
  • 可愛さを妥協できないときはハンドタオルで裁断を避ける。
    可愛いは正義。

ということで、本日はこの辺で。

Gitでの各操作メモ。

業務でGitについて調べたので、自分なりにまとめた内容を残しておこうと思います。
実際に使ったわけではないため間違ってるかもしれないので、参考にする際は書いてあることを全部鵜呑みにせずご自分で判断してご利用ください。

Gitリポジトリのセットアップ

  1. Gitリポジトリを新規作成
    $ git init
  2. ローカルリポジトリを作成
    $ git init [リポジトリ名]
  3. リモートリポジトリ(中央リポジトリ)の作成
    $ git init --bare --shared
  4. リモートリポジトリからローカルリポジトリへの取り込み
    $ git clone [リポジトリ名]
  5. ローカルリポジトリからリモートリポジトリへのクローン
    $ git clone --bare [リポジトリ名]
  6. リモートリポジトリのミラーリポジトリの作成
    $ git clone --mirror [リポジトリ名]
    ミラーリポジトリ$ git remote update
  7. 最近実行されたコミットコミット履歴のみをクローン作成
    $ git clone --depth=1 [リポジトリ名]

git initとgit cloneの違い

git clonegit initに依存しており、$ git cloneを行うと内部で$ git initを実行してから既存リポジトリをコピーしている。

Gitリポジトリへの変更内容の登録

  1. ファイルのステージング(インデックスに追加)
    $ git add [ファイル名]
  2. ステージングされたファイルのコミット
    $ git commit [ファイル名]
  3. ステージングと同時にコミット
    $ git commit -a [ファイル名]
  4. 直前のコミットに今回のコミットを含める
    $ git commit --amend [ファイル名]
  5. 直前のコミットメッセージを変更する
    $ git commit --amend
  6. コミットされていない変更を別領域に保存して作業コピーから取り消す
    $ git stash [ファイル名]
  7. コミットメッセージのフォーマット例

    1行目 :変更内容の要約(タイトル、概要)
    2行目 :空行
    3行目以降:変更した理由(内容、詳細)

リモートでの作業

  1. データをリモートリポジトリから取得する
    $ git fetch
  2. フェッチしてリモートブランチの内容を現在のブランチにマージ
    $ git pull
  3. ローカルとリモートをマージし、リモートへ変更を反映させる
    $ git push

ブランチについて

  1. ブランチの作成(のみ)を行う
    $ git branch [ブランチ名]
  2. ブランチの切り替え
    $ git checkout [ブランチ名]
  3. 分岐した履歴を統合して元に戻す
    $ git merge [マージ先ブランチ名]
  4. ブランチを切り替えてマージ
    $ git merge [マージ元ブランチ名] [マージ先ブランチ名]
  5. ブランチを新規作成と同時に切り替える
    $ git checkout -b [ブランチ名]
  6. リポジトリ内のブランチを一覧化する
    $ git branch

masterブランチ/HEADとは

項目 説明
ブランチ 一連のコミットの先端を表すポインタ。
master デフォルトのブランチ名で大方はメインのブランチのこと。
HEAD 今どのブランチで作業しているのかを保持する特別なポインタ。

マージの際の競合(コンフリクト)

$ git statusで状態を確認して手動でマージを行い、$ git addしてステージングする。
すべてのファイルがステージングできたら、$ git commitを行ってマージコミットを完了させる。

マージの取り消し

  1. マージが未着手で、マージを取りやめるとき
    $ git merge --abort
  2. 競合を解消するために作業ディレクトリ内で変更した内容(コミット済み)をすべて取りやめるとき
    (取り消されたコミットがあったことも履歴に残らない)
    $ git reset --hard HEAD
  3. 競合を解消するために変更した内容(コミット済み)を元に戻すとき
    (取り消した履歴が残るが、取り消したマージコミットに含まれていた変更を再度マージすることはできない)
    $ git revert [コミットID]

ブランチの操作

  1. リポジトリ内のブランチを一覧化する
    $ git branch
  2. リポジトリ内の現在作業中のブランチへマージされているブランチを一覧化する
    $ git branch --merged
  3. リポジトリ内現在作業中のブランチへマージされていないのブランチを一覧化する
    $ git branch --no-merged
  4. マージ済みブランチの削除
    $ git branch -d [ブランチ名]
  5. ブランチの強制削除
    $ git branch -D [ブランチ名]

リベース

  1. リベースを行う
$ git checkout [リベース元のブランチ名]  
$ git rebase [リベース先のブランチ名]  

git rebaseとgit mergeの違い

git rebasegit mergeと同様に、変更を1つのブランチから別のブランチに統合するためのコマンド。
マージはマージ元のブランチはけして変更されないが、ブランチに無関係なマージコミットが発生するため、履歴が乱雑になる可能性がある。
リベースはリベース先のブランチの先頭から新しいコミットのすべてをリベース先のブランチに取り込むことができるが、リベース元のブランチの内容が再書き込みされ、いつその変更がリベース先のブランチに取り込まれたのかわからなくなる。

eBuilder 8 2018 winterでSVN Kitがインストールできない

先日からintra-martの案件に入る事になったので、eBuilder 8の設定をしていたのですが、SVN Kitを入れようとすると必要なプラグインが足りない旨のエラーメッセージが出てインストール出来ない状況に。
で、色々と調べてみると、どうもSVN Term Providerのプラグインが足りていないようでした。

ちなみに、今回対象のeBuilderはeBuilder 8 2018 winter。
eBuilder 8 2018 winter はEclipse Neon ベースで構築されているようなので、Eclipse Neonのリリースサイトを利用することができます。 

通常のプラグインインストールと同様に、新規ソフトウェアのインストールから以下のリリースサイトを元に下記2プラグインを追加します。 

http://download.eclipse.org/releases/neon

その後、SVN Kitをインストールすれば、エラーなくインストールできました。

参考にさせていただいたサイトはこちら。
e Builder(2018 Summer)にSVNプラグインをインストールする  (追記 2018 Winter対応) - Qiita

PlayStation4(PS4)のBluetoothリモコンを買いました。

最近、子供たちに動画配信サイト(AmazonプライムビデオやNetflix)やPlayStation4(PS4)のnasne/torneを使って子供向けの番組などを見せることが多くなってきました。

その際、iPadなどのタブレットでは画面サイズが小さかったり、スタンドがないので見づらかったり、また子供たちが「タッチすればいろいろと動く」と認識しているので娘氏が画面を変えてしまって息子氏が怒るなどイベントごとが発生してしまうので、基本的にはタブレットを使わずにテレビを使って見せています。

で、PS4を使うときに困るのが、コントローラーの問題です。
PS4のコントローラーはやっぱりゲーム用なので、両手で操作するのが前提の作りになっています。
なので、どうしても片手でポチポチと操作するのは難しく、どうしたものかと探してみたところ、PS4対応のBluetoothリモコンがあったのでそちらを購入してみました。

リモコンなので、片手でポチポチできるのでものすごく便利になりました。
なにせ、片手で子供抱っこしてても使えますからね。
そして便利すぎて、子供たちが噛んだりガンガンと打ち付けたりして壊れてもリピート購入しています。

ちなみに、購入したものは3種類。
何故3種類購入したのかというと、簡易機能のもの2種類(HORIのものと、PDP並行輸入品)と高機能のもの1種類(PDP並行輸入品)の3種類あって、壊れたタイミングでどれがいいか判別するためにそれぞれを買ってみました。
個人的にはPDPの簡易機能のものがBluetoothの反応がいいのと、見たとおりのボタンを押せばいいので迷うことがなくて便利なので、最近はそれをメインで使っています。
ホント、リモコン様々です。

というわけで今回はこの辺で。

2019/1/7追記

リモコンの各メーカサイトの商品ページを以下に貼っておきます。
あと、高機能の奴はSONYじゃなくPDPの奴だったので訂正してます。

napnap compact新旧比較

以前、napnap compactをお出かけできるおんぶ紐として購入したのですが、最近napnap compactがリニューアルされて使いやすくなっているようだったので新たに買い直しました。
ですので、新旧比較を記載しておこうかと思います。

なぜnapnap compactを使い出したのか

以前、「おんぶ紐難民」という話を投稿したのですが、上の子が元気すぎて前抱っこで下の子を抱いて走り出す上の子を捕まえるのは難しかったので、下の子をおんぶすることにしたのでした。

以前のcompact利用で気になっていたこと

  • 肩紐がエルゴ360に比べて細い。
     → エルゴ360に近い太さになった。
  • 抱っこしたり背負ったりしたときの肩紐がついている幅が心持ち狭い。
     → 幅が広くなり狭いと感じなくなった。
  • 収納カバーをポケットにした時に、下部のボタンがあって、ポケットの幅を細くできるけどあまり必要がない。
     → 下部のボタンがなくなった。
  • 子供を降ろしたあと、他の抱っこ紐のようにカバーでまとめて腰元で留めておけない。
     → 腰ベルトの中にボタンがついて、まとめたあとフード(取り外し可能)の真ん中のボタンに留めておけるようになった。
  • 子供の落下防止カバーが思ったより浅い。
     → 縦が以前の1.5倍くらいの長さになった。
  • 落下防止カバーがボタンにループを留めるだけだったので降ろしたときに片方外れていることが多い。
     → 肩紐にバックルがついて、そのバックルに留めるようになり、追加で落下防止ベルトが増えた。
  • 背負ったときにフードを使おうとするとボタンがついている部分が短くて掴んで前に回すまでが大変で留めにくい。
     → ボタンの数が増えて長さも延びたので留めやすくなった。
  • 子供を抱っこしたり背負ったときのお尻の部分が思ったより幅が狭い(子供の足の付け根ギリギリくらい)。
     → 子供の太股までカバーされる位の幅になった。

肩紐や抱っこしたときの肩紐の位置が狭めで、細身のお母さんであれば問題ないと思うのですが、何分横に幅広いもので、なかなか狭くて疲れるなぁと思っていたのですが、新しいものは幅が広くなり男性でも使いやすいサイズになっているなと感じました。
実際、肩凝りが少し楽になりました。

また、カラーも柄がいっぱいという感じだったのが、単色のみのシンプルなものが増えたので、使いやすくなりました。

それと、落下防止カバーがしっかりとバックルで留められるようになったのは、安全性が上がっていると感じます。
以前は留めていても背負ったりしたときに外れていることがあって、降ろしたら「あら外れてる」という事が多々ありました。
腰ベルトが外れていなかったからよかったものの、これで外れていたら怖いなぁ、と思っていたので改良されていてよかったです。

compactは収納カバー付きなので便利なのですが、そのために他の抱っこ紐のように市販の抱っこ紐カバーが使えないので、子供を降ろしたあとはもう一度肩紐をかけて留めておくか、だらんと垂らしておくか、抱っこ紐自体を外してしまうかの3択でした。
そして私はよく垂らしておく事が多かったのですが、身長が低いために肩紐は地面に擦っているわ、立ち上がろうとしたら踏むわで困っていました。
しかし今回のリニューアルで腰元でまとめて留めておけるようになったのでとても便利になりました。

以上を踏まえると、今回のリニューアルでより使いやすくなったので個人的には購入して正解でした。