チャットボット構築サービス「Dialogflow」を使ってみた

チャットボットを調べる機会があったので「Dialogflow」でサービスを作ってWEBサイト上で動かすまでをまとめてみました。

1.「Dialogflow」サイトへ行き(GoogleアカウントでDialogflowを開始して)CREATE AGENTします。

2.AGENT情報を入力します。名称と言語とタイムゾーンを入力してCREATE

3.Intents画面になるのでCREATE INTENTS

4.Intentsのタイトルを入力してSAVE

5.Training phrasesとResponsesを入力してSAVE

6.右のパネルでテストしてみます。応答がありました

7.動作が確認できたのでチャットボットをWEBサイトに設置します。IntegrationsのページからDialogflow Messangerを選択します。

8.htmlに張り付けるソースコードが表示されるのでコピーします

9.適当さWEBサイト(今回は私が課題制作しているlocalhost上のWEBサイト)を用意します

10.該当のhtmlソースにコピーしたスクリプトを貼り付けます

11.WEB画面を開いてみます。チャットボットが現れます

12.質問すると応答があります

以上です。

バス移動・通勤を便利にするサービスを構築している中でチャットボットを+αの便利機能として付加させてみました。今後はIntentsを増やして対応する路線、停留所を増やす。Entity(同義語登録)を増やして音声入力に対応する。ほかサービスとの連携。など拡充していきます。

サーバーレス×PostgreSQL 16!進化するデータベースの最新動向

はじめに

データベース技術は、クラウド化やAIの進化とともに急速に変化しています。特に、パフォーマンス向上やスケーラビリティの向上を目的とした新しいアプローチが次々と登場しており、データを扱うエンジニアにとって最新トレンドの把握は必須となっています。

本記事では、最新のデータベーストレンドについて解説し、2024年に注目すべき技術やツールを紹介します。


本題

1. PostgreSQL 16の新機能

PostgreSQLはオープンソースのリレーショナルデータベースの中でも非常に人気が高く、最新バージョンのPostgreSQL 16ではさらなるパフォーマンス向上が図られています。

主な新機能

  • クエリの並列処理の最適化
    • クエリプランナーの改善により、大規模データセットを扱う際の実行速度が向上
    • parallel_leader_participation

      の改善により、リーダープロセスも並列実行に参加できるように

  • JSONデータ処理の改善
    • jsonb

      型のインデックス処理が高速化

    • JSONデータ型のクエリパフォーマンスが向上し、NoSQL的な利用が容易に
  • ロックの軽減によるトランザクション性能の向上
    • row-level locking

      の最適化により、競合が発生しにくくなり、トランザクションのスループットが向上

  • メモリ管理の改善
    • work_mem

      の動的調整が可能になり、負荷の変動に強くなった

これらの強化により、大規模データの処理速度が向上し、企業システムやデータウェアハウスでの活用がより容易になりました。

また、PostgreSQL 16では レプリケーション機能の改善 も進んでおり、ストリーミングレプリケーションの効率化や、ロジカルレプリケーションのパフォーマンス向上が図られています。特に、大規模なデータベースをマイクロサービスアーキテクチャと組み合わせる際の信頼性が向上しています。

2. Serverlessデータベースの進化

クラウド環境の普及に伴い、サーバーレスデータベースが急成長しています。従来のデータベース管理では、リソースのスケーリングや運用コストの最適化が課題となっていましたが、サーバーレスデータベースはこれらを解決するソリューションとして注目されています。

代表的なサーバーレスデータベースとその特徴

  • AWS Aurora Serverless V2
    • 自動スケーリングの精度向上: V1ではスケール単位が大きかったが、V2ではミリ秒単位で細かい調整が可能に
    • 低コスト運用: リクエストが少ないときは最小限のリソース消費に抑え、コスト削減を実現
    • マルチAZ対応の強化: 高可用性の確保により、エンタープライズ用途でも採用しやすく
  • NeonDB
    • PostgreSQL互換のサーバーレスデータベース: 既存のPostgreSQLアプリケーションをそのまま移行可能
    • スナップショットベースのストレージ管理: ストレージの最適化が容易で、高速なリードレプリカの作成が可能
    • スケールアウト対応: 負荷が増加してもスムーズにリソースを増加可能

これにより、開発者はサーバー管理の負担を減らし、アプリケーションの開発に集中できるようになっています。特に、スタートアップや新規プロジェクトでは、初期コストを抑えつつ本番環境の構築ができるため、サーバーレスデータベースの導入が加速 しています。

3. AIとデータベースの統合

近年、AIがデータベースに統合されるケースが増えており、データ分析やクエリ最適化に革命をもたらしています。

AIが活用される主な領域

  • クエリの自動最適化(Google Cloud Spannerなど)
  • AIによる異常検知(データの異常値検出)
  • 自動スキーマ設計(AIがデータ構造を最適化)

これにより、データベースの運用コストが削減され、パフォーマンスが飛躍的に向上しています。


おわりに

データベース技術は、サーバーレス化やAIの統合によって、ますます進化を遂げています。エンジニアにとっては、新しい技術のキャッチアップが求められる時代です。

今回紹介した技術を活用し、より効率的なデータ管理を実現していきましょう。最新情報を常にチェックし、トレンドに乗り遅れないようにしましょう!

Live2Dの基礎知識

Live2Dとは?

Live2D は、日本の Live2D社(旧サイバーノイズ社)が開発した 2Dイラストを立体的に動かす 技術およびソフトウェアです。通常のアニメーションのようにフレームごとに絵を描くのではなく、レイヤー分けされた一枚のイラストを各パーツ毎に変形して立体的な動きを表現できます。

公式サイト


Live2Dの特徴

  • 一枚のイラストを活用
    3Dモデリングを使わず、イラストのパーツを分けて動かすことで立体感を表現。イラストの質感を損なわずに動かせる。
  • モデリングとアニメーションの制作が可能
    Live2D Cubism というソフトウェアを使用し、イラストのパーツを動かしてモデルを作成。モーション付けや表情変化、物理演算(髪や服の揺れ)も可能。
  • ゲーム・VTuber・アプリに活用
    VTuber(バーチャルYouTuber)のモデル制作
    ソーシャルゲーム(キャラクターの表情・動作演出)
    ライブ配信アバター(配信者の顔の動きに合わせて動作)

Live2Dの主なソフトウェア

  1. Live2D Cubism・Live2D Viewer
    モデリング(イラストをパーツごとに動かせるようにする)
    アニメーション(キャラクターの動きを作成・確認)
    無料版と有料版あり(商用利用は基本的に有料)

  2. VTube Studio・Animaze(VTuber用ソフト)
    Live2Dモデルを動かせるVTuber向けソフト。

  3. スマホアプリ・その他
    Mirrativ …Live2Dアバター機能あり
    REALITY(バーチャル配信アプリ) …Live2Dアバター作成可能

Live2Dの使い方(簡単な流れ)

  1. イラスト作成(パーツを分けて描く)
    PhotoshopやCLIP STUDIO PAINTで目、口、髪などを別レイヤーで描く。
  2. Live2D Cubismでモデリング
    各パーツを動かせるように設定し、パラメータ(表情・体の動き)を調整。
  3. アニメーション作成 or 外部ソフトと連携
    ・Cubismで動きを付ける。
    ・VTuberならフェイストラッキングソフトと連携(VTube Studio・Animazeなど)。

まとめ

Live2Dは、一枚絵のイラストを立体的に動かせる技術で、主に VTuberやゲームキャラのアニメーションに活用されています。Live2D Cubismを使えば、絵のクオリティを保ったまま滑らかな動きを作れるので、イラストを動かしたい人には非常に便利なツールです。

Live2D公式サイトにイラストを動かすまでのチュートリアルも用意されているので、興味があれば、無料版のLive2D CubismからLive2Dの制作を試してみてください。

Laravelの不具合をサクッと解決!

Laravelを使っていると、開発中にエラーや不具合にぶつかることがあります。ここでは、よくある問題とその解決方法をわかりやすく紹介します。

1. Class “App\Http\Controllers\XxxController” not found

原因

コントローラーが見つからないときは、名前空間のミスやファイルの配置ミスが原因のことが多いです。

解決策

  • app/Http/Controllers/ にファイルがあるか確認。
  • namespace App\Http\Controllers; を追加。
  • composer dump-autoload を実行。
composer dump-autoload

2. .env の変更が反映されない

原因

.env を編集しても変更が反映されないのは、キャッシュが影響している可能性が高いです。

解決策

  • キャッシュをクリアする。
php artisan config:clear
php artisan cache:clear
  • サーバーを再起動する。
php artisan serve --port=8000

3. マイグレーションエラー (`SQLSTATE[HY000] [1045] Access denied for user`)

原因

データベースの接続情報が間違っている可能性あり。

解決策

  1.  .env  の DB_HOST ,  DB_DATABASE ,  DB_USERNAME ,  DB_PASSWORD  を確認。
  2. 変更後、以下のコマンドで設定を反映。
    1. php artisan config:clear
      php artisan migrate
  3. mysql -u ユーザー名 -p  で手動ログインし、アクセス権限をチェック。
     

4. 419 Page Expired エラー

原因

CSRFトークンが送信されていないか、セッションが切れている可能性。

解決策

  • フォームに  @csrf  を追加。
<form action="/submit" method="POST">
    @csrf
    <input type="text" name="name">
    <button type="submit">送信</button>
</form>
  • セッションをクリア。
php artisan session:clear
  •  config/session.php  の  SESSION_DRIVER  を  file  に設定。

5. Route [xxxx] not defined.

原因

指定したルートが定義されていない可能性あり。

解決策

  •  routes/web.php  や  routes/api.php  を確認。
  • ルートを適切に記述。
Route::get('/dashboard', [DashboardController::class,'index'])->name('dashboard');
  • ルートのキャッシュをクリア。
php artisan route:clear

まとめ

Laravelでよくあるエラーとその解決策を紹介しました。エラーが発生したら、

  1. .env 設定やキャッシュを確認
  2. コマンドを実行して設定を更新
  3. 公式ドキュメントもチェック

この流れで対応すれば、大体の問題は解決できます!

【Windows】WSLを使用したDockerの環境構築

【WSLを使用したDockerの環境構築】

 

WindowsにてDockerを使用する際、Cドライブに環境を用意すると読み込みがすごく遅くなります。

その遅さを解決するためにWSL(Windows Subsystem for Linux)を使用します!!

今回はWSLにてDockerの環境構築をする方法をまとめていきます。

目次
――――――――――――――――――――――――――――
1 WSLの導入
2 Dockerの導入
3 設定
4 まとめ
――――――――――――――――――――――――――――

1..WSLの導入

WSL(Windows Subsystem for Linux)を導入する。
Microsoft Store にてUbuntuをインストールする。
インストール完了後、初回起動時にユーザとパスワードを入力しアカウントを作成します。

WindowsからLinux上のファイルにアクセス
エクスプローラから、\\wsl$\にてアクセス可能です。

2.Dockerの導入

公式サイトからインストーラーをDownloadしインストールする。

https://docs.docker.com/desktop/setup/install/windows-install/

3.設定

Dockerの設定からWSL(今回はUbuntu)を許可してあげると使用することができます。

4.まとめ

こんな感じでWSLを使用し、Dockerの環境構築をしてみました!

ぜひご参考になれば嬉しいです。

PANTONE COLOR OF THE YEAR 2025はMocha Mousse(モカムース)

PANTONEからカラーオブザイヤー2025が発表されました。
PANTONE COLOR OF THE YEAR 2025

2025年のトレンドカラーは「PANTONE 17-1230 Mocha Mousse(モカムース)」。
その名の通り、美味しそうなチョコレート色ですね。

思慮深い贅沢さを表現しています。洗練されていて豪華でありながら、同時に気取らないクラシックなPANTONE 17-1230 Mocha Mousse は、控えめで落ち着いたブラウンのイメージから、野心的で贅沢なブラウンのイメージまで、私たちのブラウンのイメージを広げています。
まろやかなブラウンの色合いに注目しています。その色調が持つ豊かさと感覚的で心地よい暖かさは、快適さを求める気持ちや、贈ったり他の人と共有したりできるシンプルな喜びへの耽溺にまで広がります。

カラーデータ

HEX #A47864
sRGB 164, 120, 100
LAB 54.79, 17.05, 18.56

Photoshopのカラーピッカーではこんな感じです。

PANTONE CONNECT

Mocha Mousseを元にしたカラーパレットやシェードも用意されています。
PANTONE CONNECT(要会員登録)

年末年始休業のお知らせ

平素は格別のご高配を賜り、誠にありがとうございます。
株式会社エイブリッジでは誠に勝手ながら、年末年始休業日を下記のとおりとさせていただきます。

【年末年始休業日】
2024年12月28日(土)~2025年1月5日(日)
※2025年1月6日(月)より、通常営業を開始致します。
※休暇中のお問い合わせにつきましては、2025年1月6日(月)以降に対応させていただきます。

ご不便をおかけいたしますが、何卒ご了承いただきますようお願い申し上げます。

リアクティブプログラミングについて

今回はリアクティブプログラミングを簡単に解説させていただきます。
詳細な部分などは省いて説明させていただきますので、その部分を理解したい方はこちらの記事を
閲覧いただいた後に別のサイトをご参考にください。

リアクティブプログラミングとは
リアクティブプログラミングと通常のプログラミングで違うのはデータの流れです。
簡単なソースコードを用意しました。

 

上記のソースコードですが、今のところ問題ないです。
ただ、表示するabridgeC,D,F,Eを追加されるとpushButtonのソースコードが長くなり
管理でも色々問題が起きてきます。

リアクティブプログラミングでは以下のように表現できます。

watchとついているものは、watchの値が変更されると参照先の値も更新されるような仕組みのものです。

上記でいうwatchの部分に関しては各言語でRxSwiftやRxJavaというパッケージで実装されているので
ご自身が使用されている言語でもチャレンジしてみてはどうでしょうか。

以下、リアクティブプログラミングがどのように動いているのかのイメージをめちゃくちゃ簡単に書かせていただきましたので
ご参考になれば幸いです。

データベースのインデックス設計でパフォーマンスを向上させたい

はじめに

データベースのパフォーマンスを向上させる手段としてお手軽でかつポピュラーな方法としてインデックスを作成する方法があります。
しかし、お手軽といってもやみくもに作成すればよいのではなく、しっかりと考えて使わなければ恩恵を受けることはできません。そこで今回は、インデックスを作成するポイントと注意点を最も一般的に使用されるインデックスであるB-treeインデックスを例に解説していきます。

そもそもインデックスとは?

まずはインデックスについて軽く触れます。データベースにおけるインデックスとはレコードを高速に効率よく検索するための≪索引≫です。特定の列を識別できるキー値とそれに結び付けられる実データ、あるいはポインタが格納されています。イメージとしては本の巻末についている索引に近いですね(キー値とポインタ=単語とその単語が載っているページ)。

B-treeインデックス

インデックスと一言にいってもその種類は様々あります。今回は利用頻度の高いB-treeインデックスについて見ていきます(以降インデックスと記されている場合はB-treeインデックスを指している思ってください)。

B-treeインデックスの構造を簡単に図に表すと上記のようになります(正確にはB+treeという構造らしい)
特徴として

  1. ルートノードと子ノードはキー値と子ノードへのポインタを持つ
  2. リーフノードはキー値とデータへのポインタを持つ

といった点が挙げられます

なぜB-treeインデックスが多く使われるのか?

B-treeインデックスには以下のような長所が挙げられます

1.平衡木であるためどのデータに対しても計算量が一定になる

B-treeは平衡木と呼ばれる構造をしています。平衡木はどのリーフもルートからの高さが均一であるため、どんなキーを使ってもリーフまでの距離が一定になります。キー値に左右されず探索を同じ計算量で行うことができます。

2.性能劣化が緩やかである

B-treeは最初に作られたときはきれいな平衡木であるが、テーブルの挿入や更新、削除が繰り返されることで徐々に崩れていき、非木構造のなっていくことがあります。そのため長時間の運用によって探索に費やすコストにばらつきが出るようになってしまいます(自動修復する機能も備わっていますがそれでも長時間運用による劣化は避けられません)。
しかし、B-treeの性能劣化は非常に緩やかであり持続性に優れています。それはB-treeが平衡木であるのと同時に平べったい木であるからです。B-treeのルートからリーフまでの高さは3~5で構成されていることが多く、このように背の低い木はデータの量が増加しても探索速度は変わらない特性があります

3.範囲検索も高速化できる

B-treeは構築されるときに必ずキー値をソートします。そのため特定の値以上・以下を探索というような絞り込みが可能になり、高速化を可能にします

インデックスを作成するのに適した例

インデックスの特徴を押さえたところで次はインデックス作成の恩恵が大きくなる例の特徴について解説していきます

例1:大規模なテーブルに対して作成する

当たり前ですが、レコード数の少ないテーブルにインデックスを作成しても大した恩恵を受けられません。それどころかインデックスは独自のインデックス領域を必要とするため、わざわざ領域を占有してまでインデックスを作成したのに検索性能が上がらない!といった事態になることも考えられます。
では、どのくらいのレコード数がインデックス作成の目安になるのでしょうか。これには明確な基準はなく、ストレージやサーバーの性能といった環境要因について変化しますがレコード数が10万以下の場合はほぼ意味がないと思ってもいいそうです(あくまで目安です)。

例2:カーディナリティの高い列

インデックス作成の判断基準として重要な要素にカーディナリティがあります。カーディナリティとは、ある特定の列における値の種類の多さを表す概念になります。例えば、社員が普通乗用車の運転免許を持っているか否かを表す列「免許所持」の列があった場合、取りうる値はおそらく「TRUE」か「FALSE」の2つでしょう。「免許所持」の列のカーディナリティは「2」ということになります。

このようにカーディナリティの小さい列にインデックスを作成してもあまり意味はありません。カーディナリティの目安は、「特定のキーを指定したときに、全体の5%に絞り込めるだけのカーディナリティがある」ことが目安になります。
しかし、注意点があります。それはカーディナリティが高くても、特定の値にデータが集中している列はインデックスの作成に向いていないという点です。極端な話ではありますが1~10000までの値をとる列があったとしても、1~9999の値は全体の0.1%しか取らず、残りの99.9%は10000の値をとるような列はインデックスの作成に向いていません。

例3:SQLで検索条件や結合条件として使用される列

これも当たり前の話ですが、検索条件や結合条件にならないような列にインデックスを作成しても意味がありません。WHERE句やORDER BY句、テーブル結合でON句に使われるような列にインデックスを作成するようにしましょう。

SQLでの注意点

先ほど、インデックスを作成する列の基準として「検索条件として使用される列」を挙げました。しかし、検索条件として使用されていてもインデックスが使われない場合がいくつかあります。

1.インデックス列に演算を行っている場合

インデックスを作成した列はSQLにおいて「裸」で用いるのが原則となっています

上記ではindex_col列にインデックスが存在するとします。このような場合、インデックスが保持しているデータはあくまで「index_col」に対してであり、「index_col」ではありません。なのでOK例のようなSQLを記述しなければいけません

2.IS NULLが使われている

インデックスはNULLをデータ値としてはみなさず、保持をしません。なのでIS NULLやIS NOT NULLに対しては有効てきではないです。一部のDBMSはIS NULLに対しても有効的に作用しますが、汎用性はあまりありません

3.否定形が使われている

4.前方一致以外のLIKE句の場合

LIKE句を使う場合は、前方一致の場合のみにインデックスが使用されます

以上になります。一部割愛しましたが、ほかにもSQLの記述次第でインデックスが使用されないパターンがあるのでぜひ調べてみてください。

その他の注意事項

SQL以外にもいくつか注意事項があるのでいくつかご紹介したいと思います

1.主キーや一意制約キーの列についてはインデックスを作成する必要がない

DBMSは主キー制約や一意制約を作成する際に、内部的にインデックスを作成しています。そのため、二重にインデックスを作成することになってしまいます。主キーや一意制約キーといった列をSQL文内の条件として使用する場合は、自動的にインデックスが使用されています

2.インデックスによって更新性能を劣化させてしまう

これについてはB-treeインデックスに限らず、インデックス全般に言われていることである。一般的にインデックスは独立したオブジェクトとしてDBMSに保持されている。そのため、インデックスの作成されている対象の列値が更新されると、インデックス内に保持している値も更新しなければならない。つまり、インデックスを作成すればするほどテーブルに対する更新性能が劣化していくというトレードオフの関係に注意してインデックスを作成する必要がある

3.定期メンテナンスの必要性

本記事内でも述べましたが、DBMSを長期的に運用していると、構造がだんだんと崩れていき劣化します。その為、定期的なインデックスの再構築を行うのが望ましいです。
頻度についてはシステムのデータ更新量によるため一概に言えないが、DBMSごとに指標がや調査方法が存在するため、マニュアルで調べてみると良いでしょう。

最後に

以上がインデックスの作成ポイントと注意点になります。こうしてみると実装がお手軽な反面、注意しないといけないことが多いことも分かったと思います。パフォーマンスを改善しようとしたのにかえってパフォーマンスが下がる…なんてことになりたくないですね。また、インデックス・ショットガンと呼ばれるようなアンチパターンも存在するそうなのでいずれ記事にしてみたいと思います。
以上、インデクス設計についてでした!

参考

「達人に学ぶDB設計徹底指南書 第2版」ミック・著

ファイアウォールについて

ファイアウォールって?

ファイアウォール(Fire Wall)とは、「コンピュータネットワークにおいて悪意ある通信や脅威から保護するため、通過させてはいけない通信を阻止するセキュリティシステム」のことを指します。現代で「ファイアウォール」というと、IT分野で使用されることがほとんどだと思います。

ファイアウォールは不正アクセスを遮断し、デバイスの安全性を保つ役割を担っていることから、私達が普段触れているWindowsやMacなどの主要OSにはほぼ必ず搭載されています。デバイスを使用する上では非常に重要な存在だと言えるでしょう。

「ファイアウォール」はどんなのがある?

ファイアウォールには、大きく「2つのカテゴリ」と「3つの保護方式」で分類されます。

1.カテゴリの種類

ファイアウォールは大きく以下2つのカテゴリーに分類され、それぞれで保護する主な対象が異なります。

パーソナルファイアウォール

私達が直接使用する、パソコンやスマートフォンなどの端末を主に保護します。

ネットワーク用ファイアウォール

名前の通り、社内ネットワークなどのネットワーク全体を対象に保護します。ファイアウォールというと、基本的にこちらを指す場合が多いです。

2.保護方式の種類

ファイアウォールは様々な方式で通信の可否を判断します。主な種類として、以下3つの方式があります。

パケットフィルタリング

パケットフィルタリングは、ネットワーク上の通信データを「パケット」という小さな単位で解析して判断する保護方式です。パケットの送信元アドレスや宛先アドレス、使用されるポート番号などの情報を基に通信の可否を判断します。

サーキットレベルゲートウェイ

サーキットレベルゲートウェイは、コネクション単位で通信の可否を判断する保護方式です。対象となるネットワークの中継役としての役割を果たし、ポート指定や制御を可能にします。

アプリケーションレベルゲートウェイ

アプリケーションレベルゲートウェイは、HTTPやFTPなどのアプリケーションプロトコルごとに検査・解析する方式です。プロキシ(代理)サーバーを介して切り離す方式なので、「プロキシ型ファイアウォール」とも呼ばれます。

ファイアウォールで何ができるの?

ファイアウォールは、ネットワークやデバイスを保護するための重要なセキュリティとして認識されています。一口にファイアウォールと言っても、いくつかの機能が存在し、複数の機能が組み合わさることで高度なセキュリティを実現しています。

フィルタリング機能

フィルタリング機能は、ファイアウォールの基礎的な機能の一つです。事前に送信元/送信先のルールを設定し、その設定に基づいて通信の可否を判断します。具体的には、送信元や宛先のIPアドレス、使用されるポート番号、通信のプロトコルなどの情報を基に、通信が安全かどうかを判断します。

IPアドレス変換機能

IPアドレス変換機能は、通常NAT(Network Address Translation)として知られている技術です。この機能は、インターネット上で主に使用する「グローバルIPアドレス」と、社内ネットワークで活用する「プライベートIPアドレス」を変換する役割を果たします。

ログ監視機能

ログ監視機能は、ファイアウォールを通過する全ての通信に関する情報を記録し、それらのログをリアルタイムで監視する機能です。このログには、通信の送信元と宛先のIPアドレス、使用されたポート番号、通信結果(許可・拒否)などの情報が含まれます。