方言を話すおしゃべり猫型ロボット『ミーア』をリリースしました(こちらをクリック)
サーバー(Go)

【Flutter × ESP32】AWS Device Shadow・MQTT経由でおやすみモードの時間設定を同期

FlutterアプリとESP32デバイスを連携させ、AWS Device ShadowとMQTTを利用しておやすみモードの時間設定を同期する方法について解説。デバイスシャドウのdesiredセクションが更新されると、その情報はMQTTメッセージとしてESP32デバイスに通知される。
Web(Python)

【Rails7 + React + TypeScript】によるフロントエンド開発

Rails 7、React、およびTypeScriptを使用してフロントエンド開発を行う方法について、jsbundling-railsを使ったTypeScriptのセットアップ方法、Reactコンポーネントの作成と組み込み方法、RailsのERBファイルでのコンポーネントの呼び出し方法について記載。
組み込み(C++ / ESP32)

【ESP32】gaddr2lineを活用したバックトレース分析

ESP32を使ってネコ型おしゃべりロボットを開発中だが、デバイスを初回起動した時に下記エラーが発生するようになった。ESP32のクラッシュ問題を解決するために、gaddr2lineツール(Linuxではaddr2line)を使用したバックトレース分析の手順を記載
アプリ(Flutter)

【Flutter】AppleのHealthKit APIからユーザーの行動ログを取得する方法:環境設定編

HealthKitを使用する前に、アプリの HealthKit 機能を有効にする必要がある。Xcode でプロジェクトを選択し、HealthKit 機能を追加する。flutterのhealthパッケージを使ってHealthKitへのデータアクセス許可を実装。
サーバー(Go)

【Docker】コンテナ間通信を理解する。external設定とアクセス方法

Dockerでのコンテナ間通信は、まず手動で既存のDockerネットワークを作成する必要がある。その後、docker-compose.ymlでexternal: trueを設定する。コンテナ間通信ではホストのポートマッピングは関係なく、内部ポートを直接使用する。
サーバー(Go)

【Rails7】動的なカスタムエラー画面を作成し、共通デザインを適用(400/401/403/404/429/500/503)

Railsのエラーページはデフォルトでは、静的ファイルでpublicディレクトリに配置されているが、今回は動的なカスタムエラー画面を作成し、共通のデザインを適用する。これにより、ユーザーがアクセスした際に発生するエラーに応じて、適切なエラーページを表示することができる。
アプリ(Flutter)

【Flutter】Apple HealthKit API から行動ログを取得し、Gemini APIを元にアドバイス文を生成:実装編

今回は、Flutterアプリからサーバーにヘルスデータを送信し、Gemini APIを通じてアドバイスのテキスト(例:昨日はよく眠れたみたいですね。この調子!)を生成する部分を実装したい。1日の総歩数と総運動時間を出力するように計算ロジックを追加。
データ解析(BiqQuery)

【BigQuery】中間テーブルを作成して、コスト削減し、クエリ処理速度を速める

GA4からエクスポートされたデータには、過去のデータも含まれており、これらのデータは時間が経過しても変化しない。この不変の特性を利用して、過去のデータを中間テーブルに保存し、日々のバッチ処理ではこの中間テーブルから必要なデータを取得することが、コスト削減と処理速度の向上につながる。
アプリ(Flutter)

【AppleHealth Kit】連携状態の取得がiOSのプライバシーの観点からややこしすぎた

iOS では、Apple のプライバシーポリシーにより、HealthKit はアプリが読み取りアクセス権を持っているかどうかをアプリ自体に知らせない(外部に開示しない)。ユーザーのプライバシーを保護するための措置だが、開発者はこのメソッドを信頼してユーザーの許可状態を確認することができないという制約がある。
Web(Python)

【FullCalendar】でGoogleカレンダーを埋め込み表示して装飾する

googleカレンダーの埋め込みコードを利用した場合、カレンダーの見た目が固定でカスタマイズできないが、FullCalendar Javascriptライブラリを使えば、サイトにキレイな見た目のカレンダーを設置できる。GoogleカレンダーのAPIキーとIDを取得する。