メインコンテンツまでスキップ

PowerBI 上のビジュアルよりエクスポートするファイル名をシステム日付にする方法

鶴田
ディアシステム(株)開発一部第2課

Power BI は、Microsoft 社が提供するビジネスインテリジェンス(BI)ツールです。 プログラムの経験がなくてもデータの加工が可能で、Microsoftの提供するローコードツールです。

AzureAD の MFA 認証と組み合わせることができたり、データの改ざんができず既存システムへの影響が低かったり、大量のデータを高速に処理できたりで利用が広がっています。 この記事では PowerBI 上のビジュアルよりエクスポートするファイル名を動的に変更する方法(今回はシステム日付)を書きます(わかっている人から見れば HelloWorld レベルなんですが汗)。

方法の概要

ビジュアルへメジャーを追加し、DAX 関数を使って動的なファイル名を作っておき、そのビジュアルのタイトルの条件付き書式より動的なファイル名を参照します。

詳しい方法

※当手順には PowerBI 添付のサンプルデータを使っています

1. ビジュアルへメジャーを追加し、DAX 関数を使って動的なファイル名を作っておきます。 ビジュアルを選択、メニュー→モデリング→新しいメジャー を選択、以下の通り入力します。

ファイル名 = FORMAT(NOW(), "yyyymmdd", "jp")

関数を入力

※もし固定文字列をつけたい時は「CONCATENATE 関数」などを組み合わせてください。

入力後、データに追加したメジャーが表示されます。

メジャーに追加された「ファイル名」

2. ビジュアルのタイトルの条件付き書式よりそのファイル名を参照します。

視覚化→ビジュアルの書式設定→全般→タイトルを選択します。 テキストの fx アイコンをクリック、基準にするフィールドへ「ファイル名」と入力します。

タイトル選択可能

うまくできるとビジュアルのタイトルにファイル名が表示されます。

ビジュアルのタイトルに表示されたファイル名

タイトルのファイル名を表示するのがイヤなら、文字の色を背景色と同じにすると見えなくなります。 ここまで出来たら、ビジュアルの右上「・・・」その他のオプションよりエクスポートを選択してみてください。 エクスポートされるファイル名に日付が設定されています。

作成したPBIファイルは ここ よりダウンロードできます。

以上です。

【まとめ】 PowerBI でなにかやりたい時は「対象となるビジュアルにメジャー追加して DAX 関数!」

【ボヤキ】 新しい製品が出るたびに同じような機能で違う名前がつくの、やめてほしいなー(・∀・;)

ローカル環境でAzure Storageをエミュレートする方法(Azurite使用)

土井
ディアシステム(株)開発一部第2課

開発一部の土井です。 Azureを使用するプロジェクトで、テスト環境がないため困ったことがありました。調査した結果、「Azurite」というローカル用のAzure Storage環境があることを知りました。この記事ではその使い方を紹介します。


前提条件

以下のツールを事前にインストールしておいてください。

  • Visual Studio (Community, Professional, または Enterprise)
  • Azure Storage Explorer

動作環境

  • Visual Studio Community 2022
  • .NET 7.0

Azuriteのインストール確認

Visual Studio 2022をインストールしている場合、Azuriteは既にインストールされています。

Exeファイルの場所

エディションファイルパス
CommunityC:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\Microsoft\Azure Storage Emulator
ProfessionalC:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\IDE\Extensions\Microsoft\Azure Storage Emulator
EnterpriseC:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\Microsoft\Azure Storage Emulator

Azuriteのセットアップ手順

1. ローカルフォルダの作成

任意の場所に、Azure Storage環境用の空のフォルダを作成します。作成したフォルダのパスを控えてください。 画像1

2. コマンドプロンプトの起動

コマンドプロンプトを起動し、Azuriteのexeファイルがあるディレクトリまで移動します。

画像2

3. Azuriteの起動

以下のコマンドを実行してください。

Azurite.exe -l "フォルダパス" --skipApiVersionCheck
例:
Azurite.exe -l C:\LocalAzureStorage –skipApiVersionCheck

画像3

正常に起動すればセットアップ成功です。


動作テスト

1. Azure Storage Explorerの確認

Azure Storage Explorerを起動し、ローカルのAzuriteストレージアカウントが表示されることを確認します。表示されない場合は、手動でアカウント情報を設定してください。

画像4

2. 動作確認用コードの実装

動作確認のためのコードをC#にて実装します。
内容は「teststorage」という名前のコンテナを作成し、その中に「testfile.txt」という名前のtxtファイルを作成します。そのあとファイルの中に文字を書き込むというような内容のものです。
コンテナ作成時にはアルファベットの大文字を使用するとエラーになりますので、注意してください。

BlobEvent.cs
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Specialized;
using System.Text;

namespace BlobTest
{
public class Program
{
public static async Task Main(string[] args)
{
string connString =
"DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;" +
"AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;" +
"BlobEndpoint=http://127.0.0.1:10000/devstoreaccount1;" +
"QueueEndpoint=http://127.0.0.1:10001/devstoreaccount1;" +
"TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;";

string containerName = "teststorage";
BlobServiceClient blobServiceClient = new BlobServiceClient(connString);
BlobContainerClient blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName);

string fileName = "testfile.txt";
AppendBlobClient appendBlobClient = blobContainerClient.GetAppendBlobClient(fileName);

await blobContainerClient.CreateIfNotExistsAsync();
await appendBlobClient.CreateIfNotExistsAsync();

StringBuilder text = new StringBuilder("Hello, World");
var bytes = Encoding.UTF8.GetBytes(text.ToString());

using (var stream = new MemoryStream(bytes))
{
appendBlobClient.AppendBlock(stream);
}
}
}
}

3. コードの実行

実行後、Azure Storage Explorerを確認してください。

  • 「teststorage」という名前のコンテナーが作成されます。

画像5 画像6

  • 「testfile.txt」というファイルが作成されており、中身に「Hello, World」と出力されます。

画像7


まとめ

これでローカル環境でAzure Storageの動作確認ができるようになります。テスト環境がない場合でも、効率的な開発が可能です。

生成AIでフルスタックWebアプリが作成できるbolt.newで社内ポータルサイトを作成してみた

箕浦
箕浦
ディアシステム(株)開発二部

こんにちは。開発 2 部の箕浦です。
以前、「v0」という WEB アプリの UI を生成 AI を使って作成するサービスを紹介しましたが、
今回は「bolt.new」という生成 AI を使って、フルスタックのアプリケーションが作成できる驚きのサービスが登場したので、試してみました。
無料でも利用可能ですが、現時点では、無料プランでは 1 日あたり 15 万トークン、1 か月あたり 100 万トークンに制限があり、
無料枠では意外とすぐに使い切ってしまうので、注意が必要です。

bolt.new の概要

bolt.new は、フルスタック Web アプリケーション開発を劇的に簡素化する AI 駆動型の開発ツールです。
ChatGPT のように、ユーザーが自然言語で指示を出すだけで、ブラウザ上でアプリの作成からデプロイ、管理までをシームレスに実現できるのが特徴です。
特に、プロトタイピングに時間をかけられないプロジェクトには、非常に便利です。

主な特徴

  1. AI による自動コード生成: ユーザーの指示に基づき、AI が自動でコードを生成してくれるため、手作業でのコーディング時間を大幅に削減できます。

  2. ブラウザ内でのフルスタック開発: StackBlitz の WebContainers を統合し、ブラウザ上で完結した開発環境を提供することで、ローカル環境の構築が不要です。

  3. 多様なフレームワークに対応: Vite や Next.js など、幅広いフレームワークをサポートしているため、様々な開発ニーズに応じた選択が可能です。

  4. 開発環境の完全制御: AI モデルがファイルシステム、Node サーバー、パッケージマネージャーなど開発環境全体を制御でき、開発作業がスムーズに進みます。

  5. 迅速なデプロイ: チャットインターフェースから直接プロダクションにデプロイ可能で、短時間でのリリースが実現します。

bolt.new の機能

  1. プロンプトベースの開発: ユーザーが自然言語で要望を伝えると、AI がその指示に基づいてアプリケーションを構築します。

  2. リアルタイムの機能追加・修正: 開発中のアプリに対して、プロンプトで追加の機能や変更を指示できるため、迅速に対応が可能です。

  3. フレームワーク指定開発: 特定のフレームワークを指定して Web サイトやアプリを生成できるため、技術スタックに応じた最適な設定が行えます。

  4. 統合開発環境: StackBlitz との連携により、オンラインのコードエディタでプロジェクトの編集やデプロイが簡単に行える点も便利です。

bolt.new で社内ポータルサイトを作成してみた

試しに社内向けのポータルサイトを作成しました。
今回はデザインに関しては大きくこだわらず、シンプルな構成で短時間に作り上げることを目指しました。

ポータルサイトの概要

作成した社内ポータルサイトには以下の主要機能を実装しました:

  • ダッシュボード: 各機能へのアクセスや通知の要約を確認できるページ

  • お知らせ掲示板: 社内全体への重要な情報の告知やイベント通知

  • 月例会ルール・議事録: 定例会議でのルールや議事録を共有する機能

開発プロセス

  1. bolt.new にアクセスし、新規プロジェクトを開始

    アプリの作成手順は非常にシンプルで、ChatGPTのようにプロンプトから作成したいアプリの内容を指示するだけです。

    bolt.png

  2. AI への指示

    今回は以下のように指示しました。\

    siji1.png

  3. 動作確認

    指示を送ると、boltがアプリを頑張って作成してくれています。
    ファイルの構成はデフォルトではVite+React+typeScriptで作成されるようです。

    code.png

    作成完了すると、画面左に作成したアプリの機能の概要を説明してくれています

    gaiyo.png siyouhou.png

    プレビューを確認するとログイン画面ができています。

    login.png

    早速、説明欄の一般ユーザーでログインしてみます。 ダッシュボードに、お知らせや議事録が一覧できる画面ができています。

    home.png

    今後は、ログアウトして、登録できる管理画面を確認します。

adminlogin.png

画面上部に「Admin」ボタンが増えています。

adminhome.png

適当に投稿してみます。

post1.png post2.png

投稿が反映されていませんでした。

adminhome.png

  1. AI に追加指示

    そこで、さらに追加で以下の指示をしてみました\

    siji2.png

    要求通り実装してくれたようです\

    gaiyo2.png

    再度、同じ投稿をして確認すると、今度は正しく投稿が反映されました。

afteradmin.png

  1. デプロイ

    bolt.new の画面の右上にある「Deploy」ボタンからデプロイすることも可能です。デプロイ手順は非常にシンプルで、短時間でリリースが完了しました。
    deploy.png

    デプロイ先はNetlifyにデプロイされるようです。

    今回作成したものと全く同じではないですが、boltで作成したサイトを以下へデプロイしています。
    https://chimerical-pithivier-8ab33b.netlify.app

  2. プロジェクトのダウンロード

    「open the StackBlitz」というボタンを押すと、StackBlitz でプロジェクトが開き、こちらでソースコードを直接編集することも、ローカルにダウンロードすることも可能です。

stackbriz.png

開発の所感

bolt.new を使用した開発プロセスは予想以上に迅速で、従来のコーディング方法と比較して以下のようなメリットを感じました:

  • 開発時間の大幅な短縮:指示を与えるだけで基本的なコードが自動生成されるため、短時間でプロトタイプが完成します。

  • シンプルな指示で実装可能:複雑なコードを書くことなく、機能を実装できます。

  • コードの品質:自動生成されるコードの品質が一定レベル以上であるため、開発初期段階から安定したコードが提供されます。

  • 統合開発:フロントエンドとバックエンドを統合的に開発でき、StackBlitz を通してコードをダウンロード可能で、自身のプロジェクトとしても管理がしやすいです。

課題と改善点

一方で、以下の課題も見つかりました:

  • 細かいカスタマイズには従来のスキルが必要:bolt.new が自動生成するコードは基本的な構成に限られ、細かい UI やビジネスロジックの調整には手動の編集が必要です。

  • 大規模なアプリケーションには不向きな点:特に大規模なアプリケーションを構築する際、全体のコードの構造を理解するのが難しくなる場合があります。

まとめ

bolt.new を使用して社内ポータルサイトを開発してみて、AI による開発支援の大きな可能性を感じました。
特に、短時間でプロトタイプを作成する場面や、迅速な開発が求められる小規模プロジェクトにおいては非常に有効なツールであると感じます。
今回はデザインに関する指示は特に行いませんでしたが、もう少し細かく指示を与えれば、ある程度のデザインも実装されると考えられます。
デプロイまで行えますが、本格的な運用にはもう少し調整が必要です。
しかし、プロジェクトのひな型として利用し、ダウンロードして自身の環境で微調整を行う使い方は非常に便利です。
今後のアップデートでさらに機能が充実すれば、より複雑なプロジェクトや商用アプリケーションにも適用できるようになるかもしれません。

タスク管理ツール「Planner」を使ってみた

西
ディアシステム(株)開発一部第4課

こんにちは。開発一部の西です。 タスク管理ツールのPlannerを使ってみましたので、レポートしたいと思います。

チームで作業するならタスク管理ツールは必須アイテム

チーム内でタスクの進捗管理をし、その内容を共有できるツールを利用されている方も多いかと思います。
Web会議では、タスク管理ツールの画面を共有しながら進捗確認することもよくありますよね。
すぐに思いつくツールとして、Notion、Slack、Backlogなどがあります。
それらの多くは、個別にユーザ登録をして、Webサイトから利用、またはアプリケーションをPCにインストールして利用することになります。
ところが、所属チーム内にそれらが導入されておらず、利用したくても簡単に導入できない環境で作業されている方も少なくありません。
そこで今回は、広く利用されているMicrosoft Teamsの環境から、簡単にタスク管理が利用できるPlannerをご紹介します。

TeamsのタブにPlannerを追加する

TeamsはWebブラウザから利用することもできますが、ここではアプリ版を使用して説明していきます。
それでは早速、チャネルのタブにPlannerを追加する手順をみていきましょう。
まずは、Teamsの画面中央上部にある「+」をクリックしてタブを追加していきます。

画像1.png

表示された検索ダイアログより「Planner」と入力してアプリを検索し、そのアイコンを選択します。

画像2.png

するとPlannerの初期設定ダイアログが表示されますので、タブ名を入力して「保存」をクリックします。
今回は、タブ名「タスク管理」として作成します。

画像3.png

保存ボタンを押下すると「タスク管理」タブが画面上部に追加され、タスク管理を開始できる環境が整いました。以上で準備は完了。簡単ですよね。

画像4.png

タスクを登録してみる

次にタスクを登録してみます。画面上部の「グリッド」を選択すると以下のようなレイアウトとして表示されます。
そこで「+ 新しいタスクの追加」を選択すると最下行に新規タスク用の行が追加されます。
項目は、タスクの「タイトル」、担当者の「割り当て」、「開始日」、「期限」、「バケット」、「進捗」、「優先度」、「ラベル」から構成されています。
ちなみに「ラベル」は、タスク毎に共通情報のラベル名を決めて付与しておくことで、タスクが増えていった際に管理しやすくなります。

画像5.png

また、画面上部の「ボード」を選択すると、以下のように「バケット」単位のレイアウトになります。

画像6.png

バケットには、そのタスクがどのような区分なのかを設定しておくことで、区分別に状況整理ができるかと思います。
例えば、プロジェクトのサブシステム毎にバケットを作成しておくと、各サブシステムの残課題や進捗状況が把握しやすくなると思います。
新しいバケットを追加するには、画面右側にある「新しいバケットの追加」を選択してバケット名を入力することで増やすことができます。

メール通知機能も備わっている

タスクに担当者としてアサインされた場合や期限に対するリマインドとして担当者へメール通知される機能も備わっています。
具体的には、以下のタイミングでメール通知されます。
・他のユーザが自分にタスクを割り当てたとき
・期限を設定し、その期限が近付いたとき、および期限超過したとき
・割り当てたタスクのコメント欄(下記イメージ図参照)にメッセージが追加されたとき

画像7.png

最後に

タスク管理ツールのPlannerを紹介しましたが、いかがでしたでしょうか。
すでにTeamsを利用されている方なら簡単に導入できますので、ぜひタスク管理ツールの候補の1つとしてご検討ください。

プログラミング学習サイト「Progate」を利用してみた感想

磯村
ディアシステム(株)開発一部第4課

こんにちは。開発一部の礒村です。
今回は私が、Progateというプログラミング学習サイトを利用してみた感想を述べたいと思います。

【今までの学習の問題点】

私は、プログラミングを学習する中で今までは、参考書で学習することがほとんどでした。参考書を読み進めていきながら自分で手を動かして学んでいく、という形で進めてきました。
参考書を読み進めていく中で、「あれ?これってどういう意味だろう」と私が疑問に思うところがあったとしても、参考書にもよりますが、「知っていることが前提」であるかのように説明が省かれていることがありました。 私のようなかなり初心者レベルの疑問を抱く人は、参考書に前提として書いてあることがそもそもわからず、最終的に読み切った時点では「あまりよくわからなかった」
となる経験をしたことがあるのではないでしょうか。
参考書を購入する時点で、自分のレベルにあった参考書を選ぶことができるとよいですが、プログラミング学習に限らず、自分のレベルにドンピシャな参考書を選ぶことができたことってあまりない気がします。(選べる時点である程度のレベルではある気がします)

【Progateの利点】

私がなぜProgateで学習を順調に進めることができたのかというと、
Progateはすべてのコースを学習するには有料のプランに加入する必要がありますが、
最初はお試しのような感じで、どの言語コースも無料で学習できるページがあります。
私は、まず無料でProgateの学習を始めてみました。
Progateを利用してみてまず思ったことが、基礎の基礎から教えてくれる本当に初心者向けの学習サイトであると思いました。
しっかり段階を踏んで説明されていたので、途中で分からなくなることがなく進めることができました。 今までは、“初心者向け”という記載がある参考書を読んでいても、どこかで説明が省略されており疑問が生じることが多くありました。
Progateはそのような疑問が発生することなく学習できました。
また、Progateの進め方は、「何枚かのスライドで重要ポイントを学習し、その学習した内容を使用して自分でコーディングをする、そしてコースの最後にはその言語を使用した目標物を作成する」という流れでした。
スライド自体も簡潔で分かりやすくサクサクと進めることができました。

画像1.png

スライドの例(JavaScriptお試しコースより)

画像2.png

スライド最終ページのコーディングページの例

手順やコメントを参考にコーディングしていきます。
わからない箇所はスライドに戻って確認します。

【今後のProgateでの学習】

Progateのみでは、業務で使用するレベルの能力を身に着けることはできないかもしれませんが、理解できる元となる基礎の部分は身に着けることができると思います。
私は現段階で、Progateでは業務に関連する言語コースしか学習していませんが、
Progateにはほかにも主要な言語コースが揃っており、これからまだ学習していない言語コースも挑戦してみて、\自分の好みの言語や得意不得意を見つけたり、
プログラミング自体への理解や自身の興味を深めていくきっかけにしたいと思っています。

Progate URL:https://prog-8.com/

ITに数学は必要?? ロボット制御のための三角関数活用法!

内田
ディアシステム(株)開発一部第5課

こんにちは。開発一部の内田です。

はじめに

ITの業界では結構学生時代に勉強した内容が利用されています。その一例を紹介します。

みなさんは、学校で習ったことが将来どう役に立つのかな?と疑問を持ちながら勉強していた方が多いのではないでしょうか?
今回は三角関数の「サイン、コサイン、タンジェント」を例に世の中で実際にどのように使われているのか?
学校で学んだことがIT技術にどう必要なのか?について紹介していきます。

世間一般の三角関数の使われ方

三角関数は意外と皆さんが知らないところで様々な分野で活用されています。

身近なものだとGPSが有名ですね。
ぼくは方向音痴なので待ち合わせ場所にたどり着くまでよくお世話になっています。
GPSは位置を計測するために三角関数が使われていたりします。

他で使用されている身近な例をあげると音などが該当するのはあまり知られていないかもしれません。
実は、音というのは電波の波が規則正しい波で出来ており
三角関数は、その波を表現するのにも使われていたり...

少し例に上げただけでも身近に実は三角関数が使用されており
今の生活にはなくてはならない重要そうなことがわかりますね!

まだまだ他にも活用されている事例があるため、少しでも興味が湧いてきた方はご自分で調べてみてください。

ただ、いろいろ調べてみても何かに使われているかはわかるけど、具体的にどのように利用されているのか?
そこがわからないと実際に勉強したことが役にってる実感が湧かないですよね...

少しでもわかるように具体例を交えて紹介していきたいと思います!

三角関数とロボットアームの関係

近年、ロボットアームも産業用だったり医療用だったり様々な分野で活躍しています。
ニュースとかドラマとかでも見たことありますよね?
そのアームの動きをコントロール(制御)するために三角関数が必要になってきます。

アームの動きって?イメージがつかみにくい感じだと思うので、
自分の体を使ってイメージするところからはじめましょう!

それでは、肘を固定して肘の曲げ伸ばしをしてみてください。
当然の話ですが肘を曲げたり伸ばしたりすると手先の位置が変わりますよね?
つまり、肘関節の角度が変われば手先位置がその分だけ移動していることがわかると思います。

illust_1

角度と位置...三角関数を使えば式で表せそうな気がしてきませんか?

三角関数を応用した数学の話

角度と位置といえば...

点Aが直交座標(x,y),極座標(r,θ)で表されるとき、

x = r * cosθ
y = r * sinθ

が成立しますよみたいな話、高校で勉強したかと思いますが覚えてますかね?

coordinates_3

もし基礎的な部分を忘れてしまってたらググってみてください!
難しい内容ではないので簡単に思い出せると思います。

例えば、原点Oを肘、点Aを手先位置、rを肘から手先までの長さ、θを肘の角度とします。
腕の長さが伸びたり縮んだりはしないのでrの値は固定値とします。

illust_2

これは手先位置が決まれば肘の角度はわかるし、肘の角度が決まれば手先位置はわかるという関係が成り立っています。

ここまでで三角関数を使えばアームの動きを式で表すことができる!
ってところまでは理解できたかと思います。
これだけではまだ役立ってる感がピンときてないのではないでしょうか?

次は動きを式で表すと何がうれしいのかを説明していきます!

関係式の活用方法

人間とロボット、それぞれの動力源について考えてみましょう!

先ほど自分の体を使って肘の曲げ伸ばしをしてもらいましたが、
人間の場合は筋肉の収縮と弛緩によって各関節の曲げ伸ばしを実現しています。
ロボットの場合は、筋肉の代わりにモーターの回転によって各関節の曲げ伸ばしを実現しています。

⇒人間とロボットの稼働する仕組みの違い

  • 人間:筋肉の収縮と弛緩
  • ロボット:モーターの回転

すなわちロボットで各関節の動きを実現するには、
筋肉の代わりとなるモーターの回転角度を制御する必要があるということです。

ロボットアームの手先をこの位置に動かしたい!という目標位置がある場合、
関係式にあてはめれば目標角度も計算できますね。
あとはその目標角度になるようにモーターを回転させてあげればよいということです。

プログラムに関係式を組み込めば目標位置が変動した場合でも
リアルタイムで目標角度を算出でき自動でアームの動きを制御することができるわけです!

三角関数は回転運動をリアルタイムで自動制御する際に役立つという話でした!!!

さいごに

今回の話はあくまで簡単な例になります。
実際にロボットアームを制御する場合は重力など様々な力のつり合いを考慮したり、
二次元ではなく三次元での動きを考慮したりなどややこしい話が多々あります。

またこれらにも三角関数は使われています...
あとはフィードバック制御には欠かせないセンサーの話も割愛していますので
機会があれば今後もこのへんの紹介もできればなと思います。

今回は、学校で学んだ数学(基礎の重要な部分)が使われていますという紹介でした。

組み込みソフトにおけるハードウェアの知識

亀山
ディアシステム(株)開発一部第6課

組み込みソフトウェアを作成する場合に必要なハードウェアの知識について、組み込みLinuxにデバイスドライバを実装する方法に添って説明しようと思います。

組み込みLinuxも、ハードウェアも説明し出すと際限がないので、簡単な事項から何回かに分けて説明したいと思います。

まず、組み込みソフトウェアについて簡単におさらいします。身近な物でもテレビ、エアコン、洗濯機、シーリングライト…、枚挙にいとまがないほど、機能の違いはありますが、ほぼ全ての電化製品に搭載されていると言っても過言ではありません。
昔(※1)はマイコンが高価だったため、トランジスタ(※2)等の電子部品を組み合わせて純ハードウェアで構成されていましたが、マイコンが安価になり、マイコンを使用した組み込みモジュールが多用されるようになりました。この組み込みモジュールに搭載するソフトウェアを組み込みソフトウェアと呼んでいます。

※1:今後「昔」と言えば40年ほど前だと思ってください。
※2:ここでは詳しい説明は省きますが、スイッチのようなもので、現在のICの根幹をなす物です。今後、機会があれば説明します。

本題に入る前に、以上の範囲にソフトウェア技術者にとって聞きなれない単語が出てきたかもしれませんので、補足しておきます。本ブロクを読むのに必要な単語の説明だと思ってもらって構いません。電子工作などをされる方には釈迦に説法なので、読み飛ばして頂いて構いません。今後も、組み込みソフトウェアに必要なハードウェアの基礎知識が出てきた場合にその都度補足します。

マイコン

CPUを中心に各種I/O機能を一つのパッケージに収めた物を言います。
昔は半導体の集積技術が十分でなかったため、CPU=マイコンと呼んでいましたが、現在ではCPU、メモリ、DMA、UART、Ether、USB、GPIO等のコントローラが一つのマイコンに集積されています。

組み込みモジュール

マイコンを中心に電源回路や各種インターフェースを搭載した物を言います。
俗に基板やボードと呼ばれます。
組み込みモジュールと言ってもピンからキリまであり、性能に多大な差があります。
身近なところでは、テレビのリモコンの内部に入っている簡単な物から、スマホの内部に入っている高性能な物まで、ひっくるめて組み込みモジュールと呼んでいます。
昔も高価な製品には、組み込みモジュールが搭載されていましたが、CPU性能もメモリ容量も乏しかったので、OSを実装し、その上にアプリケーションを乗せる余裕はありませんでしたが、最近は高性能CPUと大量のメモリが安価に使用できるようになり、Linuxに限らず組み込みモジュールにOSを搭載することが一般的になっています。
OSを搭載することのメリットとして、既存の機能(USB、Ether等)が簡単に利用でき、目的のアプリを簡単に作成できることがあります。 話を分かりやすくするためにHDDレコーダを例に説明します。

図1 画像1.png

この例ですと、USB、SD(カード)、Ether、HDD、Bluetooth等はアプリから簡単に使用できるようにカーネル内に制御プログラムが存在します。そこで、アプリ開発者はチューナーやリモコンの制御に注力すればよいことになります。これが、OSを搭載することのメリットです。しかし、その反面、新規のハードウェアを作成する場合は、ハードウェア毎にデバイスドライバ(Linuxドライバ)を作成する必要があります。
このデバイスドライバを作成する場合に、Linuxカーネルの知識とハードウェアの知識が必要になり、かなり高等な知見が必要となります。

前置きが長くなりましたが、まず、どのようなハードウェアの知識があれば、デバイスドライバが記述できるようになるか、この点を主題に説明して行きたいと思います。
Linuxへのドライバ組み込みは、その後説明します。
今回は全体のさわりだけですので、組み込みソフトウェアがどのような物か理解していただければ構いません。

図1には登場しませんが、一番簡単なのでUART(シリアル通信)のハードウェアを例に説明して行きます。

UART(Universal Asynchronous Receiver/Transmitter)

シリアルの電気信号で通信するためのハードウェアを言います。RS-232C通信と意味は同じと考えて支障ありませんが、正確にはRS-232Cは通信規格のことで、信号の電圧や制御コマンド等が定義されています。他にもRS-422,RS-485等の規格があります。

図2 画像2.png

UART(※)の働きはCPUからの指令に従って、データを変換し、電気信号に変えるものです。図2ではモジュール1と2のCPU間で通信(データ交換)を行います。
※今の説明レベルではUSBやEther用の各種制御コントローラもほぼ同じ構造で「機能」や「P/S」「S/P」の規格が異なると考えて差し支えありません。
「P/S」はparallel→serial変換器で、「S/P」はserial→parallel変換器です。

パラレル⇔シリアル変換

正確ではありませんが、コンピュータ内部で信号はパラレルで扱われています。32bitCPUは32本の信号が、64bitCPUは64本の信号が平行に処理されています。
IC内部では、微細加工により多くの信号線を並べることができますが、モジュール間の橋渡しに64本も信号線を繋ぐのは大変なので、1本の信号線で接続できるようにパラレル⇔シリアル変換を行います。

図3 画像3.png

UARTの制御をCPUで行う場合、UARTのCPU I/Fを介して、制御用レジスタ群にデータを書き込みます。制御用レジスタ群は多数のレジスタで構成されていて、レジスタ毎に機能が割り当てられています。
ハードウェア制御に馴染みのない方にはわかり辛いので、プログラムで言う変数が沢山あり、変数毎に機能が割り当てられていると思ってください。
このレジスタに何らかのデータを書き込むと、機能処理ブロックがレジスタの内容を読み取り、その内容に従って処理を行います。逆に、機能処理ブロックが処理を行った結果をCPUに知らせるために、機能処理ブロックがレジスタに現在のハードウェアの状態を書き込みます。CPUはこのレジスタにある情報を読み取ることで、ハードウェアの状態を知ることができます。
では、このレジスタの内容はどのようになっているのか?
これはUARTのリファレンスマニュアルを読むことによって知ります。リファレンスマニュアルはハードウェア毎に異なりますので、今回は割愛しますが、ハードウェアの制御を行うためには必ず必要な情報です。
今後、機会がありましたら、リファレンスマニュアルの読み方を説明します。

リファレンスマニュアルから読み取った内容を元に、UARTを制御するプログラムを構築します。これが、デバイスドライバです。
デバイスドライバはLinuxカーネル(※)に密接に関係します。そのため、Linuxカーネルがデバイスドライバとインターフェースするために、色々な取り決めがあります。このルールが存在することでLinuxカーネルが多種多様なデバイスドライバとインターフェースすることができます。
※他のOSの場合でも、そのOSのカーネルに密接に関係します。

色々と書きましたが、今回のまとめです。

  • ハードウェア毎に機能が異なるので、ハードウェアのリファレンスマニュアルを読んで理解できるようになること。
  • ハードウェアの機能、目的を明確にできること。
  • Linuxにデバイスドライバを実装するためのルールをしること。

次回から、リファレンスマニュアルの読み方を説明します。

AWS認定クラウドプラクティショナー(CLF-C02)合格体験記

河野
ディアシステム(株)開発二部第1課

こんにちは。開発一部の河野です。

先日AWSクラウドプラクティショナー(CLF-C02)に合格することができたので、
簡単ではありますが体験記をまとめたいと思います。

試験受験のきっかけ

7~8年ほど前にオンプレミスサーバーからAWSへのマイグレーション案件に参画したことがあり、そこで初めてAWSに触れました。
短納期、且つメンバー全員がAWS初心者という中、何度も電話でサポートを受けながら進めていった記憶があります。
なんとか無事にリリースを迎えることができましたが、
トラブルで何度もスケジュールが遅れたり、自身の技術不足をとても痛感した案件でした。

その後多業種に転職し、数年間この業界を離れていましたが、この度SEとして再スタートするにあたり、
当時のことを思い出しながら、クラウドについて改めて基礎からしっかり学ぼうと思っていました。
そんなとき社長からAWSのパートナーティアを上げるためにAWS資格取得者を増やしていきたいという話を聞き、
微力ながら私もクラウドプラクティショナー資格を取得を目指すことにしました。

学習期間

学習期間としては2ヵ月ほどかかってしまいましたが、合計学習時間としては40時間程だと思います。
書籍での学習が4割、模擬問題集での学習が6割くらいの体感です。
当初1ヵ月程先で申し込みしていたのですが、学習時間が中々確保できず不安があったため受験日を延長しました。
2回までは無料で日程変更することができ、
3回目以降の変更でも試験予定の24時間前までは無料でキャンセル(全額返金)して再予約することができるので、
実質、合格の確信が持てるまで何度でも日程を変更することができます。
受験料も16500円と決して安くないので、慎重に挑みたいところですね。

書籍について

book
書籍は社長におすすめを教えてもらい、こちらの書籍を購入しました。
要点が完結にまとめられていて非常にわかりやすかったです。
ページ数が少し多めなので最後まで読めるか不安でしたが、
図を用いた視覚的な表現が多く、スラスラと読み進めることができました。
行き帰りの通勤時間を使って読み終え、あとは書籍に付属のPDFの過去問を正答率が8割くらいになるまで繰り返し解きました。

Udemyについて

その後、まだ少し不安があったので、
Udemyの「【CLF-C02版】これだけでOK! AWS認定クラウドプラクティショナー試験突破講座(豊富な試験問題300問付き)」も追加で購入しました。
セールで2000円くらいでした。
あまり期間がなかったので動画の方はあまりしっかりと見れなかったのですが、
家事の合間に再生したりして音声だけを聞き流していました。
「これだけでOK」と謳うだけあって、非常に丁寧に説明してくれているので、
ソリューションアーキテクトの学習に入る前に復習として再度こちらの動画を一周しておこうと思っています。

付属の模擬問題は、Udemyの仕様上すべて解き終えないと回答や解説が見れないようになっており、
個人的には一問ずつ正解と解説を確認したかったので、タブレットで問題を解きながら、スマホで解答ページを確認する形で解いていきました。
問題は全2種あり、どちらも8割以上の正答率になるまで学習しました。

試験会場について

試験は自宅からのオンライン受験と試験会場での受験のどちらにも対応していますが、
オンライン受験は事前のチェックやルールがややこしそうだと感じたので試験会場での受験を選択しました。

会場によるのかどうかわかりませんが、試験会場に入室した瞬間から参考書やスマホは一切見れなくなるので、
早めに到着して試験前に問題を見返したりしたい人は注意が必要です。
あとは身分証明書が2点必要となっているで、こちらも忘れないよう気を付けてください。

試験内容について

いざ試験本番。
メモに使う用のラミネート用紙を渡されましたが、計算問題もないので使用することはありませんでした。
自信を持って即答できる問題もあれば、
試験本番で初めて聞くサービス名もちらほらあってかなり焦りました...
ただ、この試験は引っかけ問題が比較的少ないのと、
ある程度リテラシーがある人なら「たぶんこれな気がする」というような直感で解けるような問題も多く感じました。
個人的にはネットワーク関連(CloudFront、Direct Connect、VPCなど)の問題が最後まで苦手で、
本番でもそのへんの問題は多分落としている気がします。
自信をもって答えられた問題と不安な問題、体感では五分五分くらいでした。
不安な問題にはマークをしておけるので、一通り解答を終えてからマークした問題を最後まで何度も見直しました。
かなりしっかり見直しましたが、それでもかなり時間が余ったので、
時間が足りなくなることはまずないと思います。

試験結果

見直しを終えて、試験終了ボタンを押すときは手が震えましたが、
簡単なアンケートに答え、最後に合格の文字が画面に表示された瞬間はほっと胸をなでおろしました...
AWS試験の中で、試験直後に画面で結果を確認できるのはクラウドプラクティショナーだけのようです。
画面上でわかるのは合格か不合格かの情報のみで、
それ以外の試験結果の詳細は「5営業日以内にアカウントに掲載」と公式発表されていますが、
当日の21時頃には掲載されていました。合格証書もこの時点からダウンロードすることができました。

あとがき

これまでAWSのハンズオン系のセミナーにも参加しましたが、
AWSにどんなサービスがあるのかなど、ベース知識がないまま参加したので
作業の意味もわからず言われたまま手を動かすだけとなってしまうこともありました。
クラウドプラクティショナーの学習をしたことで、
「だからあのときこうやっていたのか...!」と後から繋がることが多かったです。

次はソリューションアーキテクトを目指して、引き続き頑張っていきたいと思います!

エンジニアに向けたUIデザインのポイント解説

ディアシステム(株)デザイン広報部

こんにちは。デザイン広報部の岸です。

普段プロジェクトチームでお世話になっているエンジニアのみなさんに、デザイナーはどのような観点で画面を見ているのかを、UIデザインの視点で簡単にお話ししたいと思います。

UIデザインについて

UIデザインとは、ユーザーインターフェース(User Interface)のデザインを指します。 具体的にはアプリやソフトウェアのボタンやアイコン、フォーム、ナビゲーションなどユーザーが操作する要素をデザインすることです。

UIデザインの目的

UIデザインは、ユーザーがシステムを直感的かつ効率的に使用できるようにすることを目的としています。 これによりユーザーが目指す目的をより速く、簡単に実行できるようになります。

UIデザインが重要な理由

UIデザインが優れているかどうかで、そのシステムの使い勝手が左右されユーザーの満足度が大きく変わってきます。 UIが考慮されていない場合、ユーザーが欲しい情報に辿り着けなかったり、装飾の仕様が統一されていないことでエラーや混乱を招く恐れがあります。 逆に優れたUIデザインであれば、ユーザーが目的を達成しやすく、利用率と満足度が向上し、ひいてはそのシステムへの信頼度へとつながります。

UIデザインのポイント

UIデザインはユーザーがシステム内でとる行動を予測し、より使いやすくすることを目的としているので、ユーザーが最短ルートで目的を達成できるよう、適切なレイアウトやナビゲーション、階層構造を検討する必要があります。 また、障害を持つユーザーを含むすべてのユーザーにとって使いやすいものであることを目指し、キーボード操作の対応やスクリーンリーダー向けのサポートなど、追加で実装を行うことも重要です。

視覚的な一貫性も重要で、統一感のあるデザインはユーザーに安心感を与え、そのシステムのブランディングに大いに貢献します。また、実装時エンジニアにとっても役立ちます。デザインの意図をデザイナーと共有したうえで再利用可能なコンポーネントを設計しておくことで、開発のスピードを上げ、メンテナンスや新しい機能追加が効率化されます。

UIコンポーネントの要素と設計

これはエンジニアのみなさんに改めて言うことでもないですが、コンポーネントはAtomic Designの考え方に基づき、原子(Atoms)、分子(Molecules)、有機体(Organisms)、テンプレート(Templates)、ページ(Pages)に分けて設計していきます。 現在はさまざまなデバイスに対応したデザインが求められますので、画面サイズに応じてレイアウトや機能が調整されるレスポンシブデザインを取り入れることが多いです。

デザイナーとエンジニアのコミュニケーション

デザインツール(FigmaやAdobe XDなど)で作成したプロトタイプを使って早い段階でユーザーの行動を把握しフィードバックをもとに改善すべきなので、エンジニアはこの段階から参加し、実装可能性を確認しながら技術的な構造を検討します。 UIデザインがアニメーションの実行やAPIの呼び出し回数など、システムのパフォーマンスに与える影響を考慮する必要もあります。

UIデザインは見た目だけではなくシステム全体に関わる重要な役割を担うので、デザイナーだけでは完結できません。エンジニアとデザイナー双方の継続的なコミュニケーションのもと、設計段階から実装フェーズに至るまで、具体的な要件や機能、制約などを共有しながら進めることが肝心です。 実際私もエンジニアのみなさんに実装方法など相談しながらデザインを調整することが多いです。

UIデザイン生成ツール

それではここからはUIデザインをエンジニアが考える時に役立つAIツールを3つ紹介します。テキストベースの指示に応じてUIデザインを生成してくれるので非常に便利です。

Galileo AI

image-ui-1.jpg

指示に基づいてアプリやウェブのUIを自動生成し、デザインの方向性や詳細なレイアウトを指定することができます。簡単な指示でそのシステムに必要となりそうな画面構成も提案してくれます。 Figmaファイルとしてアウトプットできるので使い勝手が良いと思います。

Uizard

image-ui-2.jpg

シンプルなインターフェースで、エンジニアでも簡単にプロトタイプを作成でき、アイデアをすばやく具現化できます。 チームメンバーで共有しておくことも可能で、リアルタイムで編集したりフィードバックを得たりなど効率的に進められるのも良いです。 有料版ではReactのコード出力が可能です。

TeleportHQ

image-ui-3.jpg

デザイン要素や機能要件をテキストで入力するだけで、ウェブページやUIレイアウトが自動で生成されます。デザインはモバイル、タブレット、PCとデバイスごとに確認できて調整がしやすいです。 Figmaファイルをインポートして数種のコードにエクスポートできるので、上手に使えば開発工数が短縮できると思います。

生成AIのデザインが完璧というわけではない

生成AIを利用してUIデザインを作成することで、効率よく高品質なデザインが可能となりますが、これらはあくまでも初期のプロトタイプとして役立てるためのものにすぎません。 クライアントの要望や設計の意図を正しく反映するためには、人間の手でさまざまな観点からのチェックと適切な改善を行うなど、生成されたデザインをブラッシュアップする必要があります。

最後に

デザイナーがデザインする際はさまざまなセオリーに基づき、またその経験を生かし試行錯誤しています。ユーザーの使い勝手を考慮しながら、細部では余白や文字サイズ、全体のトーンなど神経を使って決めていきます。 ただ、よく思われがちですがいわゆる「センス」で仕事をしているわけではありません。もちろんユーザーを感動させるものづくりという意味では感性も必要ですが、思いの外ロジカルな作業を反復していることも多いです。 デザインのロジックを知ってもらえたら、普段の開発時に役立つこともあると思います。さらに今後ますます発展していくAIツールをうまく活用しながらエンジニアがデザイン性の高いシステムを効率よく開発することも可能です。

今回はUIデザインの重要性と押さえておきたいポイントをお話ししました。UIデザインへの理解を深めてもらうきっかけになれば幸いです。

AWS認定 ソリューション・アーキテクト アソシエイト(SAA-C03)合格体験記

野田
野田
ディアシステム(株)社長

こんにちは、ディアシステムの野田です。

つい先日、AWS認定 ソリューション・アーキテクト アソシエイト(SAA-C03) に合格しました!
合格までに学習したことを体験記にまとめます。

試験挑戦前のスキルレベル

私が初めてAWSを触ったのは今から約10年前、2014年~2015年頃まで遡ります。
「AWS Lambda」が登場してまだ間もない頃でした。

まだ業務でAWSが必要となることはありませんでしたが、とりあえずどんな技術なのか試しておこうと思い立ち、簡単なチュートリアル本を購入して一通り試してみました。

Amazon Web Services 基礎からのネットワーク&サーバー構築 : 玉川 憲, 片山 暁雄, 今井 雄太

この書籍は現在でも出版されていて、現時点で第4版まで改訂されているようですね。
その後、2015年~2016年あたりからEC2・RDS・S3を使ったシステムの開発に関わるようになりました。 2017年頃からAPIGateway・AWSLambda・DynamoDBといった、所謂サーバーレス・アーキテクチャを使い始め、 ちょうどタイミングよくAWS Lambdaの本が発売されたので直ぐに購入し読破しました。

AWS Lambda実践ガイド (impress top gear) | 大澤文孝 |本 | 通販 | Amazon

今は第2版が発売されているようです。私が購入したのは第1版の方です。
その後、AWSを使ったクラウドネイティブなシステムの開発に継続的に関わってはいるのですが、 直近の5年間くらいは自分の手でAWSを触ることはなくなってしまいました。
その間、技術が完全に錆びつかせない程度にUdemyで勉強したり、書籍を何冊か買ってかいつまんで読んだりしていましたが、 完全に読み通したのはこの本くらいです。

AWSで実現するモダンアプリケーション入門 〜サーバーレス、コンテナ、マイクロサービスで何ができるのか | 落水 恭介, 吉田 慶章 |本 | 通販 | Amazon

なので、SAA試験挑戦時点のスキルレベルはというと、

  • AWSは初心者ではないが、知識や経験がサーバーレスに偏っている
  • 実務から数年離れているため、もはや使い方を忘れつつある

といったところです。

試験挑戦のきっかけ

弊社内で、AWSのパートナーティアを上げるためにソリューションアーキテクト資格取得者を増やそうという動きがあり、それに協力するため、SAAの取得を目指すことにしました。
目標期限は2024/8/31までで、思い立ったのが2024年6月初頭、期限まで残り3ヶ月となった頃です。 まずは手始めとして AWS認定 クラウド・プラクティショナー(CLF-C02) を取得し、それに合格したら次はAWS認定 ソリューションアーキテクト アソシエイト(SAA-C03) へと、順番に挑戦していくことにしました。

AWS認定 クラウド・プラクティショナー(CLF-C02)への挑戦

通称 "黒本" で学習しました。
この本自体は1年程前に購入したもので、何故買ったのかは憶えておらず読んだ形跡もありませんでした。

徹底攻略 AWS認定 クラウドプラクティショナー教科書 | トレノケート株式会社 高山裕司 |本 | 通販 | Amazon

2周ほど読んで特典のダウンロード模擬問題を解いてみました。
合格点が取れそうな手ごたえだったので、2024/6/10に挑戦し、結果無事合格しました。 合格点が700/1000 のところ得点は790/1000でした。

3f7dc93a.png

学習期間は1週間強といったところです。 黒本は読みやすく、特に詰まるところもなく読み進めることができました。
私が持っていた本は CLF-C02 ではなく、その前の版である CLF-C01 向けの本だったようですが、その点は特に問題なく、この1冊だけで十分合格できました。

AWS認定 ソリューションアーキテクト アソシエイト(SAA-C03)への挑戦

CLFと同じく "黒本" のSAA版を購入し、CLF合格後立て続けに学習を開始しました。

徹底攻略 AWS認定 ソリューションアーキテクト − アソシエイト教科書 第3版[SAA-C03]対応 徹底攻略シリーズ | 鳥谷部 昭寛, 宮口 光平, 半田 大樹 | 工学 | Kindleストア | Amazon

とりあえず2週間ほどテキストの通読と問題演習を繰り返した後、 AWSから提供されている公式練習問題集を解いてみたところ、正答率は半分程度といったところです。
公式練習問題集を解いた感覚だと、黒本の内容だけでは合格は厳しいかな?と感じました。
足りない知識は問題演習を増やすことでカバーすることにしました。 しかし、問題演習に入る前に、AWS Control Tower というサービスを使った マルチアカウントアーキテクチャ のことが気になっていたので、一旦試験勉強から離れてそちらを研究をすることにしました。
その過程で下記の書籍を購入して通読しました。

エバンジェリストの知識と経験を1冊にまとめた AWS開発を《成功》させる技術 | 高岡 将, 佐々木 亨 |本 | 通販 | Amazon

2週間ほど脱線した後、2024/7/8から試験勉強を再開しました。
問題演習用の教材として、Ping-t に無料で使えるSAA-C03用の問題集があったので、そちらを使って学習することにしました。

Ping-t

このPing-tのSAA-C03問題集ですが全部で733問あり、全て解き終わるまで20日ほどかかりました。 Ping-tは解説が大変充実しており、ひょっとするとPing-tだけで試験対策としては十分ではないかと思うくらいです。
間違えた問題のやり直しも含めると毎日50問くらいのペースで進めていた計算です。
このPing-t、問題量が豊富すぎるくらい豊富で、全て解き終えるまでかなり大変でした。
毎日50問を机に向かって解くような時間はなかなか取れないので、1回に5問ずつに小分けして、朝/通勤時間/昼休み/移動時間/夕食後/寝る前等、スキマ時間を使ってひたすら問題演習を繰り返しました。

2024/7/29にPing-tの問題集を1周解き終えることができたので、その3日後の2024/8/1に本番試験に挑みました。
結果は合格点が720/1000 のところ、得点は 801/1000 で、無事合格することができました。

20427da1.png

SAA-C03 試験の振返り

今回、スキルアップを目指してではなく、SAAの資格をとることそのものを目的として挑戦し始めたわけですが、 これまで体系だってAWSを勉強することを疎かにしてきたことが今さらながら悔やまれます。もっと早くに挑戦しておくべきでした。
これまで自分の知る範囲のサービスを組み合わせでシステム構成を提案していたのですが、やはりSAAを取得した今の方がたくさんの選択肢を思いつくことができます。あの構成はベストではなかった、こういった構成にすべきであったという風に、過去手掛けたアーキテクチャについて反省することしきりです。

今後について

今回の試験勉強を通じて知ったサービスの中で使ってみたいものが色々出てきたので、しばらくはいろいろ試してみようと考えております。
AWS認定 デベロッパーアソシエイト(DVA-C02) の方にも挑戦したくなってきたので、近いうちに挑戦してみるつもりです。

未経験から始める
システムエンジニア

一生モノのITスキルを身につけよう

あなたの経験とスキルを
ディアシステムで発揮してください!