Agora APIExampleを使ってWeb通話してみる

Agoraはビデオや音声通話・ライブ配信を簡単に実装できるSDKツールです
Agoraを使ってWeb通話アプリを試そうとした際に
クイックスタートなどを参考にしてもある程度の実装・コーディングが必要になっていて...
とにかくまず動かしてみたいと思いやってみた記録です

◆前提(手順割愛)
・Windows11で作業します
・Androidアプリを作成してスマホで動かします
・AndroidStudioで作業します
・GitHubに接続します
・Agoraにサインアップしてアカウントを取得します
参考URL)https://jp.vcube.com/sdk/trial
・認証用にApp IDとApp Certificate用のTokenを作成します
参考URL)https://qiita.com/v-cube/items/c43dd8b0241f03fedc1d#app-certificate-%E3%81%AE%E6%9C%89%E5%8A%B9%E5%8C%96

◆
AgoraIO/API-Examplesというリポジトリがあります
URL)https://github.com/AgoraIO/API-Examples
Agoraのサンプル集なのでこれをビルドすればすぐアプリとして動かせると考えました

◆手順
まず上記リポジトリからCloneします、取得先はAndroidStudioのプロジェクトフォルダとします
例)C:\Users\【ユーザー名】\StudioProjects\API-Examples

上記フォルダをAndroidStudioで開きます

API-Examples内には各機種向け、各機能ごとのサブプロジェクトという構成になっています
今回使用するのはAPI-Examples/Android/APIExampleです

App IDとApp Certificate用のTokenを設定します
設定先はAPIExample/app/src/main/res/values/string_configs.xmlです

<string name=”agora_app_id” translatable=”false”>YOUR APP ID</string>

“YOUR APP ID”部分をApp IDに書き換え

<string name=”agora_app_certificate” translatable=”false”>YOUR APP CERTIFICATE</string>

“YOUR APP CERTIFICATE”部分をApp Certificate用のTokenに書き換え

以上でビルドすればAPKができるはずでしたがビルドができない、失敗などあったので以下を追加処置しました

●API-Examples/build.gradle
修正前

id 'com.android.application' version '8.5.0' apply false
id 'com.android.library' version '8.5.0' apply false

修正後

id 'com.android.application' version '8.5.2' apply false
id 'com.android.library' version '8.5.2' apply false

●API-Examples/gradle.properties
修正前

rtc_sdk_version = 4.0.1

修正後

rtc_sdk_version = 4.5.2

●API-Examples/app/build.gradle
修正前


android {
    namespace "io.agora.api.example"
    compileSdk 35
    defaultConfig {
        applicationId "io.agora.api.example"
        minSdkVersion 24
        targetSdkVersion 35

修正後


android {
    namespace "io.agora.api.example"
    compileSdk 34
    defaultConfig {
        applicationId "io.agora.api.example"
        minSdkVersion 24
        targetSdkVersion 34

以上でビルドが通るようになりました
◆リリースビルドしてAPKファイルを作ります
Android StudioでTerminalビューを開き
API-Examples/Android/APIExample配下にあるgradleのスクリプトを実行します

gradlew assembleRelease

API-Examples/Android/APIExample/app\build/outputs/apk/releaseにapkファイルができます

◆スマホでアプリを動かしてみる

Android端末2台にAPKをインストールします

起動します。アプリの初期画面です。いろんなサンプルのメニュー選択画面になっています。

メニューの一番目のLive Interactive Vide Streaming(Token Verify)を選択してみます

「App ID」、「Token」、「Channel ID」を入力してビデオ通話を開始する機能になっています。「App ID」、「Token」はAgoraで発行したものを使用する必要があります。今回はアプリに「App ID」、「Token」を埋め込んでいますのでこの機能は使いません

メニューに戻って2番目のLive Interactive Vide Streamingを選択します

「Channel ID」を入力してビデオ通話を開始する機能になっています。「App ID」、「Token」はアプリに埋め込んだ値が使用されます。

「Channel ID」に適当な値を入力してJOINボタンを押すとビデオ通話を開始します

ビデオ通話を開始して待ち受けている状態です。画面左側に自分のカメラ映像を映しています

もう一方のスマホでアプリを起動して同じくLive Interactive Vide Streaming画面から「Channel ID」に先ほどと同じ値を入力してJOINボタンを押します

ビデオ通話に参加しました。相手のカメラ映像が映し出されています。音声もつながっており会話できます

以上

Aviutl2がリリースされたらしいので触ってみる

2025年7月7日、動画編集用のフリーソフト「AviUtl2」がリリースされました。
AviUtl2の前身であるAviUtlをよく利用していたので、今回はAviUtl2を用いて簡単な動画の編集・出力を試してみようと思います。

そもそもAviUtlって?

AviUtlは1997年から存在する無料の動画編集ソフトで、様々なプラグインを導入して機能を拡張しやすい点が特徴です。昔から公開されているだけあり、プラグインも多種多様なものが有志の方々により公開されています。
使い方についてもたくさんの方が記事を公開していますので、そちらも参考にしてみてください。
《参考》AviUtlの易しい使い方

早速いろいろいじくり回してみる

①導入~動画ファイル読み込み
それでは早速AviUtl2を使ってみます。インストーラのダウンロードページは以下です。
AviUtlのお部屋

インストーラ版とexe版の2つがありますが、特にこだわりがなければインストーラ版でよいでしょう。
で、インストール後に起動してみた初期画面はこんな感じ。

画面中央上部に動画のプレビュー、下部分にタイムラインがあります。塗りつぶしていますが、左側にはディレクトリが表示されています。右側のウインドウはまだ不明なので一旦放置で。

ちなみに、前身のAviUtlの初期画面はこんな感じ。

ガチで何もありません。ウインドウに動画ファイルをD&Dすることで動画を編集することができます。
拡張編集プラグインを導入することで動画編集が行いやすくなります。(というより導入しないと編集ソフトとして圧倒的に使いづらさが目立ちます)
今回はAviUtl2について触っていくので、閑話休題。

左側のディレクトリから動画ファイルを探し、タイムラインにD&Dすることで、プレビューに動画が映るようになります。

今回はゲーム画面を録画した動画ファイルを用いて編集していきます。

②動画の切り取り、エフェクトの追加

動画の読み込みができたら、次は動画ファイルを編集したり、オブジェクトを追加してみます。(オブジェクト=字幕や画像など)
動画上で余計な操作を行って冗長になっている部分を切り取り、コンパクトにしてみましょう。
切り取りたい箇所の開始地点をタイムライン上で指定し、Shiftを押しながらタイムラインをクリックすると、開始地点から終了地点までを範囲選択できます。
その状態で動画ファイルのレイヤーを右クリックし、「切り取りして詰める」を選択すると選択範囲を切り取った状態にしてくれます。
(各画像はgifファイルとなっているので、クリックして動きを確認してみてください)

ただやってみるとわかりますが、(元動画にもよりますが)切り取ったままの状態では開始地点~終了地点までの内容がまるまる消えるわけですので、動画の繋ぎ目としてもちろん違和感があります。
この繋ぎ目の違和感を消すために、切り取られた前後の動画ファイルにエフェクトを使います。

切り取りしたあとはタイムライン上に2つの動画オブジェクトができているはずなので、前半の動画オブジェクトをレイヤー1からレイヤー2に移します。

レイヤーの関係性として、レイヤーの番号が大きくなるほど、編集で前面に表示されます。現在のレイヤーの配置だと、
レイヤー1:動画後半部分
レイヤー2:動画前半部分
となるので、前半部分が優先して画面に表示されます。

エフェクトをかけるのは、このレイヤー分けした動画のうち、動画前半部分になります。先ほど放置していた右側下部を見ると、現在選択しているオブジェクトの詳細情報が表示されています。
詳細情報の「+」部分をクリック→切り替え効果 と選択すると、動画の冒頭と最後にかかるエフェクトが選択可能です。今回はフェードというエフェクトを選択します。

これでレイヤー2の動画オブジェクトに対して画面切り替えのエフェクトをかけることができました。
ただし、このままでは前半動画のエフェクトで暗転→後半動画がいきなり映る、という状態になっているので、タイムライン上にある後半動画のオブジェクトを、前半動画の最後の部分に少し重なるようにします。
やり方は簡単で、後半動画、つまりレイヤー1に配置してある動画オブジェクトの先頭部分が、レイヤー2の動画の最後部分と重なるようにタイムライン上の配置を動かすだけです。

これで、いい感じに動画を繋ぐことができました。
ちなみに、現状だと動画の冒頭にもフェードがかかっている状態なので、冒頭にのみエフェクトをつけたい・消したい場合は、右側のオブジェクトの詳細情報の下側に、フェード(エフェクトの名称)という項目が追加されているので、そちらで編集可能です。

③オブジェクトの追加・編集

次は、字幕を入れてみたいと思います。
タイムライン上でオブジェクトが配置されていない部分を右クリック→オブジェクトの追加→テキスト の順で字幕を入れることができます。
今回はレイヤー3に字幕用のテキストオブジェクトを追加しました。レイヤーは数字の大きいレイヤーほど前面に表示されるので、これで動画上に字幕が表示されるようになります。
逆に、動画オブジェクトよりも前のレイヤーにオブジェクトを配置してしまうと、字幕が表示されないので注意しましょう。

今度は字幕で表示する内容を記載します。
テキストオブジェクトを選択したあと、右側の詳細情報を下の方にスクロールするとテキストボックスがあるので、そちらで字幕として表示する内容を編集できます。なお、編集した内容はプレビューにリアルタイムで反映されます。
テキストの表示も詳細情報から変更可能なので、お好みのフォントにしましょう。画面上に表示される時間もタイムライン上のオブジェクトから変更可能です。

表示したいテキストが決まったら、画面上のどこに配置するかを決めます。
詳細情報からx軸、y軸を指定することでも編集可能ですが、今回はプレビュー上のオブジェクトを移動する方法で配置場所を決めます。(多分プレビュー上で移動している人がほとんどのはず。。)
これで字幕の編集もできました。

④動画の出力

編集に問題がなければ、あとは動画ファイルとして出力するだけです。
出力はウインドウ左上の「ファイル」→「ファイル出力」から可能です……が、デフォルトのままだとaviファイル、pngファイル、jpegファイルの3形式でしか出力できません。

動画ファイルのフォーマットとしてメジャーなのはmp4ファイルですが、mp4で出力したい場合はどうするかというと、プラグインを導入する必要があります。
https://apps.esugo.net/aviutl2-mp4exporter/
上記サイトにプラグインの導入方法まで記載されていますので、mp4で出力したい場合はそちらを参考にしてみてください。今回はavi形式で出力してみます。
出力形式を選択すると、保存用のダイアログボックスが開くので、保存場所・ファイル名を指定したあとに保存を押すと、動画出力が始まります。出力中は画面下部に出力状況が表示されるので、終わるまで気長に待ちましょう。

出力が完了したら、出力したファイルに問題がないか一通りご確認ください。

まとめ

今回はAviUtl2を使って動画編集をしてみました。使用感としては、AviUtlと比較してUIがひとまとめになってかなり操作しやすくなりました。
まだリリースされたばかりのソフトのため、AviUtl2用のプラグインはまだまだ充足しておらず、AviUtlのプラグインとも互換性がないため、初代をカスタムして使っていた人にとっては「初代のほうが使いやすい」という感想も挙がるかと思います。その反面、動画編集をしたことがない・AviUtlを触ったことはあるがあまり使っていなかったという人にとってはAviUtl2のほうが圧倒的に使いやすいかと思います。
これからAviUtl2用のプラグインもどんどん作られていくと思うので、将来性はかなり高い編集ソフトだと感じました。

データベース設計の基礎について

今回はデータベース設計について学んだことをまとめます。
特に実務でも必ず使う論理設計と正規化に重点を置き、初心者でもイメージしやすいように解説できたらと考えています。

1. DB設計の全体像

DB設計は、ざっくり以下3つのステップで進めます。

1-1. 概念設計

・扱う情報や関係性を明確にする
・ER図(Entity Relationship Diagram)で表す

例:ユーザーが商品を注文する → 「ユーザー」「注文」「商品」というエンティティを洗い出す

1-2. 論理設計

・データをRDB(リレーショナルデータベース)で使える形に変換
・主キー、外部キー、正規化を行う

1-3. 物理設計(実際のDB実装の準備)

・データ型やインデックス設計
・DBMSごとの最適化

【ポイント】
概念設計は「何を扱うか」、論理設計は「どう整理するか」、物理設計は「どう動かすか」

2. 論理設計の基本

論理設計は、データを重複が少なく矛盾が起きにくい形に整理する作業です。

2-1. 主キー(Primary Key)
・各行を一意に識別するためのキー
・重複やNULLは禁止
例:user_id、order_id

2-2. 外部キー(Foreign Key)
・他のテーブルの主キーを参照するカラム
・データの関係性を保つ
例:orders.user_id → users.user_id

2-3. データ型の選択
・正しい型を選ぶことで性能や整合性が上がる
・数値はINTやBIGINT、日付はDATEやDATETIME

例:ユーザーと注文の関係
テーブル : users
・user_id (PK)
・name
・email

テーブル : orders
・order_id (PK)
・user_id (FK → users.user_id)
・order_date

3. 正規化の基本

正規化とは、冗長性を減らし整合性を保つためにテーブルを分割する作業です。
一言で言うと「意味ごとにテーブルを分けて整理する」ことです。

第1正規形(1NF)

・各カラムには1つの値だけを入れる
・繰り返しカラムを作らない

第2正規形(2NF)

・複合キーの一部にだけ依存する列を分ける
・主キーが2つ以上のカラムで構成されている場合に注意
例: (order_id, product_id) が主キーで、order_dateはorder_idだけで決まる場合、order_dateは別テーブルに分離する

第3正規形(3NF)

・主キー以外の列同士の依存を排除
例:住所テーブルに郵便番号から都道府県が決まる場合、都道府県は郵便番号から導けるため別テーブルに分離する

4. 正規化のメリットとデメリット

【メリット】
・データの重複削減
・更新時の整合性維持
・論理的な整理による可読性向上

【デメリット】
・JOINが多くなり、性能が落ちる可能性がある
・過度な分割は管理が複雑

実務では第3正規形まで行い、必要に応じて非正規化するのが一般的です。

5. 論理設計・正規化を学んで気づいたこと

・最初にしっかり設計すれば、後からの修正コストが大幅に減る
・正規化は理屈だけでなく、サンプルを作って試すと理解が深まる
・ER図を描くと頭の中が整理される
・完璧な正規化は不要で、システムの性質や速度も考慮が必要になる

6. まとめ

・論理設計は「データを整理する技術」
・正規化は「冗長性をなくし整合性を保つ方法」
・実務では正規化とパフォーマンスのバランスが重要
・最初の設計が後の保守性を左右する

参考資料

・書籍「達人に学ぶDB設計徹底指南書」

たった一言で改善するCTAの重要性

CTAとは「Call To Action(行動喚起)」の略語で、サイトへ訪問したユーザーを具体的な行動へ誘導することが目的です。
例えば、「お問い合わせ」や「お申し込みはこちら」などのボタンやリンクがそれです。

CTAを見直すことで、効果が上がった具体的な例が、abtest.designに掲載されているのでご紹介します。

https://abtest.design/tests/trial-for-free-cta

ボタンに注目してください。
左のA案は「SIGN UP FOR FREE(無料で登録)」、右のB案は「TRIAL FOR FREE(無料でお試し)」と書かれています。
A/Bテストの結果、B案はトライアル開始数が前月比104%増加したそうです。

些細な違いかもしれませんが、たった一言でも言葉選びは大切にしたいですね。

Java FX インストーラーを作成する

Java FXでJavaで手軽にGUIアプリを作れますが、いざそれを配布しようとすると少しハードルが高いです。少しトリッキーですが成功した実例をもとに手順を紹介します。

使用したツールは以下の通りです。Windows環境です。

  • pleiades-2025-03-ultimate-win-64bit-jre_20250319(Java開発、作業用)
  • openjdk-22.0.2_windows-x64_bin(Java開発、作業用)
  • openjfx-23.0.1_windows-x64_bin-sdk(JavaFX開発、作業用)
  • openjfx-23.0.1_windows-x64_bin-jmods(JavaFX実行用モジュール)
  • wix314(jpackageから使用される)
  • innosetup-6.4.2(インストーラー作成ツール)

システム環境変数設定

  • JAVA_HOME=C:\pleiades\2025-03\java\jdk-22.0.2(jdkを置いた場所)
  • WIX=C:\Program Files (x86)\WiX Toolset v3.14\(WIXインストール時に書き込まれている)
  • path=%JAVA_HOME%\bin(リストに追加)(Javaコマンド実行用)

以下手順です

まずはJava FXのプロジェクトを作ります。

eclipseでMavenを使ってJava FXアーキタイプ(ひながた)から作成します

プロジェクトができてビルドまでできました。このまま実行すると

アプリが動作します。

インストーラーを作成する。

プロジェクトをエクスポートします

jarファイルとlibフォルダが出力されます

次にカスタムJREを作成します。上図のパス上からコマンドラインを開きjlinkコマンドを実行します

jlink --module-path "C:\pleiades\2025-03\java\javafx-jmods-23.0.1" ^
--add-modules java.base,javafx.controls,javafx.fxml,javafx.graphics,java.management,java.naming ^
--output custom-jre

コマンドラインからjpackageコマンドを実行してMSI インストーラーを作成します。

jpackage --type msi ^
--input . ^
--main-jar jfxsample.jar ^
--main-class jp.co.abridge.jfxsample.App ^
--runtime-image custom-jre ^
--name JavaFXSample ^
--dest result

resultフォルダが出力されて中にmsiファイルがあります。これを実行してアプリをインストールします

インストールされました。ただしこれは仮のインストールでこれをもとに正式なインストーラーを作成します

Inno Setup を使って日本語インストーラーを作成する

Inno Setupを起動して以下のようなスクリプトを実行します

[Setup]
AppName=JavaFxSample
AppVersion=1.0
DefaultDirName={pf}\JavaFxSample
OutputBaseFilename=JavaFxSampleInstaller
DisableDirPage=false
CreateAppDir=true
PrivilegesRequired=admin
Compression=lzma
SolidCompression=no
UninstallDisplayIcon="{app}\JavaFxSample.exe"

[Languages]
Name: "Japanese"; MessagesFile: "compiler:Languages\Japanese.isl"

[Files]
Source: "C:/Program Files/JavaFxSample/app/*"; DestDir: "{app}/app"; Flags: ignoreversion
Source: "C:/Program Files/JavaFxSample/runtime/*"; DestDir: "{app}/runtime"; Flags: recursesubdirs
Source: "C:/Program Files/JavaFxSample/JavaFxSample.exe"; DestDir: "{app}"; Flags: ignoreversion

[UninstallDelete]
Type: filesandordirs; Name: "{userappdata}\JavaFxSample"

~/Documents/Outputフォルダにファイルが出力されます。これが最終のインストーラーファイルです

インストーラーを実行すると

インストールされて、起動すると

アプリが動作します

以上です。

AIはどのレベルまでの質問を回答できるのか?

昨今のインターネットでは、AIによるコンテンツが増えてきており、日常生活で活用する場面も珍しくありません。
その中で、かなり専門的な内容でも答えてくれるAIチャットに対して、「どのレベルまで難しい質問を回答できるのか?」と少し疑問に思いました。
今回は、「普段使いできるAIはどのレベルの複雑な質問を回答できるのか?」という観点でいろいろ試してみようと思います。

◯今回使用するAI

今回は「普段使いするAIで試したい」ので、AIの中でも最も普及率の高いChatGPTを使用していきます。
ChatGPTはWeb検索機能を備えているので、ユーザの質問に対して精度の高い回答が可能です。

◯早速いろいろ聞いてみる

では、ChatGPTの性能を確かめるべく、段階にわけて質問をしていきます。

レベル1:家事の基礎的な内容
我々人間には切っても離せない、家事についての質問をしてみます。
簡単な内容を聞きたいので、ここでは「カレーの作り方」を質問してみます。


ざっくりと質問を投げてみると、一般的なチキンカレーの材料と作り方を回答してくれました。さらに、美味しく作るためのコツや、別のカレーの作り方を追加で提案してくれます。

レベル2でもう少し細かい条件を付け加えて質問しようとしていたので、先回りをされてしまう形となりました。

レベル2:少し専門的な内容に関する質問を条件付きで
レベル1の時点で期待以上の回答が返ってきたので、次は仕事で使うような専門的な内容を、条件付きで質問してみたいと思います。
今回は、Java言語を使った簡単なソースコードを、条件付きで質問してみます。

配列、三項演算子を用いたコンパクトなコードを生成してくれました。switch文を使わないという条件も意識してくれてるので、条件は満たせていると見ていいでしょう。
もう少し欲を言えば、例外発生時の処理も記載してくれていれば言う事なしでしたが、出力された内容でも動くので問題ないでしょう。(条件に入れていれば記載してくれていると思います)

レベル3:趣味レベルの内容について質問
次の段階では、専門的な知識が必要な趣味について質問してみます。
今回、ChatGPTには以下の簡単な詰将棋の譜面を見せて、正しい詰め方を聞いてみます。

(▲=打ち手、△=相手)
正しい回答としては、▲3二銀→△1(2)二玉→▲2三金の3手詰めとなります。
そしてAIに聞いた回答がこちらです。

結果は、▲2二銀打→△2二玉→▲3二金打となりました。最初の銀の置き場所が誤っているため、成立しませんでした。
念の為もう一度同じ内容で質問したところ、やはり正解にはたどり着けませんでした。。(むしろひどくなってる。。)

◯結果

ChatGPTでは、一般的な内容や仕事に関する内容の質問は、内容を理解して正確に回答できるレベルだということがわかりました。趣味などのプライベートに関する内容については、少し学習させないと難しそうです。
このように、普段使いでも便利なAIですが、内容によっては誤った内容を伝えてくる可能性もあるため、AIから得た情報のみを鵜呑みにせず、自身でその情報の正確性を調べる力が、今後AIと付き合っていくうえで必要になってくるでしょう。

Laravel 12で追加された一部新機能について

Laravel 12の新機能について

この記事では、2025年2月にリリースされた Laravel 12 の一部新機能について紹介します。

Laravel 12

Laravel 12は、大きな変更というよりも改良がいくつか含まれているので、今回はその中の一部を紹介します。

1. セキュリティ強化 : secureValidate()

このメソッドが追加されたことで、フォームからの入力チェックがより安全になりました。

$request->secureValidate([
'password' => ['required', 'min:8', 'strong'],
]);

バリデーション(validation)とは、ユーザーが入力したデータが正しいかどうかをチェックする仕組みです。

例えば

  • メールアドレスの形式が正しいか?
  • パスワードの長さは十分か?
  • 必須項目が空になっていないか?
    など。

Laravelでは、従来から $request->validate() を使ってこのバリデーションを行ってきました。

secureValidate() とは?

secureValidate() は、Laravel 12で新たに追加されたメソッドで、従来の validate() と同じように使えますが、セキュリティに配慮したルール(例:強力なパスワード)を簡単に適用できるのが特徴です。

$request->secureValidate([
'password' => ['required', 'min:8', 'strong'],
]);

この例の意味

 

strongルールの意味とは?

strong というルールは、安全なパスワードを推奨するための組み込みルールで、Laravel 12において以下のようなチェックを行うことができます。

  • 英大文字、小文字、数字、記号の組み合わせが含まれているか
  • 辞書にあるような簡単な単語を避けているか
  • 繰り返しや連番(”1234″ や “aaaa”)が含まれていないかこうしたチェックを自前で書くのは大変ですが、strongルールを使えば一発で適用できます。

なぜ secureValidate() を使うべきか?

  • セキュリティ対策が標準で強化される
  • 独自のカスタムバリデーションを定義しなくてよくなる
  • コードがシンプルで読みやすい

2. クエリがもっと読みやすくなる nestedWhere() が追加された

nestedWhere() は複雑な条件のクエリをより直感的・読みやすく記述できるようにするための新機能です。

そもそも WHERE 条件って何?

Laravelのクエリビルダでは、where() を使って条件付きのデータを取得できます。

$users = User::where('status', 'active')->get();

条件が複雑になってくるとwhere 条件のネストが必要になり、関数の中に関数が入るためとても難解です。

$users = User::where(function ($query) {
$query->where('age', '>', 25)
->orWhere('city', 'Tokyo');
})
->where('status', 'active')
->get();

nestedWhere() の登場

Laravel 12では、このネストを簡単に書けるようにする nestedWhere() が追加されました。

$users = User::where('status', 'active')
->nestedWhere('age', '>', 25, 'or', 'city', 'Tokyo')
->get();

普通のSQLに変換するとこうなります。

WHERE status = 'active'
AND (age > 25 OR city = 'Tokyo')

nestedWhere() の構文

->nestedWhere($column1, $operator1, $value1, $boolean, $column2, $value2)

使いどころ

  • AND (…) や OR (…) などの複雑な論理条件を含むクエリを書くとき
  • ネストの書き方が苦手な初心者
  • チーム開発で読みやすいコードを書きたいとき

まとめ

Laravelは初心者にもやさしく使いやすい機能が満載なので、これからWebアプリを始めるならおすすめです。

初心者にも分かりやすいPHP言語のフレームワークとなっているので、まずは気軽に触ってみて、その便利さを体感してみてください!

Figmaのアイコンプラグイン『Iconify』

『Iconify』は、FontAwesomeやMaterial Design Iconsなど、有名なサービスのアイコンをはじめ、150以上のアイコンセットを一括検索して配置できるFigmaのプラグインです。

→Iconify

 

例えば「user」で検索すると、全アイコンセットからuserアイコンを抽出してくれます。

 

追加したいアイコンを選択すると、サイズと色を設定できます。

 

 

ライセンスはアイコンセットによって違いますが、それぞれ確認できます。

 

 

 

 

 

 

さくっとアイコンを選んで配置できるので、プロトタイプをイイ感じに早く仕上げることができますね。

チャットボット構築サービス「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の統合によって、ますます進化を遂げています。エンジニアにとっては、新しい技術のキャッチアップが求められる時代です。

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