OmniAICreator/Qiita-1.07M huggingface dataset:
squashfsをsystemdで起動時にマウントする

# はじめに
これは備忘録として投稿しているものです。悪しからず

<!--
# snapとsystemd
snapは、Linux上で使われるパッケージマネージャーの一つである。
さて、snapはどうやってファイルをシステム上に展開しているかご存知だろうか?

他のパッケージマネージャー、例えばaptなどはパッケージ[^pkgext]をダウンロードした後、それをファイルシステム上に展開する。
アンインストールする際はそれらのファイルを削除するのである。
-->

# 必要なもの
- マウントポイント (`/mnt/squashfs-test`)
    - ディレクトリは先に作っておくこと
- マウント元のファイル (`/home/nao/tmp/file.sqfs`)
    - 実際のところ中身がrw前提のext4が入ったファイルでも問題はないが、今回はタイトル通りsquashfsのファイルとする

なおloopデバイスは勝手にセットアップしてくれる(`-o loop`相当)ため、特に考える必要はない。

# やり方
まず、unit名を決定する。これはマウントポイントのフルパスから一意に定まるものなので、好きな名前というのは不可。

```
$ systemd-escape -p --suffix=mount /mnt/squashfs-test
mnt-squashfs\x2dtest.mount
```

以上のコマンドから導き出されたunitを編集する。

```
$ sudo systemctl edit --full --force 'mnt-squashfs\x2dtest.mount'
```

この時の内容は以下のようになる。

```ini
[Unit]
Description=Mount squashfs-test
# 先にマウントされていなければならないファイルシステムがある場合は、fstabを見ながら次の行を必要に応じて変更する
After=home.mount

[Mount]
What=/home/nao/tmp/file.sqfs
Where=/mnt/squashfs-test
Type=squashfs
Options=ro

[Install]
WantedBy=local-fs.target
```

これは、fstab[^fstab]またはmountコマンドで次のように書いた場合と等価になる。

```
/home/nao/tmp/file.sqfs /mnt/squashfs-test squashfs rw 0 0
$ mount /home/nao/tmp/file.sqfs /mnt/squashfs-test -t squashfs -o rw,loop
```

そして、このunitをserviceでやる時同様"start"すると、loopデバイスをセットアップした上で、マウントができる。
unmountする時は同様に`stop`で可能。また起動時にマウントする設定はunitに対して`enable`するだけで良い。

```
# マウント
$ sudo systemctl start 'mnt-squashfs\x2dtest.mount'

# アンマウント
$ sudo systemctl stop 'mnt-squashfs\x2dtest.mount'

# 起動時にマウント
$ sudo systemctl enable 'mnt-squashfs\x2dtest.mount'
```

# 豆知識
実はsnapdがやっていることと同じことをしている

# 参考
- https://www.getto.systems/entry/2019/11/19/203543
- https://unix.stackexchange.com/questions/283442/systemd-mount-fails-where-setting-doesnt-match-unit-name
- https://www.freedesktop.org/software/systemd/man/systemd.mount.html

[^pkgext]: .debとか.rpmのこと
[^fstab]: 実際にはfstabを使用する場合はloopデバイスを作成してくれないため、完全に等価という訳ではない。あくまでもイメージ
【Nuxt.js】APIから取得した配列データをv-forで描画する方法

#はじめに
こんにちは。
こちらの記事では、microCMSのAPIデータを元に繰り返し描画を行う方法を記しています。
誤っている点がございましたらコメントいただけると幸いです。

##実装手順

###1. microCMSからAPIデータを取得する
Nuxtの拡張子`.vue`ファイルでは、`asyncData`を使ってaxios通信を行います。
retrunで返した`contents`には、microCMSに入力したすべてのデータが配列で格納されています。（`contents[0].id`を選択した場合は、配列の1番目のデータのIDが反映されます）
データの取得方法については、過去の[こちらの記事](https://qiita.com/YuStarrr/items/839138a955c67ae8aff2)に記載しております。

```javascript:script
<script>
import axios from "axios";

export default {
  async asyncData() {
    const test = await axios.get(
      'https://サービス名.microcms.io/api/v1/APIのエンドポイント',
      {
        headers: { "X-API-KEY": "APIキーを入力" }
      }
    );
    const contents = test.data.contents
    return {contents}
  }
}
</script>
```

###2. v-forでタイトルを繰り返し描画する
先ほど取得した配列が格納されている`contents`を、v-forの`list`に格納する。また、keyにはv-bindでIDを設定する。
v-forの形式は、`v-for = "変数 in 配列"`になります。

※マスタッシュ構文で描画する`list.title`の`title`には、microCMSのAPI設定で任意で設定した「フィールドID」が入る。

```html:template
<template>
  <ul>
    <li v-for="list in contents" :key="list.id">
      <h1>{{ list.title }}</h1>
    </li>
  </ul>
</template>
```
配列の数だけ繰り返し描画されるので、データが５件あれば５回描画されます。

```
タイトル１
タイトル2
タイトル3
タイトル4
タイトル5
```

###3. リンクや画像も表示させる
idを選択することでページ遷移リンクを設定できたり、imgタグのsrcにURLを設定することで、画像も描画することができます。

```html:template
<template>
  <ul>
    <li v-for="list in contents" :key="list.id">
      <nuxt-link :to="list.id">
        <h1>{{ list.title }}</h1>
      </nuxt-link>
      <div>
        <img :src="list.image.url" />
      </div>
    </li>
  </ul>
</template>
```



#参考
* [リストレンダリング](https://jp.vuejs.org/v2/guide/list.html)
* [Vue.jsで、取得したJSONデータの配列を元に繰り返し描画する方法](https://qiita.com/kisaichi07/items/0d12430882b10c93d5a3)

<br>


#おわりに
ここまでmicroCMSのAPIデータを元に繰り返し描画を行う方法についてまとめました。
これからもつまづいたことや機能の実装方法について記事にしていきます！
以上、最後まで読んでいただきありがとうございました！
よければLGTMを押してくれると嬉しいです！
要件定義チェックリストを作ったら思ったより良かったという話

# 誰？
こんにちは。3月からサーバーサイドエンジニアで採用されたのにPHPはほとんど全く書かず、 vue 書いたりディレクションしたりする時間の多い　esu_eichi です。このことに対する不満は全くないのですが面白いので自己紹介で触れました。

# 何をしたか
ディレクター向けに要件定義チェックリストを作りました。

# 何故したか
ディレクター経験の浅い若手のメンバーに、ディレクターとして要件定義を依頼していたのですが、そもそもエンジニアが気になる観点がわからず、行ったり来たりしていたり、似たような気になりポイントを指摘することが何度かあったので作りました。

ディレクター職ってエンジニアよりも職人というか、具体的な手順とかドキュメントとかなく、なんとなくで身について経験で出来てる人が多いのかなと思っています。
そもそも自分も以前ディレクターをやっている期間が結構あったのですが、特に何かをめちゃめちゃ丁寧に教わることなく、先輩について半年くらいやったら独立というか、そういう感じだったんですね。
たまたま自分はエンジニア経験もあるので、エンジニアが気になるポイントとかわかるなあというアドバンテージありましたが、技術経験もなくて開発のディレクターやるってなったら、そりゃむずいよね、と思ったのがきっかけです。

# 何が良かったの？
## ディレクター観点
指摘ややり取りが減ったようで、こちらから指摘する内容も減りそうでした。また、ディレクター職のメンバに見せて、エンジニアってこんなこと気にするんだ〜を明文化できてよかったと思っています。

## 自分視点
個人の感想ですけど、めちゃめちゃ良かったです。
何が良かったかと言うと自分が何を気にしているかを明文化できて、自身の理解を深めることが出来ました。
例えば、調整という項目
![スクリーンショット 2021-11-25 16.31.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94194/06143356-6eda-09d5-696f-3cb98f38418d.png)

できるだけ要件を早い段階で固めることとスケジュールについて結構気にしていることがわかります。
また、ミニマムで作ってグロースしていくのがいいのでは？
という考えが自分にはあるのですが、それも反映されていますね。
上長にもレビューしてもらっていましたが、お互いに明確に言語化してブラッシュアップして、他の人がどんな事を気にしているかとか、
あるいは会社として何を重要視しているかとかを深ぼることが出来たので、むしろ入社早い段階で用意して確認するのが良かったなって思いました。
その場合はディレクターチェックリストと言うよりは自分の価値観の整理みたいな感じになるのかなと思いますが。

## まとめ
ディレクター向けチェックリストみたいなの多分あんまり聞いたことないので、手の空いてるタイミングでディレクター経験者は作ってみると自分の能力の可視化とか言語化できていいかなって思うし、
エンジニアでも価値観をちゃんと整理しておくのいいなって思いました。
フリーターからエンジニアになってみて

今回、「エンジニアになったきっかけ」に関しての記事の作成依頼があったため、記事を書かせて頂こうと思います！
「自己紹介」
「エンジニアになろうと思ったきっかけ」
「エンジニアとして働いてみた感想」
「今後はどんなエンジニアを目指したいか」
という項目で記事を書かせてもらいます。
 
## 自己紹介
2019年3月に慶応義塾大学環境情報学部を卒業し、2019年4月からポテパンキャンプというプログラミングスクールで、RORを勉強し、2020年1月からWebエンジニアとして働いています。そのため、今はエンジニア2年目となります！
 
主な業務としては、ECの基幹システムの内製化や新規機能の要件定義・仕様策定・実装等を担当しています。
新しい人が入ってきた際は、育成等も担当したりしています。
また、ご縁があり、つい先日から副業も始めさせて頂きました！
副業の方は、まだjoinさせて頂いて1ヶ月も経たないような状態で、1日でも早く力にならなくてはと思い、日々開発させて頂いております！
 
## エンジニアになろうと思ったきっかけ
大学4年時に、企画から実装までを3人一組のメンバと共に実装するというものがありました。
その時、私はプランナーとしてjoinさせて頂き、初めて自分が企画したものが形になりました。
嬉しい気持ちの反面、もっとプロダクトの作成に関わっていきたいという気持ちが強くなりました。
 
この時、私は、エンジニアになる事を決意しました。
 
私は、プロダクトにエンジニアとして関わり、プロダクトをグロースさせていく事やユーザーにとって良いものとは何なのかという事を考え、実装していく事がやりたいと思いました。
そのため、自社開発企業でエンジニアとして働きたいと考え、行動に移していきました！
 
## エンジニアとして働いてみた感想
コーディングするという事に関しては、意外となんとかなった所が「エンジニアとして働いてみて」最も意外な点でした。
難しい内容をいきなり振られるという事はまずないですし、ある程度コーディングができれば、「未経験での入社」としてはいいのではないかと思います。
※学習を継続していく事は必須ですし、入社してからどんどん吸収していく姿勢というものは必要になってきます。
 
そして、私が最も苦労した点としては、「お作法的な部分」です。
変数・メソッド等の命名、冗長な処理の添削等、実装とは直接的には関係ないが、綺麗なコードを書くために必要な事の習得が最も苦労しました。。。
※今も習得出来てはいない。。。
 
「細かい所に意識を向ける」というのは、エンジニアとして最も必要な素養のように最近感じています。
これができれば、「お作法的な部分」で、レビューで指摘される事も減るのではないのかなと思います。
私自身、もともと大雑把な性格であった事もあり、細かい所に意識を向けるという事が苦手です。
 
しかし、エンジニアとして働いていく中で、少しずつですが、細かい所に意識を向け、気づく事ができるようになってきていると思います。
今後のエンジニア人生においても、大きな課題になってくる事は間違いないかなと思います。
エンジニアになる前から、意識をし、生活においても細かい所に意識を配るなど、できる事は多々あったと思います。今からエンジニアを目指すのであれば、コーディングだけではなく、そのような所も意識してみると良いかもしれないですね。
 
## 今後はどんなエンジニアを目指したいか
「自分の作りたいものが作れるエンジニア」です。
こういうものが作りたいと思った時に、パパッと作成し、世の中に出す事ができるようになれると良いなと考えています！
OpsRamp 監視エージェントのWatchdog機能

2021年OpsRampアドベントカレンダー12月3日分の投稿です。

# 概要

OpsRampの監視エージェントをインストールすると"opsramp-agent"と"opsramp-shield"の2つのプロセスが起動します。これはWindowsとLinuxで共通です。Version 8.0から"opsramp-shield"が追加されて、監視エージェント本体である"opsramp-agent"の稼働監視をするようになってます。なお、クライアント（OpsRamp用語でクライアント≒テナント）ごとに有効にする必要があり、デフォルトでは無効になってました。

それではWatchdog機能が本当に動作するのか確認してみます。



# 試験結果

### Windows

* プロセスを強制停止した場合

Process Explorerを起動して"opsramp-agent.exe"を強制停止します

| ![2021-1128-1414-32.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333529/6141f14e-bfe6-5617-aab1-4a3bfb6c583f.jpeg) |
| :-- |

"OK"をクリック

| ![2021-1128-1414-46.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333529/61d248fa-2d07-c3c8-d125-c54df5bffd4b.jpeg) |
| :-- |

"opsramp-agent.exe"が停止していることを確認しました。

| ![2021-1128-1415-01.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333529/b9c854a5-fdab-ab3c-30ae-1453cf54d21f.jpeg) |
| :-- |

2分位経過すると自動で起動してきました。

| ![2021-1128-1430-24.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333529/1d5281fa-1a15-0e76-2262-c92166ab03f0.jpeg) |
| :-- |


* サービスを手動停止した場合

サービスの管理ウインドウで"opsramp-agent"を手動で停止してみます

| ![2021-1128-1431-41.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333529/b0334154-e527-2624-891e-54f8e6aebf0e.jpeg) |
| :-- |

停止しました（状態がブランクになってます）

| ![2021-1128-1432-02.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333529/8984ee34-d91e-d779-4897-5464967fcbad.jpeg) |
| :-- |

こちらも2分ほど経過すると自動で起動してきました。

| ![2021-1128-1434-28.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333529/a3de3d45-11f2-f6b2-4358-877259a4f611.jpeg) |
| :-- |

　　
と、いうことでまずはWindowsで正常に動作することが確認できました。
Windowsの場合、サービスの設定でエラーが発生した場合に再起動するとか設定できるのでそちらもで良いような気がします。また、何かメンテナンス作業中に監視を一時停止したい場合には"opsramp-shield"も一緒に停止しないと勝手に起動してくるので注意が必要です。
　　
　　


### Linux

"opsramp-agent"のプロセスIDを確認します
![2021-1128-1439-06.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333529/3cbc527e-cd6e-90a8-e31d-2660a96c70d0.jpeg)

"opsramp-agent"をkillします
![2021-1128-1439-41.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333529/47c94b13-27ff-2bab-7a82-0293a1e87eb0.jpeg)

プロセスIDが"9479"となって自動起動しています
![2021-1128-1442-08.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333529/e78d60f7-897b-33c7-3ca6-514395a40c8b.jpeg)



と、いうことでLinuxでも正常に動作していることが分かりました。


### opsramp-shieldの実行周期

だいたい1～2分で検知しているようですが、実際どうなのかWindowsで確認してみました。
結果は下のキャプチャのとおり、"opsramp-shield.exe"が1分周期で実行されていることが分かりました。

| ![2021-1202-0858-26.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/333529/33fa089b-adcc-ccbe-82ee-6a74b01a7420.jpeg) |
| :-- |





おわり。
クラウドとは

#本記事について
この記事は[くろかわこうへいさん](https://twitter.com/AwsskillC)が作成した、[クラウドエンジニアロードマップ](https://qiita.com/KurokawaKouhei/items/4e9aa3b526f3f233bf85)の各項目を自分なりに調べて、解説できるようになりたいと思い作成した記事です。
間違えている点がありましたら、指摘をしていただけると幸いです。



#クラウド(クラウドコンピューティング)とは

>ユーザーがインフラやソフトウェアを持たなくても、インターネットを通じて、サービスを必要な時に必要な分だけ利用する考え方

[こちらのサイトから引用しました](https://altus.gmocloud.com/suggest/cloud/)

このままだと、つまりどういうこと？となるので従来の仕組みも解説しながら、少し噛み砕いて説明していきます。

##従来のインフラやソフトウェア

まず従来のインフラについてです。従来は、サービスを提供する企業の方で

- サービスを提供するのに必要なハードウェア・ネットワーク機器を購入する
- 自社やデータセンターの中に設置する
- 自社が所有するサーバの中にソフトウェアを入れる

といったように自社の方でハードウェアを購入・所有する事でサービスを提供していました。

また、ソフトウェアは

- ソフトウェアを使うためのライセンスを購入する
- 自身のパソコンにソフトウェアをインストールする

というのを行い、ソフトウェアを利用しておりました。

これでも利用できるのですが、困った点もあります。

###インフラでの困った点

- 初期費用(イニシャルコスト)がかかる
- サービス提供のために必要なサーバ・ネットワークを組むための機器を準備するのに時間がかかる
- サーバ・ネットワークの構築も大掛かりなものになる事が多く、構築が終わるまで時間がかかる
- 自社の中でサーバを設置するための場所を準備しないといけない
- 自社で所有している為、インフラの運用・保守を自分たちの方で行わなければいけない


##ソフトウェアでの困った点

- 使用したいソフトウェアが入っているパソコン以外では使用ができない
- 使用するために一回一回、使用するソフトをインストールしなければいけない

といったような困った点もあります。

##クラウドとは

従来の流れを踏まえた上で、クラウド(クラウドコンピューティング)とは何かを説明しますと

**自分たち(企業などのユーザー)でインフラやソフトウェアを持たなくても、インターネットを介していつでもどこでも、インフラやソフトウェアを利用したい分だけ利用する事ができる仕組みの事**と説明する事ができます。

また、クラウドの仕組みを使用して提供されているサービスのことを**クラウドサービス**と呼びます。

##クラウドサービスの利点(メリット)

- **初期費用が抑えられる**

自社でインフラを構築する場合、必要な機器を自分たちで購入する必要がある為インフラの構築に必要な初期費用(ランニングコスト)がクラウドを利用する場合に比べて掛かります。
クラウドを利用することにより、自分たちの方で機器を購入する必要がなくなる為初期費用が安くなります。

- **インフラ構築までの時間を抑えられる**

自社で必要な機器を購入する場合、購入した機器はすぐには届かず届くまでに時間がかかります。
また巨大な機器を何台も構築する為、構築を終えるまでにも時間がかかります。
クラウドサービスは、すでにある程度構築されたものを利用する為短い時間で、サービスを提供するためのインフラを構築する事ができます。

- **置き場所を準備する必要がない**

自社でサーバを所有する場合、そのサーバを自社や自社で契約したデータセンターと呼ばれる場所に設置しなければ使用する事ができません。その為、サーバを置く場所を準備する必要があります。
クラウドサービスを利用する場合、仮想サーバと呼ばれる仮想的なサーバをインターネットを介してで使用するため
サーバを設置する場所を準備せずとも使用することが出来ます。

##クラウドサービスを利用するときのデメリット

クラウドサービスもいいことずくめの完璧なサービスというわけではなく、利用にあたってのデメリットももちろんあります。

- ネットワークの影響を受けやすい

クラウドサービスはネットワークを介して利用するサービスですので、ネットワークがなかったり・何かしらの影響でネットワークが使用できない状態になると利用することが出来ません。

- カスタマイズの柔軟性が下がる

すでに作成されているものを使用することになるので、何かカスタマイズをする際、クラウドサービスを提供する事業者の限度を超えたカスタマイズというのが出来ないようになっています。その為、カスタマイズをする際の柔軟性が、インフラやサービスを自社で準備する場合に比べ、下がります。

-
定期代を廃止して出社ベースの交通費支給をする仕組みを作ってみた

# はじめに

これは [Makuake Advent Calendar 2021](https://adventar.org/calendars/6822)のアドベントカレンダーです。

はじめまして、マクアケでIT戦略チームで主に社内のお困りごと全般を担当しているyamadaと申します。
今年もアドベントカレンダーの季節がやってまいりました。
２年前の記事は[こちら](https://qiita.com/shiro-yamada/private/5cc78c7b9ffc573600ea)

今年もたくさんの社内のお困りごとの相談を受けたのですが、自分の中でヒットしたものをご紹介させていただきます。

# お困りごと
コロナ禍で出社状況が変わり、リモートワークが増えてきて、毎日出社を前提とした定期代の支給を見直し、実際の出社日数ベースでの交通費支給に切り替えたいと管理部門からの相談がありました。

### 要件整理
- 本社を含めて拠点全て（シェアオフィスでも使える）
- 社員に負担をかけずに
- 各社員が出社した日をもれなく記録
- 月締めで集計(15日締め)
- 支給金額(日数X往復交通費）の自動計算
- 給与計算システムに取込みたい
- なるはやで（来月から）切り替えたい

# 用意するもの
### [Safie Entrance](https://safie.link/service/analysis/entrance/)
- SaaSの顔認証システム(->各拠点に設置可能）
- iPadを認証端末にできる(->認証端末代が安い）
- 顔写真と照合して社員を特定できる(->顔写真は入社時に全員撮っているので、取り直す必要がない）
- 期間を指定して照合結果ログをCSVで取得できる

### [iPad Air 第4世代]  (https://www.apple.com/jp/ipad-air/?afid=p238%7CsRmADWQV3-dc_mtid_18707vxu38484_pcrid_529045345575_pgrid_13140810381_&cid=aos-jp-kwgo-iPad--slid---product--)
- 無印iPadが市場に全くなかった(半導体不足の影響か、リリースしたばかりだったからか)
- 在庫がなんとか確保できたのがiPad Air (色はバラバラ）

### [iPadスタンド](https://www.amazon.co.jp/gp/product/B094MTJ79M/ref=ppx_yo_dt_b_asin_title_o03_s00?ie=UTF8&th=1)
- 顔の認証ができる高さと傾きにできるもの
- 工事不要

### [電源タップ](https://www.amazon.co.jp/gp/product/B071VC8VWQ/ref=ppx_yo_dt_b_asin_title_o03_s00?ie=UTF8&psc=1)
- マグネットでくっつく
- iPad Airの大型電源アダプタが挿せる

### [働くDB(楽楽販売)](https://www.rakurakuhanbai.jp/?utm_source=google&utm_medium=cpc&utm_campaign=shozaimei_rakurakuhanbai&utm_term=%E6%A5%BD%E6%A5%BD%20%E8%B2%A9%E5%A3%B2&gclid=Cj0KCQiA-qGNBhD3ARIsAO_o7ynwIlig7horErKvvNzTVFiwzjKupIp4lqf3c_vUr9fKmkko39CURsQaAlIaEALw_wcB)
- 個人的に表計算ソフトは使いたくない
- 利用メニュー（テーブル）に権限を付与できるので、担当者のみ閲覧/操作が可能
- ノーコード

# 作り方
### Safie Entrance
- 全社員の社員情報(社員番号＋名前)の登録
- 顔写真(社員番号.png)の登録
- 認証端末の情報を登録

### iPad Air
- Safie Entranceアプリのインストール
- アプリへの管理者権限でのログイン
- 端末の各種設定

### 働くDB(楽楽販売)
- 交通費マスタの登録(社員番号+交通費単価（往復))
- SafieEntranceの照合ログファイルのインポート
- 同一社員>同一日付での重複レコード削除
- 同一社員>日数の集計
- 支給額=日数X交通費マスタの交通費単価を計算
- 給与計算システム取込みCSVレイアウトでの出力
- 出社回数の多い人がわかるグラフ（出社状況把握用）
- 月別の支給額の総合計の推移グラフ（給与システム取込み後の検証用）

# 使い方
### 社員
- 出社したら、入口に設置してあるiPadに顔をかざす。だけ

![iOS の画像 (18).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327516/2cb55a80-8c22-42a5-0018-85a18409a0da.jpeg)


### 管理部担当者
- 締日翌日(16日)にSafie Entranceの照合結果ログから1ヶ月(前月16日〜当月15日)を指定してログデータのCSVを取得する
- 働くDBにインポート
- メニュー（フロー）に従って各処理を実行
- 出社回数の異常値がないか確認
![スクリーンショット 2021-12-02 21.40.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327516/8f481654-c7ae-1c15-ed45-6d10e59246cb.png)

- 給与支給額の計算結果出力CSV(給与計算システムの入力レイアウト）を取得
- 給与計算システムにそのままインポート
- 給与と合わせて振込み

# 最後に
- 定期代廃止の要望を聞く前にSafieさんから色々な提案を受けている中で今回採用したEntranceも含まれていたので、要望を受けた時にパッと閃くことができた。
- 普段から表計算業務を働くDBに置き換えることはやっていたので、働くDBの構築はそれほど大変ではなかった。
- 一番大変だったのは、無印iPadが入手困難で、（コストが上がってしまうが）iPadAirの調達に切り替えて、開始日前々日に納品、インストール、設定、梱包、拠点への配送を行なった
- これからは日頃の業務改善の記事を公開していくことも良いかもしれない・・・と少し思いました。

おまけ）
私の理想の情シスは・・・
ドラマ「HERO」のバーのマスター
　　　「あるよ」

最後までお付き合いいただきありがとうございました。
Figmaの公式ナレッジやドキュメント集めました

## これは何

Qiitaのデザイナーをしています。綿貫といいます。
中の人としてもアドベントカレンダーを盛り上げるべくFigma Advent Calendarを作成し、2日目の記事を書きました！

https://qiita.com/advent-calendar/2021/figma

今回取り上げるのはFigmaから出ている公式のナレッジやドキュメントなどです。
いつも困ったときに見るのですが、周りの人と話すと意外と認知されていないようなのでまとめてみました！

## 一覧

### ベストプラクティス

https://www.figma.com/best-practices/

公式が「ベストプラクティス」という名前でコンテンツを用意しているのが凄い。
コンポーネントライブラリの作り方や最近出たブランチ機能の扱い方など、かなりたくさんの内容が載っています。

余談ですがブランチ機能の扱い方についてを初日の記事として投稿しました。
こちらも読んでいただけたら嬉しいです！

https://qiita.com/xrxoxcxox/items/48ebfcc7055bd51e3e9f

### コミュニティ

https://www.figma.com/community/explore

プラグインやライブラリファイルが探せます。
便利なものがたくさんありますし、大きな組織が公式で出しているファイルはデータを見るだけでも勉強になります。

https://www.figma.com/@Shopify

例えばShopifyのライブラリなど、かなり整理されていて明日からでも真似できるエッセンスが色々詰まっていると思います。

https://www.figma.com/@figma

もちろんFigma公式もたくさんのデータを公開しています。

https://www.figma.com/community/file/928108847914589057

また、FigmaのデザインシステムがFigmaで公開されているのは面白いですよね。

### ショートカット

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/bb315389-0373-524f-73d0-87b1ce17044d.png)

ショートカットを使いこなせるかどうかで作業効率って大きく違いますよね。
Figmaを起動して`⌃ ⇧ ?`を押すとショートカット一覧が表示されます。
さらに、1度使ったことにあるショートカットは上の画像のように青く表示されます。
（使ったことがないと白っぽい表示です。）

### YouTube

https://www.youtube.com/figmadesign

公式のチャンネルがあり、チュートリアルやTipsが豊富です。

[Figma Tips](https://www.youtube.com/playlist?list=PLXDU_eVOJTx53btRMBES-ASBBm03-bUCJ)や[Figma in 5](https://www.youtube.com/playlist?list=PLXDU_eVOJTx5m3U10Q_iZEVn4LjcO3fsK)などサクッと見れるものが多いのでおすすめです。

### 開発者向け

https://www.figma.com/developers

APIやプラグイン開発のためのドキュメントなどがまとまっています。
これらのドキュメントと睨めっこしながら書いた記事もあります笑

https://qiita.com/xrxoxcxox/items/9f7ce7131cd1778850e0

https://qiita.com/xrxoxcxox/items/fd8832eab62f96095527

### ブログ

https://www.figma.com/blog/

最近出た情報、ベータ版として出ている機能など、色々載っています。

### フォーラム

https://forum.figma.com/

ユーザーからも運営からも投稿できて、色んな質問とそれに対する回答が集まっています。

## まとめ

コラボレーションを大事にしたツールを提供しているだけあって、コミュニケーションが非常に親切で行き届いています。
とくにベストプラクティスを公式が公開してくれているのはありがたく、よく読んでいます。

みなさんの参考になれば幸いです！
githubにアクセストークンで接続

### 2021年にgit hubへ接続するのに、password認証ではなくアクセストークンで認証をしなければ行けなくなりました。
セキュリティ強固のためでしょうかね。
多分いろんな人が記事にしているので簡単に。

githubの個人ページから、developper settingにてパーソナルアクセストークンを選択。
その後、トークン発行する。

```
To give your token an expiration, select the Expiration drop-down menu, then click a default or use the calendar picker.
```
トークンが有効な期限を決めます。7日や30日とか設定できます。

```
$ git clone https://github.com/username/repo.git
Username: your_username
Password: your_token
```
Usernameとpasswordを聞かれる際に、passwordはアクセストークンを入力する。
すると、cloneだったりが可能になります。

参考：
https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token  日本語
https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token  英語
django centos7にて mysqlのエラー

### 環境：
centos 7
django 3.2

ステージング環境を作成して、そこにdjangoを置こうとしました。
どうやら、サーバーを立てようとしたところエラーになってしまいました。

```
ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server
```

https://stackoverflow.com/questions/1559955/host-xxx-xx-xxx-xxx-is-not-allowed-to-connect-to-this-mysql-server
こちらの状況と同じ感じになりました。
なので、結果として
900以上の支援がついている

```
mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;
```
を実行しました。

中身を見ていきます。

## 中身
エラー内容は、Host xxxx に 繋がりません。とのこと。allow(許可)がありませんてきなことなので、dbに権限が渡っていないことが考えられます。

dbに権限を与えてあげましょう。
`CREATE USER 'user_name'@'localhost' IDENTIFIED BY 'some_pass';`
create userで、まずはlocalhostに、ユーザー作成しパスワードを設定する。
grant all(https://dev.mysql.com/doc/refman/8.0/en/grant.html)　
は、grant権限を持たせるステートメント(文章)で、権限を付与できるらしい。PRIVILEGESは"特権"という意味。

`GRANT ALL PRIVILEDGES ON データベース.* TO ユーザー名@localhost IDENTIFIED BY 'パスワード' WITH GRANT OPTION;`
と書く。 *(アスタリスク)なので、ワイルドカードの意味ですね。特定のdbとhostに権限を与えてあげる。そういうものらしい。

### その次に、ステージングのdbに権限を与える。

```
CREATE USER 'user_name'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'%' WITH GRANT OPTION;
```
にて、ステージング環境のhostに権限を与える感じ。
host名には、ワイルドカードである_と%が使用できる。_は任意の１文字、%は任意の長さの文字列に一致する。
user名にはワイルドカードは使用できないとのこと。

localhostとステージングの2つに権限を与えるのは、appがdbに接続するため + mysql -u user_name -p でアクセスするための2通りの意味合いがあるかもしれない。(わからない)


そして自分は、dbのパスワードを設定する時に、エラーというか警告が出てきた。
パスワードもっと強固にしてくださいの警告でした。なので、より強固に大文字や記号を用いて設定しました。
https://qiita.com/keisukeYamagishi/items/d897e5c52fe9fd8d9273


参考：
https://qiita.com/ritukiii/items/afdc91e68d0cf3e0f383
https://www.dbonline.jp/mysql/user/index1.html
Google Apps Script の入門テキストを書いた話

:::note
この記事は Google Apps Script Advent Calendar 2021 3日目の記事です。
:::

https://qiita.com/advent-calendar/2021/google-apps-script

---


先日、Google Apps Script の入門テキストを GitHub で公開しました。
Slack の Incoming Webhooks と組み合わせて各種アプリケーションから Slack に通知するスクリプトを題材に、Google Apps Script に入門してみましょう、という内容です。

テキストは以下リポジトリの Releases から取得できます。

https://github.com/hitsumabushi845/gas-slack-integration-text/releases

# モチベーション

一昨年(2019年)に私の働いている会社内で Google Apps Script のハンズオン勉強会を開催しました。
これはスライド形式で実際に集まってわいわいやりながらお題に沿ったスクリプトを書いてみましょう、という内容でした[^1]。
一方、参加できなかった方や、新たに学習したいという方向けにそれ単体で同じ内容を自習できるコンテンツを用意した方がよかろう、ということでテキストを作成していました。

テキスト自体は昨年あたりにほとんど書いていたのですが、勉強会開催以降で加筆修正が必要になるトピックがあったため、情報をアップデートし、CI/CD も整備したので改めて v1.1 として公開しました。

# v1.1 に向けて

v1.1 に向けて手を加えた部分は以下の2点です。

## 情報のアップデート

まず、2019年に開催した勉強会開催以降で大きな変更として以下2点があります。いずれも2020年に行われたアップデートなので遅い感はありますが、テキストをアップデートするモチベーションはこれらになります。というか2021年の宿題だった。

- V8 Runtime の提供
    - V8 の提供により、よりモダンな文法が利用できるようになりました。
    - 以前書いたテキストでは変数を全て `var` で宣言していたので `let` を使う形に修正したり、V8 Runtime ベースの記述に変更しました。

https://cloud.google.com/blog/ja/products/g-suite/data-processing-just-got-easier-apps-scripts-new-v8-runtime

- スクリプトエディタの刷新
    - ブラウザ上でスクリプトを編集する画面、スクリプトエディタの UI が刷新されました。
    - テキスト上のスクリーンショットを新しいスクリプトエディタベースのものに更新しました。

https://developers.google.com/apps-script/releases/2020#december_7_2020

ほか、細かな部分の加筆や更新を行いました。

## CI/CD 環境の整備

改めてテキストを整備するにあたり、LaTeX の組版環境を GitHub Actions に移し、CI/CD を整備しました。
以下記事で説明されている Action をフォークしてすこし手を加えて利用しています。

https://zenn.dev/ganariya/articles/platex-github-action

上記 Action は Docker コンテナで動いているので、GitHub Actions 内だけでなくローカルでも同じ環境を利用できて便利。
この Action を使って Releases へのアップロードと、PR 作成時にタイプセットを行い PDF が生成できるかのチェックを行っています。

# おわりに

というわけで、Google Apps Script のテキストを書いたよ、という紹介でした。
私も GAS について特別詳しいというわけではないので、もし指摘等あればコメントや Issue をいただけると嬉しいです！


[^1]: コロナ禍の現在から振り返るととてもエモい開催形式
【準備時間5分】JavaScriptを学びつつ戦う！RoboCodeやろうぜ！

#JavaScriptを学びつつ戦う！RoboCodeやろうぜ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524081/8cd86f77-d8d7-730d-c7b9-b020511eaf42.png)

※Windows + Node.js環境を想定して書いています。

Git
https://github.com/mokemokepyonpyon/robocode-js/tree/gh-pages

Download
https://github.com/mokemokepyonpyon/robocode-js/archive/refs/heads/gh-pages.zip




##RoboCodeとは
Robocodeとは元々Java言語でプログラミングする対戦型ロボットシミュレータです。
自分プログラミングしたロボットを、世界中のプログラマが開発したロボットと闘わせることができるんです！

youchenleeさんが作成したJS言語バージョンを
更に初心者向けに改良したものが本記事で紹介しているものです。




##はじめかた

### クローンor解凍したZIPの中にある、install.batを起動します。
※中身はただのnpm installです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524081/b3358f40-8e70-0e15-f423-fd32ebcd8d2f.png)

　

### start.batを起動します。 
※中身はただのnode server.jsです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524081/d145476d-6043-2ecd-7e6e-4a7229c7d494.png)

　

### RoboCodeを起動します。 
※中身はただの http://localhost:3000/index.html へのショートカットです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524081/67c892c9-602b-f4a5-b1f3-76d460854443.png)

　

### 画面上で戦車が戦い始めたら準備完了です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524081/1e0253ee-1f6e-da59-61aa-c559802ffb4e.png)





##遊び方


### 基本はオートバトルでステージ0～2 とファイナルステージの敵機を倒していく遊びとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524081/0fb1890e-1763-fe45-d918-06d8707a9eb7.png)

　
　


### 自機の強化

ステージ0はデフォルトのままでは勝てると思いますが、ステージ２以降は自機を強化しなければいけません。

public / robot / myrobot.jsをカスタマイズしましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/524081/3d6fdd73-cb51-25a9-ac01-93ef30a4148b.png)



★参考情報★

自己情報
・ me.id
・ me.x
・ me.y
・ me.hp
・ me.angle-現在の角度（タンク角度+タレット角度）
・ me.tank_angle
・ me.turret_angle

敵情報
・ enemy-spot [N] .id
・ enemy-spot [N] .hp
・ enemy-spot [N] .angle-敵に対する角度（方向）

シーケンシャルアクション：
・turn_left（角度）
・turn_right（角度）
・move_forwards（距離）
・move_backwards（距離）
・move_opposide（distance）-このアクションはOnWallCollide（）でのみ使用できます
並列アクション：
・turn_turret_left（角度）
・turn_turret_right（角度）
・shoot（攻撃）
・yell（メッセージ）
イベント：
OnIdle（）-アイドル時にトリガーされます（実装する必要があります）
OnWallCollide（）-タンクが壁に衝突したとき
OnHit（）-弾丸が当たったとき
OnEnemySpot（）-砲塔が敵に直接面している場合（発砲しない理由はないようです！）



　
　


## おわりに

一通りクリアしたら、攻撃と防衛に分かれて、友人と対戦してみるのはいかがでしょう。

攻撃　myrobot.jsをカスタマイズして、ボスを倒す
防衛　boss-0.js～boss-3.jsのいずれかをカスタマイズして、倒されないように防衛する


地味に盛り上がりますよ。
私が学生だった頃はこの遊びはめちゃめちゃ流行ってました。
Jetson NanoでXMRigを利用してマイニング

# 環境
- 製品 : `Jetson Nano 4GB(A02)`
 - OS : `jetson-nano-jp46-sd-card-image.zip`を利用してセットアップ済み

# システムアップデート
[参考](https://qiita.com/rhene/items/fa311ca19b06605a25eb)

```sh
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt autoremove

# 再起動
sudo reboot
```

# XMRigをビルド
[参考](https://xmrig.com/docs/miner/build/ubuntu)

## 必要なパッケージをインストール
```sh
sudo apt-get update
sudo apt-get install git build-essential cmake libuv1-dev libssl-dev libhwloc-dev -y
```

## ソースコードを取得
```sh
cd ~
git clone https://github.com/xmrig/xmrig.git
```

## ソースコードを編集
デフォルトでは寄付の割合が1%と設定されているため、0%に変更する。

```sh
sed -i -e "s/DonateLevel = 1;/DonateLevel = 0;/g" ~/xmrig/src/donate.h
```

## ビルド
```sh
mkdir xmrig/build && cd xmrig/build
cmake ..
make -j$(nproc)
```

## CUDAプラグインをビルド
Jetson NanoではCUDAを利用するため、CUDAプラグインをビルドして利用する。

```sh
cd ~
git clone https://github.com/xmrig/xmrig-cuda.git
mkdir xmrig-cuda/build && cd xmrig-cuda/build
cmake .. -DCUDA_LIB=/usr/local/cuda/lib64/stubs/libcuda.so -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda
make -j$(nproc)
```

# configurationsファイルを用意する
[こちら](https://xmrig.com/docs/miner/config)のドキュメントや[デフォルト設定ファイル](https://github.com/xmrig/xmrig/blob/master/src/config.json)、[ウィザード](https://xmrig.com/wizard)を参考に`config.json`ファイルを用意し、任意のフォルダに配置する。
(今回は`~/config.json`に配置する。)

以下は`nicehash`を利用する設定ファイルの例。`"cuda" → "loader"`の項目はビルドしたCUDAプラグインのライブラリまでのフルパスを指定する必要があることに注意。

```conf
{
    "autosave": true,
    "cpu": true,
    "opencl": false,
    "cuda": {
        "enabled": true,
        "loader": "/home/<ユーザー名>/xmrig-cuda/build/libxmrig-cuda.so"
    },
    "pools": [
        {
            "coin": null,
            "algo": "cn/r",
            "url": "cryptonightr.usa-west.nicehash.com:3375",
            "user": "<マイニングウォレットアドレス>.jetsonnano",
            "pass": "x",
            "tls": false,
            "keepalive": true,
            "nicehash": true
        }
    ]
}
```

# XMRigを実行
```sh
~/xmrig/build/xmrig -c ~/config.json
```

以下のような初期表示が出力された後にマイニングが開始される。

```
 * ABOUT        XMRig/6.16.1 gcc/7.5.0
 * LIBS         libuv/1.18.0 OpenSSL/1.1.1 hwloc/1.11.9
 * HUGE PAGES   supported
 * 1GB PAGES    unavailable
 * CPU          ARM Cortex-A57 (1) 64-bit AES
                L2:2.0 MB L3:0.0 MB 4C/4T NUMA:1
 * MEMORY       1.0/3.9 GB (27%)
 * DONATE       0%
 * POOL #1      cryptonightr.usa-west.nicehash.com:3375 algo cn/r
 * COMMANDS     hashrate, pause, resume, results, connection
 * OPENCL       disabled
 * CUDA         10.2/10.2/6.15.1
 * NVML         disabled (failed to load NVML)
 * CUDA GPU     #0 00:00.0 NVIDIA Tegra X1 921/12 MHz smx:1 arch:53 mem:2906/3964 MB
```

`cryptonightr`を`cn/r`アルゴリズムでCPU・GPU両方利用してマイニングした際に`29 H/s`ほど出る模様。

## バックグラウンドで実行
バックグラウンドで実行すれば、実行後にsshクライアントから切断しても処理が継続される。

```sh
sudo apt-get install screen
screen -d -m ~/xmrig/build/xmrig -c ~/config.json
```
Ruby 多重継承 Mix-in

# はじめに
`python`から`ruby`に移植する話がありまして、ソースを見ていたところpythonに多重継承がありました。

どうしたものか。
# 競技プログラミング
*[atcoder](https://atcoder.jp/home)* さんには大変お世話になっているものの、`class`どころか`def`もほとんど書きませんので、クラス・モジュール・継承となると再勉強が必要。
*[Ruby Gold](https://qiita.com/superrino130/items/328854a699658ed72d30)* も使わなければ忘れるだけですね。
# Perl to Ruby
ところで、*[PerlユーザーのためのRuby入門](https://www.ohmsha.co.jp/book/9784274065156/)* という本がございまして、例によって20年位前の本になりますが、第5章に`5-2　Perl多重継承v.s. Ruby Mix-in`という興味深い記載が載っておりました。

```ruby
class Staff
  def initialize(hash)
  p :Staff_initialize
    @name = hash[:name]
  end
end

module TradeStaff
  def initialize(hash)
  p :TradeStaff_initialize
    super(hash)
    @sales = hash[:sales]
    @trade_skill = 10
  end
end

module AdminStaff
  def initialize(hash)
  p :AdminStaff_initialize
    super(hash)
    @rooms = hash[:rooms]
    @admin_skill = 10
  end
end

class TradeAdminStaff < Staff
  include TradeStaff
  include AdminStaff
  def initialize(hash)
  p :TradeAdminStaff_initialize
    super(hash)
  end
end

p staff = TradeAdminStaff.new(
	:name	=> "Tom",
	:sales	=> 13000,
	:rooms	=> ["room_001", "room_003"])

```
```ruby
p staff = TradeAdminStaff.ancestors
[TradeAdminStaff, AdminStaff, TradeStaff, Staff, Object, Kernel, BasicObject]
```
`ancestors`すると`継承リスト`が見られますが、`super`でひとつ前の継承されたメソッドが呼ばれることに少し感動しました。
# まとめ
+ 少し感動した
+ ゆくRuby くRuby
Western Digitalの製品を使ってれば無料でCドライブのクローンコピーできる

いつか清書します。
SSD移行したいけどCドライブのクローンで躓いている人向けです。
Acronis True Image WDというソフトを使えば無料でクローンが作れます。
ただし何かのWD(Western Digital)製品を使用していないと認証に通りません。
クローン元とクローン先がWD製である必要はありません。PCに繋いでるだけで十分です。

■事前準備
1.クローン先のドライブ、私は今回SSDを使いました。
2.WD製品の何か、私は今回WD製のハードディスクを使いました。

■クローンソフトのダウンロードリンク
https://www.westerndigital.com/ja-jp/products/apps/acronis

■インストール
![WS000012.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273089/31e6d025-f412-6cf9-149b-efe479d83245.jpeg)
道なりにいけばインストールできます
承諾の際に"Acronisカスタマエクスペリエンスプログラムに参加する"を選ばなくてもソフト使用できます。

■使い方
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273089/a0f052e2-1890-91d5-884a-6bcc61237437.jpeg)

1.ディスクのクローン作成を選択

![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273089/415f3c37-f9a0-47f8-5e4e-f8ec2c0b2827.jpeg)
2.自動を選択

![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273089/b7776907-f483-ee1a-aa16-af1dfadaa1b8.jpeg)
3.クローン元となるディスクを選択

![WS000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273089/2a1329ed-ff2f-e044-2ef5-23bc9adb244c.jpeg)
4.クローン先となるディスクを選択

![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273089/994128ae-c6ce-e8f2-1059-c577a34fbd3d.jpeg)
5."このコンピューターのディスクを交換するには"を選択

6.あとは道なりです。PC電源を落としクローン元となったディスクを外しPC起動すれば移行が完了しています。

おまけ認証失敗した場合
![WS000013.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273089/508c33cf-bb50-e6d0-5996-d90c8409b69e.jpeg)
Dynamics365/モデル駆動アプリのJavascriptの並列の実装サンプル①

Plugin内での並列処理は非推奨になっているため、より高速的に処理を実現するにはD365外部から実装することになります。
APサーバーなどを利用せずに、Javascriptでの並列処理の実現方法を共有させていただきます。
例えば、大量なデータを並列で登録する要件が発生する場合、以下の処理イメージで実装出来ればと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2307534/59c4cce3-cc0d-5fcc-469c-0b77ba154f30.png)

```javascript:sample.js
if (typeof (contoso) == "undefined") {
    contoso = { __namespace: true };
}
(function () {
    "use strict";
    var _currentIndex = 0;
    /**スレッド数*/
    var _concurrency = 20;
    /**処理済み件数 */
    var _processedCount = 0;
    /**総件数 */
    var _totalCount = 0;
    var _targetData = null;

    this.startProcessData = function (targetData) {
        _targetData = targetData;
        if (_targetData == null || _targetData.length == 0)
            return;
        _totalCount = _targetData.length;
        _processedCount = 0;
        _currentIndex = 0;
        Xrm.Utility.showProgressIndicator("processing....");
        for (var index = 0; index < _concurrency; index++) {
            processNextData();
        }
    }
    function processNextData () {
        var nextData = getNextData();
        if (nextData != null) {
            executeBusinessLogic(nextData);
        }
    }
    function executeBusinessLogic(data) {
        var data =
        {
            "lastname": data.name
        }
        Xrm.WebApi.createRecord("contact", data).then(
            function success(result) {
                processOneDataFinished(true);
            },
            function (error) {
                console.log(error.message);
                processOneDataFinished(false);
            }
        );
    }
    function getNextData() {
        if (_currentIndex < _targetData.length) {
            return _targetData[_currentIndex++];
        } else {
            return null;
        }
    }
    function processOneDataFinished(success) {
        _processedCount++;
        console.log("processed count:" + _processedCount + ",processing count:" + (_currentIndex - _processedCount));

 

        if (_processedCount >= _totalCount) {
            processAllDataFinished();
        } else {
            Xrm.Utility.showProgressIndicator(_processedCount + "/" + _totalCount);
            processNextData();
        }
    }
    function processAllDataFinished() {
        console.log("all data finished");
        Xrm.Utility.closeProgressIndicator();
    }
}).call(contoso.multithreadsample || (contoso.multithreadsample = {}));

//#region test
var targetData = [
    { name: "test1" },
    { name: "test2" },
    { name: "test3" },
    { name: "test4" },
    { name: "test5" },
    { name: "test6" },
    { name: "test7" },
    { name: "test8" },
    { name: "test9" },
    { name: "test10" }
];
contoso.multithreadsample.startProcessData(targetData);
//#endregion
```
上記のコードはブラウザのコンソールで実行可能です。
上記のサンプルは、大量なデータの登録のサンプルになりますが、JavascriptからCustomActionまたはCustomApiを呼び出して、さらに機能を拡張することが可能です。
![MicrosoftTeams-image (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2307534/1eddefd4-1994-eee1-e224-0258063fee5b.png)
【雑メモ】BlackBelt_CloudFormaion


こいつをかいつまんでメモ
https://d1.awsstatic.com/webinars/jp/pdf/services/20200826_AWS-BlackBelt_AWS-CloudFormation.pdf
#テンプレート記述

###要素
versionバージョン

desctiption説明

metadata追加で記述するもの（それぞれの記述に入れれる）

parameter
スタック作成時にユーザーが記述する情報
パラメータグループで複数の設定値をグループ化できる

resources
自動で作成されるリソースの設定を記述（必須）

output
スタック作成後に出力されるデータ

transform
マクロを利用したやつ
他のテンプレート引っ張ったりでいる

mappings
特定の設定を入れるとそれに対応した設定をしてくれる
例えば、リージョン指定したらそれに応じたリソース作成してくれるみたいな

condition
一定条件を満たすとリソース作成するみたいなことができる


###組み込み関数
ref
Fn::
とかある
だいたい!かFn::であらわされう
疑似パラメータ
組み込み関数っぽいやつがAWS側で事前に用意されている
AWS::regionとかいれたらregionいれるとか

###補足
論理ID
テンプレートで一意
物理ID
実際のリソース名

#デプロイ
①codepipeline
自動。手動で変更される心配がない
②変更セットで変更（直接更新も可能）
③スタックセットで他のリージョンにも一気に展開できる


またスタック分割で
ライフサイクルや依存関係でレイヤーを分けてテンプレートを作成すると変更セットを作成するときに便利

ドリフトで何を変更したかを見ることができる

#運用

リソースの削除保護
IAMのテンプレートをスタックへインポートする
テンプレートに削除保護に関する属性をいれておくことでリソースを保護できる
RustでENSのその後

## 前書き

3年ほど前にRustでweb3を触りつつ、ENS(Ethereum Name Service)を紹介し、RustでENSを扱えるcrateを作ったのでした。

https://qiita.com/hhatto/items/555f57e6a7713772c020

https://crates.io/crates/ens

そして時は経ち、つい最近rust-ensのGitHubにこんなissueがあがりました。

https://github.com/hhatto/rust-ens/issues/3

要約すると、[rust-web3](https://crates.io/crates/web3)の方にENS関連の機能を組み込んじゃうよ！？という内容でした。
私はrust-web3の方で使える方が良いのでやっちゃってください！！と返しました。

そして1週間程前に無事にpull-requestが取り込まれたようでした。
https://github.com/tomusdrw/rust-web3/pull/562

というわけでrust-web3でENSを触ってみます。

## 環境

Rust 1.56.1 stable
MacOSX 11.6 (Intel Mac)
rust-web3 https://github.com/tomusdrw/rust-web3/commit/1f807bb7c288a1d2668c691839381786065b2eac

## 使ってみる

```shell-session
$ cargo new rustens
$ cd rustens
```

まだENS扱える機能はcrate.ioには登録されていないので、gitのrev指定で使います。

```toml:Cargo.toml
[package]
name = "rustens"
version = "0.1.0"
edition = "2021"

[dependencies]
web3 = { git = "https://github.com/tomusdrw/rust-web3.git", rev = "1f807bb7c288a1d2668c691839381786065b2eac" }
tokio = "1.14.0"
```

ENS名 `vitalik.eth` のEthereumアドレスを表示してみることにします。

```rust:src/main.rs
use web3::contract::ens::Ens;
use web3::api::Namespace;

#[tokio::main]
async fn main() -> web3::Result<()> {
    let transport = web3::transports::Http::new("http://localhost:8545").unwrap();

    let ens_name = "vitalik.eth";

    let ens = Ens::new(transport);
    let addr = ens.eth_address(ens_name).await;
    println!("{:?}", addr);

    Ok(())
}
```

```shell-session
$ cargo run
Ok(0xd8da6bf26964af9d7eed9e03e53415d37aa96045)
```

無事 `vitalik.eth` のアドレスを得ることができました 👍
python初心者の備忘録~Pandas編~※2021/12/06更新

#はじめに
社会人1年目のyappiです！
最近は仕事おわりにすぐさまpythonの勉強をしています！
kaggleやpythonの学習を進める中で、よく使ったライブラリについてまとめておきます。
今回はPandasについてまとめます。今後も使用したメソッドについてはここに追記していきます。

##Pandas
kaggleの分析をする際に、1番初めに使用したPandasです！
ファイルの読み込みの際には、欠かせないライブラリですよね。
まぁ、Udemyなどで学習をしている中でも様々なライブラリは出てきましたが...。

ファイルの読み込み

```ruby
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
```

先頭5行を表示

```ruby
test.head()
```

最後尾5行の表示

```ruby
test.tail()
```

任意の列だけ表示

```ruby
test[['Fare', 'Age']].head()
```

任意の行だけ表示

```ruby
#10~15までの行を表示
test[10:16]
```
条件を指定して値を表示

```ruby
test[test['Age'] > 20]
```

欠損値の穴埋め、削除

```ruby
train['Fare'] = train['Fare'].fillna(train['Fare'].median())
train['Age'] = train['Age'].fillna(train['Age'].median())
train['Embarked'] = train['Embarked'].fillna('S')

train.dropna(subset=['Fare'])
train.dropna(subset=['Age'])
train.dropna(subset=['Embarked'])
```

値の変換

```ruby
train['Embarked'] = train['Embarked'].map({'S':0, 'C':1, 'Q':2}).astype(int)
```

平均値の取得

```ruby
train.mean()
```

欠損値の抽出

```ruby
train['Fare'].isnull()
train['Age'].isnull()
```

##おわりに
まだまだ使えるメソッドはあるかと思いますが、今回はTitanicを進めていく中で、使用したライブラリ、また、基本的なメソッドについてまとめました。
今後も新しいメソッドやデータの加工について調査する機会があればここに追記していきます。

##更新履歴
vol.01　初めての投稿(2021/12/02)
vol.02　Pandasの基本的な文法の追記(2021/12/06)
[Java]ArrayListとLinkedListの違いについて


この記事は、[シアトルコンサルティング株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/seattleconsulting)の24日目の記事です。
こんにちは、シアトルコンサルティングの小泉です。

##はじめに
今回はJavaのコレクションフレームワークであるListについて調べてみました。
その中でもArrayListとLinkedListのそれぞれの特徴について説明します。

##ゴール
ArrayListとLinkedListの違いについて理解する。

##はじめに
JavaのコレクションフレームワークであるListについて説明します。
  
## Listクラス
java.util.ArrayList  
・配列型のリスト  
・指定位置の要素の取得が速い  
・要素の挿入、削除が遅い  
  
java.util.LinkedList   
・線形リスト型のリスト  
・指定位置の要素の取得が遅い  
・要素の挿入、削除が速い

## ArrayList
Listインタフェースを実装したコレクションクラスです。
「Array」という名にあるように「配列のような感覚」で扱うことができます。  
書き方は下記の通りです。

ArrayList<型> 変数名 = new ArrayList<型>();

```java
import java.util.ArrayList;
import java.util.List;

public class Main {

    public static void main(String args[]) {

        List<String> sampleList = new ArrayList<String>();
        sampleList.add("1回目のリストに格納");
        sampleList.add("2回目のリストに格納");

        // リストに格納した全要素を順番に出力
        for (int i = 0; i < sampleList.size(); i++) {
            System.out.println(sampleList.get(i));
        }
    }
}
```
・要素の追加：addメソッド  
・要素の取得：getメソッド
####特徴
ArrayListは要素がそれぞれ順序番号を持っており、全てメモリ上でインデックス化されているため、特定の要素へすぐにアクセスすることが出来ます。
一方、末尾意外の要素を足したり引いたりする際は、それ以降の要素全ての順序番号を繰り上げたり繰り下げたりするための再配置処理が行われるため多くの時間がかかってしまいます。

## LinkedList
LinkedListは、要素同士を前後双方向のリンクで参照するリンクリストを表します。  
書き方は下記の通りです。

LinkedList<型> 変数名 = new LinkedList<型>();

```java
class Main {
  public static void main(String args[]) {

         List<String> sampleList = new LinkedList<String>();
        sampleList.add("1回目のリストに格納");
        sampleList.add("2回目のリストに格納");

        // リストに格納した全要素を順番に出力
        for (int i = 0; i < sampleList.size(); i++) {
            System.out.println(sampleList.get(i));
        }
    }
}
```
・要素の追加：addメソッド  
・要素の取得：getメソッド
####特徴
LinkedListでは要素同士が、それぞれ前後に持っているリンク情報で繋がっています。

それぞれの要素は順序番号を保持していないため、特定の要素を取り出す際は、先頭もしくは末尾から一つずつ順序を数えていく必要があります。そのため順序番号があらかじめ保持されているArrayListに比べると、多くの時間がかかってしまいます。
一方、要素を足したり引いたりする際は、リンク情報を書き換えれば終わりなので、再配置処理が行われない分ArrayListよりも高速です。

##さいごに
ArrayListとLinkedListそれぞれの特徴は理解していただけましたでしょうか？
ソースコードに関してはほぼ同じですが、処理の中身の違いを理解することで開発する際に役立つと思います。
Git環境で独自のコマンドを登録する【zsh, bash】

## はじめに
Railsで開発するならbundle e rails （省略）とかめちゃくちゃ使用します。
私はgit pull origin feature/add-watch-modelとか当たりまえのようにタイピングしてました。

そして今更ですがaliasで独自コマンドを設定したので1人でも誰かの役にたてば良いな
と思って記事にしました。

## 参考記事
https://etalocohcetihw.com/blog/git_optimization/

https://qiita.com/reireias/items/d906ab086c3bc4c22147

## 環境
- shell: zsh

## 独自コマンド登録方法
とりあえず下記で登録できます。

```terminal
 alias g='git'
```
でもターミナルを閉じたり分割すると使用できなくなります
なのでシェルの設定ファイルに書き込みます

## シェルの設定ファイルへ書き込む
だいたいの人はbashかzshを使用していると思いますので下記のコマンドで設定ファイルを開きます

```terminal
 vi ~/.zshrc  # zshの場合

 vi ~/.bashrc  # bashの場合
```

aliasを設定する(ちなみに私の設定内容です)
iを押してINSERTモードにします

```terminal
 # aliasの設定
 alias ll='ls -l'
 alias la='ls -la'

 alias ..='cd ..'
 alias ...='cd ../..'
 alias ....='cd ../../..'

 alias g='git'
 alias gs='git status'
 alias gb='git branch'
 alias gd='git diff'
 alias gf='git fetch'
 alias gc='git commit'
 alias gch='git checkout'
 alias ga='git add'
 alias gcp='git cherry-pick'
 alias gps='git push origin $(git rev-parse --abbrev-ref HEAD)'
 alias gpl='git pull origin $(git rev-parse --abbrev-ref HEAD)'

 alias b='bundle'
 alias be='bundle exec'
 alias bi='bundle install'
 alias bo='bundle outdated'
 alias bu='bundle update'
 alias beru='bundle exec rubocop'
 alias berua='bundle exec rubocop -A'
 alias ber='bundle exec rspec'

 alias rc='bundle exec rails c'
 alias rcs='bundle exec rails c -s'
 alias rs='bundle exec rails s'
 alias rg='bundle exec rails generate'
 alias rr='bundle exec rails routes'
 alias rdb='bundle exec rails db'
 alias rmi='bundle exec rails db:migrate'
 alias rms='bundle exec rails db:migrate:status'
 alias rmr='bundle exec rails db:migrate:reset'

 alias v='code .'
 alias vs='code .'
```
そして:wqで保存します

## 最後に忘れがちなやつ
下記コマンドで設定を反映させる

```terminal
 source ~/.zshrc # zshの場合

 source ~/.bashrc # bashの場合
```

## まとめ
これで快適になりました。
とくにgit pullやgit pushはめちゃくちゃ楽になりました！
他に便利な独自コマンドがあれば教えて頂けると嬉しいです。
PHP 8.1 がリリース！だけど思わぬ落とし穴も

# PHP 8.1 がリリース！
2021年11月25日に **PHP 8.1** がリリースされました :tada:

https://www.php.net/releases/8.1/en.php

enum の追加や readonly プロパティが設定できるなど、嬉しい機能が盛りだくさんですね。
詳しい内容は既に記事がありますので、ぜひそちらをご覧ください（感謝！ :bow: ）。  

https://qiita.com/rana_kualu/items/e350b8ff80f929626eb9

# Laravel の対応は？
普段は **Laravel** をメインで使っていますので、 **PHP 8.1** の恩恵を受けるためには **Laravel** のバージョンアップをしなければなりません。
Github を見ると、2021/10/22 リリースの `v8.67.0` からサポートされているようです。

https://github.com/laravel/framework/blob/8.x/CHANGELOG-8.x.md#v8670-2021-10-22

ただ、依存パッケージが対応しているかなどは調査が必要ですし、リリース済のコードだと尚更気軽にバージョンアップはできないです。
つまりプロジェクトによってはあまり関係ない...そんなふうに考えていた時期が僕にもありました。

# 一方その頃...
それはいつも通りチームメンバーが **PHP 8.0** × **Laravel v8.33.1** 環境で CD/CI を回したときでした。
急に CD/CI が泡を吹いて倒れたのです。

```:エラーログ
Fatal error: During inheritance of ArrayAccess: Uncaught ErrorException: Return type of Illuminate\Support\Collection::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in vendor/laravel/framework/src/Illuminate/Collections/Collection.php:1411
```

みたことないエラーだったので、パッと見は原因がわかりませんでした。
ちょっと前までは元気に動いていたのに一体どうして...
ただ、幸いにも原因はすぐに目星がつきました。

## 原因は composer の docker image
このエラーはバックエンドのビルド時に起きたもので、そこでは **Docker** で `composer:2` というイメージを使用していました。
このイメージの中で使用されている **PHP** のバージョンが `8.1` に上げられたことが原因でした。

https://hub.docker.com/layers/composer/library/composer/2/images/sha256-f86fff82ba8aeed74a511d5e9c12fc163a91f5af77cb7dab0f470aecc2d0e03e?context=explore

![スクリーンショット 2021-12-01 18.00.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244532/3aa8fa80-e9b3-12f8-9ac0-d380b0702a1a.png)

イメージを `composer:2.1.11` に指定したところ、無事にビルドが通るようになりました。
`composer:2.1.12` 以降は **PHP 8.1** を使うようになっているようなので、しばらくは注意が必要です。

# 教訓
**Docker** のイメージはちゃんとマイナーバージョンまで指定した方がいいですね。
あと今回は **PHP 8.1** がリリースされたことを知っていたことが大きく、エラーになったタイミングとリリースされた日が近かったので目星がつき、早期の解決につながりました。
自分が使っている技術については最新情報をキャッチアップすることが大事だと改めて認識しました。
Power Automate: 並行タスクの開始部分を無くす方法（バグ？）

# 目的
無いです。
Scope内だと、並行タスクの分岐を削除することで、一風変わったフローが作れます。
「え？」っていう驚き程度

Clipboard経由でコピーも可能ですし、普通に保存も出来ます。
現時点のバグともいえる？

# 動作
動画で見たほうが分かりやすいと思う
![Parallel.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/84e03d17-d10d-eccc-7b15-6bd769e0d7c1.gif)
kintone プラグインよくあるトラブル インストールできない

kintone プラグインのよくあるトラブルとして、「インストールできない」があります。
原因と対応方法について、まとめてみます。

# プラグインが kintone に読み込めない

「インストールに失敗しました。プラグインのファイルが不足している、または正しくありません。」のエラーが表示される。

![2021-12-02_19h44_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/7a2a59f6-1d54-7ea7-cf6c-49b0acef74d2.png)

# エラーになる経緯

- プラグインをダウンロード時に、ブラウザーが zip ファイルを自動展開。
    - mac の Safari だとzip ファイルを自動展開する場合が多い
- 自動展開後のフォルダーにある contents.zip ファイルを kintone に読み込ませた。


![2021-12-02_19h29_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/f6434a8c-cad1-2be5-0392-24f497379667.png)



# 対応方法

- 自動展開前の zip ファイルをそのまま kintone に読み込みましょう。
    - kintone ルックアップコピー項目編集プラグインのファイル例
![2021-12-02_19h41_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/56f41645-4fad-a3ab-d945-4614b3ee5d06.png)


# mac Safari の zip ファイル自動展開の抑止方法

Safari で、zip ファイルをダウンロードすると、自動展開するのが規定値です。
プラグインのダウンロードでは、自動展開されると困りますので、自動展開しないように設定します。

- safari の環境設定をクリックして、「一般」タブを表示
- 「ダウンロード後、"安全な"ファイルを開く」のチェックを外す

![スクリーンショット 2021-12-02 20.05.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/d1ec8cbf-7980-7dac-5dc1-923c4dd49b31.png)
Macにおけるファイルエンコーディングの確認方法

##はじめに
[プロを目指す人にためのRuby入門](https://ruby-book.jnito.com/)に取り組んでいたところ、ファイルエンコーディングを確認する機会があったため、忘れないようにメモとして残しておこうと思います。

##ファイルエンコーディングの確認方法
ファイルエンコーディングを確認する際は`file`コマンドを使用します。`--mime-encoding`をオプションとして加えることによって、ファイルエンコーディングのみ出力されます。

```shell:コンソール
file --mime-encoding sample.rb 
sample.rb: utf-8
```

出力結果から、ファイルエンコーディングはUTF-8だとわかりました。

[UTF-8](https://wa3.i-3-i.info/word1812.html) (文字コードとファイルエンコーディングの違いで混乱した時に読んだ記事です)
kintoneとクラウドサービス間のデータ連携について

# はじめに
近年様々な業務システムがクラウドに移行しています。各業務に特化した便利なクラウドサービスが多数提供されており、kintone以外にも3つ、4つのクラウドサービスを並用している企業も少なくありません。
このような状況下で発生する次なる課題が、利用しているクラウドサービス間のデータ連携です。

:::note warn
別のサービスで収集した顧客データを、kintone内のアプリに自動登録したい。
:::
:::note warn
kintone内のデータを利用して別のサービスでデータ分析を行いたい。
:::
など…
今回はこのようなケースが発生した際に活用できる、「kintoneと他のクラウドサービス間のデータ連携」の手法についてまとめました。

# データ連携の手法について
## 方法① : kintoneのAPIを使用する
エンジニアの方が真っ先に思いつく手法といえば、API連携ではないでしょうか。kintoneにもAPIが用意されています。kintoneと連携したいシステムが自身で手を加える事ができるシステムであれば、APIによる連携が可能です。
![api.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459104/9c5cae0c-ef7d-6d18-0b2a-803aeab91f90.png)

### メリット
・kintoneのAPIを使用して自由度の高いデータ連携が可能である。
・リアルタイムかつ安定したデータ連携が可能である。

### デメリット
・システムの改修が発生するため、導入コストが大きくなる。
・連携したいシステムに手を加える事ができない場合は利用できない。

## 方法② : iPaaSを利用する
近年クラウドサービス間のデータ連携ツールとしてHOTなのがiPaaSです。iPaaSとは「Integration Platform as a Service」の略で、様々なクラウドサービス間でデータ連携を可能にするクラウドサービスです。
ほとんどのiPaaSサービスがkintoneとの連携に対応しており、連携したいクラウドサービスがiPaaSに登録されていれば、iPaaSを用いたデータ連携が可能になります。
![integromat.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459104/7ae51343-9792-e3ed-6f48-8b7654eb6580.png)
※参考イメージはintegromatのエディタ画面

### メリット
・自動化実現までが早い。
・エンジニアの経験が無くても構築できる。
・リアルタイムかつ安定したデータ連携が可能である。

### デメリット
・2021年12月現在、主要なiPaaSは日本語に対応していない。
・連携したいクラウドサービスがiPaaSに登録されていない場合は利用できない。

### 主なiPaaS製品
#### integromat
https://www.integromat.com/
無料プランでも十分な自動化フローを構築できます。他のiPaaSに比べて自由度が高く、柔軟なフローを構築できます。初めに使ってみるiPaaSとしてもおすすめです。
#### Zapier
https://zapier.com/
多数のビジネス向けクラウドサービスに対応しているため、企業での導入が多いiPaaSです。
#### IFTTT
https://ifttt.com/
有名な音声サービスやチャットシステムに対応しており、プライベート用途での利用が多いiPaaSです。

## 方法③ : クラウド型RPAを使用する
もう1つデータ連携の分野で注目を集めているのがクラウド型RPAです。RPAとは「Robotic Process Automation」の略で、単純作業をロボットで自動化する事を指します。画面からのコピー＆ペーストや連携用ファイルのダウンロード、アップロード作業などをロボットに任せる事で、データ連携を実現する事ができます。中でもクラウド型RPAはブラウザ上で行う操作を自動化する事に特化したRPAサービスです。
![cloudbot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459104/bcbfec47-fa7b-464f-dfaf-67361cb8c5e3.png)
※参考イメージはCloud BOTのエディタ画面

### メリット
・自動化実現までが早い。
・エンジニアの経験が無くても構築できる。
・APIなどを持たないサービスでも連携する事ができる。

### デメリット
・定期実行によるデータ連携が基本になるため、上記2つの方法と比較するとリアルタイム性が落ちる。
・サービス画面のレイアウトなどが変わると、ロボットが動かなくなる事がある。

### 主なクラウド型RPA製品
#### Cloud BOT (クラウド・ボット)
https://www.c-bot.pro/
無料プランがあります。非エンジニアでも簡単にロボットを作成し、運用できるようになっていますので、初めに使ってみるRPAサービスとしてもおすすめです。
#### BizteX cobit (ビズテックス・コビット)
https://service.biztex.co.jp/
充実したサポート体制で、導入支援からロボットの作成、運用開始までをしっかりサポートしてくれます。
#### Robotic Crowd (ロボティック・クラウド)
https://www.roboticcrowd.com/
初心者の方でもブラウザから簡単にワークフローを構築する事ができるようになっています。

#さいごに
最後までお読み頂きありがとうございます。今後は時間やコストをかけずにノーコードでデータ連携を実現する方法としてiPaaSやクラウド型RPAへの注目がさらに高まる事が予想されます。
kintoneとの連携はもちろんの事、クラウドサービス間のデータ連携が必要になった際の手段として、皆様のご参考になれば幸いです。