知っていないともったいない!Power Automate Desktopとは?

Windows11から標準搭載されている「Power Automate Desktop」は、これから業務においてドンドン活用されると予測される、便利な無償自動化ツールです。

今回は、その活用方法をご紹介いたします。

Power Automateとは?

Power Automateは、RPA(Robotic Process Automation)と呼ばれる自動化処理サービスです。

RPAのメリットは主に2つが挙げられます。

  1. 人件費の削減
    従来、人が行っていた作業をコンピューター(ロボット)が自動で実行してくれます。例えば、複数人で行っていた作業を1人で対応することが可能となり、その分の人件費を削減することができます。
  2. ミスを防止できる
    コンピューター(ロボット)が決められた処理に処理に従って作業を実行するため、ヒューマンエラーを防ぐことができます。手動で業務を行うと、抜け漏れのミスが発生しやすくなります。また、ダブルチェックなども不要となるため、業務における無駄を解消するきっかけになるかもしれません。

RPAのデメリットは、自動で実行してくれるため、RPAのコンピューター(ロボット)に指示した内容に誤りがあった場合、途中で止まることなく作業を実行し続けてしまいます。そのため、必ず検証を行い問題がないか確認したり、定期的なメンテナンスで改善をすることが重要です。

Power Automate Desktopとは?

Power Automate Desktopは、Power Automateの中のデスクトップのサービスです。2021年3月にMicrosoft社よりWindows10であれば無償提供することが発表されて以降、一気に注目を集めています。

Power Automate Desktopでできること

Power Automate Desktopでできることは、次のようなものが自動化できます。

  1. 顧客リストから請求書作成
  2. 毎月リマインドメールを一斉送信
  3. 経費精算における入力順作業
  4. OCR(画像から文字列抽出)

弊社活用事例

弊社ではこれまで100人以上を超えるスタッフに給与明細を手作業によるメールで送信していました・・・。(3人5時間)

そこで、Power Automate Desktopを活用することで、1時間でメール送信することで、大幅な作業削減となりました。

Power Automate Desktopは難しい?

他のRPAツールにも同様のことが言えますが、プログラムコードの専門知識は一切不要です。視覚的・直感的にプログラムを作成することができるため、非常に簡単です。

実際の画面を見てみましょう。

例えば、Excelを起動させたい場合、アクション(操作)から「Excel」と検索して、「Excelの起動」をドラッグアンドドロップするのみです。

※動画

また、ブラウザ(例えばChrome)の立ち上げも同様に「新しいChromeを起動する」のアクションを追加することで設定が可能です。

Power Automate Desktopのインストール方法

Microsoftのページを参考にしてください。

まとめ

今回、ご紹介したメール送信以外にも様々なアクションが約340種類以上搭載されており、細かい指示を積み重ねて、処理を作成していきますが、必要なアクションを追加していくのみで、専門的な知識がほとんどありません。

是非、業務改善の1つツールとして利用してはいかがでしょうか。

★沖縄にてお仕事説明会開催中★

お仕事お探しの方 説明会を開催しております 

【日時】

平日 午前10時~11時/午後3時~4時 

20~30代で業界への希望されている方

お問い合わせお待ちしております。
https://abridge-co.jp/contact.html

『Android Java』の【ROOM】について 1/2


今回はAndroid開発にてDBを楽に扱える【ROOM】を紹介したいと思います。
長くなりますので、2回に分けて紹介していきます。2/2は6月27日に更新予定です。
※Android開発には『Kotlin』もあるのですが今回は『Java』を使用します!

Roomとは

Room(ルーム)とはDBの一つであるSQLiteを簡単に扱える便利なライブラリです。
以下、公式サイトから抜粋。
https://developer.android.com/jetpack/androidx/releases/room?hl=ja

Room 永続ライブラリは SQLite 全体に抽象化レイヤを提供することで、データベースへのより安定したアクセスを可能にし、SQLite を最大限に活用できるようにします。

全体像

最初にRoomがあるプロジェクトの全体像を記載します!(※一部抜粋)
App
┣manifests
┗java
┗{好みのパッケージ名}
   ┣db
     ┣Entityファイル
     ┣DAOファイル
     ┗Databaseファイル
   ┣model
     ┗Repositoryファイル
   ┣view
     ┗ActivityやFragment
   ┣viewmodel
     ┗ViewHolderやViewModel

Roomを使う下準備

最初に準備をします。コンポーネントライブラリをGradleファイルに追加する。
\{project rootフォルダ}\app\build.gradle に以下を追加

dependencies {
def room_ersion
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
androidTestImplementation "androidx.room:room-testing:$room_Version"
}

■Entityを作成する

https://developer.android.com/reference/androidx/room/Entity

準備が終わると、まずはエンティティを作成します。
任意の場所でファイルを作る (例:今回はjava\○○\db\User.java)
ファイルを作成すると中身を書いていきます。

package ○○.db;

import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Index;
import androidx.room.PrimaryKey;

@Entity(tableName="users")
public class User {
@PrimaryKey(autoGenerate = true)
@NonNull
@ColumnInfo(name = "user_id")
private int user_id;

@ColumnInfo(name = "user_name")
private String user_name;

@ColumnInfo(name = "user_pass")
private String user_pass;

public User(String user_name, String user_pass) {
this.user_name = user_name;
this.user_pass =user_pass;
}

public int getUser_id() { return user_id; }
public void setUser_id(int user_id){this.user_id = user_id;}

public String getUser_name() { return user_name; }
public void setUser_name(String name){this.user_name = name;}

public String getUser_pass() {
return user_pass;
}
public void setUser_pass(String pass){this.user_pass = pass;}
}

ここでの@(注釈)を説明していきます。
@Entity(tableName =”users”)にてテーブル名を定義しています。
@PrimaryKey にて主キーとして指定します。※(autogenerate = true にて値を自動追加)
@NonNull にてパラメータ、フィールド、メソッドの戻り値のnull禁止を指定します
@ColumnInfo(name = “user_id”) テーブルの列の名前を指定します。

■DAOを作成する

https://developer.android.com/training/data-storage/room/accessing-data

エンティティの次に、DAOを作成します。
任意の場所でファイルを作る(例):今回はjava\○○\db\UserDAO.java
ファイルを作成すると中身を書いていきます。

package ○○.db.;

import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import java.util.List;

@Dao
public interface UserDao {

@Query("SELECT * FROM users WHERE user_name IN (:name) AND user_pass IN(:pass)")
LiveData getLoginUser(String name, String pass);

@Query("SELECT user_id FROM users WHERE user_name IN (:name)")
int getUserId(String name);

@Insert(onConflict = OnConflictStrategy.IGNORE)
void insertAcount(User user);
}

@Dao にてこのインターフェイスをRoomのDAOとして定義します。
@Query にて()内のSQL文を実行できます。
@Insert 引数の値をInsert文にして実行します。
@Delete引数の値をDelete文にして実行します。
@Update引数の値をUpdate文にして実行します。
LiveData ・・・ライブデータは次項にて説明します。

■LiveDataクラス

https://developer.android.com/topic/libraries/architecture/livedata?hl=ja

LiveDataはRoomとは別の機能ですが、とても相性がいい機能なんです!
使用するついでに紹介していきたいと思います。

LiveDataとは・・・JetPackのコンポーネントの一つで、ViewModelクラス内のデータの情報をアクティビティやフラグメントが監視して、更新があるとViewの変更ができます。
ざっくり説明すると、LiveDataを通すことで、DBに更新があるとすぐ、自動的にViewに反映できるんです!!!
※ViewModelにてLiveDataの実際の使い方を紹介します。

■RoomDatabaseを作成する

https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase

次にRoomDatabaseを作成します。

package ○○.db.;

import androidx.annotation.NonNull;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
import androidx.sqlite.db.SupportSQLiteDatabase;
import ○○.db.user_table.UserDao;

@Database(entities = {User.class}, version = 1, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {

public abstract UserDao userDao();
private static volatile AppDatabase INSTANCE;
private static final int NUMBER_OF_THREADS = 4;
static final ExecutorService databaseWriteExecutor =
Executors.newFixedThreadPool(NUMBER_OF_THREADS);

static WordRoomDatabase getDatabase(final Context context) {
if (INSTANCE == null) {
synchronized (AppDatabase.class) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
AppDatabase.class, "app_db")
.build();
}
}
}
return INSTANCE;
}
}

@Database 注釈を付け、注釈パラメーターを使用して、データベースに属するエンティティを宣言し、バージョン番号を設定します。
getDatabase  シングルトンを返します。Roomのデータベースビルダーを使用して 、クラスRoomDatabaseからアプリケーションコンテキストにオブジェクトを作成し、名前を付けて、最初にアクセスしたときにデータベースを作成します。(AppDatabase”app_db”)

・・・今回はここで終了です!続きの 『Android Java』の【ROOM】について2/2 は6月27日に更新予定です。

次回の内容☟
■リポジトリを作成する
■ViewModelを作成する
■Viewを作成する
■初期データを入力する
■Activityを作成する
■データに接続する

画像フォーマットWebPについて

■WebPとは

WebP (ウェッピー)とは、GoogleがWebサイトの表示速度短縮を目的として開発した画像フォーマットです。
圧縮率が高いためページの読み込み速度が向上し、SEO的な効果も期待できます。

2010年9月に提供が開始されましたが、当時は対応するブラウザが少なく、Photoshop等のソフトウェアがwebp形式に対応していなかったため、普及していませんでした。
2022年現在は主要ブラウザに対応し、Photoshop23.2以降でwebp形式が扱えるようになったため、今後は普及が進むと思われます。

https://caniuse.com/?search=WebP

■WebPの特徴

WebPと他の画像形式を比較表にしました。
JPEGより高い圧縮率で、JPEG・PNG・GIFでできる事を網羅しているフォーマットということがわかります。

画像形式 WebP JPEG PNG GIF
圧縮方式 非可逆圧縮
可逆圧縮
非可逆圧縮 可逆圧縮 可逆圧縮
1670万色以上 1670万色以上 256~
1670万色以上
256色
透過 ×
アニメーション × ×

■WebPの圧縮率

WebPはJPEGに比べて、25~30%くらい容量が軽いと言われています。

①JPEG 822kB

②WebP 18.3kB

上の画像は①のJPEGからPhotoshopで②のWebPに変換したものです。
変換時の設定は以下の通りです。

 

 

 

 

 

 

画質0にも関わらず、拡大しても劣化がわからないですね。
←JPEG WebP→

■WebPのメリット

JPEG・PNG・GIFでできる事を網羅しているため、写真ならJPEG、アニメーションならGIFなど、形式をそれぞれに書き出す必要がありません。
画質を下げることなく軽量化できるため、webサイトの表示速度の改善が期待でき、SEO対策のひとつとして有用です。

■WebPのデメリット

デメリットは扱えるソフトウェアが非常に限られていることです。
現在はPhotoshop23.2以降、GIMP2.10.0以降で編集することができます。
そのため、Googleから変換サイトが提供されています。
https://squoosh.app/

まとめ

WebPは画質を保ったまま軽量化することが可能で、サイトの表示速度を上げたり、SEO対策にも効果的です。
昔と比べて、主要なブラウザも対応しているので、利用してみてはいかがでしょうか。