Difyを使ってみました。

生成AI、みなさん使いこなしていますでしょうか。

もちろんChatGPTであったりで調べ物には使っていたり、分析で利用したり、要約したりといったところでガンガン利用はしております。

ただ生成AIを利用したアプリケーションは提供できていない状況です。

そんな中、「Dify」というツールを知りました。

Difyとは

Difyを知っていますでしょうか。

Difyは、プログラミングの知識がなくてもAIアプリケーションを開発できるオープンソースのプラットフォームです。生成AI(ジェネレーティブAI)の作成に特化しており、チャットボットやコンテンツ生成ツール、データ分析ツールなどを開発することができます。

要は誰でも生成AIを使ったアプリが開発できる!ということです。

早速試してみようということで、チャットボットを作ってみます。

チャットボット作成

FAQ(よくある質問)に回答するようなイメージのチャットボットを作っていきます。

ただしナレッジを設置し、回答する仕組みとします。

STEP1: Difyアカウント作成

Dify」サイトに入り、アカウントを作成します。

無料でアカウントは作成できます。

STEP2: ナレッジの作成

ナレッジとはなんでしょう。

ナレッジとは複数のドキュメントを集約し、1つのアプリケーションに統合することで、ユーザーの質問に対して正確な回答を提供する仕組みです。

冒頭にも記載しましたが、質問の回答を用意するイメージです。

上部の「ナレッジ」を選択し、「ナレッジベースを作成」

らくらくーぽんのFAQページから抜粋します。

データはcsv形式で保存します。

ただしナレッジから正しく結果が返って来たか判別できるようにこのような形で修正しました。

質問,回答
使い方は難しくないですか?,管理画面は、簡単に使えるようにわかりやすくなっています。また、管理画面内にマニュアルもご用意しています。わからない場合は、電話やメールでのサポートもお受けしていますので、ご安心ください。
申し込むために必要なものはありますか?,らくらくーぽんでは、楽天API(受注API・クーポンAPI)を利用して、RMSとデータ連携をいたします。楽天APIは楽天RMSより無料でお申し込みいただけます。
申し込んだらいつから使えますか?,お申し込み後、1営業日以内にらくらくーぽんの管理画面をお送りします。
他社の受注システムを使用していますが、らくらくーぽんは動作しますか?,他社の受注システムをお使いの場合でもらくらくーぽんは動作します。また、らくらくーぽんを使用することで、お使いの受注システムに影響が出ることもありません。
決まったメールしか送れませんか?,最初に、どのショップ様にもお使いいただきやすいメールテンプレートをご用意しておりますが、自由に変更可能です。ショップ様に合わせたメールテンプレートを作成できます。
楽天の規約に抵触しませんか?,らくらくーぽんは、楽天規約に則った形で使えるサービスです。楽天規約・ガイドラインを合わせてご確認の上、ご利用ください。
受注とレビューはいつのデータから取り込まれますか?,データを取得するための基本設定を行い、取込みを開始に設定した時点からのデータがシステムに取り込まれます。
料金の支払い方法は?,月単位でのご請求となりまして、毎月月末締めでご請求書を郵送にてお送りいたしますので、その翌月末までに銀行振込でお支払ください。また、ご希望される場合は、口座振替による自動引き落としも可能です。
推奨環境は?,OS:Windows 10、Windows 11 プラウザ:Chrome、FireFox、Edge ※最新のバージョンにてご利用ください。 ディスプレイ:1920×2160
ECマスターズクラブ会員ですが、らくらくーぽんの申し込みはこちらでよろしいでしょうか?,ECマスターズクラブ会員様は、下記ページからECマスターズクラブ事務局まで直接お問い合わせくださいませ。

分かりづらいですが、「受注とレビューはいつのデータから取り込まれますか?」を変更しています。

チャンク設定はそのまま、インデックス方法は経済的を選び、保存すると、ナレッジベースが作成されます。

STEP3:チャットボットの作成

上部から「スタジオ」→「チャットボット」→最初から作成、を選択

アプリのアイコンと名前を入れて「作成する」とオーケストレーション画面となります。

STEP4:モデルプロバイダーの設定

設定を開きます。

モデルプロバイダーをインストールするから「OpenAI」を選択します。

プラグインをインストールします。

STEP5:オーケストレート設定

オーケストレート画面から「コンテキスト」の「追加」をクリックします。

STEP2で登録したナレッジが表示されますので、追加します。

手順に「ユーザーからの質問に対して、コンテキストを参照して、回答を返してください」と入力します。

右下の「管理」をクリックし、機能の「会話の開始」をONにします。

STEP6:デバッグ

右側にあるデバッグとプレビューの「ボット」と話すに質問を入れます。

受注とレビューはいつのデータから取り込まれますか」と入れて実行すると回答が返ってきます。

CSVで登録した内容と同じものが返ってきたことが確認できます。

STEP7:公開

これで準備が整いました。

右側にある「公開する」をクリックし、「更新を公開」を行います。

「成功」と表示されると設定完了です。

「アプリを実行する」でタブが開き、URLが表示されます。

こちらでも改めて質問をしてみます。

「料金の支払い方法」を確認すると、CSVに登録した回答が返ってきました。

ブラウザに表示されているURLを利用することで、他サイトに貼り付けることができます。

またAPIであったり、サイトに埋め込んだりの利用も可能です!

ノーコードで生成AIアプリが完成しました。

まとめ

敷居が高そうに見える生成AIのアプリケーションですが、こんなに簡単に作成できました。

無料版ではアプリの数が制限されていたり、リクエストも制限があったりしますが、モデルプロバイダーも選べ、比較なんかもできます。

興味がある方はぜひ利用してみてください!

私も分析であったり業務効率化など、活用できることが多そうですので、Difyを引き続き活用していきます!

新規プロジェクトに携わって

皆様、こんにちは。グリニッジのサウナーことコサカです。最近すっかり暖かくなりましたね。

今回の投稿では、昨年から始まった新規プロジェクトで、サポート担当としてジョインした際の経験談を少し書かせていただきます。
私の準備不足もあり、いろいろ苦労した部分もありましたので、反省も踏まえ、自分の対応したことや改善点などについて記載したいと思います!

新規プロジェクトで対応したこと

・FAQやマニュアルの作成
・社内マニュアルの作成
(ざっと数えてみましたが、マニュアルだけで20~30件近く作ってましたw)
・社内対応フローの構築(POに手伝っていただきながら、対応しました)
・顧客への導入サポート、問い合わせ対応
・メールのフォルダ作成、振り分け設定
・進捗表の作成、管理
・パートナー企業との打ち合わせ(新規プロジェクトの後半から)
・ウェビナーの登壇
...etc

箇条書きで書いてみましたが、普段のサポート業務に追加で上記を対応しておりました。

工夫したこと

ゼロベースでマニュアルを作るとなると、かなり時間と工数がかかってしまうため、マニュアルのサンプルなどを周囲の協力を得ながら情報収集することから始めました。

結果として、ゼロからマニュアル作成する場合に比べて、半分くらいの時間でマニュアル作成することができたかと思います。

また、プロジェクトのテーマとしても「LINE」を活用したものになるため、専門用語や操作画面などが初見の方にも伝わりやすいよう意識してマニュアル作成を行いました。

反省点

新規プロジェクトの開発スケジュールは共有されており、私のタスクとして対応すべきことは概ね明確になっていましたが、計画的にタスクをこなすことができず、機能のリリース直前で慌てて作業する場面もありました。

メモ帳に書き出す、マインドマップやRedmineを使うなど、タスク管理するための手段はあるのにそれを怠ってしまったことが、一番の反省点ですね。

機能が正式リリースされてからは、顧客サポートに時間を割くことが増えるため、リリース前に進めておけばよかったと思うタスクが多々あり、後悔しております...。

まとめ

POやプロジェクトメンバーのおかげもあって、無事リリースできましたが、それに至るまでの道のりで反省点も多く見られましたので、これらの反省を踏まえ、自分が楽するためにも、納期に向けた自身の対応スケジュールを組み立てて、計画的に業務するよう心がけたいと思います。

最後になりましたが、私が担当してたプロジェクトについて紹介している記事がありますので、ぜひ覗いてみてください!!

【プレスリリース】楽天市場専用のレビュー施策システム「らくらくーぽん」メール機能に加えて「LINE機能」を新たに追加

~レビューも増えて、LINE友だちも増える~

グリニッジ株式会社(本社:東京都港区、代表取締役:田中 裕之)は、楽天市場専用のレビュー施策システム「らくらくーぽん」において、「LINE機能」を新たに追加し、提供を開始しました。

「らくらくーぽんLINE機能アップデート」詳細:https://coupon.greenwich.co.jp/line

「LINE機能」追加の背景

近年、LINEはメールと比較して開封率が高く、友だちに確実に届くコミュニケーションツールとして注目されています。しかし、多くの楽天ショップではLINEの活用が進んでいないのが現状でした。

「らくらくーぽん」に「LINE機能」を追加することで、従来のらくらくーぽん機能に加え、「友だち追加の促進」 や 「あいさつメッセージ&友だち追加クーポン」、「フォローLINE 」「クーポンLINE」までを自動化。

これにより、LINE友だちが増えやすくなり、レビュー獲得やリピート率の向上、さらに売上アップにもつながります。

■「らくらくーぽんLINE機能」特徴

<友だち追加と楽天会員連携を同時に行う>

商品購入後に送られるフォローメールに記載のURLから、ワンクリックで「友だち追加」と「楽天会員連携」を同時に完了。
新規の友だちを増やしながら、同時に楽天会員情報と紐づけます。

<あいさつメッセージ&友だち追加クーポン配布>

友だち追加された際に、お礼のあいさつメッセージとクーポンを自動で送信!
クーポン自動発行で作業コストを削減しつつ、新規購入を促進できます。

<楽天会員連携済みの友だちにフォローLINE&クーポンLINE>

購入後のフォローメッセージやクーポン配信をLINEで自動化!
【フォローLINE
配送完了後に「レビュー投稿のお願い」メッセージを送信。LINEの高い開封率を活かし、レビュー投稿率UP!
【クーポンLINE】
レビュー投稿後に、お礼としてクーポンをLINEで送信。リピート購入を促し、売上アップにつなげます。

■「らくらくーぽん」概要

サービス名 : らくらくーぽん

サービス内容: 楽天市場専用のレビュー施策システム

価格    : 10,000円 (税別)

URL    : https://coupon.greenwich.co.jp

※らくらくーぽんをご利用いただくとLINE機能も無料になります。

■無料トライアル特別キャンペーン実施

2025年4月17日から5月31日まで限定。

・らくらくーぽん LINE機能アップデート

<通常トライアル45日間のところ60日間無料>
https://coupon.greenwich.co.jp/trial

※備考欄に「coupon2025」をご記入のうえ、お申し込みください。

【会社概要】

グリニッジ株式会社

代表者:代表取締役 田中 裕之
所在地:〒105-0004 東京都港区新橋一丁目16-4りそな新橋ビル8F
設立:平成15年5月26日
事業内容:EC・WEBソリューション(コンサルティング・制作・システム開発・運用)
ホームページURL: https://www.greenwich.co.jp

■本件に関するお問い合わせ先

グリニッジ株式会社

担当:インサイドセールス 塚部一貴 (つかべ かずき)
MAIL:inside-sales@greenwich.co.jp
TEL:03-5510-7260
FAX:03-5510-7296

【プレスリリース】楽天市場専用レビュー対策システム「らくらくーぽん」新機能「LINE通知メッセージ」をリリース

~注文完了からクーポン配布までLINEで一気通貫~

グリニッジ株式会社(本社:東京都港区、代表取締役:田中 裕之)は、楽天市場専用のレビュー施策システム「らくらくーぽん」において、新機能「LINE通知メッセージ」を2025年4月1日にリリースしました。

「らくらくーぽんLINE通知メッセージ」詳細: https://coupon.greenwich.co.jp/message

■「LINE通知メッセージ」機能追加の背景

近年、LINEはメールと比較して開封率が高く、友だちに確実に届くコミュニケーションツールとして注目されています。しかし、多くの楽天ショップではLINEの活用が進んでいないのが現状でした。

「らくらくーぽん」に「LINE通知メッセージ」機能を追加することで、ショップがユーザーの電話番号を指定してメッセージを送信でき、「友だち未登録のユーザー」にも直接アプローチが可能になりました。

■「らくらくーぽんLINE通知メッセージ」特徴

<友だち追加と楽天会員連携を同時に行う>

ユーザーにストレスをかけることなく、楽天会員とLINEIDをスムーズに連携できるため、友だちが増えるだけではなく、楽天会員連携済みの友だちも増加します。

<LINEを活用した売上アップの好循環>

「注文完了→発送完了→レビュー依頼のフォローLINE→レビュー投稿者にクーポンLINE」までの流れを自動化できるため、友だち増加、さらにレビュー増加&リピーター増加で売上アップを実現します。

<低コストで友だち獲得&ブロック率軽減>

従来の友だち獲得施策(友だち追加クーポンプレゼント)に比べて低コストでLINE友だちを増やすことが可能です。さらに、ブロック率が低いため、コスト削減にもつながります。

■「らくらくーぽんLINE通知メッセージ」料金プラン

1通あたり     : 4円 (税別)

1注文あたり配信回数: 2回

■「らくらくーぽん」概要

サービス名 : らくらくーぽん

サービス内容: 楽天市場専用のレビュー施策システム

価格    : 10,000円 (税別)

URL     : https://coupon.greenwich.co.jp/

■初期費用無料・無料トライアル特別キャンペーン実施

2025年4月1日~4月30日まで限定。

・通知メッセージ <通常100,000円 (税込)の初期費用が無料>

・らくらくーぽん <通常トライアル45日間のところ60日間無料>

LINE通知メッセージ機能審査依頼フォームhttps://coupon.greenwich.co.jp/notification-msg
※通知メッセージの利用は審査が必要となります。

【会社概要】

グリニッジ株式会社

代表者     : 代表取締役 田中 裕之
所在地     : 〒105-0004 東京都港区新橋一丁目16-4 りそな新橋ビル8F
設立      : 平成15年5月26日
事業内容    : EC・WEBソリューション (コンサルティング・制作・システム開発・運用)
ホームページURL: https://www.greenwich.co.jp

■本件に関するお問い合わせ先

グリニッジ株式会社

担当:インサイドセールス 塚部一貴 (つかべ かずき)
MAIL:inside-sales@greenwich.co.jp
TEL:03-5510-7260
FAX:03-5510-7296

好印象な伝え方

ビジネスにおいてもプライベートにおいても、人間関係は切っても切り離せないものですよね。
伝えたいことはあるけれど、嫌な感じで伝わったら嫌だな、もっと言葉選びが上手になりたいと思い、読んだ本についてご紹介させていただければと思います。

お願いするときは「否定形」ではなく「肯定形」で

✕よけいなひと言:「それはしないでください」
◎好かれるひと言:「それはこうしてください」

何気なくオフィスのドアを閉めたときに、「あ、ドアを閉めないでください」と指示されるのと、「ドアを開けておいていただけますか」とお願いされるのとでは、どちらが気分的によいでしょうか。
どちらも「ドアを開けた状態にしておいてほしい」との要望なのですが、前者が「○○しないでという否定形であるのに対し、後者は「○○して」という肯定形による言い方で、印象は大きく変わります。
これは日常のさまざまな場面にも通じることですが、人は「否定形で指示される」よりも「肯定形で依頼される」ほうが、受け止めやすくなります。
「よけいなひと言を好かれるセリフに変える言いかえ図鑑」より

お願いするときだけでなく、指示するときにも同様のことが言えると思います。
でもつい「それは△△ではなくて○○してほしかった」と思った際、
「〇〇をしてほしい」という感情より、「△△しないでほしい」という感情の方が大きくなりがちなので、自分自身を振り返ってみるともしかしたら否定形で指示してしまっていたかもしれないと思いました。否定形が浮かんできてもグッとこらえて頭の中で「○○をしてほしい」と肯定形で伝えられるよう意識していきたいです。

「あなたは知らないはず」と見下している態度が見え見え

✕よけいなひと言:「ご存じないと思いますが」
◎好かれるひと言:「ご存じかもしれませんが」

ちょっとした内緒話の時などに「ご存じないと思いますが、こんな話があるんですよ」「知らないと思いますが、あの件はこういうことなんですよ」と、よけいなひと言をつけて話し始めたことがある人もいるかもしれません。言った本人に悪気がなくても、「まだ知られてない話を教えてあげる」という特別感を伝えたい、というニュアンスで使うこともあるかもしれません。しかし、これは「これから話すことはあなたは知らないこと。でも私は情報通だから知っている」という態度が見え見えで、相手を上から目線で見下している、失礼な言葉なのです。ですから、仮に相手が100パーセント知らない話でも「知らないですよね?」と強調するのではなく、「ご存じかもしれませんが」と相手を立てて言うほうがいいのです。
「よけいなひと言を好かれるセリフに変える言いかえ図鑑」より

「あなたは知らないと思うけど」という相手のことを見下した前提の心の内が透けて見えるとたしかにムッとするかもしれないと感じました。反対に、「あなたならもう知ってるかもしれないけど」と立てられた言い方であれば、素直に「知らないから教えてほしい」と言いやすいので、その後の会話やコミュニケーションがスムーズに進むと思いました。

謙遜しすぎないほうが好感度大!自虐や卑下は逆効果

✕よけいなひと言:「そんなことないですよ」
◎好かれるひと言:「ありがとうございます」

日本には謙遜を美徳とする文化があるため、人からほめられてもすぐに、「そんなことないですよ」「全然ですよ」と謙遜する人が少なくありません。しかし、謙遜も度を越えると、せっかくほめてくれた相手の気分を害してイラッとさせたり、気を遣わせてしまうことがあります。
たとえば、「大変な仕事をよく頑張ったね」とほめた部下から、「ありがとうございます。先輩のおかげです」と言われるのと、「まだまだ全然ダメですよ」と言われるのとでは、印象がまったく異なりますよね。後者のように謙遜するのは相手の好意を否定する行為ですし、自虐的に自分を貶めるのは、もっと自分を認めてほしい気持ちの表れでもあるからです。
「よけいなひと言を好かれるセリフに変える言いかえ図鑑」より

せっかく褒めたのに謙遜されすぎると気まずい雰囲気になってしまったり、ネガティブな雰囲気になってしまう時ってありますよね。きっと褒めた方は良い雰囲気になるかと思って言ったのに、予想外にネガティブな雰囲気になってしまったら、褒めてくれた方に申し訳ないですよね。謙遜もほどほどにして、素直に「ありがとうございます」と伝えた方が、褒めてくれた方も褒められた方も良い気持ちになれそうだと思いました。

まとめ

全てに共通して言えるのは、ネガティブ発言は相手にもネガティブな感情を与えてしまい、ポジティブ発言は相手のこともポジティブにさせるので、好印象になるのだと思いました。
やはり、話していてポジティブな気持ちにさせてくれる人と話しているとこちらも明るい気持ちになるので、ポジティブな言い方で伝えることをもっと意識していきたいと思いました。

入社のご挨拶

はじめまして。
この度、開発職として中途採用で入社しました橋本と申します。

前職では、監査法人で監査業務に従事しており、今回は未経験ではありますがこの業界にチャレンジすることにしました。

「アレやっておけばよかったなぁ」という後悔をしないように生きたいと思っているので、今回も思い切って転職しました!
毎日分からないことに遭遇し、勉強しなければいけないことが山積みですが、とても充実しています。

ご縁があってグリニッジに入社することになったのですが、先輩方は面白く優しい方ばかりで、また自分の強運を発揮したなと思っています。

趣味は社会人になってから始めたゴルフで、現在住んでいる場所は打ちっぱなしが近いからという理由で決めているくらいゴルフにハマっています!

まだまだ分からないことだらけではありますが、自分がエンジニアとしてどれだけ成長できるかとてもワクワクしています!
グリニッジに貢献していけるよう日々精進して参りますので、どうぞよろしくお願いいたします。

AIを搭載した次世代エディタ Cursor

こんにちは、窪田です。

最近話題になっているコードエディタ「Cursor」をご存じでしょうか。

CursorはAIを搭載している革新的なエディタで、開発作業の効率が飛躍的に向上すると評判です。

どれくらい便利なのか気になったので、プライベートで少し使ってみたところ、確かに非常に便利だと感じました。

今回は次世代エディタのCursorの使い方を簡単に紹介したいと思います。

Cursorのインストール方法

公式サイト:https://www.cursor.com/

まずは上記の公式サイトからインストーラーをダウンロードします。

インストーラーを起動し、次へを選択していくと以下の画面が表示されます。

Keyboard欄ではキーバインドを設定します。Default(VS Code)を選択していますが、他にはVim、Jetbrains、Emacs、Sublime、Atomなど一般的なエディタが選択できます。

Language for AI欄はエディタに搭載されているAI機能が使用する言語設定なので、日本語を選択しています。

Codebase-wide欄はコードベース全体に関する質問をするための設定です。

Enabledになっているので、コードベース全体の質問機能が利用できることを示しています。

Add to Command Line欄はコマンドラインからエディタを起動するための設定です。

ここは特に変更しなくて良いので、Continueボタンをクリックします。


次は以下の画面が表示されます。

Use Extensionsボタンをクリックすると、VS Codeの拡張機能、設定、キーバインディングをインポートできます。

続いて以下の画面が表示されます。

ここはデータ収集に関する設定です。

データを収集を許可してエディタの改善に協力するか、データを提供せず自身のプライバシーを優先するかを選択できます。

基本的にはPrivacy Modeを選べば問題ないと思います。

次の画面でログインを求められるので、会員登録を済ませてログインします。


Cursorの使い方

まずはCursorの日本語化を行いましょう。

上部メニューのView > Command Paletteをクリック > Configure Display Languageと入力し、日本語を選択してCursorを再起動します。

AIによるコードの作成・編集

Cursorの基本的な設定は完了したので、プログラムを書いてみましょう。

例えば『フシギダネ、ヒトカゲ、ゼニガメの中から一匹をランダムで選ぶ想定で、選んだケースにより「○○、きみにきめた!」と表示させるプログラムを作成したい』という要望があったとします。

作成したファイルをCursorで開いた状態で「Ctrl + K」を押すとAIによるコード生成ができます。

入力欄が表示されるので、作成したいコードの内容を入力します。

Generateボタンをクリックすると、コードが生成されるので内容に問題が無ければAcceptボタンをクリックします。

指示した内容のプログラムが作成できましたね。

作成されたコードを範囲選択して「Ctrl + K」を押すと、コードに対して編集の指示ができます。Acceptボタンをクリックすると、AIが提案してくれた編集内容がコードに反映されます。

編集後のコードを実行すると、ピカチュウの場合だけ表示が変わるようになっていますね。


AIとのチャット

Cursorを開いた状態で「Ctrl + L」を押すとAIとチャットができます。

コードの解説と実行結果は同じで異なる書き方のコードについて聞いてみました。

紹介した機能の他にも、フォルダやファイルなどを参照したうえでAIとチャットを行うことができたりと、便利な機能があるようです。詳しくはこちらの公式ドキュメントを確認してみてください。


まとめ

今回はAIが搭載されているエディタのCursorというソフトを紹介してみました。

エディタから手軽にAIを活用できるのは、やはり便利ですね。

VS Codeを参考にして開発されているようなので、見た目もVS Codeに似ていて使いやすい印象でした。

Cursorが気になった方は、ぜひ試してみてください。

Babyの睡眠環境を守れ!

突然ですが

Babyには適切な室温というものがあります。

我が家では、いたるところに温度計をおいて室温をチェック・調整しています。

冬場には睡眠時に暖房と加湿器を使います。

暖房を忘れることはないのですが、加湿器には水を足すのを忘れたりします。

毎日Babyを寝室に連れていき、その後大人は別の場所で過ごし、ちょこちょこと寝室に置いてある温度計を見に腰を上げ、温度と湿度をチェックしに行ってました。

主に、この見に行く手間を省略したいのと、湿度の対策をしたくてラズパイを使ってみました。

冬の適切な温度と湿度

ちなみに適切な温度と湿度は以下の値とされています。

・室温: 20℃ ~ 23℃

・湿度: 40% ~ 60%

用意したもの

できあがったもの

子どもがいたずらするのでダイソーの小物入れの中に本体とセンサを入れて稼働させています。

小物入れの中に熱気がこもらないように通気性を上げるため、はんだごてで穴をあけたので少しプラスチックがドロりんちょしています。固まっているので問題はないです。バリのような細かくとがった部分はやすりで削ってあげて子どもがケガをしないようにします。

これを使ってなにをしているか

  • センサを使った温度と湿度の測定
  • slackへの通知

何を通知しているか

  • 現在の温度と湿度
  • 子どもが寝る前の加湿器への水足しリマインド
  • 多分加湿器の水切れているよ
  • 換気忘れてるよ

このうち加湿器への水足しリマインドは毎日19:30に通知する設定でslackのリマインダー機能を使用しており、それ以外の3つをラズパイから通知しています。

現在の温度と湿度

15分に1回その時の温度と湿度をslackで通知しています。

多分加湿器の水切れているよ

1時間の中で継続的に合計5%湿度が下がった場合に通知しています。

換気忘れてるよ

しっかり湿度をキープするということはカビとも戦わなくてはなりません。

我が家は寝室が北側にあるので、特に気を付けないとすぐカビが生えてしまいます。

なので寝ているとき以外は極力換気するようにしています。

それを忘れないように日中の計測時には、3回連続で40%を上回る場合に通知を出し続けます。

使ってみて

わざわざ温度と湿度を見に行かなくてもよくなったので、いくらか気が楽になりました。

ただ、寝顔を見たくなるので結局何回も寝室を訪問します。

今後の展望

今後、スマートスピーカなどを利用するようなことがあればslack通知とともにそちらを操作するようにしてみたいですね!

そもそも

多分温度も湿度も表示されるベビーモニターがありそうな気がします。

我が家ではそこまで考えずに買ったベビーモニターで温度しかわからないし、温度が上がりすぎても下がりすぎてもお知らせしてくれるわけではないのと、ちょっと久しぶりにラズパイを触りたくなったので工作してみました。

以上

時刻制御はよくハマる

Webアプリケーションを作っていて「あれ、9時間前の時刻なんだけど・・・」みたいなことありませんか?
私はよくあります、というかよく見かけて修正します・・・

なぜ起きるのか?

JST時刻だと思って表示したらUTC時刻でした!というだけなのですが・・・これ、意識しないとなかなか面倒なんですよね。

例えば、基本的にプログラム上で明示的にタイムゾーンの指定をしていない場合には以下のように動作します。

Web画面(クライアント側)PCのタイムゾーンの時刻
バックエンド(サーバー側)サーバーOSに設定されているタイムゾーンの時刻

この時に

Web画面(クライアント側)PCのタイムゾーンがAsia/Tokyo(=日本(JST)時間)
バックエンド(サーバー側)サーバーOSに設定されているタイムゾーンがAsia/Tokyo(=日本(JST)時間)

であれば、Web画面のカレンダーの日付と時刻とかtimePickerなんかの時刻もそのままサーバーに渡して、サーバー側でそのままnew Date(<渡された日時>)なんてしても問題は起きません。
(暗黙のうちにタイムゾーン同じなので)

これが以下の場合はどうでしょう?

Web画面(クライアント側)PCのタイムゾーンがAsia/Tokyo(=日本(JST)時間)
バックエンド(サーバー側)サーバーOSに設定されているタイムゾーンがUTC

Web画面では日本時間だと思って「2025/3/11 12:00」と入力したとします。

サーバー側で「2025/3/11 12:00」という文字列を受け取って

const date = new Date("2025/3/11 12:00");

とします。

さて、このdateの中身はどうなっているでしょうか?

日本時間の「2025/3/11 12:00」になっていると期待しますが、UTC時刻の「2025/3/11 12:00」となってしまいます。

つまりdateの中身は「2025-03-11T12:00:00+00:00」(=2025-03-11T12:00:00Z)となっています。

このdateを日本時間に変換をすると「2025-03-11T21:00:00.000Z」(=2025-03-11T21:00:00.000+09:00)となって、日本時間の12:00として処理を始めたつもりが、内部では日本時間21:00として処理されてしまいます。

これが+9時間で日付をまたぐ場合、指定した日付がずれて違う日付のデータを処理してしまう・・・なんてことが起こって、今度は「1日ズレする!!」みたいなことが起こります。

ではどうするのか?

Web画面(クライアント側)からバックエンド(サーバー側)でデータを送信するときには、日付や時刻の文字列を入力されたそのままで渡すのではなく、日時のフォーマット(ISO 8601)にしてから送信します。

{
  "date": "2025/3/11 12:00"
}

ではなく

{
  "date": "2025-3-11T12:00:00+09:00"
}

ですね。

こうすることで、「どのタイムゾーンでの時刻表示なのか?」が情報として含まれるようになるので、クライアントとサーバーでのタイムゾーンが違っていても同じように時刻を扱えます。

サーバー返却するデータフォーマットも同様です。

些細な事ですが、これを明確に決めないでクライアントとサーバー間のデータ通信を実装すると、タイムゾーンの時刻ずれを起こして「クライアントとサーバー側、どっちで直す??」みたいなことが発生、しかも一部はたまたま一致しててうまく動いてて、一部はずれてて・・・・結局影響範囲どこまであるんだ??みたいな非常に厄介な問題に広がったりします(しました・・・)

時刻制御でハマる人が少しでも少なくなることを祈ります・・・

JavaScriptの変数宣言 var let const の違いと使い分け

Javascriptで変数を宣言するとき、理解して var let constを使用しているつもりですが、
改めて、違いを整理したいと思います。

var let const の違いを理解する重要性

ES6(ECMAScript 2015)以前は var が主に使用されていましたが、新しい letconst が導入されたことで、より安全で予測可能なコードを書くことが可能になります。
それぞれの違いを理解し、適切に使い分ける方法を解説します。

var の特徴と問題点

var の基本的な使い方

var x = 10;
console.log(x); // 10

var のスコープ(関数スコープ)

var関数スコープ を持ちます。
つまり、関数の中で宣言された var はその関数の中でのみ有効です。

function example() {
  var a = 100;
  console.log(a); // 100
}
console.log(a); // ReferenceError: a is not defined

var の巻き上げ(Hoisting)とは?

var巻き上げ(Hoisting) により、宣言がスコープの先頭に移動されます。

console.log(b); // undefined
var b = 20;

上記のコードは内部的に以下のように処理されます。

var b;
console.log(b); // undefined
b = 20;

var の問題点

  • 再宣言が可能
  • ブロックスコープがない
var x = 1;
var x = 2; // エラーにならない
console.log(x); // 2

let の特徴と使い方

let の基本的な使い方

let y = 10;
console.log(y); // 10

ブロックスコープとは?

letブロックスコープ を持つため、 {} の中でのみ有効です。

if (true) {
  let z = 50;
  console.log(z); // 50
}
console.log(z); // ReferenceError: z is not defined

var との違い

  • 再宣言不可
  • ブロックスコープを持つ
let a = 1;
let a = 2; // SyntaxError: Identifier 'a' has already been declared

const の特徴と使い方

const の基本的な使い方

const PI = 3.14;
console.log(PI); // 3.14

値の再代入ができない

const num = 100;
num = 200; // TypeError: Assignment to constant variable.

const でオブジェクトや配列を使う際の注意点

const で定義したオブジェクトや配列は、プロパティの変更は可能 ですが、再代入は不可です。

const person = { name: "Alice" };
person.name = "Bob"; // OK
console.log(person.name); // Bob

person = { name: "Charlie" }; // TypeError

varとの違い

  • 再宣言不可
  • 再代入不可
  • ブロックスコープ
const a = 1;
const a = 2; // SyntaxError: Identifier 'a' has already been declared

var let const の使い分け

どんな場面で let を使うべきか?

ループや一時的な値を管理する場合に適しています。

for (let i = 0; i < 5; i++) {
  console.log(i);
}
console.log(i); // ReferenceError

const を基本にしつつ、let を補助的に使う考え方

基本的に const を使い、必要な場合のみ let を使う ことが推奨されます。

var を使うべき場面はあるのか?

ほとんどのケースで var は不要です。
var を使用すると意図しないバグが発生しやすいため、letconst を推奨します。

比較

宣言方法スコープ再代入再宣言巻き上げ
var関数スコープ可能可能あり
letブロックスコープ可能不可なし
constブロックスコープ不可不可なし

まとめ

  • var:古い書き方。巻き上げやスコープの問題があるため非推奨。
  • let:ブロックスコープを持ち、再宣言ができない。
  • const:再代入が不可で、安全に変数を扱える。

基本は const、必要な場合に let を使う。var は非推奨です。

Javascriptを書く際は、ご参考ください。