OmniAICreator/Qiita-1.07M huggingface dataset:
UptimeRobot で死活監視

個人開発に限りませんが、ウェブサービスは通常24時間365日運営され続けます。その間、なんらかの原因で「落ちる」ことがありますが、それを人手で毎日確認するのは現実的ではないですよね。ということで世の中には死活監視というサービスがあり、そうした死活監視サービスの一つに UptimeRobot があります。UptimeRobot は無料の範囲でも十分実用になる死活監視が行えます。

## UptimeRobot で出来ること

UptimeRobot では次の監視が出来ます。

* ウェブサイト監視。指定の URL でウェブサイトが動作しているかどうか。
* キーワード監視。指定の URL のウェブページにキーワードが含まれているか/含まれていないか。
* ping 監視。ping の応答があるかどうか。
* port 監視。port が接続できるかどうか。
* ハートビート監視。cron ジョブが動作しているかどうか。
* SSL 証明書監視。SSL 証明書の期限が切れていないかどうか。
* ドメイン監視。ドメインの期限が切れていないかどうか。

異常があった場合の通知先は以下が選べます。

* Eメール
* SMS
* 電話
* EメールtoSMS
* スマホアプリ
* 各種チャット

料金プランは Free(0ドル)、Solo(7ドル/月)、Team(29ドル/月)、Enterprise(54ドル/月) の4種類です。無料の Free プランでも一通りの死活監視は出来るようになっています。

API が用意されているので、各種操作を API 経由で行うことも出来ます。

https://uptimerobot.com/api/

## 監視設定

では実際に監視設定をしてみましょう。

ダッシュボードの「+ Add New Monitor」をクリックして、監視設定ダイアログを表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86075/332bb295-7639-fa15-94e2-a3fae922e457.png)

最初に Monitor Type を選択します。ここでは「HTTP(s)」にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86075/08754c8a-383d-810f-2af7-51f39478275b.png)

「HTTP(s)」での設定項目は以下の通りです。

* Friendly Name。ダッシュボードで区別をつけやすい名称を記載します。
* URL (or IP)。監視対象の URL を記載します。
* Monitoring Interval。監視間隔を秒数で指定します。Free プランでは5分が最低値となります。
* Monitor Timeout。タイムアウト時間です。
* Monitor SSL errors。SSL 証明書の異常を検知するかどうか。Free プランでは使えません(なぜかこの画面では有効になっている)
* Enable SSL expiry reminders。SSL 証明書の期限切れを検知するかどうか。こちらも Free プランでは使えないはずです。
* Enable domain expiry reminders。ドメインの期限切れを検知するかどうか。Free プランでは使えません。
* HTTP Method。Free プランでは GET のみ設定できます。
* Alert Contacts To Notify。予め作成した通知先から選択します。
* Maintenance Windows。監視対象外の時間帯を設定します。Free プランでは使えません。

通知先の設定は「My Settings」の「Add Alert Contact」から行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86075/d1e468d5-603c-4653-5b22-fb4ca6c0b6e4.png)

様々な通知先が選択できますが、無料で使えるのはEメールと一部のチャットサービスのみです。Eメールも通知先のアドレスを追加するには有料プランへのアップグレードが必要です。

## 実際の監視の様子

ダッシュボードは以下のようになっています。

左側に監視対象が一覧され、右側には全体の監視状況が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86075/42af24a3-7ed3-c5c4-2baf-ead0fb91fbe8.png)

監視対象をクリックすると、その対象の詳細表示になります。レスポンスタイムのグラフ表示もしてくれるのは嬉しいですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86075/2160f900-72d5-b345-b8e7-f82639d0b86a.png)

左側監視対象一覧の歯車マークをクリックすると、Pause/Edit/Delete/Reset Stats を行うことが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86075/659f8500-1a8a-68ef-dbd3-a0570023ffbb.png)
特定の期間を超えたファイルの削除

日次で作成するバックアップなど、一定期間を超過したら削除するファイルの管理で利用します。
タスクスケジューラーで実行可能です。

```powershell
####################################################################
## 本番環境に合わせて設定する項目

# 削除対象フォルダ
$dir ="対象のフォルダパス(フルパス)を記載";

# 削除対象 拡張子フィルター  特にない場合は*.*を設定
$ext ="*.*";

# ログファイル(フルパス)を指定
$LogFile  ="保存先フォルダを記載\"+ (Get-Date -Format "yyyyMMdd")+".log"

####################################################################


$TargetDate = Get-Date
$TargetDate = $TargetDate.AddYears(-1); # 1年以上前のファイルを削除する場合
$TargetDate = $TargetDate.AddMonths(-1); # 1ヶ月以上前のファイルを削除する場合

echo "実行ログ"  >$LogFile
echo "---------------------------------------------------" >>$LogFile
echo "削除対象のファイル"                                            >>$LogFile
$tmp= "更新日時＜" + $TargetDate.ToString("yyyy/MM/dd HH:mm:ss")
echo $tmp  >>$LogFile
echo "削除対象のフォルダ"                                            >>$LogFile
echo $dir                                                            >>$LogFile
echo "---------------------------------------------------"           >>$LogFile

#対象フォルダだけ削除対象の場合
$list = Get-ChildItem $dir -File -Filter $ext ;

#配下フォルダも削除対象の場合
# Depthは、階層の深さ。以下例だと3階層下までファイルをチェックしてくれる。
#$list = Get-ChildItem $dir -File -Filter $ext -Recurse -Depth 3;  

$cnt  = [int]0;
foreach($fileAt in $list)
{
	$tmp = $fileAt.LastWriteTime.ToString("yyyyMMdd_HHmmss")+" "+$fileAt.Name
	if( $TargetDate.CompareTo($fileAt.LastWriteTime) -gt 0)
	{
		"【削除】"+$tmp >>$LogFile
		Remove-Item $fileAt.FullName -Force
		$cnt++;
	}
}

echo "---------------------------------------------------"           >>$LogFile
$tmp = "削除件数:"+$cnt.ToString();
echo $tmp >>$LogFile
echo "完了" >>$LogFile

```
仕事中の「こっそり録画・録音」はどこまで許されるのか

## はじめに
インターン生として働く中で、こっそり録画をすることが多い。
後で見返すことで１回目だと聞きこぼしていたことが２回目で理解できるので、よく使う。

しかしこっそり録画・録音という行為は、相手側からすると無許可で知らない状況で行われるのでいい気はしない。また、筆者の知らない技術で実は録画が外部から検知できるものなのかもしれない。

今回は、「こっそり録画・録音」はバレるのか、どこまで許されるか、理解したうえでどう働き方を見直すべきかを考える

### 思考の順番
1. こっそり録画・録音の事前知識
    1. 概要
    1. 違法性
2. こっそり録画・録音を検知する技術について
3. まとめ(働き方見直し)

## こっそり録画・録音の事前知識

**▼概要**
相手にバレずに録画・録音すること
「会話内容の記録」が目的であり、内容の把握や証拠保持に役立つ

**▼違法性**
・証拠のために相手との会話を秘密録音することは、<font color="red">**基本的には違法ではない**</font>
　・「相手が自分に積極的に情報を開示した」という点に違法性はない為

```:《最決平成12年7月12日刑集54巻6号513頁》
詐欺被害に遭ったと考えた者が証拠のために自分との会話内容を秘密録音した事案について、
「このような場合に、一方の当事者が相手方との会話を録音することは、
たとえそれが相手方の同意を得ないで行われたものであっても、違法ではなく」と判示。
```

しかし、記録した内容の扱い方には注意。
・考え方としては、「<font color="red">**あくまで記録内容は、相手が特定の人物に対して情報を開示したものである**</font>」という点
　・第３者に漏えいさせる行為（**話者に対する不法行為（民法709条）**）
　・相手を侮辱する行為（**名誉毀損罪（刑法230条1項）**）
　・盗聴に付随する行為（**住居侵入罪（刑法130条）**・**器物損壊罪（刑法261条）**）
　※「盗聴」事態に違法性はない

・盗聴と秘密録音の違い
　・盗聴：第３者間における会話を当事者の同意を得ずに録音すること
　・秘密録音：会話当事者の一方が相手方に同意を得ずに会話を録音すること
　　・秘密録音も違法性はない
⇒「会話の内容を相手に無断で録音することは盗聴することと同じである」にはならない

・録画に対する違法性
　・ない
　　・録音と同様、「盗撮罪」というものはない
　・「盗撮」という行為自体に違法性はなく、違法になるとしたら「何を映したか」が重要
　　・「**迷惑防止条例違反**」に該当するもの
　　　・肌を露出する場所を撮影など
　　・働く中で、「ハラスメント対策」「契約時の内容把握」と言った意味での撮影は問題ない

<font color="green">**【参考資料】**</font>
１．[“こっそり録音”は違法か？～秘密録音等の違法性～(鈴木・大和法律事務所)](https://szoh-law.jp/2022/08/16/himiturokuonn-ihousei/)
２．[相手に無断で会話を録音した場合は違法？証拠になる？(岩熊法律事務所)](https://kumaben.com/recording-audio-without-consent/)
３．[【弁護士監修】相手に許可のない録音・盗撮は違法？ 電話や会話の証拠を録音・録画する方法と機器を紹介（弁護士保険の教科書Biz）](https://bengoshihoken.jp/articles/p1334/)

<br />
<br />

<font color="green">**【まとめ_こっそり録画・録音の事前知識】**</font>
・「こっそり録画・録音」は相手への許可や認知なく記録する行為の事
・盗聴／盗撮どちらも違法性はない
　・ただし、記録した内容・記録時の状況・記録したものの取り扱いによっては違法になる場合がある
⇒<font color="red">**仕事で「ハラスメント対策」「契約時の内容把握」の為のこっそり録画・録音は基本的に問題ない**</font>

## こっそり録画・録音を検知する技術について
・基本バレない
　・スクショ、画面録画はローカルであり、外部に発信することはない為(録画ソフトを使用した場合の話)
　・バレたくないなら、外部の画面録画ツール(キャプチャツール)を使うべし
・バレるかもしれない状況
　・録画ではなくURLを利用して、データをダウンロードする場合
　・上司などが自身の作業環境にアクセスできる場合

・社用PC
　・キャプチャツールによる操作はバレる
　　・操作ログを残すことは可能である為、どのタイミングで何のアプリを起動させたかが記録される
　　・サイトやURLへのアクセスも記録される
　・会議アプリを使用せずとも、カメラやマイクで監視することは技術上可能
　　・ただ、コストは大きいためそこまではしないのが普通
　　・あと違法もしくは不正行為である為、合法的な方法で行う



<font color="green">**【参考資料】**</font>
１．[オンラインライブ、Zoomをパソコンで画面録画するとバレるのか？](https://www.leawo.org/jp/tips/%E7%94%BB%E9%9D%A2%E9%8C%B2%E7%94%BB-%E3%83%90%E3%83%AC%E3%82%8B-1354.html)
２．[【Zoom】Web会議録画はバレる？録画がバレる方法とバレない方法まとめ](https://tipstour.net/zoom-rec-bare)
３．[リモートワーク中のパソコンは監視されてる？社内SEが解説します！](https://yukibowz.net/remotework-check/)
４．[会社支給のPCはどこまで監視できるのでしょうか？（知恵袋）](https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13278121233)

<br />
<br />

<font color="green">**【まとめ_こっそり録画・録音を検知する技術について】**</font>
・キャプチャツール使えば基本バレない
・ただし、画面共有や社内PCなどで作業環境にアクセスできる場合はバレる恐れがある


## まとめ(働き方見直し)
・筆者は私用PCでリモートワークをしている。その為、キャプチャツールを使ってでの録画はバレずに行えていることが分かった。しかし社用PCで業務をする事になった場合はバレる可能性が出る為、別のアプローチを考える必要がある。

・社用PCの監視レベルについて把握する必要がある。どの程度ログを残すのか。アプリを使わずともカメラ・音声のログを記録できるのか。

・仮に社用PCを使ってバレずに録画する場合、オープンマイクで音を放出し、それを外部機材を用いて記録するのが手っ取り早いかもしれない。もしくはこっそりではなく同意を得るか。
猫好きのしょうもないツール_meow

# 自分の家族（猫）増殖

**meow meow copy**

https://github.com/mi-kaneyon/man-yard/tree/main/cat


:::note info
インフォメーション
特にお役立ちではないです
:::

## 開発環境
古いノートパソコン(Core 第8世代）
GPU P1000

https://www.notebookcheck.net/NVIDIA-Quadro-P1000-Laptop-Graphics-Card.328710.0.html

- Windows 11のAnaconda
- Jupyter と ターミナル用を用意
- どうしてもP1000を働かせたいのでCUDA使用

# 使いかた
1. ウィンドウが開いたらAキーで猫増加、Dキーで猫減少
1. カンタンです。終了はウィンドウでqキー

# English

:::note info
Information
- Introduction is written by English
- Hope cat lover will be favorite it. 
:::

https://github.com/mi-kaneyon/man-yard/tree/main/cat

# 中文

<details><summary>软件介绍/軟件介紹</summary>

操作这么简单。打命令
- 按鈕 A 貓咪增加 
- 按鈕 B 貓咪減少

```python

python meowmeow_copy.py

```
还有jupyter 版本。请看看下面的 网站

https://github.com/mi-kaneyon/man-yard/tree/main/cat

</details>


## コピー例

![fukucopy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2155177/c82c7e84-05f7-c516-c492-c6e287c50e45.png)
iOS17 Mac Sonoma14.0 からNavigaionSplitViewのサイドバーのトグルが簡単に消せるようになった


一部のプラットフォームでは、NavigationSplitViewはサイドバーの切り替えを行うツールバーアイテムを追加します。デフォルトのアイテムを削除するには、toolbar(removing:) 修飾子を使用します。

この修飾子を使用して、他のビューがデフォルトで追加するツールバーアイテムを削除できます。たとえば、NavigationSplitViewによって提供されるサイドバートグルトールバーアイテムを削除する場合は、次のようにします。
以下のように使えます。
```
NavigationSplitView {
    SidebarView()
        .toolbar(removing: .sidebarToggle) //これ
} detail: {
    DetailView()
}
```

ちなみに横にドラッグでしまうと、閉じれてしまいます。閉じると開けなくなります。ゴミ仕様。
新しいmacに移行後、UnityHubで新しいエディタがインストールできなかった話

# 状況
1. Intelチップのmacbookが火を吹く毎日で辛くなった
2. Appleシリコンのmacbookを購入！
2. 移行アシスタントによりデータを移行！
2. UnityHub使って、新しいバージョンのエディタをインストールしようとしたらエラー……

:::note warn
インストールは失敗しました: Unity Hubには、フォルダー /Applications/Unity/Hub/Editor にアクセスする権限がありません
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/4294925a-f2a9-fcec-629c-86ff73d4e6d1.png)


# 解決方法
1. 念のため、UnityHub上から、エディタを全てアンインストール（こっちはアクセスできるんかい）
1. `/Applications`（アプリケーション）に存在するUnityディレクトリを丸っと雑に削除
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/6a86eb20-e37c-699a-33aa-66e2ff106ae0.png)

1. 再度新しいバージョンのエディタをインストール！
1. できた🎉
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87713/19fb1981-1f0b-f62b-7d0d-fdd96adf7e35.png)

# 感想
データ移行の影響だと思うけど、アクセス権限周りはいまだにそんな詳しくなれない……。
コンストラクタについて正しく理解する

# 目次
1. コンストラクタとは
2. 暗黙的にインスタンスを返す
3. 異なるオブジェクトを返す

# 1. constructorとは
constructorメソッドは、 classで作成されたインスタンスの生成と初期化のための特殊なメソッドです。
[constructor](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Classes/constructor)

# 2. 暗黙的にインスタンスを返す
> 関数がオブジェクトを返さない場合は this を返します。

[参考](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new#:~:text=%E3%81%8C%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E8%BF%94-,%E3%81%95,-%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%20this)

> 独自のコンストラクターを提供しなかった場合は、既定のコンストラクターが提供されます。クラスが基底クラスである場合、既定のコンストラクターは空です。

[参考](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Classes/constructor#:~:text=%E7%8B%AC%E8%87%AA%E3%81%AE%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%BC%E3%82%92%E6%8F%90%E4%BE%9B%E3%81%97%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81%E6%97%A2%E5%AE%9A%E3%81%AE%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%BC%E3%81%8C%E6%8F%90%E4%BE%9B%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%8C%E5%9F%BA%E5%BA%95%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%A7%E3%81%82%E3%82%8B%E5%A0%B4%E5%90%88%E3%80%81%E6%97%A2%E5%AE%9A%E3%81%AE%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%BC%E3%81%AF%E7%A9%BA%E3%81%A7%E3%81%99%E3%80%82)

```JavaScript
constructor() {}
```

下のようにconstructorはreturn thisを記述してませんが、インスタンスが返されています。
```JavaScript
class Class {
    constructor() {}
}
const obj = new Class();
obj
//Class {}
```

```JavaScript
class Class {
    constructor(){
        return this
    }
}
const obj = new Class();
obj
//Class {}
```

constructorでプリミティブな値を返そうとすると、インスタンス(this)が自動で返されます。
```JavaScript
class Class {
    constructor(){
        return 1
    }
}
const obj = new Class();
obj
//Class {}
```

# 3. 異なるオブジェクトを返す
>コンストラクター関数が返すオブジェクト (null, false, 3.1415 などのプリミティブ型ではないもの) が、 new 式の結果になります

[参考](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new#:~:text=%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF%E3%83%BC%E9%96%A2%E6%95%B0%E3%81%8C%E8%BF%94%E3%81%99%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%20(null%2C%20false%2C%203.1415%20%E3%81%AA%E3%81%A9%E3%81%AE%E3%83%97%E3%83%AA%E3%83%9F%E3%83%86%E3%82%A3%E3%83%96%E5%9E%8B%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84%E3%82%82%E3%81%AE)%20%E3%81%8C%E3%80%81%20new%20%E5%BC%8F%E3%81%AE%E7%B5%90%E6%9E%9C%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99)

constructorでオブジェクトを返そうとすると、そのオブジェクトが返されます。
```JavaScript
class Class {
    constructor(){
        return {key:'value'}
    }
}
const obj = new Class();
obj
//{key:'value'}
```

# 参考

- [JSのコンストラクタは別のクラスのオブジェクトも返せる](https://paulownia.hatenablog.com/entry/2022/09/06/232716)
wslでelixir その62

# 概要
wsl(wsl2じゃない)で、elixirやってみた。
練習問題、やってみた。

# 練習問題
Phoenixで、gen.jsonで作ったapiサーバをplunkerから叩け。

# 方針

- CRUDで叩く。
- xhrで叩く。

# サンプルコード

```


var out = document.getElementById('out');
var endpoint = "http://localhost:4000/api/urls";

//create
function test0() {
	var src = '{"url": {"link":"a", "title":"aa_aa"}}';
	var xhr = new XMLHttpRequest();
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4 && xhr.status == 201)
		{
			out.value = xhr.responseText;
		}
		else
		{
			//alert(xhr.readyState);
			//alert(xhr.status);
		}
	};
	xhr.open("POST", endpoint, true);
	xhr.setRequestHeader('Content-Type', 'application/json');
	xhr.send(src);
}
//read
function test1() {
	var xhr = new XMLHttpRequest();
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4 && xhr.status == 200)
		{
			out.value = xhr.responseText;
		}
		else
		{
			//alert(xhr.readyState);
			//alert(xhr.status);
		}
	};
	xhr.open("GET", endpoint, true);
	xhr.send();
}
//update
function test2() {
	var endpoint1 = "http://localhost:4000/api/urls/4";
	var src = '{"url": {"title":"b"}}';
	var xhr = new XMLHttpRequest();
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4 && xhr.status == 200)
		{
			out.value = xhr.responseText;
		}
		else
		{
			//alert(xhr.readyState);
			//alert(xhr.status);
		}
	};
	xhr.open("PUT", endpoint1, true);
	xhr.setRequestHeader('Content-Type', 'application/json');
	xhr.send(src);
}
//delete
function test3() {
	var endpoint1 = "http://localhost:4000/api/urls/4";
	var xhr = new XMLHttpRequest();
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 2 && xhr.status == 204)
		{
			out.value = xhr.responseText;
		}
		else
		{
			//alert(xhr.readyState);
			//alert(xhr.status);
		}
	};
	xhr.open("DELETE", endpoint1, true);
	xhr.setRequestHeader('Content-Type', 'application/json');
	xhr.send();
}





```

# 成果物


https://embed.plnkr.co/plunk/dXfr9NjSd2TYhiWk


以上。
Android でビルドエラーになった話

## はじめに

Android Studio でビルドができない問題について個人的メモとしてまとめました。

## 環境

macOS Ventura 13.1
Android Studio Dolphin | 2021.3.1 Patch 1

## エラー #1

`Could not find tools.jar.` となりビルドができない

```
> Could not find tools.jar. Please check that /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home contains a valid JDK installation.
```

### 解決方法

メッセージにあるように `tool.jar` を所定の位置に配置すると解決します。
私の環境ですと `/Users/<ユーザー名>/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib` にありましたのでコピーしました。

```
$ cd //Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/

# フォルダ内に tool.jar が存在しないことを確認
$ ls -alF

# コピー
$ sudo cp <コピー元のパス>/tools.jar ./
```

### 注意点

- ユーザーのライブラリフォルダー（ `/Users/<ユーザー名>/Library` ）ではないので注意が必要です。

## エラー #2

`Unable to load class 'javax.xml.bind.JAXBException'.` となりビルドができない

```
Unable to load class 'javax.xml.bind.JAXBException'.

This is an unexpected error. Please file a bug containing the idea.log file.
```

### 解決方法

AGP のバージョンを更新すると解決します。

```build.gradle
dependencies {
    classpath 'com.android.tools.build:gradle:7.3.1'
}
```

```gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
```
aptでNode.jsが20.5.1からアップデートされなくなったのを解消した

Node.js 20.6系や20.7系がリリースされているのに手元の環境のが20.5.1から更新されず不可解に思っていました。
[Nodesource Node.js DEB][nodesource-url]を訪れてみたところ、下記のように書いてありました。
どうやらdistributionを指定するのではなくnodistroを指定せよとのこと。

```shell-session
sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=20
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update && sudo apt-get install nodejs -y
```

:::note alert
修正前
```text:/etc/apt/sources.list.d/nodesource.list
deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x jammy main
deb-src [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x jammy main
```
:::

:::note info
修正後
```text:/etc/apt/sources.list.d/nodesource.list
deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main
```
:::

nodistroに書き換えたら無事20.7.0にアップデートすることができました:clap:

[nodesource-url]:https://deb.nodesource.com/node_20.x
フレームワークって何？おいしいの？

# はじめに

私もあまり新しくない人間で、最近までjQueryをゴリゴリ使いフロントエンド開発を続けてきました。
jQueryの良いところは何でも思い通りに表現できること。
悪いところは一つ一つ要素を操作する必要があるため効率が悪いこと。
一方、かなり慣れてきたころにはそこまで時間をかけずにコーディングできるようになってきたため、デメリットをあまり感じておらず、フレームワークって何がおいしいのか全然わかりませんでした。
ただ、開発を行う上では他のメンバーにとってどうなのか？ということを考えたほうが良いだろうなと思いフレームワークまず使ってみようじゃないかとNuxt3の勉強を始めました。

# そもそもフレームワーク使っていたじゃないか！

フレームワークとはなんぞや？を調べているうちにそもそも自身がフレームワークを使っていた事実がわかりました。
というのもNode.jsを使ってバックエンドを作る上でまずセットで使うであろうExpressフレームワークをすでに使っていたのですね。。
そりゃルーティングとか自前で作ったら大変だよな・・・とフレームワークなんか使わなくてもなんとかしていたと思っていた勘違いに気付かされました。

# 自分なりのフレームワークの旨味

ここからはNuxt3を触ってみての旨味となります。
* コンポーネントの再利用性
* `auto import`によるコードの簡略化
* データバインディング

コンポーネントの再利用性についてはこれまであまり考えてきませんでしたが、簡単な例でXX番号検索コンポーネントなどは業務アプリケーションを作るような会社であればかなり再利用性が高いでしょう。
他、画一的なデザインに統一した繰り返し表などでしょうか？
共通的に使えそうなものは共通コンポーネントとして管理し、`git submodule`などで取り込むようなプロジェクト構成にすることで他のプロジェクトで似たようなものを何度も作る必要がないです。

`auto import`については最初びっくりしました。
importしていないのにexportしたモジュールが使えるのです。
これについても例えばutilsの下に一般的な関数群やプロジェクト共通で取り扱いたい定義値などを作成し、同じく`git submodule`などでプロジェクト共通化しておくことで有用性が上がりそうです。

データバインディングについては単純にコード量が減ります。
特に画面に反映させるイベントが多数存在する場合に優位性があると思いました。
また、一つのメモリの中で管理できるため反映漏れなどのバグを抑制することができます。

# フレームワークのデメリット？

デメリットというよりは苦労するところとして、思い通りになるように作るまでにはトレーニングが必要そうだということです。
先にも記載しましたが,jQueryは自分が狙ったところにダイレクトに作用させることができるため個人的には簡単でしたが、そうもいかないことが多く発生しました。
コンポーネントへの値渡し、イベント通知のやり取り、レンダリング方式など新しく勉強することが多く初期コストは高いと思います。
ただ作るだけならまだ良いのですが、他のプロジェクトにも共通して適用させるような構成管理等々検討していくと導入初期は苦労は絶えないと思います。

# で？いるの？いらないの？

必要です。
特にコンポーネントの再利用性の観点からは資産を蓄積していくと後々の開発コストに大きく影響すると考えます。
理想論ですが、これまで開発したコンポーネントを組み合わせるだけで出来上がってしまうとか・・・
こんな未来が訪れたらいいな・・・などと思いながら検討を進めている次第です。
[リサーチ・メモ] Object Mapperの使い方

## 背景
社内でパラメータテストを行う際にObject Mapperが使用されていた為、使い方をメモとして残す

## Object Mapperとは
JavaのObjectとJson間の変換を簡単に行えるようにするJacksonライブラリーの一部

## 使い方
```
ObjectMapper objectMapper = new ObjectMapper(); //インスタンスの生成

// JSONデータのシリアライズ(java→json)
MyObject myObject = new MyObject();
String jsonString = objectMapper.writeValueAsString(myObject);

// JSONデータのデシリアライズ(json→java)
String jsonString = "{\"name\":\"John\", \"age\":30}";
MyObject myObject = objectMapper.readValue(jsonString, MyObject.class);

```
DevOps研修を受けてみた感想

# はじめに
2023/9にDevOps Institute認定試験「DevOps Foundation」に向けた研修を受けた。
DevOpsという言葉に惑わされ、本来の伝えたい世界観がちゃんと伝えられていないと感じ、些末ながらメモを起こす。

尚、今の時点でDevOps Instituteの提供元組織がPeopleCertに吸収合併されているが、PeopleCertによりDevOps Instituteとしての資格体系は残るとされている。
PeopleCert側に元々あった「DevOps Foundamentals」は今後廃止され、DevOps Instituteに一本化される流れ、とのこと。

# 所感
私が感じたDevOpsとは、
+ テクノロジ（技術）の指針ではない。
+ メソドロジ（方法論）のベストプラクティスでもない。
+ ビジネス理論であり、組織論であり、
技術者のマインドの在り方である。
+ 新しい文化であり、学びとコラボレーションの文化である。

単に、DevelopmentとOperationを一緒にするよー、って話じゃない。
ツールや技術が必要だよーって話は、二の次。

テクノロジ（技術）は大事ではある。
だがしかし、それよりもテクノロジを使う人々のマインドや文化の方が、重要である。
テクノロジにより、人々や組織の安心感が育ち、マインドや文化が醸成されていく。
重要なのは、人々のマインド・文化を育てること。
その手段として、テクノロジを駆使する。

# DevOpsの成り立ち
DevOpsがどのように出来てきたか、が、DevOpsの世界観（伝えたいこと）を理解することの近道となる。

* DevOpsは草の根活動として、ユーザーコミニティから発症した。
* 組織を超え、国を超え、世界を超え、人々の想いがつながった。
* 現状を超え、新たな世界へ漕ぎ出してきた記録である。
* 現状の課題を乗り越えるために、新しい考え・取り組み・文化にチャレンジしてきた、実践的なノウハウ集である。
* AgileやITIL,PMBOK,ISOなどのように、定義されたものはない。
* 文化そのものである。

# DevOpsのマインド・文化

- 違う価値観、目的の人々が、どのようにコラボレーションするか。
- どの繋がって、更に大きな価値を、素早く生み出すか。
    - × インサイト・アウト（自分たちにフォーカス）
    - ○ アウトサイド・イン（顧客にフォーカス）
- サイロを破壊することが必須である。
- CALMS、これに尽きる。文化醸成が重要。そこから始める。
    - Cluture：文化・マインド
    - Automate：自動化
    - Lean：効率化・無駄の排除・継続的改善・失敗の祝福
    - Measurement：測定・可視化
    - Sharing：共有・分かり合い


# さいごに

あくまでもメモ程度の内容なため、趣旨が伝わりにくいと思う。
ましてや、文化やマインドなんてものは、言葉だけでは理解できない。
けれども、技術的な話でしょ？とか、方法論だよね？、とか、自分たちには必要とない、と思い、そもそも理解をしようともしない人が多いと感じている。

変化が加速し、価値の多様性が増す中、技術がコモディティし、技術者人口も減っている。
現状を変えなきゃいけないことは理解しつつも、不安や拒絶感を払しょくできない。
そんな人たちも多いけれども、一緒に新しい世界へ行くために、このようなDevOpsマインドなどを少しでも伝播していきたい。
Laravel界隈で有名なITエンジニア



Laravelコミュニティ内で広く知られてるエンジニアをピックアップします。



1. **Taylor Otwell**:
   - GitHub: [https://github.com/taylorotwell](https://github.com/taylorotwell)
   - Twitter: [https://twitter.com/taylorotwell](https://twitter.com/taylorotwell)
   - Laravelフレームワークの創設者で、Laravelの主要な開発者です。

2. **Jeffrey Way**:
   - GitHub: [https://github.com/JeffreyWay](https://github.com/JeffreyWay)
   - Twitter: [https://twitter.com/jeffrey_way](https://twitter.com/jeffrey_way)
   - Laracastsの創設者で、Laravel関連の教育コンテンツを提供しています。

3. **Mohamed Said**:
   - GitHub: [https://github.com/themsaid](https://github.com/themsaid)
   - Twitter: [https://twitter.com/themsaid](https://twitter.com/themsaid)
   - Laravelのコントリビュータで、Laravel Newsの編集者でもあります。

4. **Caleb Porzio**:
   - GitHub: [https://github.com/calebporzio](https://github.com/calebporzio)
   - Twitter: [https://twitter.com/calebporzio](https://twitter.com/calebporzio)
   - Laravel Livewireの開発者で、Laravelコミュニティで活発に活動しています。

5. **Dries Vints**:
   - GitHub: [https://github.com/driesvints](https://github.com/driesvints)
   - Twitter: [https://twitter.com/driesvints](https://twitter.com/driesvints)
   - Laravel Homesteadのメンテナンスなどを担当しています。

6. **Nuno Maduro**:
   - GitHub: [https://github.com/nunomaduro](https://github.com/nunomaduro)
   - Twitter: [https://twitter.com/enunomaduro](https://twitter.com/enunomaduro)
   - Laravelのコントリビュータで、Laravelコマンドラインツールを開発しました。

7. **Adam Wathan**:
   - GitHub: [https://github.com/adamwathan](https://github.com/adamwathan)
   - Twitter: [https://twitter.com/adamwathan](https://twitter.com/adamwathan)
   - Laravel開発者で、TDDとLaravelに関する執筆活動を行っています。

8. **Shinichi Nishikawa**:
   - GitHub: [https://github.com/shin1x1](https://github.com/shin1x1)
   - Twitter: [https://twitter.com/shin1x1](https://twitter.com/shin1x1)
   - 日本のLaravelコミュニティで活動し、Laravelに関する情報を発信しています。

9. **Ryo Ito**:
   - GitHub: [https://github.com/ritou](https://github.com/ritou)
   - Twitter: [https://twitter.com/ritou](https://twitter.com/ritou)
   - 日本のLaravelコミュニティで積極的に活動し、Laravelに関するブログやプロジェクトを公開しています。

10. **Takuya Matsuyama**:
    - GitHub: [https://github.com/rap2hpoutre](https://github.com/rap2hpoutre)
    - Twitter: [https://twitter.com/rap2h](https://twitter.com/rap2h)
    - Laravel関連のプロジェクトや情報を提供しており、コミュニティでの活動が知られています。





## Laravel界隈で有名な日本人のITエンジニア


1. **ucan-lab**
   - ハンドルネーム: "ucan-lab"
   - GitHub: https://github.com/ucan-lab
   - Blog: https://qiita.com/ucan-lab
   - Laravelのコントリビュータであり、Laravel関連のプロジェクトやライブラリを開発し、教育コンテンツを提供しています。

2. **yajra**
   - ハンドルネーム: "yajra"
   - GitHub: https://github.com/yajra
   - Laravel DataTablesパッケージの開発者で、Laravelコミュニティで高い評価を受けています。

3. **s-sato**
   - ハンドルネーム: "s-sato"
   - GitHub: https://github.com/s-sato
   - Laravelのコントリビュータで、Laravel開発に関する情報発信を行っています。

4. **kawax**
   - ハンドルネーム: "kawax"
   - GitHub: https://github.com/kawax
   - Laravel関連のプロジェクトやライブラリの開発者であり、コミュニティで活発に活動しています。

5. **somasuzuki**
   - ハンドルネーム: "somasuzuki"
   - GitHub: https://github.com/somasuzuki
   - Laravelのプラグインや拡張機能の開発者で、Laravelファンによく知られています。
# Terraformerになるための道.04  Terraform X Gitlab自動化運用

Terraform X Gitlab自動化運用
---
今回新たな社内システム構築にTerraformとGitLab CI/CDを組み合わせて使用することで、AWS基盤の自動化と運用を効率化し、問題を最小限に抑えることができました。この記事では、TerraformとGitLab CI/CDを使用してAWS基盤を構築し、運用する方法について説明します。


AWS基盤をTerraformで構築する
---
AWS基盤をTerraformで構築することにより、インフラストラクチャをコードで定義し、バージョン管理できます。Terraformを使用すると、VPC、EC2インスタンス、RDSデータベースなどのAWSリソースを宣言的な形式で定義できます。


Terraformの状態ファイルをS3で管理する
---
Terraformの状態ファイルは、AWS S3に保存して管理することが推奨されています。S3を使用すると、状態ファイルを安全に保管し、チーム全体で共有できます。また、S3のバージョン管理を有効にすることで、過去の状態の履歴を追跡できます。


状態ロックファイルをDynamoDBで管理する
---
Terraformは同時実行による競合状態を防ぐために状態ロックファイルを使用します。これをDynamoDBで管理することで、複数の実行が同時に競合することを防ぎます。DynamoDBは高可用性で信頼性のあるデータストアを提供します。


TerraformコードをGitLabに格納する
---
Terraformコードはバージョン管理されるべきです。GitLabを使用することで、Terraformコードをリポジトリに格納し、変更履歴を追跡できます。また、コードレビューを実施し、品質を維持できます。


GitLab CI/CDでTerraformの自動化
---
GitLab CI/CDを設定して、Terraformの自動化を実現します。GitLab RunnerがTerraformコードを実行し、AWS基盤を構築します。自動化されたパイプラインには、```terraform init```から```terraform apply```までのすべてのステップが含まれます。


誤作動防止のためのDestroyの制御
---
誤って```terraform destroy```を実行して本番環境を壊すことを防ぐため、GitLab CI/CDフローにはTerraform destroyが含まれていません。これにより、環境の安全性が確保されます。


GitLab CI/CDでのブランチ戦略
---
GitLab CI/CDにはブランチ戦略が設定されています。これにより、特定のブランチへのプッシュやマージに対して異なるパイプラインのステップが実行されるため、開発と本番環境の切り替えが容易になります。また本番環境に反映するまでPlan結果を確認し、責任者の承認が必要になります。

まとめ
---
TerraformとGitLab CI/CDを使用することで、AWS基盤の構築と運用を効率化し、信頼性を向上させることができます。Terraformを使用して基盤をコードで管理し、GitLab CI/CDを活用して自動化されたパイプラインを実行しましょう。これにより、AWS基盤の変更管理とデプロイメントが迅速かつ安全に行えます。
せんせー、ダークマターってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、ダークマターってなに？

# ダークマターとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## ダークマターって何？

みんな、夜空を見上げると星がキラキラ輝いているのが見えるよね？でも、宇宙には見える星や惑星だけではなく、見えないものもたくさんあるんだよ。その見えないものの中に「ダークマター」という特別なものがあるんだ。

## どういうこと？

ダークマターは、宇宙にあるものの中の大部分を占めているけれど、目には見えないものだよ。普通の望遠鏡で見ても、ダークマターは見えないんだけど、その存在を感じることができる方法があるんだ。

## どうしてそれがすごいの？

ダークマターは、宇宙の動きや形を決める大切な役割を持っているんだ。宇宙がどういう風に動いて、どういう形になっているのかを理解するためには、ダークマターを研究することがとても大切なんだよ。

## だから、ダークマターってなに？

ダークマターは、宇宙にたくさんあるけど、目に見えない不思議なものだよ。でも、その存在を感じることで、宇宙の謎を解明しようとする大人たちがいるんだ。

# まとめ

このように、ダークマターは、宇宙の中の見えないけれどとても大切な存在なんだ。そのダークマターを研究することで、宇宙の謎を少しずつ明らかにしているんだよ。
せんせー、フェムト秒レーザーってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、フェムト秒レーザーってなに？

# フェムト秒レーザーとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## フェムト秒レーザーって何？

みんな、光を知っているよね？日の光やランプの光みたいなものだよ。フェムト秒レーザーは、とっても短い時間に強い光を出す特別なランプみたいなものだよ。

## どういうこと？

「フェムト秒」というのは、とても短い時間を表す言葉なんだ。1秒の中に1000兆の「フェムト秒」があるよ。だから、フェムト秒レーザーは、1秒の中のとても短い時間だけ、ピカッと光を出すことができるんだ。

## どうしてそれがすごいの？

この特別なレーザーを使うと、細かいものをとても正確に加工したり、特別な研究をしたりすることができるんだ。たとえば、目の手術をするときに、とても正確に目を治すことができるよ。

## だから、フェムト秒レーザーってなに？

フェムト秒レーザーは、とても短い時間だけ、強くピカッと光る特別なランプのようなものだよ。

# まとめ

このように、フェムト秒レーザーは、とても短い時間で強い光を出すことができる特別なツールなんだ。それを使って、いろいろなことをする大人たちがいるよ。たとえば、目の手術をしたり、新しいものを作ったりしているんだよ。
せんせー、ゼットバイトストレージってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、ゼットバイトストレージってなに？

# ゼットバイトストレージとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## ゼットバイトストレージって何？

みんな、お部屋におもちゃをたくさん収納するための大きなおもちゃ箱があったらいいよね？「ゼットバイトストレージ」は、コンピュータの中のすごく大きなおもちゃ箱のようなものだよ。でも、このおもちゃ箱は、おもちゃじゃなくて、たくさんの情報を入れることができるんだよ。

## どういうこと？

コンピュータは、写真や動画、音楽などの情報を「データ」として保存するんだ。データは、ちょっとしたものからすごく多くのものまで色々あるよ。ゼットバイトは、その中でとっても大きな単位なんだ。想像してみて、小さいおもちゃ箱、中くらいのおもちゃ箱、大きなおもちゃ箱があるとしたら、ゼットバイトは、ものすごく大きなおもちゃ箱みたいなものだよ。

## どうしてそれがすごいの？

今の時代、みんながインターネットでたくさんの情報を送ったり受け取ったりしているから、そのすべての情報を保存する場所が必要なんだよ。ゼットバイトストレージは、そのすごく多くの情報を保存できるから、すごいんだよ。

## だから、ゼットバイトストレージってなに？

ゼットバイトストレージは、とってもたくさんの情報を保存できる、コンピュータの大きなおもちゃ箱のようなものなんだよ。

# まとめ

このように、ゼットバイトストレージは、今の時代に必要なたくさんの情報を保存するための、とても大きな「おもちゃ箱」のようなものなんだよ。これがあるおかげで、みんなが楽しんでいる動画や音楽など、たくさんの情報が安全に保存されているんだよ。
# Terraformerになるための道.03 Terraformでよく発生する問題

Terraformでよくよく発生する問題 
---
今回新たな社内システム構築にTerraformとAWSが使用されています。インフラストラクチャの管理と展開を効率化するためにIaCツール（Terraform）がますます重要になっていますが、Terraformを使用したAWS基盤の構築にはいくつか問題が必ず発生します。
本記事では、実際遭遇してきた問題と整理した対応方法を汎用化し、それぞれを説明します。

問題1: 状態管理の誤り
---
Terraformの最も重要な概念の一つは状態管理です。Terraformはリソースの状態を把握し、変更を追跡し、計画と適用のプロセスで正確な変更を行うために、この状態を記録する必要があります。しかし、状態ファイルの誤った管理は、致命的な問題を引き起こす可能性があります。

対応方法:
1. バックアップとバージョン管理: 
状態ファイルを定期的にバックアップし、バージョン管理システム（例: Git）で追跡します。これにより、誤って変更を加えた場合でも以前の状態に戻すことができます。

2. リモートバックエンドの使用: 
リモートバックエンド（AWS S3、Terraform Cloudなど）を使用して、状態ファイルをセキュアに保存し、チーム全体で共有できるようにします。これにより、状態ファイルへのアクセスと管理が容易になります。必要な場合はstate.lockを使用して、同時に変更可能な数を制限することが可能です。


問題2: 依存関係の管理
---
AWSのリソースは、複雑な依存関係を持つことがよくあります。例えば、VPC（Virtual Private Cloud）を作成する前に、その中にサブネットを作成する必要があります。Terraformはこれらの依存関係を正確に管理しなければ、リソースが正しく作成または削除されない可能性があります。経験上いつもインターフェース（eni）が邪魔されてリソース削除できず、コンソールからインターフェースを手動で削除してから再度実行することはほとんどでした。

対応方法:
1. depends_on属性の使用: 
Terraformの```depends_on```属性を使用して、リソース間の依存関係を明示的に指定します。これにより、Terraformがリソースの作成順序を理解し、依存関係を満たすようになります。

2. Terraformのグラフ理解: 
Terraformの```terraform graph```コマンドを使用して、Terraformがリソースの依存関係をどのように理解しているかを確認し、必要に応じて調整します。グラフ理解を通じて、Terraformがどのリソースを最初に作成し、どのリソースを待機するかを可視化できます。


問題3: ステートフルなリソースの管理
---
AWSでは、ステートフルなリソース（例: RDSデータベース、Elasticsearchドメイン）を適切に管理する必要があります。これらのリソースにはデータの永続性と一貫性が求められるため、Terraformを使用している場合でも注意が必要です。

対応方法:
1. データのバックアップと復元: 
ステートフルなリソースの場合、データのバックアップと復元プロセスを確立します。定期的なバックアップを行い、データ損失に備えます。

2. Terraformのテンプレートの使用: 
Terraformのテンプレートやモジュールを使用して、ステートフルなリソースの設定を管理します。これにより、設定が再現可能になり、異常な設定変更を防ぎます。


問題4: クラウドリソースのコスト管理
---
Terraformを使用してAWSリソースを自動化する際、誤った設定や不要なリソースの作成がコストを増加させる可能性があります。コストの透明性が欠けると、予算を超える驚きが待っているかもしれません。

対応方法:
1. コストエクスプローラの使用: 
AWSのコストエクスプローラを活用して、リソースごとのコストをモニタリングし、不要なリソースを特定します。これにより、予算内に収めるための調整が行えます。

2. Terraformの計画機能の活用: 
```terraform plan```コマンドを使用して、変更内容とその予想されるコストを確認し、誤った変更を事前に検出します。計画機能は、コストへの意識を高め、変更がコストにどのように影響するかを把握するのに役立ちます。

問題5: ロールバックの難しさ
---
Terraformを使用してリソースを変更する際、変更が問題を引き起こす可能性があります。しかし、変更前の状態に戻すことが難しい場合、リカバリーが難しいことがあります。

対応方法:
1. 変更履歴の文書化: 
変更履歴を文書化し、変更が問題を引き起こした場合でも、以前の状態に戻すための手順を明確にします。文書化は、チーム全体が問題を理解し、対処方法を把握するのに役立ちます。

2. Terraformの状態ファイルのバックアップ: 
状態ファイルを定期的にバックアップしておき、必要に応じて以前の状態に戻すことができるようにします。バックアップは、最悪のシナリオに備えるための保険として機能します。

最後
---
Terraformを使用してAWS基盤を構築する際に遭遇する問題に対処するためには、計画的なアプローチとベストプラクティスを実践することが不可欠です。問題が発生することは避けられないものの、適切な対処方法を知り、迅速かつ効果的に問題に対処することができます。安全で効率的なAWS基盤の構築を目指し、Terraformを活用しましょう。
せんせー、4Dプリンティングってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、4Dプリンティングってなに？

# 4Dプリンティングとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## 4Dプリンティングって何？

みんな、おもちゃや紙飛行機を作ったことがあるよね？「4Dプリンティング」は、特別なマシンを使って、形を持ったものを作る技術だけど、時間がたつとその形が変わる魔法のようなものを作れるんだよ。

## どういうこと？

3Dプリンターを使えば、プラスチックのおもちゃや小物を作れるよね。4Dプリンティングもそれと似ているけれど、作ったものが水に触れたり、温度が変わったりすると、自動で形が変わるんだよ。

## どうしてそれがすごいの？

自分で動かさなくても、自分で形が変わるものを作ることができるんだよ。例えば、小さく折りたたんだ傘が雨が降ると自動で開くようなものを想像してみて。

## だから、4Dプリンティングってなに？

4Dプリンティングは、特別なマシンを使って、時間とともに形が変わるものを作る技術なんだよ。

# まとめ

このように、4Dプリンティングは、時間とともに形が変わる魔法のようなものを作ることができるすごい技術なんだよ。未来のおもちゃや便利なものが、この技術で作られるかもしれないね。
せんせー、ビオミメティクスってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、ビオミメティクスってなに？

# ビオミメティクスとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## ビオミメティクスって何？

みんな、自然や動物を見て、それをまねることって楽しいよね？「ビオミメティクス」は、自然の中のものや動物の仕組みを見て、それを人間が作るものに使おうとする考え方だよ。

## どういうこと？

例えば、くもの巣を見て、それがとても丈夫だと感じることはあるよね？ビオミメティクスを使うと、くもの巣のように丈夫なものや、魚が速く泳ぐ秘密など、自然の中の素晴らしいアイデアを、新しい製品や技術に生かそうとするんだ。

## どうしてそれがすごいの？

自然は長い時間をかけて、色んな問題を解決する方法を見つけてきたんだよ。それを人間が学ぶことで、もっとすごいものや技術を作ることができるかもしれないんだ。

## だから、ビオミメティクスってなに？

ビオミメティクスは、自然の中のアイデアや仕組みを見て、それを人間の技術や製品に使う考え方なんだよ。

# まとめ

このように、ビオミメティクスは、自然の中のすごいアイデアを学んで、新しいものを作るための考え方なんだよ。自然をよく観察して、それをまねることで、すごい発明をすることができるかもしれないね。
Makeを使って部門長のシフトを確認出来るようにしてみた



私は現在、100人程度の従業員が在籍しているスーパーで店舗の運営と人事管理を行っています。
しかしながら、営業中は多くのお客さんや取引先の人、従業員が多く動くのに対し、業務に使用できるパソコンの台数は限られており、パソコン作業を待つのは作用ストレスとなりがちです。また、翌日や1週間先の予定のことを考えると手元で従業員のシフトを把握しておきたいと考えました。

# 目的
携帯で各部門長のシフトを把握すること

# 送られたメッセージ
https://twitter.com/jf0129190483/status/1707151209960968541

# 使用したツール
`SpreadSheet`
`LINE Notify`
`Make`

# 作成手順

## Sheetの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552218/13bc4444-5fb9-27b8-1d90-4877be92ae7a.png)
表のようにまず自分のシフトに関わる人で出勤か休日かを確認できるようにしてみました。

## Makeの全体像
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552218/f632a8c9-2c69-d8b0-0d44-73c208823dde.png)



## googlesheetの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552218/03f73dc9-0a55-2bca-23a2-06662ec961b7.png)




## LINEの設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552218/1a6847a2-d677-8f7b-6301-de7e14f47d48.png)

## LINEの画面
![image0 (1).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552218/dabd62bb-1c98-8f41-89ed-0ed121164fe8.jpeg)
　送られた画面は少し暗号めいてはいるが、日にちと出勤が何とか理解できそうだったのでもうひとつ違う形で作ってみました。
今度は各部門のリーダーの出勤予定を作成し、送ってみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552218/649a5320-f576-31fb-12d1-e89cdb4b56b0.png)
からの、LINE画面
![image0 (2).jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552218/b67f49dc-d755-ea7a-e580-c99a24f78a1d.jpeg)



# 反省点

 欲張ったら暗号っぽくなって結構地味、面白みがない、画面が見づらい
と感じてしまいました(-_-;)。
　もっといいもの作りたいです(;^_^A
今後はこのようにカスタムして身近な人で利用できるものを作成したいと思います。
せんせー、ハイパーループ技術ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、ハイパーループ技術ってなに？

# ハイパーループ技術とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## ハイパーループ技術って何？

みんな、すごく速い電車を想像してみて。その電車が、特別な管の中を飛ぶように走るんだよ。それが「ハイパーループ」だよ。

## どういうこと？

ハイパーループは、大きな管の中で、空気の抵抗がとても少なくなるように作られているんだ。だから、電車がすごく速く走ることができるの。まるで未来の乗り物みたいだね。

## どうしてそれがすごいの？

普通の電車よりも、ハイパーループはとっても速くて、遠くの場所へ短時間で行けるよ。例えば、東京から大阪まで、もっと短い時間で行けるかもしれないよ。

## だから、ハイパーループ技術ってなに？

ハイパーループは、特別な管の中をすごく速く走る電車のこと。そのための技術や方法を考えることが「ハイパーループ技術」なんだよ。

# まとめ

ハイパーループは、未来の速い電車みたいなもので、遠くの場所へあっという間に行けるかもしれないんだよ。それを作るための技術や知識が、ハイパーループ技術なんだ。
リーダブルコードまとめ


# 基本理念

- 簡潔 ≠ 正義 BUT 短い方がいい
- 他人・未来の自分が最短で理解できるように

# 表面上のTechs

## 命名

- 明確に
- Not 汎用的 but 具体的
- 接頭辞・接尾辞を使う
- 長さを適切に
- THE SAURUS (シソーラス)を使って探す
- 役割がないとき・生存期間が数行のときなどは`tmp`などを使っていい
- 意味の異なるイテレータは`ai`と`bi`などに分けて使う
- 識別子のスコープに応じて名前の長さを決定
- 省略はわかりやすい範囲で
- 不要な単語は捨てる
- 名前のフォーマット(`apple`, `Apple`, `APPLE`)で情報を伝える(「大文字は定数」など)
- 「クラスのメンバ変数なら`member_`をつける」など、規約を作る
- HTMLの`class`はハイフン、`id`はキャメル?

- `filter()`-> `select()`, `exclude()`
- `clip()` -> `remove()`, `truncate()`
- `length` -> `binaries`, `chars`, `words`
- `max`, `min` -> 
- 範囲指定は `first` - `last`
- 排他的なら `begin` - `end`
- 真偽値なら `is`, `has`, `can`, `should`
- 想像できる命名
- `get` = 軽い, `compute` = 重い

## 美しさ

- インデントを揃える(フォーマッターでおけ)
- 一貫した意味のある並び
  - 重要度順
  - アルファベット順
- 段落に分割して踏み石を提供

## コメント

- コメントするべきでないこと = すぐわかること
- 優れたコード > ひどいコード + 優れたコメント
- 自分の考えを記録する
  - 「〜した方がいいかも」
  - アノテーション: `TODO`, `FIXME`, `HACK`, `XXX`
- 読み手の立場で考える
- コードの意図を書く
- 全体像を簡潔に
- 名前付き引数 or インラインコメント
- 代名詞を避ける(`this`, `self`など -> 具体的な `user` などにする)
- 情報密度の高い言葉を使う
- 実例を書く

# ループとロジックの単純化

## 制御フロー

- 条件式
  - 調査対象 == 変化しない比較対象
  - 肯定形
  - 単純な条件が先
  - 目立つ条件が先
- アーリーリターン
- ネストは浅く

## 巨大な式の分割

- 説明変数・要約変数
- ド・モルガンで NOT を括り出す
- 一行にこだわらない

## 変数

- スコープを縮める (グローバル変数は危険)
- 変数定義は使う直前
- 定数(イミュータブル)をなるべく使う

# コードの再構成

## 無関係の下位問題を抽出する

- 一つのブロックに本質的なものだけ書く
- 小機能を独立させると改善が楽
# Terraformerになるための道.02 Terraformでの状態管理

Terraformの状態管理
---
Terraformは、クラウドインフラストラクチャやリソースをコードとして管理するためのIaCツール（Infrastructure as Code）の一つです。Terraformを使用すると、インフラストラクチャの作成、更新、削除などの操作を自動化し、再現性を確保することができます。Terraformの効果的な使用のためには、状態管理が非常に重要です。この記事では、Terraformでの状態管理に関する基本的な内容について説明します。


Terraformの状態管理とは何か？
---
Terraformの状態管理は、Terraformが管理するインフラストラクチャリソースの現在の状態を記録し、Terraformが変更を追跡し、計画と適用のプロセスで正確な変更を行うのに役立ちます。

Terraformの状態管理は、次の点で重要です。

1. 変更の追跡: 
Terraformはリソースの変更を追跡し、実行した変更を把握します。
これにより、インフラストラクチャの状態がコードと一致するように保たれます。

2. コラボレーション: 
複数のチームメンバーや環境で共同作業を行う場合、共有の状態管理が重要です。
Terraformの状態ファイルはチーム全体で共有し、同じインフラストラクチャを管理します。

3. 復元性: 
インフラストラクチャが意図しない状態になった場合、Terraformの状態管理を使用して以前の正確な状態に戻すことができます。
※ バージョン管理ができている場合に限ります。


Terraformの状態管理の仕組み
---
Terraformの状態管理は、Terraformの実行時に生成される「状態ファイル」を介して行われます。このファイルには、Terraformが管理するすべてのリソースとその状態が記録されています。このファイルは通常、ローカルファイルシステムに保存されますが、リモートバックエンド（AWS S3、Azure Blob Storage、Terraform Cloudなど）を使用してリモートで管理することもできます。今回の新しい社内システムの状態ファイルはAWS S3とAWS Dynamodbで管理されています。


状態ファイルの管理
---
状態ファイルは機密情報を含むため、適切なセキュリティ対策を講じることが重要です。以下の方法で状態ファイルを管理します。

1. セキュアな保存: 
状態ファイルはセキュアな場所に保存されるべきです。リモートバックエンドを使用するか、アクセス制御リスト（ACL）を設定してアクセスを制御します。

2. バックアップとバージョン管理: 
状態ファイルは定期的にバックアップされ、バージョン管理システムで追跡されるべきです。これにより、誤って変更を加えた場合でも以前の状態に戻すことができます。

3. アクセス権限の制御: 
状態ファイルへのアクセス権限を制御し、必要なユーザーだけが変更を行えるようにします。


状態管理のベストプラクティス
---
Terraformで効果的な状態管理を行うためには、以下のベストプラクティスを考慮することが重要です。

1. リモートバックエンドの使用: 
リモートバックエンドを使用して状態ファイルをセキュアに保存し、チーム全体で共有できるようにします。

2. 変更の確認: 
変更前に```terraform plan```コマンドを使用して、変更内容を確認し、意図しない変更を防ぎます。

3. 変更の記録: 
変更履歴を文書化し、変更が発生した背後にある理由やコンテキストを記録します。

4. ロックの管理: 
同時に複数のユーザーが同じ状態ファイルにアクセスしないようにロックを使用します。


最後
---
Terraformの状態管理は、インフラストラクチャを安全に管理し、チーム全体で協力して効率的に作業するための不可欠な要素です。適切なセキュリティ対策とベストプラクティスを遵守することで、問題なくTerraformを導入し、運用できるでしょう。
せんせー、マグネトヒドロダイナミクスってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、マグネトヒドロダイナミクスってなに？

# マグネトヒドロダイナミクスとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## マグネトヒドロダイナミクスって何？

みんな、水と磁石を知ってるよね？「マグネトヒドロダイナミクス」は、液体の中の電気を持ったものと、磁石がどう関係するかを勉強する科学だよ。

## どういうこと？

水の中に、電気を持った塩を混ぜると、その水は磁石の力を感じるようになるんだ。この水がどう動くかを調べるのが、マグネトヒドロダイナミクスなんだよ。

## どうしてそれがすごいの？

この科学を使うと、太陽の中の動きや、地球の中心の動きを理解する手助けになるんだ。それに、特別なエンジンや電力を作るのにも使われることがあるよ。

## だから、マグネトヒドロダイナミクスってなに？

マグネトヒドロダイナミクスは、電気を持った液体と磁石がどう関係するかを勉強する科学なんだよ。

# まとめ

マグネトヒドロダイナミクスは、磁石の力と液体の動きを勉強するもので、たくさんの面白い現象や技術を知るための鍵になっているんだよ。
せんせー、組織工学ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、組織工学ってなに？

# 組織工学とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## 組織工学って何？

みんな、おもちゃのブロックを使って、お城や家を作ったことあるかな？「組織工学」は、体の部分を作るための特別なブロックを使って、傷ついた体の部分を修理するようなものだよ。

## どういうこと？

人の体は、たくさんの小さな部分でできているんだ。でも、ときどき、病気やけがでその部分が壊れてしまうことがあるよね。組織工学は、新しい体の部分を作って、壊れた部分を直すための科学なんだ。

## どうしてそれがすごいの？

もし、足や腕が壊れてしまっても、組織工学を使えば、新しい部分を作って、元のように直すことができるかもしれないんだ。それは、まるで魔法のようにすごいことだよね。

## だから、組織工学ってなに？

組織工学は、人の体の壊れた部分を直すために、新しい部分を作る科学なんだよ。

# まとめ

組織工学は、人の体を直すための特別な技術で、これを使うと、壊れた体の部分も新しくして元通りになるかもしれないんだよ。それは、とってもすごいことだよね。間が作った「頭良くなる魔法」みたいなもの
せんせー、ホログラフィックデータストレージってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、ホログラフィックデータストレージってなに？

# ホログラフィックデータストレージとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## ホログラフィックデータストレージって何？

みんな、プリズムを使って太陽の光を通すと、きれいな虹のような色ができること知ってるかな？「ホログラフィックデータストレージ」は、その虹のような色の光を使って、たくさんの情報を保存する特別な方法なんだよ。

## どういうこと？

普通のCDやDVDは、表面に小さな穴を開けて情報を保存するけど、ホログラフィックデータストレージは、光の波を使って情報を3Dの形で保存するんだ。だから、もっとたくさんの情報を一つの場所に保存できるんだよ。

## どうしてそれがすごいの？

みんなが大好きなアニメやゲーム、それに音楽など、たくさんの情報をひとつの小さな場所に保存できると、便利だよね。ホログラフィックデータストレージを使えば、今まで以上にたくさんの情報を保存することができるんだ。

## だから、ホログラフィックデータストレージってなに？

ホログラフィックデータストレージは、光の波を使って情報を3Dの形で保存する特別な方法なんだよ。

# まとめ

ホログラフィックデータストレージは、たくさんの情報を小さな場所に保存できる新しい技術なんだ。この技術を使うと、これからのコンピューターやゲーム機がもっと便利になるかもしれないね。
Githubのpushに失敗した場合！！

mac default dir/gitfld/% git push -u origin main
Username for 'https://github.com': username入力
Password for 'https://username@github.com':password入力
以下のエラー発生！！
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/shinsaku-jazzbass/youtube-git2.git/'

githubサイトにてsettingよりDeveloper Settings→Personal access token→Token(classic)選択し
Genarate new tokenにて生成し、tokenをコピーし再度ターミナルにてpushしてpasswordにtokenをペースト。
pushされます。
せんせー、シリコンフォトニクスってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、シリコンフォトニクスってなに？

# シリコンフォトニクスとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## シリコンフォトニクスって何？

みんな、太陽の光を浴びると、明るくてあたたかい感じがするでしょ？その光のようなものを、特別な素材である「シリコン」を使って、情報を送ったり受け取ったりする技術のことを、シリコンフォトニクスと言うんだよ。

## どういうこと？

電気を使って情報を送る代わりに、光を使って情報を送る方法があるんだ。その光を、シリコンという素材でうまく扱うことで、とても速く情報を送ることができるんだよ。

## どうしてそれがすごいの？

光はとても速く動くから、情報をすばやく遠くまで送ることができるんだ。そして、シリコンフォトニクスを使うと、たくさんの情報を一度に送ったり、受け取ったりすることができるから、とても便利なんだよ。

## だから、シリコンフォトニクスってなに？

シリコンフォトニクスは、光を使って情報を速く、たくさん送るための特別な技術のことを指すんだ。

# まとめ

シリコンフォトニクスは、光を使って情報をすばやく送る技術なんだ。この技術を使えば、たくさんの情報を一度に、遠くまで送ることができるから、未来のコンピューターや通信の技術に大切な役割を果たすかもしれないね。
AWS CDK - Context

# Context

CloudFormation の Parameters のように使える機能。
コンテキスト値は、アプリ、スタック、コンストラクトに関連付けることができるキーと値のペアです。
キーは文字列で、値は JSON でサポートされている任意の型（数値、文字列、配列、オブジェクト）を使用することが可能。


# Context の提供方法

6 つある。

1. 現在の AWS アカウントから自動的に提供
2. CDK コマンドの --context　オプションで指定
3. プロジェクトの cdk.context.json ファイルに記述
4. プロジェクトの cdk.json ファイルの context　キー
5. ~/.cdk.json ファイルの context　キー
6. construct.node.setContext メソッドで使用


# Context の取得方法

`construct.node.tryGetContext` を使用して　Context値を取得します。

# Context methods

|methods|説明|
|---|---|
|[HostedZone.fromLookup](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_route53.HostedZone.html#static-fromwbrlookupscope-id-query)|アカウント内のホストゾーンを取得する。|
|[stack.availabilityZones](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.Stack.html#availabilityzones)|サポートされている AZ を取得します。|
|[StringParameter.valueFromLookup](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ssm.StringParameter.html#static-valuewbrfromwbrlookupscope-parametername)|現在のリージョンの Amazon EC2 Systems Manager Parameter Store から値を取得する。|
|[Vpc.fromLookup](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.Vpc.html#static-fromwbrlookupscope-id-options)|アカウント内の既存の Amazon VPC を取得する。|
|[LookupMachineImage](https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.LookupMachineImage.html)|Amazon VPC内 の AMI を検索する。|

# cdk context

|コマンド|説明|
|---|---|
|cdk context|cdk.context.json ファイル内の情報を表示する。|
|cdk context --reset|特定のコンテキスト値を削除する。|
|cdk context --clear|コンテキスト値をすべて消去する。|

# AWS CDK Toolkit --context flag

synth　または　deploy 時にコンテキスト値を CDK アプリに渡すには、--context (-c) オプションを使用します。

```
cdk synth --context key1=value1 --context key2=value2 MyStack
```

複数のスタックをデプロイする場合、指定したコンテキスト値は通常、すべてのスタックに渡されます。
必要であれば、コンテキスト値の前にスタック名を付けることで、各スタックに異なる値を指定することができます。

```
cdk synth --context Stack1:key=value --context Stack2:key=value Stack1 Stack2
```

# Example

```cdk.json
{
  "context": {
    "myKey": "myValue",
    "anotherKey": "anotherValue"
  }
}

```

```python
from aws_cdk import core

class MyCdkStack(core.Stack):

    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # cdk.jsonからContextを読み込む
        my_value = self.node.try_get_context("myKey")
        another_value = self.node.try_get_context("anotherKey")
```
せんせー、モルフォロジックコントロールってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、モルフォロジックコントロール？

# モルフォロジックコントロールとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## モルフォロジックコントロールって何？

みんな、ロボットのおもちゃを持ってる人はいますか？ロボットが形を変えて動くのを見たことあるよね。モルフォロジックコントロールは、物やロボットが自分の形を変えるための「操作の方法」のことだよ。

## どういうこと？

例えば、ロボットが腕を伸ばしたり、身体を曲げたりするとき、どうやってその動きをするかを決めるのがモルフォロジックコントロールなんだ。つまり、物やロボットがどう形を変えるかを考えたり、指示したりすることだよ。

## どうしてそれがすごいの？

物やロボットが形を変えることで、いろんなことができるようになるんだ。たとえば、狭い場所に入るときには小さく、広い場所での作業のときには大きくなったりすることができるんだよ。

## だから、モルフォロジックコントロールってなに？

モルフォロジックコントロールは、物やロボットがどんな形になるか、どんな動きをするかを決めるための「操作の方法」のことなんだ。

# まとめ

モルフォロジックコントロールは、ロボットや物が形を変えるときの「操作の方法」を教える技術なんだ。それによって、ロボットはいろんな場面で役立つ動きをすることができるようになるんだよ。
せんせー、3Dプリント器官ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、3Dプリント器官ってなに？

# 3Dプリント器官とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## 3Dプリント器官って何？

みんな、おもちゃのブロックで何かを作ったことある？3Dプリントは、そんなブロックを重ねるみたいに、層を積み重ねて物を作る方法だよ。そして、この技術を使って、本当の人の体の部分を作ることができるんだ！

## どういうこと？

3Dプリンターという機械が、特別な材料を使って、人の心臓や肺などの器官を作ることができるんだ。そのときに使う材料は、人の体に優しいものや、本物の細胞を使ったものだよ。

## どうしてそれがすごいの？

人の体の部分が病気で困っている人がいると、その部分を新しく作ってあげられると、とても助かるよね。3Dプリントで作られた器官は、そのような人たちのための新しい希望となることができるんだ。

## だから、3Dプリント器官ってなに？

3Dプリント器官は、3Dプリンターという機械を使って、人の体の部分を作り出すすごい技術のことを指すんだ。

# まとめ

3Dプリント技術は、おもちゃのブロックを積み重ねるように、本物の人の体の部分を作ることができるすごい技術なんだ。それによって、病気で困っている人たちに新しい希望をもたらすことができるんだよ。
せんせー、バイオインスパイアドセンサーってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、バイオインスパイアドセンサーってなに？

# バイオインスパイアドセンサーとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## バイオインスパイアドセンサーって何？

みんな、自然や動物から学んだことってある？例えば、鳥が空を飛ぶのを見て、飛行機を作るアイディアを得たり。バイオインスパイアドセンサーもそんな感じで、自然や生き物からヒントを得て作られたセンサーなんだよ。

## どういうこと？

センサーとは、物や環境の情報を感じ取るための道具のこと。バイオインスパイアドセンサーは、生き物の感じ取る能力をまねて、人間のためのセンサーを作る方法なんだ。

## どうしてそれがすごいの？

生き物は長い時間をかけて進化してきたから、とてもすごい能力を持っているよね。その能力を参考にしてセンサーを作ると、とても優れた働きをするセンサーができるんだ。

## だから、バイオインスパイアドセンサーってなに？

バイオインスパイアドセンサーは、生き物のすごい能力を参考にして作られた、特別なセンサーのことを言うんだ。

# まとめ

自然や生き物は、とてもすごいことを教えてくれるよ。それを学んで新しいものを作るのが、バイオインスパイアドセンサーなんだよ。生き物の能力を参考にして、もっとすごいセンサーを作ることができるんだよ。