株式会社クイックのWebサービス開発blog

HAPPYなサービスプランナー・エンジニア・デザイナーのブログです。

awkで作業効率アップ!

はじめまして!2020年6月に中途入社したソフトウェアエンジニアのたろーです!

皆さん、CSVやTSV形式のファイルの操作をする際にどのようなツールを使ってますか?
テキストエディタExcelスプレッドシート 、拡張子毎の専用エディタなどなど色々な方法があると思います。

でも、 「簡単な集計程度であればわざわざツールでファイル開いて関数とかフィルタを組み込んでいくような作業したくないな〜」 なんて思うことありませんか???

そこで今回僕から推したいのはかの有名なawkです!

普段CLIで作業を行っていなかったり、サーバサイドの開発をあまり行わなかったり、awkを使ったことない方からすると、
「サーバサイドエンジニアが使ってるのよく見るけど使ったことない…」 「名前はよく聞くけどなんとなく難しそう…」「よくわからないけど怖い」
のようにとっつきにくいイメージがあるんじゃないでしょうか?

ですが実際は簡単なお作法さえ覚えてしまえばとてもお手軽で便利なので、 今回は布教活動の一環として初めの1歩的な使い方を紹介したいと思います!

awkとは?

awkはテキストの加工や抽出が得意なプログラム言語です。
for文などのループ処理を書かずにファイルの行ごとの処理が行えます!
ほとんどのLinux系OSやmacOS等にも標準で入っているので導入も簡単です!

awk '実行スクリプト' 処理対象ファイル

のような形式で簡単にターミナルから実行できちゃいます。

実行スクリプトをファイルに記述している場合は

awk -f 実行スクリプトファイル 処理対象ファイル

のように-fで実行スクリプトファイルを指定することで実行可能です。

実際に使ってみましょう

まずは今回使うサンプルCSVです。 架空のテストの採点結果をCSVで出力しています。

受験者名 所在地 点数(数学) 点数(国語)
tanaka tokyo 100 100
yamada saitama 90 50
sato chiba 80 90
suzuki kanagawa 70 60
saito kanagawa 85 95
yamamoto saitama 88 75
kitano tokyo 90 95

生のファイルだとこのような感じです。
sample.csv

tanaka,tokyo,100,100
yamada,saiatama,90,50
sato,chiba,80,90
suzuki,kanagawa,70,60
saito,kanagawa,85,95
yamamoto,saitama,88,75
kitano,tokyo,90,95

ファイルの内容全てを出力したい

$ awk '{print $0}' sample.csv

print $nでn番目の列のデータを指定し表示できます。$0だと全ての列 を指定します。
でもファイルの内容表示だけであればcatを使った方が早いですね!

特定の列のみを出力したい

コマンド

$ awk -F, '{OFS=","}{print $1,$2}' sample.csv

出力結果

tanaka,tokyo
yamada,saiatama
sato,chiba
suzuki,kanagawa
saito,kanagawa
yamamoto,saitama
kitano,tokyo

-Fオプションで読み込みファイルのデリミタ、OFS=","で出力用のデリミタを指定が可能です。
今回はCSVなので入出力のデリミタにカンマを指定し、1列目の受験者名と2列目の所在地を出力しています。
このレベルでの使い方であればcutコマンドでも行えますが、

$ cut -d, -f1,2 sample.csv

デリミタの指定と指定列の抽出はawkの肝となるところなので是非覚えてください!

指定列の合計値をデータ毎に出力したい

コマンド

$ awk -F, '{OFS=","}{print $0,$3+$4}' sample.csv

出力結果

tanaka,tokyo,100,100 200
yamada,saiatama,90,50 140
sato,chiba,80,90 170
suzuki,kanagawa,70,60 130
saito,kanagawa,85,95 180
yamamoto,saitama,88,75 163
kitano,tokyo,90,95 185

awk感(?)でてきましたね!
5列目に数学と国語の合計点の列が追加されています!
$0,$3+$4で既存の情報の後ろに合計点を演算して出力しています。
わざわざExcel開いてsum関数を挿入していかなくても簡単に演算が行えるんです!

CSVに論理名のヘッダーを付与して、更にデータ毎に採番したい。

コマンド

$ awk -F, 'BEGIN{OFS=",";print"No","受験者名","所在地","点数(数学)","点数(国語)","点数(合計)"} {print NR,$0,$3+$4}' sample.csv

出力結果

No,受験者名,所在地,点数(数学),点数(国語),点数(合計)
1,tanaka,tokyo,100,100,200
2,yamada,saiatama,90,50,140
3,sato,chiba,80,90,170
4,suzuki,kanagawa,70,60,130
5,saito,kanagawa,85,95,180
6,yamamoto,saitama,88,75,163
7,kitano,tokyo,90,95,185

やりたいこと2つ盛り合わせです!
BEGIN{処理}で、行毎の処理を行う前に実行する処理が指定できます。今回は出力用デリミタの指定とヘッダ情報の出力を行っています。
次にprint NRで各行にデータ番号を出力しています。NRは用意されている組み込み変数で、処理中の行数が格納されています。
Excelで各行に番号をふる作業とはサヨナラですね!

平均値を出力したい

コマンド

$ awk -F, '{mSum+=$3;jSum+=$4} END{printf("数学%d点 国語%d点\n",mSum/NR,jSum/NR)}' sample.csv

出力結果

数学86点 国語80点

END{処理}で行毎の処理が終わった後に行う処理を指定することができます!
行毎の処理で数学と国語の点数を加算し積み上げ、
ENDブロックでは合計点を行数(NR)で除算することで平均を算出、printfを用いて整数値フォーマットを指定して出力しています。

指定列が一定の数値以上のデータのみ出力したい

コマンド

$ awk -F, '$4>=80{print $0}' sample.csv

出力結果

tanaka,tokyo,100,100
sato,chiba,80,90
saito,kanagawa,85,95
kitano,tokyo,90,95

4列目、国語の点数が80点以上のデータのみ抽出しています。
パターン{処理}でパターンにマッチしたときのみ処理をおこなっています。今回は数値の比較演算を用いましたが正規表現パターンによるマッチも可能です。
また、処理内にif文を記述することでも同様の処理を行えます!

$ awk -F, '{if($4>80){print $0}}' sample.csv

もちろんelse句も使えるので条件に応じてデータの出しわけも可能です!

$ awk -F, 'BEGIN{OFS=","}{if($4>=80){result="OK"}else{result="NG"};print $1,result}' sample.csv

出力結果

tanaka,OK
yamada,NG
sato,OK
suzuki,NG
saito,OK
yamamoto,NG
kitano,OK

指定列の合計値をデータ毎に出力し、合計値の降順でデータを並び変えたい

コマンド

$ awk -F, '{OFS=","}{print $0,$3+$4}' sample.csv | sort -t, -n -r -k5

出力結果

tanaka,tokyo,100,100,200
kitano,tokyo,90,95,185
saito,kanagawa,85,95,180
sato,chiba,80,90,170
yamamoto,saitama,88,75,163
yamada,saiatama,90,50,140
suzuki,kanagawa,70,60,130

他コマンドとの合わせ技です!5列目に数学と国語の点数の合計値の出力を行った後に、sortコマンドで並び替えています。
sortコマンドでは-tオプションでデリミタの指定、-nオプションで数値ソート指定、-rで降順指定、-kオプションで並び替え評価対象の列指定を行っています。
awkコマンド単体でもソートは行えるのですが、他のコマンドと組み合わせることでより簡単にやりたいことを実現できます!

最後に

基本の部分(とちょっとだけ応用)の使い方のみの紹介でしたが、思ったより簡単に色々なことができそうだと感じていただけたのではないでしょうか!?
他にもawkに用意されている関数を使ったり他のコマンドと組み合わせることで本当に色々なことがCLI上から行えます!
普段当たり前のようにExcelやファイルエディタでファイルを開いて行っていた作業が、コマンド1つで行えるのは作業効率アップにもつながりますね!

一見怖そうだけど実は優しい先輩コマンド(言語)代表のawkを是非活用していってください!


\\『真のユーザーファーストでマーケットを創造する』仲間を募集中です!! //

919.jp

クイックのエディターランキング!

あけましておめでとうございます!そして始めまして!新卒で入社したエンジニアのじゃがいもです。

新年早々食べ過ぎて胃もたれを起こしています。

早速皆さんに質問です

「初めてのエディターは覚えていますか?」

僕の初めてのエディターは、専門学校1年のときに使用したAtomでした。それまでメモ帳しか知らなかったので、急に出来る人感が出てニヤニヤしながら使っていました。
そこから「Sublime Text」→「Dreamweaver」→「VSCode」→「IntelliJ IDEA」と来ました。

分野によって使用するエディターに違いはあると思いますが、思い返すと懐かしい記憶がよみがえってくるのではないでしょうか。

愛好するソフトウェアの論争は「OS」や「ウェブブラウザ」「プログラミング言語」など多岐に渡りますが、今回は「エディター」にフォーカスして社内の人気ランキングを作ってみました!

それでは3位から発表します!!!

3位に輝いたのは

Sublime Textです

理由としては
「軽量」であること、「使い慣れている」ということが挙げられていました。

コメントにある通り、Sublime Textは非常に軽量でストレスを一切感じることなくコーディングに夢中になることができます。

プラグインも豊富で、テーマもかっこいい、無料で使用できるという良いこと尽くめなエディターです。

2位は!!!

Visual Studio Codeです

理由としては
「研修時代から使っていた名残」
「フリーで軽量、環境を選ばず利用できる点」
プラグインが優秀」
プラグインを入れなくても最初から使いやすい」
マークアップの記述がしやすい」
などが挙げられていました。

Visual Studio Codeは有料級の機能がすべて無料で使える軽量の素晴らしいエディターで、Microsoftが開発しているということもあって安心感もあります。

私自身、これだけ高機能でありながら、ここまでも軽量なのか、、、、、と最初は驚きました。

Visual Studio Code人気プラグイン

「LiveShare」
→リアルタイムの共同開発が出来るプラグインで、ペアプロや勉強会がしやすくなるものです。
googleドキュメントのようにリアルタイムにコードの共有ができるので、今の御時世とても重宝されるのではないでしょうか
これを使ってコードレビューとかしてみたいですね
 (セキュリティの問題があるので、会社で使用するときはルールに沿ってご使用ください) f:id:aimstogeek:20210106164224g:plain

「Material Icon Theme」
→ Materialなかっこいいアイコンが設定できます
f:id:aimstogeek:20210106164511p:plain

「Bracket Pair Colorizer 2」
→ 対応する括弧に色をつけてくれます
f:id:aimstogeek:20210106164716p:plain

などが挙げられていました。

お待ちかねの第1位は!!!

IntelliJ IDEAです

パチパチパチパチ👏

理由として
「Editor/DBViewerなどのツールを行き来せずに済む」
「ctagsなど別途管理しなくてもファイル検索が容易」
「やっぱIDEはコードをどんどん潜って読めるからいいね!サジェストも優秀でタイプ数が減るのもいい!」
「Git操作もDB操作もターミナルもなんでもできて素敵。会社支給(大感謝)だけど、自腹でも使い続けると思う」
「優れたオールインワンだと思います」
などなどたくさんのコメントを頂きました。

コメントにもありますが、IntelliJ IDEAは会社支給なんです!!!
とてもありがたいです。

InteliJはチェコに本社を置くJetBrains社が開発したIDEです。
VSCodeSublime Text等との一番の違いは有償である。ということが挙げられます。
他のエディターは無償が多いですが、InteliJは有償ながら20年以上も他のエディターに負けることなくエンジニアのパートナーに選ばれています。

しかし、有償になることでバグの対応が早かったり、アップデートも頻繁に行われる等のメリットがあります

JetBrainsの公式サイトには以下のように記述されています
企業によるIntelliJ IDEAへの投資は6か月未満で回収できることが分かりました。3年間の投資回収率(ROI)は850%です。

850%、、、すごいですね。

サジェストも優秀で、GitやDBの操作もしやすく、初心者用にも使いやすいものとなっています。

ただいいところばかりではなく、ところどころ動作の重さは感じます。
大量の機能が初めから付いていたり、表示している情報も多いので、VSCodeSublime Textに比べると軽量感では劣ってしまいます。

IntelliJ IDEAの人気プラグイン

「IdeaVim」
Vim操作ができるようになります

「CodeGlance」
→ 開いているファイルのマップを表示するプラグインです
f:id:aimstogeek:20210106163927p:plain

「Rainbow Brackets
→ 括弧を色分けして表示してくれるプラグインです f:id:aimstogeek:20210106164039p:plain

IdeaVimは数人使用している方がいました。IntelliJVimの組み合わせは最強ですね

番外編

「nova」(1票)
→ Coda 2の後継となるエディターで、非常にUIがかっこいいエディターです。気になった方はぜひ試してみてください! Panic - Nova f:id:aimstogeek:20210106202240p:plain

vim(1票)
→ 誰もがご存知、最強エディタです。
個人的な考えとして、vimemacsをメインで使用している人は技術力おばけのイメージがあります。

「さくらエディタ」(1票)
→ 日本製のWindows用老舗テキストエディタです。
半年ほど前に約2年ぶりのアップデートが行われるなど、現在も現役のエディターです。 f:id:aimstogeek:20210106204122p:plain

最後に

僕が使用しているエディターはランキング1位の「IntelliJ IDEA」です。
元々Visual Studio Codeを使用していましたが、DB操作の快適さや、ジャンプ機能(宣言元へ)の使いやすさもあり最近乗り換えました!

今度は違うソフトウェアでランキング記事を書いてみようと思います!
最後までお読みいただきありがとうございました


\\『真のユーザーファーストでマーケットを創造する』仲間を募集中です!! //

919.jp

参考サイト

marketplace.visualstudio.com plugins.jetbrains.com www.jetbrains.com ja.osdn.net

社内システムをリニューアルした年が終わった

こんにちは、ねこです。
締切直前まで宿題に手を付けない習性を改善できないまま1年経ってしまいました。
この原稿も締切後に仕上げている始末です。本当にすみません。
師走というにふさわしい日々ですが、年末にブログ当番が回ってきたのもなにかの縁ということで、今年を振り返って書き残しておこうと思いました。
カテゴリは100%ポエムです。

2020年3月某日、約2年間開発が続いたシステムをリリースしました。
コロナやオリンピックが無くても、私はこの1年のことを忘れないと思います。

リニューアルプロジェクトのこと

私がクイックに入社して2年ほど経った頃、社内システムのリニューアルプロジェクトが始動しました。
人材紹介事業本部の営業さんたちが扱う様々なデータやTODOを管理するシステムです。
どんなプロジェクトだったかというと

  • 8年使われたシステムを
  • フルリライト
  • オンプレからAWSへ移行し
  • DBもOracleからMySQL
  • テーブル定義をガッツリ変更してデータ移行
  • 新機能も追加する

という、今振り返ると経験者なら 「こいつ死んだわ」 と秒で手を合わせる案件でした。
よく2年で帰ってこれたな。

しかし、私が入社した頃からすでにプログラムは割と限界を迎えていて、「機能追加はリニューアルしたらやります」と言って大きめの新規開発をストップしたり、不具合を修正したら別の箇所で不具合が出たりと、レガシーシステムあるあるをすべて詰め込んでいた状態で、会社的にはどうしてもやらねばならぬ崖っぷちだったのでした。*1*2

リリースまでのこと

それはもうとんでもなく大変だったのですが、今回は今年1年を振り返る記事なので割愛します。 聞きたい人は入社してください。

リリース後の3ヶ月のこと

リリース後は不具合と要望の嵐でした。
事前に「ほんとに忌憚なくなんでもご意見おねがいします!!!」と伝えていたのもあったためか一週間で不具合・要望の報告リストが500件近くまで埋まり、スプレッドシートで公開していたのでWeb室のみなさんどころかシステム利用者の方々にまで心配された(というかちょっと引いてました)のを覚えています。
※ちなみに弊社の営業部は開発にとても協力的で、開発チームに気を遣いながらもたくさんご意見を送ってくださいます。いつもありがとうございます。

そんな中コロナウイルスこんにちは。

あれよあれよという間に開発チームは在宅になったのですが、セキュリティの関係上リモート環境ではリリースができず、ひたすら修正をGitに溜めることしかできない日々が続いたのでした。
開発したものがリリースできない&早く修正してくれと何度も要望が上がってくるというのもなかなかに地獄のような環境です。

緊急事態宣言が解除された6月、Webサイトが1つくらいまたできたんじゃないかという規模のリリースはリニューアルの時と同じくらい念入りにテストが行われ、無事終えることができました。

2020年後半戦と、これからのこと

そんな怒涛の3ヶ月を越え、リリースできる環境ができ、定期的に成果を出していくために「まずは週1でリリースしよう」と改めて走り始めました。
このときから続けている「定期リリース後の定期KPT」で、今の開発チームを支えるルールや文化が急速に作られていったように思います。

  • リリース日一週間前を締切として、1週間前にはリリースの準備ができている状態にする
  • 上記の状態でコンフリクト事故が起こらないようGitフローを整備
  • 誰でもテスト仕様書を作れるようにテスト仕様書のテンプレートを作成
  • 特定の人がやっている作業、よくある問い合わせをWikiにまとめて共有
  • 自分の事故を共有し、同じことを他のメンバーがやらかさないようにする
  • 勉強会を開催し、営業部の業務や設計・実装に関する知識の共有を行う

週1リリースは厳しくないか?と心配していた(されていた)時期もありましたが、KPTで改善を続けた結果、6月から現在までずっと続けられています。
この流れでなんとなくお互い雰囲気でやっていたことに関してもドキュメントが作成され、チームメンバーの変更があったときでも、引き継ぎや導入の時間が大幅に短縮されたのも大きな変化です。

9月頃からはリニューアルリリースのときにできた負債をあらかた返済し、ずっとやりたくてもできなかった新規機能の開発を進め始めました。
再び営業部を巻き込んでの大規模なあれそれで前前前世から全然気が抜けないのですが、これもリニューアルしなければできなかったことで、前世のことを思うと大変感慨深いです。

もうあと3ヶ月で営業部にもWeb室にも、新卒が入社してきます。
その新卒たちはリニューアル前のシステムのことなんて知る機会もないのでしょう。
「前と比べたら良くなっている」がどんどん「当たり前」になっていくのはさみしいですが、同時に誇らしくもあります。
すでにやたらでかい開発計画が後ろに控えているのですが、今後も恐れずひるまず過去を引きずらず、前へ上へと発展させていきたいと思うばかりです。

おわり

以上、社内システム開発の中の人からのお届けでした。
山のような不具合・突然のリモートワーク・文化の変化……リニューアルに伴って、周りの環境に何から何まで変化があった年となりました。

あまり表に出てこない社内システムプロジェクトがどんなもので、どんな人間が作ってるのかがなんとなく伝われば幸いです。

それではあと一週間、ちゃちゃっと仕事納めていきましょ〜


\\『真のユーザーファーストでマーケットを創造する』仲間を募集中です!! //

919.jp

*1:もっとやりようあったでしょとは言わないでください

*2:でも今後私が在籍しているうちは二度とやらせません。

10年後、あなたは「今と同じ仕事をしている」と100%言い切れますか?

突然ですが、職域を広げたいと思ったことはありませんか? エンジニアならエンジニア、デザイナーならデザイナーで、 今のメインタスクは続けつつも、他のことにも挑戦したい。 そう思ったことって、ありませんか…?

初めまして。ケイと申します。 クイックでは、コピーライター・デザイナー・フォトグラファーとして、 幅広いPJTに携わらせていただいております。

何を隠そう、このWeb室のオフィス設計・インテリアデザインも行いました…! f:id:aimstogeek:20201201083704j:plain f:id:aimstogeek:20201201083701j:plain f:id:aimstogeek:20201201083658j:plain

そんなぼくから、今日はクイックの良い点を一つ、ご紹介したいと思います。 それは、キャリアの選択肢が、やたら広ーい!! という点。

ちょっと自分のお話をしますが、子供の頃から凝り性で、 一定期間、一つのことに周囲がドン引きするくらいドハマリし…を繰り返してきました。

大人なってからも、独学でデザインとコーディングを学んでWebサイトをいくつか作ったり、 カメラマンについて朝から晩までスタジオに篭もってライティングの練習をしたり… 自分で設計して家を建てたり、DIYで家じゅうの家具や照明を作ったり… という感じで生きてきたところ、気づけばできることが多くなっていました。

その結果、もともとクイックには集客系のコピーライターとして入社したわけですが、 今やデザインやフォトグラフ、動画の仕事、果てはオフィスデザインまで任せて頂けるようになりました。

写真と動画に至っては、オフィス内にこんな立派なスタジオまで作って下さいました…ッ!

f:id:aimstogeek:20201201083655j:plain

(設計したのはこれまた自分ですが 笑)

もともと一つの枠に収まっていられない性分なので、 こんな自分が楽しく仕事できているのは、 ひとえにこの組織の懐の深さゆえだな…と思っています。

とうぜん仕事ですから、クオリティと結果を求められます。 自分でシナリオを設計し、コピーを書き、写真を撮ってデザインした広告が もし万が一大ハズレしたら…それはほぼ全て自分だけの責任になりますから、 緊張感と隣り合わせではありますが(笑)

それでも、限られた領域に閉じ困らず、自分の可能性を広げられるメリットはとても大きいと感じています。

ぼく以外にも、イラストレーター兼デザイナーとして活躍する人や、 フロントエンドエンジニアからUIUXデザイナーに転身した人など、 この環境を活かして自分の可能性を広げた人がたくさんいるのがこの組織。

情熱とクオリティさえ見せれば、何足だってわらじを履けるし、 別の職種に転身することだって可能。 「この仕事だけしていて下さい」と言われるより、 「手さえ挙げれば色んな仕事をできますよ」と言われたいあなた。

もし今後、自分の職域を広げたり、見直したくなる可能性が1%でもあるのなら、 クイックの環境は、とても安心だと思います。

…そんな環境に甘えて、ジョブホッパーだったぼくも、 もうかれこれ10年もこの会社にいますから(笑)


\\『真のユーザーファーストでマーケットを創造する』仲間を募集中です!! //

919.jp

一歩先行くスマートスピーカー活用

こんにちは。日経平均バブル崩壊後高値続伸中の昨今ですが、それに連れ高し私の体重も過去最高値更新しました。
インフラエンジニアのくぼっきーです。
先日初めて他人からデ○と言われてしまったので真面目にダイエットしようと早速腹筋ローラーを買いました。膝コロきっつい、、、

さて最近はWeb会議ツールを利用する機会が多くなりましたが、その最中すると珍しがられること多いのがスマートスピーカーでの家電操作です。
スマートコントローラーと呼ばれる製品をスマートスピーカーと組み合わせて実現してるのですが、こちらの記事見ると日本でのスマートスピーカー普及率はまだ10%届かない程度で、スマートコントローラーを活用してる人はこの内1〜2割くらいなんじゃないかなと考えるととても少なそうです。

スマートスピーカー+スマートコントローラーでの家電操作はかけるコストの割に得られる快適性を考えると使わないのはもったいないなと思うので、下記に私の活用事例紹介と、そのうちやってみたいと思ってることを紹介して普及の一助になれればと思います。

使用デバイス

  • Google Home
    スマートスピーカーです。

  • Nature Remo
    スマートリモコンです。こちらはIoTに対応していない家電製品(赤外線でのリモコン操作に対応してる家電)をIoT化してしまうという優れものです。 これとスマートスピーカーを連携させることで、既存の家電を特に買い換えること無く音声操作が可能になります。

我が家での活用内容

  • ① 朝の目覚まし、当日の予定確認、天気予報、ニュース読み上げと朝必要な情報をまとめて知らせてくれます(ニュースは27種類の中から流すもの自由に選択できてラジオのように聞けるエンタメ要素多めのもあります)
  • ② 布団の中からあと10分後に起こしてなど、アラーム設定し直し二度寝する際の寝過ごしを防止します
  • ③ 日中適当にBGM流します
  • ④ TV、空気清浄機を操作します
  • ⑤ 就寝前に翌日の予定確認、起床時間の設定をした後、虫のせせらぎで眠りを促してくれます
  • ⑥ 家に近づいたらエアコンを自動で点けます ※夏場、冬場のみ
  • ⑦ 家から離れたらTV、エアコンを自動で消します
  • ⑧ 布団の中からエアコン操作します ※これ寒い時ほんと重宝します
  • ⑨ 布団の中から電気ON/OFFします ※寝る前スマホいじる時なんかに重宝
  • ⑩ 思い立ったことがあったらメモ

HowTo

  • ①⑤

Google Homeのルーティンと呼ばれる機能で、デフォルトで「OK Google、おはよう or おやすみ」と挨拶するだけで出来ます。 またこの際に動作する内容はカスタマイズ可能で、合わせてTVを付ける、音楽かける等自由に組み合わせれます。

  • ②③

Google Homeの基本機能で、それぞれ「OK Google、10分後に起こして」「OK Google、音楽かけて」等と話しかけると出来ます。 音楽は連動するサービスとしてSpotifyYouTube、dヒッツなどいくつか選べて、私はYoutubeにしてます。

Google Homeの設定でメモに使うサービスをGoogle Keepに設定した上で、「OK Google、〜をメモして」と話しかけるとKeepにメモを保存してくれます

  • ④⑧⑨

Nature Remoでの家電操作をGoogle Homeから呼び出してます。 Nature Remo自体の設定は以下記事が参考になりそうです。

smartio.life

  • ⑥⑦

Nature Remoのオートメーションという機能で実現してます。
この機能は家から近づいた、離れた等の条件と、Nature Remoで出来る家電操作アクションを組み合わせることができ、他にある温度になったらエアコン点ける、ある湿度になったら加湿器点けるなどもできます。
こちらの公式紹介ページが参考になります。

今後やってみたいこと

  • 各種センサー連動でのエアコン・加湿器・照明自動ON/OFFで常に快適な温湿度・照度コントロール

最新のNature Remoだと温湿度・照度・人感センサーが付いてるので更にスマートホーム化進むのですが、私の持っているのだと温度センサーしか付いてないので現状センサー連動はエアコンしか操作出来ないです。買い替えor各種センサー備えたIoT製品購入を検討中です。

  • 家の鍵をスマートロック化して鍵の開け締めを意識するストレスから開放

Qrio公式この辺りの製品使えばできますが、鍵の開け締めだけで2万円かと考えるとなかなか手が伸びず。
構造的にはドアのサムターン回すだけなので、自作できないかなと模索中です。
ただ故障などで家に入れなくなってしまうというリスクあるので、いざとなったら鍵でも開けれる設計にしないとですね。

  • 家に近づいたら自動でお湯はり、帰宅直後にお風呂

ご飯の後にお風呂は胃に負担かかるらしいので、先にお風呂が良いですね。
我が家のはよくあるお湯はりボタン押すだけのタイプなので、Switch Botで物理的にスイッチ押させることで出来るかなと思ってます。

所感

スマートスピーカー実際に使ってみる前まではわざわざ音声操作するか?と思っていたのですがやってみると予想以上に便利ですね。
なんといっても手を使うことなくながら操作できるという点が頭の中のコンテキストスイッチ発生させずに済むので効果が高く、在宅ワーク中の生産性もアップです。
またご家族等と共同生活されてる方のほうが、より有効なシーンは多いのではないかなと思います。

もしこの記事を読んで興味が湧きましたらこの機会にぜひ試してみてください。


\\『真のユーザーファーストでマーケットを創造する』仲間を募集中です!! //

919.jp

なぜ社内システム開発であっても、エンドユーザー視点が大事なのか?

6年ぶり2度目のガパオブームがきてるhamanokamiです!!!

Web事業企画開発室では「真のユーザーファーストでマーケットを創造する」というミッションを掲げ、 世の中に良いサービスを提供するために、日々仕事をしています。

ミッションに含まれている「ユーザーファースト」であることを我々は非常に大事しており、 エンドユーザーに対してサービスを直接的に提供していないエンジニアにも、 「ユーザーファースト」を念頭に置いて仕事をすることを求めています。

それはなぜか?

当たり前ではありますが、営業さんがエンドユーザーに価値を提供するために使うツール・インフラをつくっている、 または価値を届けるまでのプロセスの一部を担っているためです。*1

では「観光地の人力車をつくる」を例に、「ユーザーファースト」でない仕事をした場合どうなるか説明していきます!*2

登場人物

  • 観光客(=エンドユーザー)
  • 車夫(=システム利用者)
  • 人力車(=システム)
  • 人力車をつくっている人(=エンジニア)

エンドユーザーを考えずに仕事するとどうなる?

上記の前提で、もし人力車をつくっている人がエンドユーザーのことを考えずに仕事をしていると、 どのようなことが発生するでしょうか?

コストが安いからという理由で椅子に木材を使い、 ゆっくり見て回れないほど乗り心地の悪い人力車をつくるかもしれません。・・・①

めちゃめちゃ日照りが強い地域で稼働する人力車にも関わらず、 屋根をつけないほうが軽くなって車夫も楽になるだろうという理由で屋根をつけず、 観光客はサングラスがないとまともに目が開けられない環境になるかもしれません。・・・②

自分の趣味趣向でタイヤのホイール部分にめっちゃこだわり、 回転するとLEDの残像で絵が映るというような、 ほぼ価値が生まれない、むしろ走る場所によっては景観を崩してマイナス価値を生んでしまうようなことをしてしまうかもしれません。・・・③

ここまで極端なことは発生しないと思いますが、 エンドユーザーを念頭においていないと、エンドユーザーが享受したい価値が提供できない可能性は高くなります。

例の原因を振り返ってみる

1番目の例は、コストのことしか考えていないです。

2番目の例では、人力車を押す車夫のことを考えてやったことが、 結果的にエンドユーザーに悪影響を与えるということになりました。

3番目の例は、無駄にリッチな実装をしてしまった、 完全につくる人の自己満ですね。

このようなことは業務システムを開発しているとよく発生しているのではないでしょうか?

発生させないようにするには、何よりもエンドユーザーにどういう価値を届けているのかを念頭に置き、 システムユーザーがより多くの価値を届けられるように何をつくるか・どう実現するかを考えられると良いと思っています!

最後に

ということで、今回は「なぜ社内システム開発であっても、エンドユーザー視点が大事なのか?」についてお話をしてきました。

このお話はエンジニアに限らず、あらゆる間接部門であっても同じ話だと思っています。

ユーザーファーストをどれだけ大事にしているかについては、 下記Wantedlyの記事で室長が熱く語っているため、 興味のある方は読んでいただけるとうれしいです!

www.wantedly.com

www.wantedly.com

では良きエンジニアリングライフを!!!


\\『真のユーザーファーストでマーケットを創造する』仲間を募集中です!! //

919.jp

*1:うちの事業の1つに人材紹介があり、営業さんが使うシステムを私達がつくっています

*2:「人力車、エンドユーザー直接触れてるやん!」というツッコミは一旦なしでお願いします!笑

MySQLでテストデータ作成に便利な表現4パターン!

直近適当なテストデータを作成する機会があった、みっきーです。
今までMySQLで大量のテストデータを作ったことがなく、新しい発見がありました。
忘れっぽいので、早速クエリたちを忘れないために書き記そうと思います。

パターン1 別のテーブルを元にテストデータを作りたい

大量のデータが詰まっている複数テーブルから、一部のデータを抜き出して新テーブルを作りたい時に使用しました。 全部のデータが不要な場合は、必要なカラムだけを必要な条件に絞って移すことができます。

クエリの中で、テストデータを入れたいテーブルは「新テーブル」 元になるテーブルは「元テーブル」と記載します。

INSERT INTO 新テーブル名 (
  id,
  name
)
SELECT 
  id,
  name
FROM 元テーブル名
WHERE 条件;

INSERTでSELECTできるなんて知らなかった!あぁ〜。便利。

パターン2 主キーが一致するデータをアップデートしたい

おっちょこちょいな私は、よくミスをします。
パターン1でデータを作った後に、追加漏れをしているカラムを見つけたり...
そもそも指定したカラムが間違っていたり...
ちょっとした絶望を感じたそんな時は、アップデートで解決できちゃいました!

UPDATE
  元テーブル, 新テーブル
SET 
  元テーブル.tsuika_shitai_yo = 新テーブル.tsuika_shitai_yo,
  元テーブル.tsuika_shitai_na = 新テーブル.tsuika_shitai_na
WHERE 元テーブル.id = 新テーブル.id;

ん〜。便利! これでミスっても大丈夫。

パターン3 主キーが外部参照されているテーブルに元テーブルと一致するデータを追加したい

オートインクリメントのようなことがしたいけど、主キーが複数のテーブルから参照されていてにっちもさっちもいかない状態になってしまいました。
1つずつ外部参照を外すのも、更新してから元に戻すのも非常にめんどくさいです。

そんなときSQLは変数が使えることを思い出しました。 変数が使えるならカウントぐらいできるのではと思い立ち、早速ためしてみました。

SELECT
  @rowCount := @rowCount + 1
FROM 
  元テーブル,
  (SELECT @rowCount := 0) AS row;

結果

@rowCount
1
2
3
...

できた! ということはそのままインサートもできるのでは!?

INSERT INTO 新テーブル ( 
  tsuika_shitai_id,
  元テーブル_id
) 
SELECT
  @rowCount := @rowCount + 1,
元テーブル_id
FROM 
  元テーブル,
  (select @rowCount := 0) AS rowCount;

できた!!!これは!便利!!!!!

外部キーチェックを外してオートインクリメント設定する方法もありました。

SET FOREIGN_KEY_CHECKS=0

解決方法って探せばいくらでも出てきますね。謎解きみたいで楽しいです。

パターン4 とにかく大量のデータをバラツキのある状態で登録したい

パターン3から派生して、数値系のカラムを大量生産しつつ、ばらつかせた数値を入れることにもチャレンジしてみました。

時給のテストデータっぽくする

SELECT
  @rowCount := @rowCount + 1,
  @rowCount * CEIL(RAND() * 1000)
FROM
  元テーブル,
  (SELECT @rowCount := 0) AS rowCount;

結果

id 時給
1 496
2 1242
3 1851

登録日のテストデータっぽくする

SELECT
  @rowCount := @rowCount + 1,
  (SELECT DATE_ADD('2020-11-01', INTERVAL 30 * RAND() DAY))
FROM
  元テーブル,
  (SELECT @rowCount := 0) AS val;

結果

id 登録日
1 2020-11-09
2 2020-11-21
3 2020-11-16

もう。便利すぎー!

まとめ

今回はこのパターンである程度のテストデータが作成できました。 公式マニュアルには初めて見る関数がたくさんあり、複雑な動的データ作成ができそうです。

機会があれば、さらに関数の動作みて便利なクエリを作っていきたいと思います!


\\『真のユーザーファーストでマーケットを創造する』仲間を募集中です!! //

919.jp