TECH PLAY

アジアクエスト

アジアクエスト の技術ブログ

163

はじめに この記事は、MR(Mixed Reality)やHoloLens2に興味があるが、まだ触ったことがないという方を対象にしています。 実際にHoloLens2を使ってアプリを開発した際に感じた良い点や、注意すべき点をまとめました。 HoloLens2の購入を検討している方や、MRデバイスでの開発に興味がある方の参考になれば幸いです。
はじめに こんにちは。 アジアクエスト株式会社、営業部の大浦です。
はじめに 今回、業務でインフラ構築をする際にAWS CDKを利用してみました。 個人的に初めての利用だったので、プロジェクトの作成からデプロイまでを備忘録として残します。 また、個人的に気になった箇所を調査した内容等も添えています。
はじめに アジアクエスト デジタルインテグレーション部の井上祐斗と申します。
はじめに この記事では、私が関わったECサイト開発の一環として、GoogleのreCAPTCHA v3を導入した実際の開発経験を基に、その背景と具体的な運用方法をシェアします。 今回のオンライン販売システムでは、ユーザーがクーポンを申請する際にボット対策としてreCAPTCHA認証を利用し、正当なユーザーかどうかを判断する仕組みを実装しました。
初めに デジタルイノベーション部IoT/AIソリューション3課の樋山です。
はじめに AWS Systems Manager Patch Manager は、マネージドノードにパッチを適用するプロセスを自動化できる機能です。 本記事では実際に使用してパッチ適用できるのか確認していきたいと思います。
はじめに アジアクエスト DE部GE課の小林です。 勉強する習慣を継続するため、毎年2回は資格試験を受けることを目標にしています。 今年の1回目の試験として、「生成AIパスポート試験」を受けましたので、 その試験に関する受験体験記となります。 この体験記を通じて、読んでいただいた方に色々な試験に対する興味を持っていただけたらと思います。
はじめに この記事では、ソフトウェア開発をよりスムーズに、そして効率的に進めるための便利なツールを紹介します。 これらのツールを活用することで、開発速度・体験を向上させ、作業の手間を減らすことができます。 今回は、Oh My Zsh!、SDKMAN!、Clipy、そしてLICEcapについてお話しします。 ※注意 : 本文では、macOSでのインストールと使用方法について説明しています。 一部のツール(例:Clipy)はmacOS専用ですが、他のツールはWindows環境でも利用可能です。Windowsをご利用の場合は、適宜Windows向けの手順や代替ツールをご参照ください。
はじめに チームでの開発が進むにつれて、「このPull Requestは誰の承認が必要なのか」と判断に迷うときがありませんか? もちろんドキュメントに起こしているのであればそれを確認しても良いですし、他のメンバーに聞くのも良いでしょう。 ただ、実装とは関係ない作業に時間をかけるのは避けたいとは思いませんか? そんな時に役立つのがGitHubのCode Owners機能です。
はじめに Webソリューション5課の王です。
はじめに 人工知能の分野では、データから学習し適切な決定を下すアルゴリズムを開発するための、さまざまなアプローチがあります。Pedro Domingosは彼の著書「The Master Algorithm」で、機械学習の分野における主要なアルゴリズムを5つ紹介しています。
はじめに 本記事では、GitHub Actionsの具体的な活用例について紹介します。 「GitHub Actionsの名前は知っているけど、具体的に何ができるのかわからない」という方や、「GitHubでの作業を自動化したい」と考えている方の理解に役立てば幸いです。 もしGitHub Actionsが何かわからない方はAQ TechBlogで渡邊さんが執筆した GitHub Actionsを使ったCI/CD の記事をぜひ参考にしてください。
はじめに 何年かWEBシステム開発をしているほとんどの方は階層構造に触れたことがあるのではないでしょうか。そして、階層構造の要件を表現する際に頭を悩ませた経験がある方も少なくないでしょう。 最近私が関わった案件で階層構造を利用することになり、設計チームが頭を悩ませていたので本記事を執筆することにしました。 いざ自分が階層構造を設計する立場になったとき適切な階層構造を選択できるよう、本記事では主要な階層構造モデルの紹介と、それぞれの利点と欠点を比較します。 さらに、具体的なユースケースに基づいて最適な階層構造を選択するためのガイドラインを提供します。
はじめに こんにちは!デジタルエンジニアリング部の老田です。
概要 クラウドインテグレーション部クラウドソリューション2課の川井です。
はじめに 本記事では、Laravel上でポリモーフィック関連となるデータ構造をEloquentのリレーションでどう実装するか について紹介を行います。 ポリモーフィック関連とは? 1つの子テーブルから複数の親テーブルを参照する関連のことを指します。 具体例 例えば、ブログや商品にコメントを添付する機能を実装する場合、ポリモーフィック関連を利用するのが良いとされています。 テーブル構造は以下のような形になります。 posts - id : 主キー - tilte : ブログタイトル - content : 内容 products - id : 主キー - name : 商品名 - discription : 商品説明 comments - id : 主キー - content : コメント内容 - commentable_type : 関連レコードのモデル名 - commentable_id : 関連レコードの主キー この設計では、 commentsテーブル の commentable_id と commentable_type がポリモーフィック関連における外部キーとなり、 postsテーブル や productsテーブル のレコードと関連付けられます。 commentable_type によって、コメントがどのテーブルに属するのかを特定できます。 LaravelでのMigrationの記述方法 Laravelではポリモーフィック関連のサポートが行われているため、簡単にMigrationを記述できます。 例で示した commentsテーブル のMigration記述例は以下になります。 Schema :: create( 'comments' , function ( Blueprint $table ) { $table -> text( 'comment' ) -> comment( 'コメント内容' ); $table -> morphs( 'commentable' ); }); $table->morphs('〇〇'); こちらの記述により、 ポリモーフィック関連における外部キー用のカラム( 〇〇_type , 〇〇_id )の作成が一括で行えます。 Laravelでのポリモーフィックのリレーション Laravelのモデルでリレーションの記述を行うことによって、   子テーブルのモデル から、 親テーブルのモデル の取得が行えるようになります。 リレーションの記述、利用方法について紹介を行っていきます。 1対1の場合 親テーブルと子テーブルが1対1である場合のリレーションの記述、利用方式について紹介していきます。 テーブルの構造は以下とします posts - id : 主キー - tilte : ブログタイトル - content : 内容 products - id : 主キー - name : 商品名 - discription : 商品説明 comments - id : 主キー - content : コメント内容 - commentable_type : 関連レコードのモデル名 - commentable_id : 関連レコードの主キー リレーションの記述方法 < ? php namespace App\Models ; use Illuminate\Database\Eloquent\Model ; class Post extends Model { public function comment () { return $this -> morphOne( Comment :: class , 'commentable' ); } } < ? php namespace App\Models ; use Illuminate\Database\Eloquent\Model ; class Product extends Model { public function comment () { return $this -> morphOne( Comment :: class , 'commentable' ); } } < ? php namespace App\Models ; use Illuminate\Database\Eloquent\Model ; class Comment extends Model { public function commentable () { return $this -> morphTo( __FUNCTION__ , 'commentable_type' , 'commentable_id' ); } } リレーションの利用方法 親モデルから子モデルを取得する方法は use App\Models\Post ; $post = Post :: find( 1 ); $comment = $post -> comment ; となります。 こちらにより、親モデル( Postモデル )から、子モデル( commentモデル )を取得することができます。 逆に、子モデルから親モデルを取得する方法は use App\Models\Comment ; $comment = Comment :: find( 1 ); $value = $comment -> commentable ; となります。 こちらにより、子モデル( commentモデル )から親モデル( Postモデル ,   Productモデル )を取得することができます。 取得されるモデルは comment.commentable_type に記述されているモデル名に応じて変化します。 1対多の場合 親テーブルと子テーブルが1対多である場合のリレーションの記述、利用方式について紹介していきます。 1対多の場合でも、1対1と同じようなテーブル構造・リレーションの記述になります。 テーブルの構造は以下とします。 posts - id : 主キー - tilte : ブログタイトル - content : 内容 products - id : 主キー - name : 商品名 - discription : 商品説明 comments - id : 主キー - content : コメント内容 - commentable_type : 関連レコードのモデル名 - commentable_id : 関連レコードの主キー リレーションの記述方法 < ? php namespace App\Models ; use Illuminate\Database\Eloquent\Model ; class Post extends Model { public function comments () { return $this -> morphMany( Comment :: class , 'commentable' ); } } < ? php namespace App\Models ; use Illuminate\Database\Eloquent\Model ; class Product extends Model { public function comments () { return $this -> morphMany( Comment :: class , 'commentable' ); } } < ? php namespace App\Models ; use Illuminate\Database\Eloquent\Model ; class Comment extends Model { public function commentable () { return $this -> morphTo( __FUNCTION__ , 'commentable_type' , 'commentable_id' ); } } リレーションの利用方法 親モデルから子モデルを取得する方法は use App\Models\Post ; $post = Post :: find( 1 ); $comments = $post -> comments ; となります。 こちらにより、親モデル( Postモデル )から、紐づくすべての子モデル( commentモデル )を取得することができます。 逆に、子モデルから親モデルを取得する方法は use App\Models\Comment ; $comment = Comment :: find( 1 ); $value = $comment -> commentable ; となります。 こちらにより、子モデル( commentモデル )から親モデル( Postモデル ,   Productモデル )を取得することができます。 取得されるモデルは comment.commentable_type に記述されているモデル名に応じて変化します。 多対多の場合 親テーブルと子テーブルが多対多である場合のリレーションの記述、利用方式について紹介していきます。 テーブルの構造は以下とします posts - id : 主キー - tilte : ブログタイトル - content : 内容 products - id : 主キー - name : 商品名 - discription : 商品説明 comments - id : 主キー - content : コメント内容 commentables - comment_id : コメントID - commentable_type : 関連レコードのモデル名 - commentable_id : 関連レコードの主キー リレーションの記述方法 < ? php namespace App\Models ; use Illuminate\Database\Eloquent\Model ; class Post extends Model { public function comments () { return $this -> morphToMany( Comment :: class , 'commentable' ); } } < ? php namespace App\Models ; use Illuminate\Database\Eloquent\Model ; class Product extends Model { public function comments () { return $this -> morphToMany( Comment :: class , 'commentable' ); } } < ? php namespace App\Models ; use Illuminate\Database\Eloquent\Model ; class Comment extends Model { public function Posts () { return $this -> morphedByMany( Post :: class , 'commentable' ); } public function Products () { return $this -> morphedByMany( Product :: class , 'commentable' ); } } リレーションの利用方法 親モデルから子モデルを取得する方法は use App\Models\Post ; $post = Post :: find( 1 ); $comments = $post -> comments ; となります。 こちらにより、親モデル( Postモデル )から、紐づくすべての子モデル( commentモデル )を取得することができます。 逆に、子モデルから親モデルを取得する方法は use App\Models\Comment ; $comment = Comment :: find( 1 ); $posts = $comment -> posts ; $products = $comment -> products ; となります。 こちらにより、子モデル( commentモデル )からそれぞれの親モデル( Postモデル ,   Productモデル )を取得することができます。 まとめ 今回紹介したリレーションによって、 Laravelではポリモーフィック関連のテーブルの場合でも、簡単に関連テーブルの取得が行えるようになります。 実務で行っている案件上で、ポリモーフィック関連のテーブルを扱う際に「Laravel上でどのように行えばよいのか」が理解しづらかったので、今回紹介させていただきました。 Laravelを利用した開発の手助けの一因になれれば幸いです。 ここまで読んでいただきありがとうございました。 参考 Laravel 11.x Eloquent:リレーション   Laravel 11.x マイグレーション
  はじめに 本記事ではAWS Elemental MediaLive、AWS Elemental MediaPackageを用いて、動画配信サービスを構築します。 構成 動画配信サービスの構成を以下に記載します。 各項目の役割については、以下の通りです。 OBS Studio、XSplitなど 各クライアントからAWS Elemental MediaLiveへ映像を配信 各クライアントから動画を配信するために必要な配信ソフトです。 今回はOBS Studioを利用しますが、AWS Elemental Linkという、AWSが有償で提供している配信用ハードウェアを用いることも可能です。   AWS Elemental Link AWS Elemental MediaLive ブロードキャスト配信用のビデオ入力をライブ出力に変換 各クライアントから配信された動画のエンコードを行います。 またAWS Elemental MediaPackageへの出力を行います。   AWS Elemental MediaPackage ジャストインタイム形式の変換を使用した動画配信 AWS Elemental MediaLiveから出力された動画のパッケージングを行います。 またAmazon CloudFrontのオリジンとしての役割も担います。   ハンズオン AWS上に環境を構築していきます。 以下の手順で作業を進めていきます。 MediaPackageチャネルの作成 MediaPackageエンドポイントの作成 MediaLive入力の作成 MediaLiveチャネルの作成 OBSの設定 動画配信確認   MediaPackageチャネルの作成 AWSマネジメントコンソールから「MediaPackage」を検索し、「新しいチャネルの作成」を選択します。 「ID」と「説明」に適切な値を入力し、「作成」を選択します。 今回は設定しませんが、必要に応じて、アクセスログ記録の設定をしましょう。 MediaPackageエンドポイントの作成 チャネルが作成できましたので、続いてエンドポイントの設定を行います。 「エンドポイントの管理」を選択します。 「ID」「説明」に適切な値を入力し、「保存」を選択します。 その他の項目は、今回は設定しませんが、必要に応じて設定してください。 以下の通り、オリジンエンドポイントが作成されました。 MediaLive入力の作成 AWSマネジメントコンソールから「MediaLive」を検索し、左のメニュータブから「入力」を選択、「入力の作成」を選択します。 「入力名」に任意の値を入力し、「入力タイプ」はOBSからRTMPで配信をするため、RTMP(プッシュ)を指定します。 「入力セキュリティグループ」に動画配信元のIPアドレスを入力し、「入力セキュリティグループの作成」を選択します。 「入力の送信先」では「アプリケーション名」と「アプリケーションインスタンス」に任意の値を入力しますが、OBSで配信する際のキーとなりますので、外部公開しないようにご注意ください。 入力が完了しましたら、「入力の作成」を選択します。 以下の通り、入力が作成されました。 URLは後にOBSで配信先として設定しますので、控えておいてください。 MediaLiveチャネルの作成 左のメニュータブから「チャネル」を選択、「チャネルの作成」を選択します。 「チャネルと入力の詳細」を選択し、「チャネル名」に任意の値を入力、「IAMロール」はテンプレートからロールを作成、「テンプレート」としてHTTP live streaming(MediaPackage)を選択します。 入力アタッチメントの「追加」を選択し、先ほど作成したMediaLive入力を「入力」で選択、「確認」を選択します。 「テンプレート」としてHTTP live streaming(MediaPackage)を選択したため、出力グループが自動的に追加されています。 「MediaPackage-1」を選択し、「MediaPackageチャネルID」に先ほど作成したMediaPackageのチャネルを入力、「名前」は任意の値を入力します。 テンプレートから作成したため、出力が大量に作成されていますが、今回は1280_720を使用するため、その他の出力は削除します。 今回は変更しませんが、「出力1:1280_720_1」を選択すると、動画のレートやフレームレートなどの項目を設定したり、オーディオのコーデックを変更することが可能です。 必要な項目を設定し終えたら、「チャネルの作成」を選択します。 これでチャネルの作成は完了です。 「開始」を選択すると、配信の受け付け状態になりますが、 実行状態がRunningの状態 だと、 高コスト となりますので、配信時以外は停止することを推奨します。 OBSの設定 「設定」、「配信」から「サービス」でカスタムを選択し、「サーバー」にはMediaLive入力の作成時に控えたURLのアプリケーション名までを入力し、「ストリームキー」にはアプリケーションインスタンスを入力します。 例)URLが「rtmp://XXX.XXX.XXX.XXX/live/testkey」だった場合    サーバー:rtmp://XXX.XXX.XXX.XXX/live    ストリームキー:testkey 動画配信確認 以上で設定は完了しましたので、MediaLiveを開始し、配信ができているかを確認します。 MediaLiveで配信を開始した後、チャンネルの状態がRunningになったことを確認します。 Runningになった後、OBSで配信開始を選択すると、通信が疎通していることがわかります。 実際の配信状況を確認する際はMediaPackageのチャネルを選択し、エンドポイントのプレビューを選択すると、外部サイト(hls.js demo)で配信の内容を確認することができます。 hls.js demo 以上でAWS Media Servicesを利用した動画配信サービスの構築は終了となります。