OmniAICreator/Qiita-1.07M huggingface dataset:
「AI×映像制作」動画制作にAIは活用できるのか？おすすめAIツール＆活用事例を紹介

「AI×映像制作」AIを映像制作に活用した事例を紹介

目次

■もはや生活の一部となったAIツール

■おすすめAIツール

■映像制作で活用されるAI技術：画像生成や全自動で撮影ができる

■映像制作で活用されるAI技術：動画編集のコストを削減できる

■映像制作で活用されるAI技術：動画の分析ができる

Iに映像制作を代行してもらいたいと考えたことはありませんか？映像制作や動画編集に関わる、プロ、アマチュア、フリーランスなどの方は、一度は考えたことがあるのではないでしょうか。

動画生成技術をはじめとしたAI技術はどの程度進化して、実際にどのように私たちの生活に生かされているのでしょうか？映像制作や動画編集とAIの協力が進む未来はあるのでしょうか？

近い将来、動画編集が完全に自動化される時代が訪れ、映像の解析技術が進んで様々な個人情報がマーケティングに利用される時代が来るかもしれません。現代に暮らす私たちにとっては、新しい技術であるAI技術は登場したばかりで、まだまだ手探りの状態で使っているというのが現実です。

世界的に注目を集めるAI技術をどのように活用して、その技術を日々の生活やビジネスに活用していけばよいのかがわからないといった所が本音ではないでしょうか。

今、AIをどのように活用することが、私たちに求められているのか、最新のAI技術を活用した映像制作の事例3つを元に紹介していきます。


▼さらに詳しく読む場合は、こちらからご覧ください。

https://fine-production.co.jp/column-10/

-----------------------------------------------


メインサイト
⇒https://fine-production.co.jp/
サブサイト
⇒https://peraichi.com/landing_pages/view/lp-fine-production
Pythonで「多次元リストの作成と要素の取得」の動作を確認してみた

# 概要

Pythonで「多次元リストの作成と要素の取得」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/python/list/index15.html

# 実装

以下のファイルを作成しました。
```sample.py
stafflist = [["Yamada", 25], ["Suzuki", 38], ["Tanaka", 28]]
print(stafflist[0])
print(stafflist[1])
print(stafflist[2])

stafflist = [["Yamada", 25], ["Suzuki", 38], ["Tanaka", 28]]
print(stafflist[0][0])
print(stafflist[0][1])
print(stafflist[1][0])
print(stafflist[1][1])
print(stafflist[2][0])
print(stafflist[2][1])

stafflist = [["Yamada", 25], ["Suzuki", 38], ["Tanaka", 28]]
for p in [0, 1, 2]:
    for m in [0, 1]:
        print("[" + str(p) + "][" + str(m) + "] = ", end='')
        print(stafflist[p][m])
```

以下のコマンドを作成しました。
```
$ python3 sample.py 
['Yamada', 25]
['Suzuki', 38]
['Tanaka', 28]
Yamada
25
Suzuki
38
Tanaka
28
[0][0] = Yamada
[0][1] = 25
[1][0] = Suzuki
[1][1] = 38
[2][0] = Tanaka
[2][1] = 28
```

# まとめ

何かの役に立てばと。
OST ファイルを添付ファイル付きの PST ファイルに変換する方法

<p>OST ファイルを添付ファイル付きの PST ファイルに変換する方法</p>

<p>この記事では、OST ファイルを PST ファイルに変換する理想的な方法を紹介します。変換に苦労している場合は、ここが最適な場所です。 このブログでは、最も一般的な 2 つのアプローチ、つまり手動による方法と自動化された方法について説明します。 また、最も安全で使いやすい自動 OST から PST へのコンバーター アプリケーションへのアクセスも提供します。 OST から PST への変換手法に進む前に、まず OST ファイルを PST ファイルにエクスポートする必要がある理由について説明します。</p>

<p style="text-align:center"><a href="https://www.mailvita.com/dl/osttopst.dmg"><strong>ダウンロード中</strong></a></p>

<h2>OST から PST ファイルへの変換が必要な理由</h2>

<p>Exchange Server メールボックスのオフライン ファイル形式は OST と呼ばれます。 オンラインに戻ると、インターネットにアクセスせずにオフライン中に完了した作業を同期できるようになります。 ただし、OST ファイルは非常にデリケートで、害を及ぼす可能性があります。 さらに、OST ファイルは Outlook 以外の電子メール クライアントでも開くことができます。 このため、ユーザーは Eudora、Thunderbird、Apple Mail Entourage のデータにアクセスするには、OST 電子メールを PST に保存する必要があります。</p>

<h3>解決策 1: 手作業による OST から PST ファイルへの変換</h3>

<p>OST データを PST 形式に変換するには、この手動テクニックの 2 つの手順に従う必要があります。 最初のステップは OST ファイルを PST ファイルに変換することであり、2 番目のステップは PST ファイルを Thunderbird にインポートすることです。 それでは、今すぐ始めましょう。</p>

<h3>ステップ 1: 古いストレージ ファイルを Outlook PST 形式に交換する</h3>

<ul>
	<li>最初の手順では、コンピュータに Microsoft Outlook をセットアップする必要があります。</li>
	<li>次に、ファイルを選択し、「開いてエクスポート」ボタンをクリックします。</li>
	<li>次に、[インポート/エクスポート] オプションを選択した後、インポートおよびエクスポート ウィザードから [ファイルにエクスポート] を選択します。</li>
	<li>ここで「次へ」ボタンをクリックします。</li>
	<li>次に、[ファイルにエクスポート] ウィンドウで、Outlook データ ファイル (.pst) を選択します。</li>
	<li>次に、「次へ」ボタンを押す必要があります。</li>
	<li>このステップではエクスポート元のフォルダーを選択し、「次へ」をクリックします。</li>
	<li>次に、PST を保存する場所を指定した後、[サブフォルダーを含める] チェックボックスをオンにします。</li>
	<li>最後に「完了」ボタンを押してください。</li>
	<li>(逸脱) パスワードを作成した後、[OK] をクリックします。</li>
</ul>

<h3>手動によるアプローチにはいくつかの問題があります</h3>

<ul>
	<li>手動手順全体を通じて、データ損失の可能性が高くなります。</li>
	<li>セキュリティの保証はありません。</li>
	<li>手動の方法を使用して、複数の OST 電子メールを一度に PST に変換することはできません。</li>
	<li>手動の方法では、変換手順全体が完了するには時間がかかりすぎました。</li>
	<li>この手動の方法を使用して OST を PST ファイルに変換するには、ユーザーの技術的な専門知識が必要です。</li>
	<li>これらの問題をすべて見逃したい場合は、自動化された方法を使用できます。</li>
</ul>

<h3>解決策 2: OST から PST ファイルへの自動エクスポート</h3>

<p>この自動プロセスを利用するには、利用可能な最も安全な機器を認識する必要があります。 OSTをPSTに変換する自動プログラムを提供します。 OST データを PST ファイル形式にインポートする場合。 このプログラムは、利用可能な最も適切なオプションです。 さらに、この自動化ソリューションでは、OST から PST への一括変換が可能です。</p>

<p>さらに、変換プロセスを開始する前に OST データを評価するオプションも提供します。 オフライン OST ファイルの電子メール、連絡先、イベント、メモ、日記を Outlook PST ファイルに安全に変換できます。 わずか数分で、ユーザーは破損した OST ファイルを回復できます。 <strong>Mailvita <a href="https://www.mailvita.com/ost-to-pst-converter-for-mac/">OSTからPSTへの変換ツール</a></strong> は、10.15 &quot;Catalina&quot;、10.14 &quot;Mojave&quot;、12. &quot;Monterey&quot;、11. &quot;Big Sur&quot; を含むあらゆる Mac OS バージョンで動作します。 Microsoft Outlook および Windows OS のすべてのバージョンもサポートされています。</p>

<h3>自動化ソフトウェアの使用方法:-</h3>

<p>1. Mac および Windows 用の Mailvita OST to PST コンバーター ツールをダウンロードしてインストールします。<br />
2. 変換する OST ファイルを追加し、「参照」ボタンをクリックします。<br />
3. OST ファイルのすべてのアイテムのプレビューを表示します。空のフォルダーは無視する必要があります。<br />
4. 変換された PST ファイルの保存先を指定し、参照ボタンをクリックします。<br />
5. 「今すぐ生成」ボタンをクリックします。</p>

<p><img alt="" src="https://www.mailvita.com/img/scr/ost-to-pst/convert-ost-to-pst.webp" /></p>

<h3>結論</h3>

<p>OST ファイルを PST ファイルに変換するための最良のソリューション (手動および自動の方法) については、このブログで説明しました。 手動の方法では、一度の試行では多数の OST ファイルを PST に変換できず、技術的な知識が必要です。 逆に、自動化されたアプローチでは、これらの機能がそれぞれ提供されます。 OST ファイルを PST ファイルにエクスポートする方法は完全にあなた次第です。</p>
[OCI] BaseDB の OSをバージョンアップする

# やったこと
Oracle Cloud (BaseDB)のOSがバージョンアップできるようになっていたのでやってみました。
Oracle Linux 7.9 -> Oracle Linux 8.8 です。

オンプレ環境ではかなり大変な作業が、数クリックで完了！

# 前提
2023/12時点になります。
どのバージョンにできるかは時期によって異なると思います。
ただし、おおまかな実行方法はそんなに変わらないでしょう。

BaseDBを新規作成したときのOSが変わったのですが、
それに伴いすでに作成されていたBaseDBのバージョンアップが可能になったようです。


# バージョンアップ手順

最初に、現在のOSバージョンを確認すると Oracle Linux 7.9でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/fa2c32f4-af87-c128-e503-a825fd1674c1.png)


OCIコンソールから、昔作ったBaseDBを確認します。
普段はOSの行は表示されていないのですが、バージョンアップが可能になると表示されるようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/e8620e8d-c1c8-cafc-a0f8-d8c1f4a71ec1.png)


DBシステムのセクションに 「OS」更新が可能な旨が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/a10b16bd-a759-00ea-1510-1f30b435fe6d.png)


パッチの横にある点をクリックして、メニューを表示します。
「事前チェック」で事前確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/7f6dca24-da18-f211-8772-485b76bd60ed.png)


ダイアログがでるため「事前チェックの実行」をおします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/9a81f4b8-bba9-ff9e-0b7e-7a5852708a5a.png)


画面が「事前チェック中」になりますので、終わるまで待ちます。
この時の環境では3分ぐらいで終わりました（速度はCPU種類やOCPU数によると思います）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/f5da4ebd-8a2f-b1ff-784f-36600b2a1e34.png)


DBシステムのところの「表示」リンクで
「更新履歴」をみると結果が確認できます。
更新履歴画面は左上のリンクからとべます。
事前チェックが成功したようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/d4a8c948-52ca-7504-6b03-d0029e76dc24.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/4b555afe-7bd8-ff18-fc2a-c1eaaad24ded.png)


左上のリンクから「更新」を選択し
「適用」を選んで実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/8b6789d0-4d7d-2914-bf1e-170872f94da2.png)


DBシステム名を入力して、「DBシステムのアップグレード」ボタンをおします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/06ba84bc-a886-138e-3b1f-10d572824a83.png)


アップグレード中になりました。終わるまで待機します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/a4b95572-8862-533d-b04e-dddd7cd42329.png)


実行の途中でDBの状態を確認すると一時的に「ノードが停止」になっていました。
OSアップグレード中にOS再起動が行われていそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/a12e7a69-13ef-5aa2-8526-eea4bf931b3a.png)


「更新履歴」タブでも確認できます。
40分程度で完了しました。BaseDBの場合、実行時間はCPU種類やOCPU数で結構かわります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/1c2d4a84-3ce0-bc80-7b94-35971a911f70.png)


BaseDBの画面に表示されていたOSアップグレードのリンクが消えました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/4a2c6a9b-9dae-1b9c-8872-bfdd42f77a58.png)


# その後の確認
OS情報をみると 8.8 に変わっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2551183/c7ce10c0-3dcb-d0f0-a935-a9a6f16f854b.png)

これでOSアップグレードは終了です。
かなり簡単に行えました。
OCIjp2023年まとめ＆来年の抱負

本記事は、[Oracle Cloud Infrastructure Advent Calendar 2023](https://qiita.com/advent-calendar/2023/oci) 20日目の記事です。
2023年12月12日(火) OCIjp#47 2023忘年LT大会で発表したものをベースにしています。

# OCIjpとは？
OCIjpとは、フルエナジー含むユーザー企業有志で運営しているOracle Cloud Infrastructure(以下OCI)のユーザーコミュニティです。
月に一度のイベントを中心に活動しています。

OCIjpは以下の目的を持って活動しています。
<dl>
<dt>OCIを学べる場を提供する</dt>
<dd>+αのスキルを身につけるきっかけを提供して、個人の可能性を伸ばす</dd>
<dt>OCIファンを増やす</dt>
<dd>ユーザーグループだからこそ、公正な立場で実践知をお伝えする</dd>
<dt>OCI技術者を増やす</dt>
<dd>OCI導入を推進することができる技術者を増やす</dd>

OCIに興味がある方であれば歴や職種は問わないので、気軽にご参加ください！
次回(1月16日)のOCIjpのお申し込みは[こちら](https://fullenergy-oci.connpass.com/event/305100/)！！

# OCIjp2023年まとめ
まずは、今年もOCIjpを盛り上げてくださりありがとうございました。

![OCIjp#47_LT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/876157/39588b4b-6525-c69b-5e0d-0d6cfdee2199.png)

2020年よりオンライン開催としていましたが、2023年9月からオラクル様オフィス×オンラインのハイブリッド開催となりました！
約4年ぶりに戻ってこれました:relaxed:

最も参加者数が多かったのは、10月のOracle CloudWorld2023現地参加レポートです。
現地セッションをOCIjp向けにアレンジするコンテンツもあり、「ここでしか聞けない特別感」が最も強かった回だと思います。

登壇回数No.1はもちろん。。。<b>Shinichiro Otsuka（Oracle ACE Director)さん</b>　です！
いつもありがとうございます。


さてこの記事を読んでいる皆様に、クイズです！
(LT大会では、会場の皆様にも答えていただきました)
![OCIjp#47_LT (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/876157/ab7d593f-d4ad-3f39-8df8-34c1887fc9c0.png)


シンキングタイム……


正解は……

![OCIjp#47_LT (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/876157/e29b1cf7-6878-5338-71a3-07496cc13d52.png)

でした！
会場では、これを上回る回答が多数飛び出して少し焦りました。

改めてカウントすると、「こんなたくさんの方々と出会えたのか」感慨深いものがありました。

が！！！しかし！！！！！！！
2021年の振り返りを見ていたところ……なんと、延べ申し込み数は678名でした。

あれ……
来年はこの記録を超えます！！！！


# 来年の抱負
まずは、来年のスケジュールです。
今すぐ！スケジュールを確保してください！！
(やむを得ず変更する場合がございます。予めご了承ください。)

![OCIjp#47_LT (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/876157/f879f186-f66d-8681-4ce3-5bdcfe30911c.png)

そして、来年の抱負です。

![OCIjp#47_LT (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/876157/72c996c6-9f9f-5924-d5a9-34964257390b.png)


来年のOCIjpもよろしくお願いします！！！
AWS Card Clashを遊んでみる

AWS SkillBuilderを眺めていたらカードゲームが追加されていたので遊んでみた感想です。
ルールを把握するまでは戸惑いましたが慣れるとなかなか面白く、不思議な中毒性のあるゲームでした。

## AWS Card Clashとは
公式の説明より抜粋
> AWS Card Clash is a 3D virtual card game that helps learners gain knowledge of AWS Cloud architectures, and provides a new and engaging way to learn about AWS services and solution design. It uses strategic turn-based gameplay help individuals at all skill levels gain a working knowledge of AWS services, and how they interface within a solution.
　
訳: AWS Card Clashは、AWSクラウドアーキテクチャの知識を習得するための3Dバーチャルカードゲームです。戦略的なターンベースのゲームプレイを使用し、あらゆるスキルレベルの人がAWSサービスの実用的な知識を習得し、ソリューション内でどのようにインターフェイスするかを学ぶことができます。

カードゲームで遊びながらAWSの知識を身に着けようぜっ！ということのようです。
SkillBuilderへの登録は必要ですが無料で遊ぶことができます。
https://explore.skillbuilder.aws/learn/course/external/view/elearning/17564/aws-card-clash-an-architecture-design-game

## ルール説明
### 開始局面
左側のゴリラのような生物が対戦相手で交互のターン制です。画面手前には手持ちのカードが表示されています。
AWSの構成図に配置されている数字の枠に手持ちカードから適切なサービスをセットして構成図を完成させるのがゴールです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528143/8e6eeba7-6e47-5888-5d45-6694ae7b2aa9.png)

### 基本ルール
構成図を見るとマルチAZ構成でWeb階層とDB階層からなるシステムのようです。
Web階層のサービスとして手持ちカードからEC2をセットします。
適切なサービスをセットできると枠に書いてあった数字をポイントとして獲得することができます。
右の赤枠部分が現在獲得しているポイントで、黄色はゴリラ青は自分です。
![rule_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528143/6b8caed9-b91a-399b-426f-38bf3a8470ec.png)

### ENERGY
サービスをセットするには枠の数字よりもENERGYという体力のようなものが多くないといけません。
ENERGYは画面左に表示されており、1ターンごとに1増えます。
![energy_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528143/d5047f25-5eb6-443b-6592-6c51fd56ffaf.png)

また、手持ちカードに+2のような表示があるカードをフィールドにドロップすることで数字分のENERGYを獲得することができます。
ただしドロップできるのは1ターンに1回だけです。
![energy_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528143/8ae58afc-5091-00ef-816a-1d6b90ad5f36.png)

### プロテクト
手持ちカードには-1と書かれたカードも存在します。
これは使用することで構成図に自分が配置したサービスを保護することができます。
保護していないサービスは相手が同じカードを持っている場合奪うことができるほか、数ターンに1度発生するゴリラの破壊攻撃から守ることもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528143/d69166a4-5716-8bab-b19b-03652ad4d75a.png)
プロテクトカードにはSecurity GroupやIAM、WAFなど複数の種類があります。セキュリティに関係するサービスがプロテクトカードとなっています。

### ゲーム終了
このように全ての枠が適切なサービスで埋められるとゲーム終了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528143/59316b4a-f5de-f117-5331-602fe78ffd51.png)

獲得ポイントがゴリラよりも多いと勝ちになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528143/3ebc8497-3111-bb79-9ec8-8701eed72283.png)

細かいルールは他にもありますが大まかな説明は以上になります。

### 感想
2023/12時点で公開されているのはCLOUD PRACTITIONERコースのみで、SOLUTIONS ARCHITECTとSERVERLESS DEVELOPERはCOMING SOONとなっています。
CLOUD PRACTITIONERは全15ステージがありますが段々難易度が上がってきて面白いです。

またプロテクトカードを使用する際に、例えばCodeBuildをWAFで守ろうとすると失敗する(1ENERGY消費する)など細かい部分でAWSの知識が必要なところもよくできているなぁと思いました。
現在はCPU相手のモードだけで対人戦は無いのですが、資格勉強などの息抜きに遊んでみてはいかがでしょうか。

### 余談
コースの詳細を見ていて気付いたのですが対戦相手は「Miss Gorilla」らしいです:thinking:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528143/839d1f80-e768-4461-d1dd-5130f634e069.png)
Software Design 2023年11月号感想

# はじめに

[Software Design Advent Calendar 2023](https://qiita.com/advent-calendar/2023/softwaredesign) 21日目の記事です。
Software Design 2023年11月号を読んで気になったキーワードや所感を記載していきます。

# 第1特集 理想のコンテナイメージを作る Dockerfileのベストプラクティス

最近コンテナをあまり利用していないので、すっかり忘れていた。よい学び直しになった。

- コンテナブレイクアウト、コンテナエスケープ
    - コンテナからホストマシンにエスケープすること

理想的なコンテナの3つの視点

- 再現性
- セキュリティ
- 可搬性

Dockerfileの記述で気をつけるべきこと3つ

- ベースイメージの選択
- イメージサイズ、レイヤ数
- キャッシュ、ビルドの速度

キャッシュを効かせてビルドを早くする。更新の少ない内容をDockerfileの上の方に記述する。
[Dockerfileのベストプラクティス](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/)を読もう。
「エフェメラルなコンテナを作成する」にて、なぜコンテナを導入するかとその文脈を無視したコンテナ化は目的と合致しないよと言ってくれるところは個人的に刺さったポイント。流行りでコンテナ化しようとして目的に合わないケースを見かけたことがあった。こういう観点を伝えて防げばよかった。

- ビルドコンテキスト
    - ファイルシステムコンテキスト
    - テキストファイルコンテキスト

アタックサーフェスを減らす。
おおいに役立ちそうな内容ばかりだが、使う場面が今のところない。機会があればすぐにこの記事を読み返そう。

# 第2特集 稼げるアプリを作りたい！個人開発 成功の必須条件

個人開発でマネタイズを考えたことがないが、興味があったので参考になった。チャレンジしてみたい。
予想外だった気づきは、早めにリリースすること。たしかに時間をかけてコケたときのダメージは大きい。
リリースしてから少しずつ改善していくプランはよい。

- Googleは18番めの検索エンジン

# 一般記事、広告記事、連載

気になる記事からいくつか抜粋

## 特別企画 追悼 Bram Moolenaar Vimへの情熱と貢献を振り返る

コードを扱うときははVSCode、Linuxでエディタ使うのはvi止まりだった。
Vimの歴史からはじまり、Bram氏の活動、筆者との関わりなど熱い内容だった。
今からでも使うのは遅くない。

## 平林万能IT技術研究所 2ndシーズン【18】美術鑑識探偵風「油絵のひび割れ」鑑賞法――Python＋画像処理で名画の裏側を推理しよう！

ひび割れで絵画の真贋を見極めるのは面白い。ひび割れはクラクリュールと呼ばれる。何かの表現で使ってみたい言葉。

## ハピネスチームビルディング【20】ドラッカー風エクササイズでお互いの期待を理解する

自分の得意なことは何か？と聞かれると何と答えればいいのか困る。記事にはサンプルがあって、こんなレベルでいいんだと安心できた。機会を伺って試してみたい。

## 実践LLMアプリケーション開発【2】ベクトルデータベースを活用したチャットボットの開発

ベクトルデータベースのことを何一つ知らなかったので、具体的なインストール方法や設定、動作確認の記事があるとよく理解できる。

## 現場から学ぶAWSのクラウドセキュリティ【3】ガードレール型運用の基本と構築

予防的と発見的統制を紹介しているものは多いが、訂正的統制まで触れているのはなかなか貴重。ガードレールの絵もわかりやすい。

# 全体的な感想

今月号は3つの特集があるようなボリューム感だった。コンテナの特集は読みながらこれは永久保存版だと思えた。個人開発の特集は後押しするような内容に溢れていて、挑戦したくなった。そろそろ冬休みに突入するし、時間はある。Bram氏の追悼記事もよかった。

紹介してない記事もどれもよかった。
Total Tim Hortons Stores in 2023 in the U.S.

![Total-Tim-Hortons-Stores-Available-in-the-U-S.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480765/c3e5a397-ddee-e72c-810b-1a340bd4639f.jpeg)


Total Tim Hortons Stores Available in the U.S.
Total-Tim-Hortons-Stores-Available-in-the-U-S Total-Tim-Hortons-Stores-Available-in-the-U-S-1
Total 627 Tim Hortons stores are there in the U.S. as of 22 nd February 2023. A state having maximum Tim Hortons locations, including New York, had 239 stores, with around 38% of US Tim Hortons stores.

Locations
627

States & Territories
10

Cities
280

How to Download a Listing of US Tim Hortons Stores in Excel?
You could download an entire listing of 627 locations data of Tim Hortons in the Excel file, phone numbers, geo-coded address, as well as open hours using the data store.

Datasets Download

Top 10 States Having Maximum Tim Hortons Stores
Top-10-States-Having-Maximum-Tim-Hortons-Stores
239 (38%)
New York

One store for 81,397 people each, in New York having around 38% of total Tim Hortons stores

202 (32%)
Michigan

One store for 49,441 people each, in Michigan having around 32% of total Tim Hortons stores

132 (21%)
Ohio

One store for 88,553 people each, in Ohio having around 21% of total Tim Hortons stores

You can find Tim Hortons stores in 10 U.S. states & territories.

States & Territories Without the Tim Hortons stores
The given states & territories are not having any Tim Hortons stores in the U.S.

Arkansas
Arizona
American Samoa
Alaska
Alabama
 Connecticut
Colorado
 California
District of Columbia
Delaware
Florida
Guam
Georgia
Hawaii
Iowa
Illinois
Idaho
Kansas
 Louisiana
Montana
Missouri
 Mississippi
 Minnesota
 Massachusetts
Maryland
North Dakota
Northern Mariana Islands
North Carolina
New Mexico
New Hampshire
Nevada
Nebraska
Oregon
Oklahoma
Puerto Rico
Rhode Island
South Dakota
South Carolina
 Tennessee
Utah
U.S. Virgin Islands
Virginia
Vermont
Wyoming
 Wisconsin
 Washington
These are states & territories (46) that don’t have any US Tim Hortons stores.

Cities Having Maximum US Tim Hortons Stores
Cities-Having-Maximum-US-Tim-Hortons-Stores
Tim Hortons Stores vs. Competitors
Tim-Hortons-Stores-vs-Competitors
If you want a detailed comparison report of Tim Hortons and any other competitor companies, please contact Actowiz Solutions.

Download a Whole Database About the US Tim Hortons
Locations
Download-a-Whole-Database-About-the-US-Tim-Hortons-Locations
You may download a complete listing of locations of Tim Hortons utilized for analysis from the data store. Let’s take a casual sample of about 10 records to see the field and data we offer.

Buy a complete dataset

* Open hours aren’t shown here because it is too big data to show a sensibly sized screen.

Download Data in Any Given Format
We offer all datasets in Excel or CSV files. Please contact Actowiz Solution if you want the POI dataset in JSON, GeoJSON, Esri Shapefile, KML (Google Earth), or other custom formats at additional costs per format.

sources >> https://www.actowizsolutions.com/total-tim-hortons-stores-in-2023-in-the-us.php
大人数kintoneの管理者必見！個人的なkintoneで起こる運用課題と解決策を紹介！

本記事ではkintoneの導入後にしばらくすると起こる運用課題と解決策を独断と偏見で記載します！
特に大人数のkintoneを管理していると起こる事象を中心について紹介します。

# ケース①：アプリ管理者によるマスタ管理過多
**想定場面**
顧客マスタや製品マスタなどのマスタ管理をしている場面を想定します。

**課題**
マスタの登録や更新業務の多くはアプリ管理者などが都度登録・更新をしていることが多いように感じます。
顧客マスタの「担当者」や製品マスタに新しい製品を追加する時などに都度アプリ管理者へ連絡をしていると月に何回もマスタ整備業務が発生してしまいます。

**解決策**
一般的にはアプリ管理者以外の支店長や支社長などの一定の役職を持っているユーザーにもレコードの作成権限や編集権限を与え、現場の声からマスタ整備してもらうように一部の管理業務へ参加してもらうなどが考えられます。
時にはマスタ更新用の申請アプリを作成し、現場→支店長→支社長の承認を経て自動登録や自動更新をするようなカスタマイズの導入も考えられます。

**PR**
[ステータス条件付きデータ更新プラグイン](https://idepenshop.stores.jp/items/6550b79f73ce6e3dd35d0d95)を導入することで承認完了時に自動でマスタ更新をするアプリを作成することができます。
詳細は下記の記事を参考にしてください。
**[記事：kintoneアプリから自動で別アプリにレコード作成する方法。【ステータス条件付きデータ更新プラグイン】](https://qiita.com/idepenjin/items/bf9cbd54c8ebc5131ca8)**

# ケース②：cybozu共通管理者による人事管理の過多
**想定場面**
大人数のkintoneを運用していると拠点ごとにオリジナルのアプリを作成することがあります。
その際の権限管理でcybozu共通管理の組織やグループを利用して制御したい場合が多いかと思います。
拠点ごとにアプリを作成しており、アクセス権限にて組織やグループを使用している場面を想定します。

**課題**
ユーザーや組織、グループの管理はcybozu共通管理者にしか実施することができません。
よって、運用が進むにつれてcybozu共通管理者への組織やグループメンバー更新作業による稼働過多が想定されます。

**解決策**
大人数のkintoneを利用している会社の多くはこの課題をAPI連携で解決しているかと思います。
従業員を管理している別システムから定期的にユーザー情報や組織情報、グループ情報などを自動連携することによって改善しているかと思います。

**PR**
[グループメンバー更新プラグイン](https://idepenshop.stores.jp/items/657d4cc7fe92602793de661e)を導入することでcybozu共通管理者以外のユーザーでグループメンバーを変更することができます。
詳細は下記の記事を参考にしてください。
**[記事：cybozu共通管理者以外がグループメンバーの更新をする方法【kintoneプラグイン紹介】](https://qiita.com/idepenjin/items/bd3ea26fb18fd5828771)**

# ケース③：アプリ管理者による作業者変更対応の過多
**想定場面**
kintoneはプロセス管理にて簡単に承認経路などのワークフローを作成することができます。
承認アプリを作成し、運用している場面を想定します。

**課題**
承認アプリにおいて承認者である作業者が休暇などにより不在の場面があるかと思います。
その際に急遽作業者を変更したい場合はアプリ管理者にのみ表示される「現在の作業者を変更」ボタンから作業者を変更することができます。
ただ、大人数で使用するアプリにおいて不在対応をアプリ管理者のみが実施するのは稼働過多となってしまいます。

**解決策**
kintoneでは作業者変更のAPIが用意されていますので、そのAPIを使用して特定のユーザーなどの条件を設けて作業者を変更できるようにカスタマイズですることが多いかと思います。

**PR**
[作業者代行プラグイン](https://idepenshop.stores.jp/items/6332e784f519733f889fb9da)を導入することで特定のステータスで特定のユーザーに自分が作業者となるボタンを表示することができます。
詳細は下記の記事を参考にしてください。
**[記事：アプリ管理者以外のユーザーでkintoneの作業者を変更したい！【作業者代行プラグイン】](https://qiita.com/idepenjin/items/7ffca7e41792bc8ea607)**

# 最後に
kintoneのカスタマイズ案件を5年以上した私が見てきた事例と解決策でした。
これまでの経験をもとに便利な機能をプラグインにて提供していますので、ぜひ導入検討をしてみてください。

下記のショップも公開していますので、興味があれば覗いてみてください。
[イデペンショップ](https://idepenshop.stores.jp/)
【Flutter】stream

# streamとは
ストリーム（Stream）は、非同期プログラミングにおいてデータを非同期に扱うための抽象化された概念。
ユーザーの入力、ネットワークからのデータの到着、ファイルからの読み取り、タイマーのイベントなどがストリームとしてモデル化される。

# 主な特徴や概念
1. 非同期性 (Asynchronous)
   - ストリームは非同期にデータを生成および消費する。これは、イベントが発生するのを待たずにプログラムが継続的に実行できることを意味する。
2. イベントのシーケンス: 
  - ストリームは連続するイベントのシーケンスを表現する。これは、時間の経過とともにデータが到着するケースを扱うためのもの。
3. リスナー（購読者）
   - ストリームはリスナー（または購読者）がそれに購読することができるようになっている。リスナーは新しいイベントが到着するたびに通知を受け取り、対応する処理を実行する。
4. データのフロー
   - : ストリームはデータが一方向に流れる仕組みを持っている。通常、プロデューサー（データを生成する側）とコンシューマー（データを受け取る側）が別れており、データはプロデューサーからコンシューマーへと順次伝播する。

Dartでは、Stream クラスがストリームの基本的な機能を提供し、StreamController や StreamBuilder などがこれを補完してストリームベースの非同期プログラミングをサポートする。
raspberry pi pico DIY dac V2を制作してみた　その2

ハンダ付けが終わりpico wを装着したので、動作確認してみる。

ボタンを押しながらusbケーブルを接続。
・・・認識しない。

どうやらmicro usbのケーブルには、充電専用が存在するらしい。

ケーブルを変えて再度接続。
無事に認識されたので、特設HPからダウンロードしたuf2を保存。
pico w が再起動して無事にBluetoothとして認識した。
ペアリング後、音楽再生で音が鳴ることを確認できた。
アプリ管理者以外のユーザーでkintoneの作業者を変更したい！【作業者代行プラグイン】

kintoneのプロセス管理が設定されているアプリにて作業者を変更できるのはアプリ管理者のみとなります。
今回はアプリ管理者以外にも作業者を変更(作業者を自分に)するプラグインを作成しましたので事例と共に紹介します。

紹介するプラグインは下記となります。
[作業者代行プラグイン](https://idepenshop.stores.jp/items/6332e784f519733f889fb9da)

# 課題
kintoneはワークフローを簡単に設定することができます。
ただ、作業者が休暇などで不在の時に、代理者によって作業を進めたい場合があります。
そんな時はアプリ管理者によって作業者を変更する必要があります。
この頻度が多いとアプリ管理者の稼働が過多となってしまいます。
この課題を「[作業者代行プラグイン](https://idepenshop.stores.jp/items/6332e784f519733f889fb9da)」により解決する策を紹介しようと思います

# 使い方
プラグインで設定している条件に合うユーザーに「自分を作業者とする」ボタンが表示されます。
表示されたユーザーはボタンを押下することで自分が作業者になることができます。
![レコード詳細.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850653/50d0c45f-c5d3-137d-065c-4562006b4434.png)

# 要件
作成したプラグインは以下要件を満たすことを目的としています。
+ 事前に設定したユーザーにより作業者を奪取ができること。
+ 事前に設定したステータスの時のみに作業者を奪取できること。
+ 作業者奪取にはAPIトークンを使用し、秘匿されていること。

# 導入方法
1. kintoneへプラグインを導入してください。
2. プラグイン用のAPIトークンを発行してください。 ※権限は以下を参考
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850653/5f4a60cb-5802-4611-0eb9-fa9d8cfdf07c.png)
3. プロセス管理が設定されているアプリにプラグインを導入してください。
4. プラグイン設定画面から発行したAPIトークンを設定してください。
5. プラグイン設定画面から「自分を作業者とする」ボタンを表示するステータスとユーザーを設定してください。
![プラグイン設定画面.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850653/0ad1ff08-d689-5402-e3e3-07def6c086a5.png)
3. 保存して導入完了です。

# 最後に
アプリの使用者が多いと、必然的に作業者を急遽変更したい場面が多々あるかと思います。
そんな時は「[作業者代行プラグイン](https://idepenshop.stores.jp/items/6332e784f519733f889fb9da)」にて管理コストを軽減できるかと思いますので、是非導入検討してみてください。

他にもプラグイン公開していますので、興味があれば覗いてみてください。
[イデペンショップ](https://idepenshop.stores.jp/)
【Flutter】snapshot

# snapshotとは
非同期プログラミングやウィジェットの状態の変更を監視する際に使用される概念。
主に FutureBuilder や StreamBuilder などのウィジェットと組み合わせて利用される。

# FutureBuilder での snapshot
FutureBuilder は非同期処理が完了するまで待ち、その後に特定のウィジェットを構築する。snapshot プロパティを介して非同期操作の結果にアクセスする。
``` dart
FutureBuilder<String>(
  future: fetchData(), // 非同期処理を行う Future オブジェクト
  builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) { 
      return CircularProgressIndicator(); // データがまだ取得されていない場合のローディング表示
    } else if (snapshot.hasError) {
      return Text('Error: ${snapshot.error}');
    } else {
      // データが取得された場合
      return Text('Data: ${snapshot.data}');
    }
  },
)
```
`snapshot.connectionState`は非同期操作の状態を示す。

# StreamBuilder での snapshot
StreamBuilder は Stream（非同期イベントのストリーム）を監視し、新しいデータが流れるたびに再構築する。
``` dart
StreamBuilder<String>(
  stream: myStream(), // 非同期イベントのストリーム
  builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) {
      return CircularProgressIndicator();
    } else if (snapshot.hasError) {
      return Text('Error: ${snapshot.error}');
    } else {
      return Text('Data: ${snapshot.data}');
    }
  },
)
```
# 感想
[ストリームが分からなかったので調べた。](4148d8dc6f3d98157716)
Google App Scriptで発生するよくわからないエラーへの対処

GASを利用する上で、原因がよくわからないエラーへの対処方法のメモです。

### Exception: Service error: Spreadsheets
複数の原因によって発生するエラーのようです。
僕の場合はsetValues()で発生していたのですが、

・setValues()で貼り付ける値に<strong>「セル内の画像」</strong>が含まれている。
・setValues()で指定しているRangeに存在しない範囲が含まれている。

上記が原因のようでした。


### Exception: Service Spreadsheets failed while accessing document with id
スプレッドシートのIDが間違っていても発生するエラーだとは思いますが、記述ミスが特に見当たらない場合は、以下をチェックするとよさそうです。

・<strong>画像を貼り付けまくるなどしてシートが重すぎる。</strong>
・そもそもファイル形式がスプレッドシートではない。XLSXとかになっている。

個人的にはシートの容量？はなかなか気づきにくいなと思いました。


### Exception: We're sorry, a server error occurred. Please wait a bit and try again.
こちらも複数の要因があるようです。

・ライブラリをHEADバージョンで追加した状態で、プロジェクトのオーナー以外が関数を実行する。
・Google Cloudに紐づけているにも関わらず、Google Cloud側で必要なAPIが有効化されていない。

前者の場合、オーナーユーザーのみ実行できるのがポイントです。ライブラリのバージョンをHEAD以外にすると他のユーザーも実行できるようになります。
vite-railsを使って画像を表示する

## やりたいこと

railsの　`image_tag` みたいな感じで、ヘルパーメソッドを使って画像を表示させたい

## 方法

vite-railsには、`vite_image_tag` というヘルパーメソッドが用意されているので、これを使う。

### 1. 画像をsourceCodeDir配下に置く

`vite.json`ファイルで設定したsourceCodeDir配下に画像を置くことでヘルパーメソッドからアクセスできるようになる。

自分の環境だと、

```jsonc
{
  "all": {
    "sourceCodeDir": "app/assets",
    "watchAdditionalPaths": []
  },
  ...
}
```

となっているので、`app/assets/images/sample.svg` に画像を追加。

### 2. vite_image_tagで画像を表示する

あとは、

```erb
<%= vite_image_tag 'images/sample.svg' %>
```

で画像を表示するだけ。

## 参考

https://vite-ruby.netlify.app/guide/rails.html#tag-helpers-%F0%9F%8F%B7
Route 53でドメイン登録時のstateが必須になったらしい件

2023年12月19日あたりからRubyのaws-sdk-route53経由で実行していたドメイン登録が失敗するようになった。

エラーの内容は以下。

> Aws::Route53Domains::Errors::TLDRulesViolation [ADMIN.STATE not allowed, expected one of the following: JP-01, JP-02, JP-03, JP-04, JP-05, JP-06, JP-07, JP-08, JP-09, JP-10, JP-11, JP-12, JP-13, JP-14, JP-15, JP-16, JP-17, JP-18, JP-19, JP-20, JP-21, JP-22, JP-23, JP-24, JP-25, JP-26, JP-27, JP-28, JP-29, JP-30, JP-31, JP-32, JP-33, JP-34, JP-35, JP-36, JP-37, JP-38, JP-39, JP-40, JP-41, JP-42, JP-43, JP-44, JP-45, JP-46, JP-47, OWNER.STATE not allowed, expected one of the following: JP-01, JP-02, JP-03, JP-04, JP-05, JP-06, JP-07, JP-08, JP-09, JP-10, JP-11, JP-12, JP-13, JP-14, JP-15, JP-16, JP-17, JP-18, JP-19, JP-20, JP-21, JP-22, JP-23, JP-24, JP-25, JP-26, JP-27, JP-28, JP-29, JP-30, JP-31, JP-32, JP-33, JP-34, JP-35, JP-36, JP-37, JP-38, JP-39, JP-40, JP-41, JP-42, JP-43, JP-44, JP-45, JP-46, JP-47, TECH.STATE not allowed, expected one of the following: JP-01, JP-02, JP-03, JP-04, JP-05, JP-06, JP-07, JP-08, JP-09, JP-10, JP-11, JP-12, JP-13, JP-14, JP-15, JP-16, JP-17, JP-18, JP-19, JP-20, JP-21, JP-22, JP-23, JP-24, JP-25, JP-26, JP-27, JP-28, JP-29, JP-30, JP-31, JP-32, JP-33, JP-34, JP-35, JP-36, JP-37, JP-38, JP-39, JP-40, JP-41, JP-42, JP-43, JP-44, JP-45, JP-46, JP-47, BILL.STATE not allowed, expected one of the following: JP-01, JP-02, JP-03, JP-04, JP-05, JP-06, JP-07, JP-08, JP-09, JP-10, JP-11, JP-12, JP-13, JP-14, JP-15, JP-16, JP-17, JP-18, JP-19, JP-20, JP-21, JP-22, JP-23, JP-24, JP-25, JP-26, JP-27, JP-28, JP-29, JP-30, JP-31, JP-32, JP-33, JP-34, JP-35, JP-36, JP-37, JP-38, JP-39, JP-40, JP-41, JP-42, JP-43, JP-44, JP-45, JP-46, JP-47]

従来、Route 53でのドメイン登録において state は入力不要とされていたのが、仕様変更となった模様。
サーバー側でバリデーションが実行されているので、おそらくRuby SDKに限った事象ではないはず。

ブラウザーで管理画面見てみてもバリデーションが入っていた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48750/46b9a545-d4d3-8678-1821-d077f1e84702.png "State /Province is required")

解決策はエラーに書いてある通りstateには都道府県コードを指定すること。

この仕様変更について公式アナウンスは見つけられなかった。また急に変わるかもしれない。
仕事効率化につながる体調管理の大切さ

こちらの記事では仕事効率化につながる体調管理についてまとめてみました。


# きっかけ
私は今までデスクワークを中心とした仕事をしたことがありませんでした。
実際にIT企業に入社し、仕事を行なっていく中で現れた体調の変化がきっかけとなっています。
そこで、体調の変化に伴う改善策や、仕事効率化につながる体調管理の大切さをご紹介したいと考えました。

# なぜ体調管理が仕事効率につながるのか
皆さんは、体調が良くないなと気付いていても、**仕事を休むわけにはいかない**と考え出勤し、作業をしている時はありませんか？
しかし仕事を始めてみると、「身体がだるくて仕事が手につかない・頭がぼーっとして周囲の人の話が耳に入らない・集中できない」など仕事のパフォーマンスが上がらないと感じたことがあるとおもいます。
このように、心身の健康状態が優れないことが影響し、出勤したものの最善のパフォーマンスができない状態のことを**プレゼンティーズム**といいます。
そしてWHOが提唱している類似の指標として**アブセンティーズム**があります。これは、「健康問題による仕事の欠勤」、すなわち、病欠のことです。従業員が体調不良によりパフォーマンスが低下した状態で勤務することは、経営上大きなコスト損失につながっているからです。


# 体調の変化
エンジニアの方に当てはまる体調変化は下記が挙げられます。
・生活リズムが不規則・夜型になった
・太ってしまった
・体調がすぐれないことが増えた
・体の疲れが取れづらくなった
・目が疲れやすくなった


↑この中で当てはまっているものはありましたか？
私が実際に現れた1番の体調の変化は、**体調がすぐれないことが増えた**ことです。
この体調の不調により、仕事への影響が出始め仕事の効率が低下しました。

# 仕事への影響と改善策
体調の変化が現れたことから、仕事に対する影響と、改善するために普段から行なっている対策・体調管理方法が下記になります。

**体調がすぐれないことが増えたことによって**
＜仕事への影響＞
・風邪気味になり、仕事に集中しづらい
・朝起きづらい、寝つきが悪い etc...

<改善策>
**①手洗い・うがい**
まず、風邪気味になることに関してはウイルス感染予防が必要となります。
手洗いうがいが基本となり、1日の中で定期的に行うよう心がけています。
仕事中も常にパソコンを使用しているので、常にキーボードを触っている状態です。
しかし、使用しているキーボード、実は・・・**トイレの便座より汚いんです！**
研究も行われており、イギリスの微生物学者が、33枚のキーボードの汚れについて調査をしたところ、そのうち4枚は健康被害を及ぼす可能性があり、その中の1枚は、便座の5倍汚いという研究結果が出ています。
感染経路としても、キーボードを触った手で直接、飲食や顔を触ったりすることで感染してしまいます。
こまめに手洗いうがいを行うようにしましょう。

**②食生活・運動・睡眠**
朝起きるのがダルい・スッキリしない、夜に中々寝れない・寝た気がしないというような経験はありませんか？
体調不良の原因としてもあげられるのは、生活習慣が改善されていないからです。
生活習慣の改善でできることは大きく分けて３つあります。
それは、**食生活・運動・睡眠**です

1.食生活・・・食事は1日3回規則正しくとる、食べ過ぎに注意する、好き嫌いをなくす、インスタント食品を控える
2.運動・・・階段を使用する、天気の良い日に外に出る、スポーツにチャレンジする
3.睡眠・・・夜更かしをしないようにする、決まった時間に寝る・起きる、睡眠の2時間前には食事を済ませる


わかっていたとしても、仕事をしながら３つの項目を意識しつつ習慣を変えるのは難しいことです。
習慣化するコツはいくつかありますが、私の場合は**続けることを目標とし、実践できそうな範囲を決めてルーティンを作る**ことを意識しました。


**＜実践しているルーティン＞**
食生活・・・自炊をして食べている栄養素を整える
　　　　　　体重の変化を意識して、一定体重を保つ
      　　　　　　毎日同じ栄養食を全て食べ続ける(海藻類・大豆・発酵食品)
            　　　　　　常温水を飲む

運動・・・毎日仕事終わりでも柔軟と筋トレを行う
　　　　　休みの日は外出をして散歩をする　　
　　　　　掃除を行い、からだを動かすことを心掛ける

睡眠・・・湯船に浸かり、新陳代謝を活発にする
　　　　　ハーブティーを寝る前に飲む
     　　　　　部屋の照明を暗めに設定し、直前までスマートフォンを使用しない

# 結果        
これらの改善策をもとに意識や行動を行い続けた結果、仕事への影響も減少し、健康状態の維持を保つことができているため仕事効率化へつなげることができました。
プレゼンティーズムやアブセンティーズムの用語も踏まえて、できることができなくなる前に、健康管理も業務の一つとしてこれからも考え続けていきたいと思いました。
量子コンピューティングについて概念を簡単に理解する

こんにちは！

最近、量子コンピューターのニュースを見かけることが多くなりました。
量子力学は専攻してなかったので理解していなかったのですが、そろそろ量子コンピューターの時代になりそうなので、基本的なことを理解しようと思います:slight_smile:

# 概念
### 量子とは
とても小さな物質やエネルギーの単位で、原子そのものや、さらに小さな電子、陽子、中性子なども量子に含まれます。
これらは通常の物質とは異なる特別な法則に従っており、この法則を量子力学といいます。

続いて、量子コンピューティングの主要概念である量子ビット、量子ゲート、量子もつれ、量子重ね合わせについて説明します。

### 量子ビット（qubit）
通常のビットは0か1のどちらかですが、量子ビットは0と1の両方の状態を同時に持つことができます。
```mermaid
graph LR
    A[量子ビット] -->|0の状態| B[0]
    A -->|1の状態| C[1]
    A -->|0と1の重ね合わせ| D[0/1]
```
量子コンピューティングでは、この重ね合わせの状態が非常に重要です。

### 量子ゲート
量子ゲートは、量子ビットの状態を変化させるために使います。
```mermaid
graph TD
    A[量子ビット] -->|Xゲート| B[状態を反転]
    A -->|Hゲート| C[重ね合わせ状態]
```
これにより、量子計算の柔軟性と強力な計算能力を実現することができます。

### 量子もつれ
量子もつれは、二つの量子ビットがお互いに密接に関連している状態です。一方が変化すると、もう一方も同時に変化します。
```mermaid
graph LR
    A[量子ビット1] -- もつれ --> B[量子ビット2]
    B -- 影響を受ける --> A
```
これにより、並列処理の効率化、通信の高速化、セキュリティの飛躍的向上などに役立ちます。

### 量子重ね合わせ
量子重ね合わせは、量子ビットが複数の可能性を同時に持つことを意味します。これにより、量子コンピュータは多くの計算を並行して行うことができます。
```mermaid
graph TD
    A[量子ビット] -->|重ね合わせ| B[0と1の状態]
    B -->|0の可能性| C[計算1]
    B -->|1の可能性| D[計算2]
    C -->|並行実行| E[複数の計算]
    D -->|並行実行| E
    E -->|結果統合| F[最終結果]
```

これだけだと、そんなに速いか？と思いますが、ここで終わりではありません。
複数の量子ビットを組み合わせることで、その性能が顕著になります。

- **2つの量子ビットがある場合**
それぞれが0と1の状態を同時に持つことができます。これにより、4つの異なる状態（00、01、10、11）を**同時に表現**することができます。

| 量子ビット1 | 量子ビット2 | 表現される状態 |
|------------|------------|----------------|
| 0          | 0          | 00             |
| 0          | 1          | 01             |
| 1          | 0          | 10             |
| 1          | 1          | 11             |

- **3つの量子ビットがある場合**
3つの量子ビットがそれぞれ0と1の状態を同時に持つことができるため、8つの異なる状態（000、001、010、011、100、101、110、111）を**同時に表現**できることを示しています。

| 量子ビット1 | 量子ビット2 | 量子ビット3 | 表現される状態 |
|------------|------------|------------|----------------|
| 0          | 0          | 0          | 000            |
| 0          | 0          | 1          | 001            |
| 0          | 1          | 0          | 010            |
| 0          | 1          | 1          | 011            |
| 1          | 0          | 0          | 100            |
| 1          | 0          | 1          | 101            |
| 1          | 1          | 0          | 110            |
| 1          | 1          | 1          | 111            |

これらが**同時に存在する**ことになるので、量子ビットの数によって、量子コンピュータの計算能力を指数関数的（2のn乗）に増加させることができます。

では、量子ビットが１００あるとどうなるでしょうか。

**約 1.267 × 10^30**

という、身の回りに存在しない数になります。
これが同時に存在する、というのが、量子重ね合わせの凄いところです。

簡単に言うと、これまで丸一日かかっていた処理が、ほんの一瞬で完了する、ということになります。

通常の処理よりも、暗号の解読とか、新薬の開発、新しい物質の生成など、膨大な計算やシミュレーション能力を要する分野の方が力を発揮できると思います。

もし、AIが量子重ね合わせで学習をしたら、今とは比較にならないくらい高性能になるでしょうね。

ここまでで、なんか凄そうだ、と思えますね。

# まとめ
今回は、量子コンピューティングの基礎について、かなり簡単にまとめました。
実際は使う側なので理解してなくても使えるのですが、せっかくなので、概念くらいは理解しておきたいものです。

どこかでこの知識の応用ができたりする可能性もあるので、知っておいて損は無いと思います。

みなさんも一緒にがんばりましょう！:smiley:
dynein使用時にcredentialsの設定をsource_profileまたはrole_arnにしているとエラーが出る

こんにちは。

dynein使用時にcredentialsエラーが出たので、自分用メモがわりに記載します。

## 結論
タイトルの通り、dynein使用時にcredentialsの設定をsource_profileまたはrole_arnにしているとcredentialsエラーになるので、そちらを避けたcredentialsの設定にしなければならなかったというお話です。


## dyneinを試したみたが、credentialsエラーが出た
dynamoDBに対してcsvで簡単にimportしたかったので、dyneinを試したみた。

[こちらのREADME](https://github.com/awslabs/dynein)を参考にインストールし、`dy --help`コマンドも正常に動作することを確認。

```
$ dy --help
dynein 0.2.1
dynein is a command line tool to interact with DynamoDB tables/data using concise interface.
dynein looks for config files under $HOME/.dynein/ directory.

USAGE:
    dy [FLAGS] [OPTIONS] [SUBCOMMAND]

~~~
```

次は`dy ls`コマンドを実行し、AWSアカウントにアクセスできるか確認した所、下記Credentialsエラーが発生。

```
[2023-12-20T08:24:24Z ERROR dy::control] Couldn't find AWS credentials in environment, credentials file, or IAM role.
```


元々AWS CLIのCredentials設定はしていたので、`aws dynamodb list-tables`が通るか確認。

```
$ aws dynamodb list-tables
{
    "TableNames": [
        "XXXXX",
        "YYYYY",
        "ZZZZZ"
    ]
}
```

aws cliは問題なく動く。

## rusoto依存で、source_profileまたはrole_arnに対応してない

もう一度ドキュメントを確認。

```
Prerequisites - AWS Credentials
First of all, please make sure you've already configured AWS Credentials in your environment. dynein depends on rusoto and rusoto can utilize standard AWS credential toolchains - for example ~/.aws/credentials file, IAM EC2 Instance Profile, or environment variables such as AWS_DEFAULT_REGION / AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY / AWS_PROFILE.
```

dyneinはrusotoに依存しているが、AWS標準認証情報ツールチェーンを使えば動くとある。

このrusoto辺りが怪しそうなので、issueを検索したら下記の様な内容が見つかった。

https://github.com/rusoto/rusoto/issues/1559
https://github.com/rusoto/rusoto/issues/1758

rusotoはcliでのsource_profileまたはrole_arnに対応してなさそう。（2023年12月現在）

と言うことで設定されていた、自身のcredentialsはsource_profileを使用した設定だった為、こちらをAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYをcredentialsに直指定して再度試してみる。


```
# before

[sample-test-a]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = samplexxxxxxxxxxxxxxxxxxxxxx
region = ap-northeast-1

[default]
region = ap-northeast-1
role_arn=arn:aws:iam::xxxxxxxxxxxx:role/AdministratorRole
source_profile=sample-test-a
```

```
# after

[sample-test-a]
aws_access_key_id = AKIAIOSFODNN7EXAMPLEA
aws_secret_access_key = samplexxxxxxxxxxxxxxxxxxxxxA
region = ap-northeast-1

[default]
region = ap-northeast-1
aws_access_key_id = AKIAIOSFODNN7EXAMPLEB
aws_secret_access_key = samplexxxxxxxxxxxxxxxxxxxxxB
region = ap-northeast-1
```

https://docs.aws.amazon.com/cli/latest/topic/config-vars.html

```
dy ls
DynamoDB tables in region: ap-northeast-1
    XXXXX,
    YYYYY,
    ZZZZZ
~~~
```

結果'dy ls'コマンドが成功した。
小技集

## DataFrameの形の変換
seabornでFigにする際に有用。
```python
df = df.stack().reset_index()
```

```python
df = pd.DataFrame({'day1': [100, 200, 300, 400, 500, 600],
                   'day2': [1, 2, 3, 4, 5, 6],
                   'day3': [10, 20, 30, 40, 50, 60]})
df.index=['a', 'b', 'c', 'd', 'e', 'f']
df
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655949/2848aa13-ad4f-fa3c-d64a-a857122a1175.png)

```python
df = df.stack().reset_index()
df
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655949/249e114d-7ddb-259b-e980-a47f762fdbeb.png)





## 配列からデータラベルを作る方法
```python
import numpy as np

group = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
group = np.array(group, dtype='int64')

labels = np.array(['A', 'B', 'C'])[group]
print(labels)
```
```
['A' 'A' 'A' 'A' 'A' 'B' 'B' 'B' 'B' 'B' 'C' 'C' 'C' 'C' 'C']
```

## 文字列から条件に合う文字列を抽出する
#### `findall()`は全ての一致部分をリストで返す。
```python
import re

text = '[りんご][ゴリラ][ラッパ][パンツ]'

# そのまま抽出する
print(re.findall('\[(.*?)\]', text))

# コンパイルしてから抽出する。結果は同じ。
p = re.compile('\[(.*?)\]') #抽出指定：開始[  終了]  非貪欲マッチ*?
print(p.findall(text))
```
```
['りんご', 'ゴリラ', 'ラッパ', 'パンツ']
```
[もっと見る](https://qiita.com/kujira_0120/items/098370bef70394698d56)

## 乱数の生成

`np.random.default_rng()`で`Generator`インスタンスを生成。

#### `.integers()`で整数の乱数、`.uniform()`でfloatになる

条件を指定して乱数を生成。
第一引数`low`
第二引数`high`
第三引数`size`

出力は`low`以上`high`未満になる。
引数`endpoint`を`True`にすると以上・以下になる。(`.integers()`のみ)

```python
rng = np.random.default_rng()

print(rng.integers(40,100))
# 53

print(rng.integers(100))
# 87

print(rng.integers(40, 100, size=3))
# [71 47 40 60]

print(rng.integers(40, 100, size=(3,2)))
# [[86 76]
#  [54 71]
#  [58 90]]
タイミーで組織マネジメントしながら考えていることなど

こんにちは。タイミーのデータ統括部でマネージャーをやっておりますKimuraと申します。私は今年タイミーに入社させていただき一年弱ほど活動してきたのですが、本アドベントカレンダー記事では、タイミー生活の中で私がぼんやり考えていることをポエミーにお届けできればと思います。

## 物流倉庫に行って驚いた

タイミーでは入社時に全員、タイミーを使ってスポットワークを体験するという、ワーカー体験の研修が必須になっています。私は物流倉庫の軽作業に申し込みました。前職で物流倉庫の業務自体は耳学問としては知っていて何度か見学などしたことはあったものの、実際に体験してみるのも良いかもしれないというのが動機です。しかし、私はそこで思いもよらぬ体験をすることになりました。

私がお伺いした物流倉庫は色んな場所にあるEC業者の倉庫から搬出された荷物を集荷し、宅配車に載せ替えるという業務を行っている倉庫でした。何の荷物がどの車から搬入され、どの車に乗せて搬出するか等は事前にEC業者から指示書が届いており、指示通りのオペレーションをするというのがワーカーに課せられたタスクです。

十数台の車から十数台の車に数百個の荷物を積み替えるというかなり複雑な業務を行う必要があるのですが、オペレーションがめちゃくちゃ仕上がっているために、プロパーと思われる方1名と10名前後のスポットワーカーのみで、一時間程度で搬入から搬出までを終えることが出来ていました。これを体験して私は大きな衝撃を受けました。これまで伝え聞いていた物流倉庫のオペレーションとは完全に一線を画していたからです。

## タイミーが創る世界の先

元々タイミーに入社する動機として、このサービスは世の中に大きなインパクトを与えることが出来そうだと直感的に感じていたということがあります。事実、国の労働者人口は減少し続けており、肌感覚としても人手不足を最大の経営課題とする企業が少なくないと感じることも多いです。しかし、ワーカー体験を通じ、タイミーの可能性はそこを遥かに上回る確信を得ました。

タイミーを始めとするプレイヤーが提供するスポットワークという世界観は、近いうちに世の中のデフォルトになるのはもう間違いないと思います。そのときに何が起こるか。前述の物流倉庫のような、ほとんどスポットワーカーだけで業務が遂行できるくらいまでオペレーションの仕上がっているプレイヤーはどんどん事業拡大し、業績を伸ばしていくことが出来るであろう一方で、旧態然としたオペレーションの物流倉庫は人手不足とコスト増加に耐えきれず、どんどん消滅していくことになると感じました。

またこれは物流倉庫に限らず、今人手不足が課題になっているすべての企業についても同様でしょう。スポットワーカー前提で業務遂行できるよう他社のベストプラクティスを真摯に学び、オペレーションを組み替え、パラダイムシフトに備えるということを今すぐ実行に移す必要があります。スポットワークという概念は、それほどまでにディスラプティブで、大きなインパクトを持っているものなんだと確信しました。

## そんな中でなにをやっていくべきか

私はデータ領域のエンジニアリングマネージャーとしてタイミーに入社しています。プロダクト領域のエンジニアはプロダクトを磨き込み、進化させることがミッションです。データ領域のエンジニアがやるべきミッションはなんだろうと考えたときに、データを用いてタイミー事業全般をエンハンスすることだと定義出来るのではないかと思っています。ただ、これはあくまで短期的な定義です。

先述の通り、タイミー事業というのは遅かれ早かれ顧客の進化も伴ってくると考えています。そうなったときに、エンジニアとしてやるべきことは大変多岐に渡り、且つエキサイティングなものになるのではないでしょうか。所謂DXということの一部にはなるかとは思いますが、DXのようなぼんやりした概念ではなく、「スポットワーカーを使って業務遂行できるオペレーションを作る」という非常に明確なミッションの元、それを支える仕組みを作るというのは私は明確にエンジニアの仕事になるものと考えています。

効率の良いオペレーションというのは必ずデータ利活用とセットです。直近はタイミー社内のデータ利活用でオペレーションエクセレンスを沢山産み出し、それを外部企業にも適用し、スポットワークを通じて世の中を進化させる、というのが、タイミーのデータ領域における、長期のミッションだと言えるのではないでしょうか。

## まとめ

ここまで書いたことは一個人の脳内を垂れ流したに過ぎません。ですが、あながち単なる妄想とも言えないのでは、とも思っています。そんなようなことを考えながら、しっかりとタイミーを進化させる一助として引き続き業務に邁進していきたい所存です。一緒にやりたいという方がもしいらっしゃいましたら、是非ご一緒しましょう。それではみなさん良いお年を。
【Rails】whereとscopeの苦手意識を克服するためにまとめてみた

# はじめに

お疲れさまです！
おおくまです！

今回は、``Ruby on Rails``の``whereメソッド``と``scope``についてです！

特に理由があるわけではないですが、なんとなく苦手意識がありました。笑
そんな苦手意識を克服するためにまとめてみました！

# 注意点

:::note warn
内容に誤りがある場合があります！
コメント等で教えていただけると幸甚です！
:::

# 環境

:::note
Ruby 3.2.2
Rails 7.0.6
:::

# 前提条件

<img width=800 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3348444/fe357594-251f-7cc7-3691-a07fd9dc7984.jpeg">

前提条件として、このような``テーブル``と``レコード``があるとします！

# whereメソッドとは

https://railsguides.jp/active_record_querying.html

``Ruby on Rails``の``whereメソッド``とは、``ActiveRecord``を介して``データベース``から``データ``を取得する際に使用される``クエリメソッド``の1つです！
この``メソッド``を使用することで、特定の条件に一致する``レコード``を取得することができます！

<br>

``ユーザー``を全て取得したい場合は、

```diff_ruby
@users = User.all
```

のように取得しますが、
例えば、``Country``が``JP``である``User``を取得したい時はどうでしょうか？
そんな時に``whereメソッド``を使います！

```diff_ruby
@japanese_users = User.where(country: 'JP') # => "太郎" "花子"
```

これで``Country``が``JP``である``User``を取得することができます！
今回の場合は、太郎と花子の``レコード``が取得できます！

<br>

では逆に、``Country``が``JP``である``User``**以外**を取得したい時はどうでしょうか？

```diff_ruby
@not_japanese_users = User.where.not(country: 'JP') # => "Emily" "John" "Steve"
```

``where.notメソッド``を使います！
このように書くことで、``Country``が``JP``である``User``以外を取得することができます！
今回の場合は、Emily、John、Steveの``レコード``が取得できます！

# scope

https://railsguides.jp/active_record_querying.html#%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97

``Ruby on Rails``の``scope``は、``モデル``に対する``クエリメソッド``を定義するための機能です！

``scope``を使うと、特定の``データベースクエリ``を``モデル``に名前付きの``メソッド``として簡潔に定義することができます！

これにより、``コード``の**可読性と再利用性**が向上します！

``スコープ``は基本的には``クラスメソッド``と同じようなものですが、以下のような利点があります！

<br>

- チェーン可能
  - スコープはActiveRecord::Relationオブジェクトを返すため、複数のスコープをチェーンすることができる
- 条件の再利用
  - 同じ条件を複数の場所で再利用する必要がある場合、スコープを定義しておくと、その条件を簡単に再利用できる
- コードの整理
  - スコープを利用すると、モデルのクエリ条件を1箇所にまとめることができ、コードが整理される
- nullオブジェクトパターンのサポート
  - スコープは、条件が当てはまらない場合でも常にActiveRecord::Relationを返すため、NoMethodErrorを避けることができる

<br>

```diff_ruby:app/models/user.rb
scope :japannese, -> { where(country: 'JP') }
scope :under_twenty, -> { where('age < ?', 20) }
```

モデルファイルにこのように書くことで、これらの``scope``を使用することができます！

```diff_ruby
@japanese_users = User.where(country: 'JP') # => "太郎" "花子"

@japanese_users = User.japanese # => "太郎" "花子"
```

``where``メソッドを使用した時と取得できるデータは同じですが、コードがスッキリとしています！
また、同じようにデータを取得する場合でも、繰返し使用することができるので、とても便利です！

また、スコープは組み合わせて使うことができるので、
```diff_ruby
@japanese_users = User.japanese.under_twenty # => "花子"
```

このように使うこともできます！

# さいごに

本記事が何かのお役に立てれば幸甚です！
最後まで読んでいただきありがとうございました！
【SwiftUI】Pickerの特定の項目をユーザーが選択できないようにしたい（iOS17）

# はじめに
iOS17から`selectionDisabled`というモディファイアが追加されていました。
これはユーザーが選択できなくさせるようにするための機能っぽいです。

例えば、課金でしか使えない機能を選択できなくするみたいなことです。

あれ、`disabled`でもできなかったっけって思ったのですが、Pickerだと機能してませんでした。

# サンプルアプリ
![Simulator Screen Recording - iPhone 15 - 2023-12-21 at 18.05.20.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/0a599128-e831-bb9d-4933-35e91e41a734.gif)


# 実装
```swift
import SwiftUI

struct ContentView: View {
    @State private var selected: Int = 0
    
    var body: some View {
        Picker("選択", selection: $selected) {
            Text("機能1")
                .tag(1)
                .selectionDisabled(false)
            Text("機能2")
                .tag(2)
                .selectionDisabled(false)
            Text("機能3(未開放)")
                .tag(3)
                .selectionDisabled(true)
            Text("機能4(未開放)")
                .tag(4)
                .selectionDisabled(true)
        }
    }
}
```

# おわり
今までこれできなかったんですかね？
なんか方法があったような？

# 公式ドキュメント
https://developer.apple.com/documentation/swiftui/view/selectiondisabled(_:)
Asterisk 設定ファイル

## Asterisk 設定
```bash:/etc/asterisk/extensions.conf
[from-internal]

exten => 100,1,Answer()
    same => n,Wait(1)
    same => n,Playback(hello-world)
    same => n,Hangup()

exten => 201,1,Dial(PJSIP/201)
exten => 201,2,Hangup()

exten => _*.,1,NoOp
exten => _*.,n,Dial(PJSIP/{EXTEN:1}@hikari-trunk,120,T)
exten => _*.,n,Hangup()

exten => _0.,1,NoOp
exten => _0.,n,Set(CALLERID(num)=${MYNUMBER})
exten => _0.,n,SET(CALLERID(num)=${MYNUMBER})
exten => _0.,n,Dial(PJSIP/${EXTEN:1}@hikari-trunk)

exten => 9911,1,Answer()
exten => 9911,n,Background(thankyou)
exten => 9911,n,WaitExten(20)

exten => 32,1,AGI(agi-test.honban.agi, ${EXTEN})

[from-hikari]
exten => s,1,Answer()
exten => s,n,Background(hello-world)
exten => s,n,WaitExten(20)

exten => 7,1,AGI(agi-test.honban.agi, ${EXTEN})

```

```bash:/etc/asterisk/pjsip.conf
[transport-udp]
type = transport
protocol = udp
bind = 192.168.1.1:5060

[acl]
type=acl
permit=0.0.0.0/0.0.0.0

[201]
type=endpoint
context=from-internal
disallow=all
allow=ulaw
auth=201
aors=201
rewrite_contact = yes

[201]
type=auth
auth_type=userpass
password=xxxxxxxxx
username=201

[201]
type=aor
max_contacts=10

[hikari-denwa]
type=registration
transport=transport-udp
outbound_auth=hikari-trunk
server_uri=sip:192.168.1.1
client_uri=sip:100@192.168.1.1
retry_interval=60

[hikari-trunk]
type=auth
auth_type=userpass
password=xxxxxxxxx
username=5

[hikari-trunk]
type=aor
contact=sip:192.168.1.1

[hikari-trunk]
type=endpoint
transport=transport-udp
context=from-hikari       ;着信コンテキスト
disallow=all
allow=ulaw
outbound_auth=hikari-trunk
aors=hikari-trunk
direct_media=no
from_user=5
from_domain=192.168.1.1
dtmf_mode=inband

[hikari-trunk]
type=identify
endpoint=hikari-trunk
match=192.168.1.1
```

/etc/asterisk/extensions.conf
/etc/asterisk/pjsip.conf

systemctl restart asterisk
asterisk -vvvvvvvcr
Node.js環境からAxiosでkintoneにリクエストする方法について

あまり載ってないので備忘録として残しておきます。

# 環境
macOS 10.15.7
Node.js v17.3.0

記載の環境はmacですが、Windowsでも同じです。

# 準備

下記を準備しておきます。

Node.jsのインストール
作業用のフォルダを作成 -> `mkdir debug`
作成したフォルダに移動 -> `cd debug`
コマンドラインからnpm initする -> `npm init`
dotenvモジュールをインストール -> `npm i dotenv --save`
axiosモジュールをインストール -> `npm i axios`
.envファイルを作成する -> `touch .env`

[Node.js](https://nodejs.org/en)
[dotenv](https://www.npmjs.com/package/dotenv)
[axios](https://www.npmjs.com/package/axios)

kintoneのアプリの作成とAPIトークンの生成等も事前に行います。
また、.envファイルに環境変数としてアプリIDやAPIトークンも設定しておきます。

# record.json

ファイル作成
`touch fetch01.js`

## axios

axiosを利用したリクエストは下記の感じ。

```js
const axios = require('axios');
require('dotenv').config({debug: true});

(async () => {
    try {
        const API_TOKEN = process.env.API_TOKEN;
        const APP_ID = process.env.APP_ID;
        const config = {
            headers: {
                'X-Cybozu-API-Token': API_TOKEN,
            },
            params: {
                'app': APP_ID,
                'id': 1,
            }
        }
        await axios.get(`https://${process.env.KINTONE_SUBDOMAIN}.cybozu.com/k/v1/record.json`, config)
        .then(response => {
            console.log(response);
        })
        .catch(e => {
            throw e;
        })
    } catch (error) {
        console.log(error);
    }
})();
```

## kintone rest-api-client

[kintone rest-api-client](https://github.com/kintone/js-sdk/tree/master/packages/rest-api-client#readme)を利用すると下記の感じ。

```js
const { KintoneRestAPIClient } = require("@kintone/rest-api-client");
require('dotenv').config({debug: true});

(async () => {
    try {
        const API_TOKEN = process.env.API_TOKEN;
        const APP_ID = process.env.APP_ID;
        const params = {
            'app': APP_ID,
            'id': 1,
        }
        const client = new KintoneRestAPIClient({
            baseUrl: `https://${process.env.KINTONE_SUBDOMAIN}.cybozu.com`,
            // Use API token authentication
            auth: { apiToken: API_TOKEN }
        });
        await client.record.getRecord(params)
        .then(response => {
            console.log(response);
        })
        .catch(e => {
            throw e;
        })
    } catch (error) {
        console.log(error);
    }
})();
```
Firecrackerをarchlinuxで入門

# Firecracker 入門
今回はfirecrackerをarchlinuxで触っていきます。
この記事では起動できるところまで紹介します。
firecrackerとはなんぞ？という人は[公式ページ](https://firecracker-microvm.github.io/)をご参照ください。
## 前提条件
- x86_64
- archlinux
- kvmが有効

## 1. Install `yay` (通常ユーザーで実行)
archlinuxにはコミュニティパッケージをインストールできる`yay`があります。
今回は`yay`を使って簡単に導入していきます。
```bash
cd ~
# アプデ
sudo pacman -Syy
# yayの必須パッケージ
sudo pacman -S --noconfirm git fakeroot binutils make gcc go
# yayのソースをクローン
git clone https://aur.archlinux.org/yay.git
cd yay
# ビルドして/usr/binにぶち込む (知らんけど
makepkg -si --noconfirm
cd ..
# 残りカスを抹消
rm -rf yay
```
## 2. Install firecracker & firectl
なんとこれだけで全部入ります。
```bash
yay -Sy firectl
```
## 3. Download `kernel` and `rootfs`
firecrackerはカーネルを軽量化して起動を爆速にしてるので`kernel`と`rootfs`を別々で持ってくる必要があります。
補足：`cgroupv2`が採用されているdocker環境でfirecrackerを使う際はkernelのバージョンが5.10以上である必要があるため、下記の`vmlinux.bin`は使えません。
```bash
curl -sLo vmlinux.bin https://s3.amazonaws.com/spec.ccfc.min/img/quickstart_guide/x86_64/kernels/vmlinux.bin
curl -sLo rootfs.ext4 https://s3.amazonaws.com/spec.ccfc.min/img/quickstart_guide/x86_64/rootfs/bionic.rootfs.ext4
```
## 4. Boot !!!
もうこれで最後です。
kernelとrootfsのファイルを指定するだけで起動してくれます。
今回使うrootfsはrootで自動loginしてくれます。
```bash
firectl \
  --kernel=vmlinux.bin \
  --root-drive=rootfs.ext4
```
以上！

# 感想 (?)
今回は簡単に導入して使ってみよう的なノリの入門でした。
firecrackerは技術的にもかなりすごいものなので、kubernetesとかで使えるようになってくれるといいですね、（期待！