OmniAICreator/Qiita-1.07M huggingface dataset:
【2025年対応】PowerShellとBashで実現するSlidevの完全インストールガイド

こんにちは！最近、趣味でプレゼンテーションツールとしてSlidevを導入することになったのですが、メンバー全員の環境構築を効率的に進めるため、自動化スクリプトを作成しました。その過程で得た知見を共有したいと思います。

## この記事について

### 想定する読者
- Slidevを導入してみたい方
- チームでの開発環境構築を自動化したい方
- PowerShellやBashでのスクリプト作成に興味がある方

### 前提条件
- Windows環境またはMac環境
- 管理者権限でスクリプトが実行できること

### 環境情報
- 検証OS：Windows 11、macOS Sonoma
- PowerShell：7.3以上
- Bash：3.2以上
- 執筆時期：2024年12月

## スクリプトの概要

今回作成したスクリプトは以下の環境構築を自動化します：

1. パッケージマネージャー（WindowsはChocolatey、MacはHomebrew）
2. Node.js
3. npm
4. yarn
5. Slidev

## Windows環境でのインストール

### インストールスクリプト（install.ps1）

```powershell
# Chocolateyのインストール
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

# Node.jsのインストール
choco install -y nodejs

# npmのアップデート
npm install -g npm

# yarnのインストール
npm install -g yarn

# Slidevのインストール
npm install -g @slidev/cli
```

### 環境チェックスクリプト（check.ps1）

```powershell
# モジュールチェック関数
function Check-Module {
    param (
        [string]$moduleName
    )
    $module = Get-Module -ListAvailable -Name $moduleName
    if ($module) {
        Write-Output "$moduleName はインストールされています。"
    } else {
        Write-Output "$moduleName はインストールされていません。"
    }
}

# 各モジュールのチェック
$modules = @("slidev", "slidev-theme", "slidev-cli")
foreach ($module in $modules) {
    Check-Module -moduleName $module
}
```

## Mac環境でのインストール

### インストールスクリプト（install.bash）

```bash
# Node.jsのインストール
if ! command -v node &> /dev/null
then
    echo "Node.js is not installed. Installing Node.js..."
    brew install node
else
    echo "Node.js is already installed. Version: $(node -v)"
fi

# Yarnのインストール
if ! command -v yarn &> /dev/null
then
    echo "Yarn is not installed. Installing Yarn..."
    npm install -g yarn
else
    echo "Yarn is already installed. Version: $(yarn -v)"
fi

# Slidevのインストール
if ! command -v slidev &> /dev/null
then
    echo "Slidev is not installed. Installing Slidev..."
    yarn global add slidev
else
    echo "Slidev is already installed. Version: $(slidev --version)"
fi
```

## 実行方法

### Windows環境の場合
1. 管理者権限でPowerShellを起動
2. スクリプトの実行ポリシーを変更
```powershell
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
```
3. インストールスクリプトを実行
```powershell
.\install.ps1
```

### Mac環境の場合
1. ターミナルを起動
2. スクリプトに実行権限を付与
```bash
chmod +x install.bash
```
3. インストールスクリプトを実行
```bash
./install.bash
```

## 注意点

### ハマりやすいポイント
- Windows環境ではスクリプト実行権限の設定が必要
- Mac環境ではHomebrewの事前インストールが必要
- プロキシ環境下では追加設定が必要な場合あり

### バージョン互換性
- Node.jsは16.x以上を推奨
- npmは8.x以上を推奨
- yarnは1.22.x以上を推奨

## まとめ

このスクリプトを使用することで、以下のメリットが得られます：

1. 環境構築の時間短縮
2. チーム内での環境の統一
3. インストール手順のミス防止

また、このスクリプトはGitHubなどのバージョン管理システムで管理することで、チーム全体で共有・メンテナンスすることができます。

## 参考資料
- [Slidev公式ドキュメント](https://sli.dev/)
- [Node.js公式サイト](https://nodejs.org/)
- [Chocolatey公式サイト](https://chocolatey.org/)
- [Homebrew公式サイト](https://brew.sh/)

## フィードバック
スクリプトや記事の内容について問題を見つけた場合や改善案がありましたら、[GitHubのイシュー](https://github.com/M-Yuu23586/Slidev-install-Command/issues)にてご報告いただけますと幸いです。皆様からのフィードバックをお待ちしております！ 💪
プロジェクトマネージャ試験 合格体験記

# 概要
2024秋試験でプロジェクトマネージャ試験を受験した。
~~本当は結果が出てから書こうと思ったけど、アドカレの記事のネタがなかったので書いちゃった~~

# 受けた経緯
私「今年の秋はなんか受けようかなって。セキスぺが一番受かりやすいって聞いたんでそれでいいっすか？」
上司「業務に関係ないじゃん。PM受けてよ。」
私「（PMもやらんやん…までもPM出来ないと給料あがらないしな）はい！」

# 学習前の状況
- 応用情報（2年前）の午後はPM選択した
- PMの実務経験はなし

# 使った教材
- PMの概要理解のため

https://www.udemy.com/course/pmbok7-overview/?srsltid=AfmBOoqe2eZMz7COLWcM7iiolzxC8GWW7mDuPYJXjLEg10HRPa_O7Vst

- 午前Ⅱ対策

https://www.pm-siken.com/pmkakomon.php

- 午後ⅠⅡ対策（通称みよちゃん本）

https://amzn.asia/d/4ReiTGT

- 午後Ⅱ対策

https://amzn.asia/d/bJJTaNB

# やったこと
- 通算の勉強期間は2か月くらい

#### 午前Ⅰ
- 免除だったのでなにもなし

#### 午前Ⅱ
- 過去問道場のみ
    - 試験1週間前くらいから
    - 直近10年の問題を隙間時間で周回した
        - 正答率95％になるまで
        - 初見問題は直感で解くしかない分、過去問から出る範囲は全部取れるようした

#### 午後Ⅰ
- とにかく過去問
    - 直近10年の問題を周回した（たぶん6周）
    - みよちゃん本に書かれているとおりの問題の書き込みをしながら

#### 午後Ⅱ
- 合格論文を読書的に読む
- 過去問を解く
    - 解いた問題：H21問1、R2問1、R2問2、R5問2
        - ※もっと解きたかったけど体力的に無理だった



# 結果
| 試験 | 点数 | 結果 |
|:-:|:-:|:-:|
| 午前Ⅰ  | -  | 免除  |
| 午前Ⅱ  | 64/100  | **通過**  |
| 午後Ⅰ  | 80/100  | **通過**  |
| 午後Ⅱ  | A評価  | **合格**  |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616564/dd26f27d-b5db-f06c-739f-eab2f3ca7f46.png)


# 感想
- PMの基本的な考え方を学べた
    - あくまで考え方を学べただけなので実務は出来ない
    - 実際、リスクを意識する～とか全然できない
- 偉い人達が何考えてるのかはちょっとわかるようになったかもしれない
    - きっとこれ気にしてるからこういう質問してきてるんだろうなぁ、みたいな
    - でも上司曰く「キレイゴトだよ」
- 結果はどうあれ、これだけ真面目に勉強したのは久しぶりで楽しかった
- 文字数カウントだけで言えば2万字くらい書いた
    - 作文は好き（得意とは言わない）ので苦でなかったし、書いていて楽しかった
    - 午後Ⅱの勉強が苦しくなかったのが試験に挑戦出来た一因だと思う（苦しかったら勉強するの止めてた）


# どうでもいいこと
- 家にプリンタがないのでコンビニのプリンタに何百円も貯金した
- 地元の図書館で勉強してたら同じくPMの教本開いてる人がいて勝手に仲間意識を持った
Hello, AWS! Ver.R7 ～ はじめに

　コンピュータ上で動作するソフトウェアを開発する際、実際に簡単なプログラムを作成して動かしてみることで、利用するプログラミング言語の使い方を確認することがある。

　その代表例が、画面上に「Hello, world!」と表示する、いわゆる「ハロー・ワールド」プログラムである。

https://ja.wikipedia.org/wiki/Hello_world

　このプログラムは、単に「Hello, world!」を表示するだけだが、そのために必要なソースコードの記述方法やコンパイル、実行手順を調べる過程で、プログラミング言語の基本的な使用方法を学ぶことができる。

　ハロー・ワールドは、ソフトウェア開発への最初の一歩と言えるだろう。

　この記事では、ハロー・ワールドから着想を得てタイトルを決定した。その名の通り、Amazon Web Services（以下、AWSと略す）を実際に使ってみることが趣旨である。

　Amazon.comは、書籍をはじめとする商品販売のオンラインサイトとして広く知られているが、それだけでなく、AWSというクラウドコンピューティングサービスも提供している。

https://aws.amazon.com/jp/

　代表的なサービスの一つとして仮想マシンを提供する「Amazon Elastic Compute Cloud」（以下、EC2と略す）が挙げられるが、現在ではEC2をはじめとするコンピューティングサービスにとどまらず、機械学習、人工衛星関連、IoT、ゲーム開発など、多様な分野にわたる各種サービスを提供している。

　私自身、数年前からAWSを触り始め、実際に撮りためた写真をアーカイブするため「Amazon S3 Glacier」を利用している。しかし、必要な知識が非常に多く、学習のハードルが高いと感じ、Glacier以外のサービスにはほとんど手を出してこなかった。

　しかし、クラウドコンピューティングは今や当たり前の存在となりつつある。今後、必要となりそうな知識を身につけるため、改めてAWSを実際に使い、習得した知識を将来に役立てていきたいと考えている。

---

　この記事は、2020年にnoteで投稿した「Hello, AWS! ～ はじめに」を、2024年12月現在の状況に合わせて改訂したものである。今回は、新たにAWSのEC2サーバーを運用するにあたり、過去の関連投稿を再検証し、現行環境にふさわしい内容へと更新した。

　しかし、ただ改訂するだけでは味気ないため、過去の記事をChatGPTで校正するという現代的な試みも行っている。また、初版も併せて掲載しているので、改訂前後の違いを比較していただければ幸いである。なお、校正にはo1モデルを使用し、2回の校正を経た結果が本記事となっている。

　以下、元記事。

 https://note.com/_player1_/n/n68e683fc1cb5
【言語初心者】C#ってどんな感じ？

# この記事では...
C#の歴史や文法など、主に初心者向けの情報を
色々書いています:cheese::cake:

# C#とは！
Microsoft製のCとJavaをベースとした言語。
+を4個くっつけて、#になったとか。


# 特徴
- CやC++よりプログラム量が少ない
- .NET Framework上で動作

# HelloWorldを書いてみよう
```c#:main.cs
Console.WriteLine("Hello World!");
```

# Unityでも活躍するC#
ゲームエンジンであるUnityでは、
プログラミング言語にC#が採用されています。
これにより、簡単にゲームを作成することができます！
ゲームを作りたいなら、C#を学習すると良いかもしれませんね！
NotebookLM を、複数の生成AIでの検討結果をまとめるのに使うとよさそう

歴史研究、Maplatなどの歴史研究用ツール、あるいはもっと手前の純粋技術要素の調査検討に、[NotebookLM](https://notebooklm.google.com/)を使っています。

### NoteBookLMとは: パーソナルナレッジベースとしては使いにくい

NotebookLMとは、WebサイトやGoogleドキュメント/スライド、YouTube、PDF/音声ファイル、テキストファイルなどを最大50件程度まで登録でき、それに対しユーザがチャットをすることで内容を元にした質問などを生成AIに投げて、その結果をメモとすることができるツールです。
この動作から、筆者は当初、いわゆるベクトルデータベースを用いて、社内の機密文書などの文脈をデータベース化し、LLMと組み合わせて社内機密分野連携の生成AIナレッジベース化する、ユースケースの、個人向けソリューションかと思って使っておりました。

が、どうもそういう用途としては使いにくい感じがしました。
そのころに使おうとしてうまく使えなかった残骸として、街の記録を残すときの様々なアプローチ（ウィキペディアタウン、大字史、街の記憶を残し隊など）の論文を登録し、分析したり質問できるナレッジベースを作ろうとして失敗した例が以下になります。

![大字誌・ウィキペディアタウン・街の記憶を残し隊](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/3db04500-919f-bed0-2e7d-2e56a48286db.png)

使いにくい理由ですが、以下のような理由です。

* チャットの履歴が残らない
理由はわかりませんが、他の生成AIと違い、NotebookLMではチャットの履歴が残りません。そのため、積み上げ式に知見を残していく場としては不適です。
* チャットをメモに残すことは可能だが、大事なコンテキストが失われる
チャットに対するNotebookLMの返答を、メモとして残すことはできます。しかしその際、人間が行った質問側は記録に残らず、かつ回答のリファレンス情報もリンク先が消えてしまいます。

このような仕様から、パーソナルナレッジベース基盤としては使いにくく、なんでこんな仕様にしてるのかなと思いつつ、すこし使うことから遠ざかっていました。

### 飽くまで統合するのは人間系の責任とした上での、情報の集約場所としては優秀

一方で、生成AIを使う上でも悩みがありました。
生成AIは、日々の小さな疑問について、最初に相談するのに非常に有用な入口です。
なので非常に多くのチャットが履歴に溜まっていくのですが、ChatGPT、Gemini、Claudeそれぞれに得意な分野があり、複数AIに質問を投げては役に立つ結果もあれば、まったく的外れな結果もあり、そういったものが日々、何十と積みあがれば、それを後から履歴をさかのぼって確認するのも大変です。
理由はわかりませんが各生成AIも、チャットは一律フラットに履歴を残すだけで、質問分野で分類するような機能は提供しておらず、活用すれば活用するほど、過去の質問結果にはアクセスしがたい状況になっています。

これを整理するのに、NotebookLMは非常に良いのでは？という感覚を現在は持っています。
NotebookLMのメモ機能は、チャットの結果を残すだけでなく、普通にただのメモを作る機能も有しています。
要するに、人間が単なる覚書を残す機能を有しているわけなので、もとよりこれは単なるナレッジベースではなく、覚書レベルを残しておく場として想定されていることがわかります。
メモは、チャットでの問い合わせの元データとはならないので（チャットでの問い合わせの元データとするテキストデータの登録機能は別途備わっている）、ナレッジベース的用途で使う際の確定情報とするデータの管理と、覚書レベル情報のレベル分け管理ができるUIであるといえます。
そこでこのメモ部分で、各生成AIへの問い合わせ内容を分類してリンク管理すれば、頭を整理するのに非常に良いソリューションになるのではないかと感じています。

以下に、デジタルアーカイブとIPFSの連携、Maplatを含む地図技術開発、くずし字の自動翻刻について検討した結果を手元のNotebookLMにまとめた外形を例示します。

![デジタルアーカイブ/IPFS](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/ca52ccd4-6373-ceb6-1bab-2283fd92e319.png)

![[地図] 技術開発関連](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/47b5ccb9-cce8-4e2f-b2a8-2999b250ef05.png)

![[くずし字自動翻刻] システム検討](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/8765c5fb-cc1e-89b0-e413-17b96ffdd68b.png)

### 生成AIに全てを預けてしまわない使い方ができる

この使い方が人間側に与えるストレスとしては、パーソナルナレッジベースとして使おうとしたときに比べて、ナレッジ全てを預けて判断をゆだねるのではなく、飽くまで判断材料を集約して、最終的な判断は人間に託す形になる点にあります。
しかし、それがNotebookLMの意図したところであるかどうかは別として、生成AIと人間の正しいかかわり方はこのようであるべきではないでしょうか。
考えてみれば、パーソナルナレッジベースとして使おうとしていた時期は、必要な情報は全部NotebookLMに預けて、インサイト導出にあたる部分までNotebookLMにさせようと考えていた節があります。
今の使い方は、飽くまでインサイト導出への近道になる「かもしれない」情報だけを集約して、それを集めて何を思いつくかは人間に託されている感があります。

このアプローチが、NotebookLMの想定された使い方として正しいのかどうかよくわかりません。
想定利用法とずれている場合は、今後のNotebookLMの機能追加で、私の使い方とずれてきてしまうかもしれません。
が、今提供されている機能では、私にとってはこの使い方が一番性にあっています。
ABC383 復習 (D) python

## はじめに
ABC383の復習メモです。
A,Bがちょっと重めでしたね。Bは時間を取られました。
今回の復習対象はDのみです。

## [D - 9 Divisors](https://atcoder.jp/contests/abc383/tasks/abc383_d)
使用言語：Python (PyPy 3.10-v7.3.12)

#### 説明
公式解説の通りです
解き方よりもp^8のパターンと、p^2*q^2のパターンに気づけるかという問題に感じました
9 = 1 * 9 か 9 = 3 * 3しかないので、N = p^8 or N = p^2 * q^2を考えるという発想ですね

p^2 * q^2のパターンについては、尺取り法でも2分探索（コメントアウト部）でも十分求まります

#### コード全文
```python
import math
import sys

input = sys.stdin.readline


def main():
    N = input_to_int()

    prime_number = sieve_of_eratosthenes(math.isqrt(N))
    ans = 0

    # p^8パターン
    i = 0
    while i < len(prime_number) and prime_number[i] ** 8 <= N:
        ans += 1
        i += 1

    # p^2 * q^2パターン
    prime_number_sqrt = [p * p for p in prime_number]
    right = len(prime_number_sqrt) - 1
    for left in range(len(prime_number_sqrt)):
        if prime_number_sqrt[left] > N // prime_number_sqrt[left]:
            break
        while right > i and prime_number_sqrt[left] * prime_number_sqrt[right] > N:
            right -= 1
        if right <= left:
            break
        ans += right - left
    """
    # 2分探索
    from bisect import bisect_right
    for i in range(len(prime_number_sqrt)):
        if prime_number_sqrt[i] > N // prime_number_sqrt[i]:
            break
        j = bisect_right(prime_number_sqrt, N // prime_number_sqrt[i]) - 1
        ans += j - i    
    """
    print(ans)


def sieve_of_eratosthenes(x):
    # Trueなら素数候補
    is_prime = [True] * (x + 1)
    is_prime[0] = False
    is_prime[1] = False

    limit = int(x**0.5)
    for i in range(2, limit + 1):
        if is_prime[i]:
            # i*iから開始して、i毎にFalse
            for j in range(i * i, x + 1, i):
                is_prime[j] = False

    # Trueなインデックスが素数
    return [p for p, prime in enumerate(is_prime) if prime]


def input_to_int():
    return int(input())


if __name__ == "__main__":
    main()
```
ポートフォリオ

# はしがき
はじめまして、こんにちは！  
ITエンジニアの掘江と申します！  
普段は外資系IT企業で制御系のソフトウェア開発及びチームリーディングを担当しています  
今後記事を書いていくにあたって、技術の裏打ちがあった方がお互い分かりやすかろうということで軽く書いていきます  
Qiitaには参加しているOSS関係の技術系記事を中心に投下していきます (仕事関係は守秘義務あるからね！)  
エンタメ寄りの記事はこちらに書いてます、Advent Calendarの時期だけ活性化しますがそれ以外でもちまちま書いてるのでよろしくです  
[ローグライク攻略＆開発雑記](https://hourier.livedoor.blog/)

# 簡単な職歴
- サポートエンジニア×6年
  - 仕入先ベンダのテストチームがポンコツ過ぎたので代わりにデバッグしてました
  - 技術法務も担当してました (電安法、電波法、その他)
- 設計開発エンジニア×8年
  - プログラミングはもちろんのこと、最上流 (御用聞き)から最下流 (ケーブル類の配線)まで概ね何でもやりました
  - DDDにすっかりハマってしまい記事もそっち寄りになる見込み

# 対応言語
- C/C++ (C++20対応)
- C# (.NET 8 LTS対応)
- Java (実務は8以下、11 LTS以降はおべんきょ中)
- Python3 ちょっと
- Lua ちょっと
- Perl ほんのちょっと
- Rust おべんきょ中

# 持ってる資格
- [応用情報技術者](https://www.ipa.go.jp/shiken/kubun/ap.html)
- [JSQTB Foundation Level](https://jstqb.jp/)
- [MCPC 2級](https://www.mcpc-jp.org/)
- [AWS Certified Cloud Practitioner](https://aws.amazon.com/jp/certification/certified-cloud-practitioner/)

# その他
- [変愚蛮怒](https://hengband.github.io/)というオープンソースゲームの開発を行っています  
  当然[ソースコード大公開](https://github.com/hengband/hengband/)なので技術系記事はこれ中心に書いていきます
- プチ副業で小説も書いていましたが現在は開店休業中です  
  (案件は応相談です♪　……といってもQiita経由で依頼はないでしょうが、万が一ありましたらXのDMまでお越し下さい)
「EC2のバックアップからファイルをリストアして」と言われたとき_Linux版

# はじめに

以前、WndowsのEC2のバックアップからファイルリストアする記事を書きました。

https://qiita.com/a_b_/items/66e2587421fff29f199e

今回はLinuxでやってみました。


# 概要
以下の事を行って、ファイルリストアを行います。

1. ファイルをサルベージするための新しいVMを作成する際、スナップショットから作成したボリュームをアタッチ
1. ボリュームまたはパーティションをマウント
    - この記事ではUUIDが重複しましたので、マウント前に変更しています
1. ファイルをSSHなどでコピー

# 参考

https://docs.aws.amazon.com/ja_jp/ebs/latest/userguide/ebs-using-volumes.html



# やってみた

前回と同様、VMをAWS Backupでバックアップし、作成されたスナップショットを用いて行います。

## 準備：VMのバックアップ

VMを作成して、リストアのためのファイルを作成します。セキュリティグループはSSHでアクセスできるようにしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/3a13eb55-6ce3-cb2f-14b7-122d21c023e8.png)

以下のファイルを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/f2645a34-52da-2f7e-e9c6-b9979cfff7d1.png)

AWS Backupは[以前と同じ方法](https://qiita.com/a_b_/items/66e2587421fff29f199e#%E6%BA%96%E5%82%99vm%E3%81%AE%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97)になりますので省略します。

## リストアするボリュームをアタッチさせたVMを作成

リストア用のVMを作成します。作成時はボリューム2に、先ほどAWS Backupで作成されたスナップショットを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/93b76331-4ca3-8f5d-db73-e75d7e2dde84.png)


## マウント

VMにアクセスして、`lsblk -f`でアタッチされているデバイスに関する情報を取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/d84e5c93-8240-b77c-6025-49cbc98de7c7.png)

UUIDが重複していますので、このままの状態で[公式のように](https://docs.aws.amazon.com/ja_jp/ebs/latest/userguide/ebs-using-volumes.html)マウントを試みるとエラーになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/69db6c27-c826-1a75-4b9e-73a72d299315.png)

エラーの詳細は、Amazon Linux 2023なので、以下のページを参考に`sudo journalctl -r`コマンドで確認します。

https://note.com/hiroyu0510/n/n02e530fd609d

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/4d8b3f1b-33f2-64a1-5723-c0b76eb460b3.png)

対応は以下のページを参考に、UUIDを変更します。

https://dev.classmethod.jp/articles/tsnote-how-to-fix-ebs-filesystem-has-duplicate-uuid/

:::note warn

UUIDを変更しないで`-o nouuid`を付けてアタッチすると、その場ではうまくいきますが、再起動するとアタッチしたボリュームがルートとして認識されました。UUIDが同じなための動作かと思います。
ファイルを取り出した後も作ったVMを利用する場合は、UUIDを変更した方がよさそうです。

:::

UUIDを変更するコマンドは`sudo xfs_admin -U generate`を使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/499b2080-dcf8-cc74-2227-8eb74bf10fab.png)

改めて`sudo mount`でマウントします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/a6d95f5c-a631-3166-3f3d-c55b3a0af852.png)

ちゃんとマウントされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/90f80279-4e9c-d93c-51c7-391b892beec5.png)


リストアしたいファイルを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/90341222-b553-7e07-a898-6db8d6170623.png)

あとはSSHを使ってファイルをダウンロードや、元のVMにコピーなどしてください。

:::note warn

この状態で再起動すると、マウントされてない状態になりますので注意が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/553680/5a23fe93-299d-2e00-96ee-d9254e2dbac5.png)

:::

# おわりに

今回は、LinuxのEC2をファイルリストアする方法を記事にしてみました。
Azure VMでも、Linuxの場合はUUIDが重複してしまうことがありましたので、EC2でも試したところ似たような結果になりました。

この記事がどなたかのお役に立てれば幸いです。
【言語初心者】C言語ってなんだろう。

# C言語ってなんだろう？
結構よく聞く言語だと思います。
使える人も多いはずです。
似た名前の言語を触っている人もいるかもしれません。
C++とか、C#とか。 
あと、この記事は本当に初心者の人に向けて作っているので、
もしかしたら当たり前のことを長々と書いているだけに
見えるかもしれません。そこはご了承ください。

# C言語とは
アプリの作成からOS自作まで本当に
いろんなことに使える言語です。

# 特徴
- 重い処理に向いている
- 作れるものが多い
- 行末に;(セミコロン)を書く必要がある
- 派生した言語が多い

# 基本の文法
```c:main.c
#include <stdio.h>

int main(){
    printf("Hello world!");
}
```

# 結論
C言語は、プログラミング言語の中でも最初の方であり、
派生した言語が多く、汎用性も高い。
質量分析解析ソフトウェアMS-DIALの紹介

この記事は[tuat-sysbiolab advent calendar](https://qiita.com/advent-calendar/2024/tuat-sysbiolab)の8日目です。


# はじめに

はじめまして。

私達の研究室ではMS-DIALという質量分析データの解析ソフトウェアを作成しています。世界的にも広く使っていただいているこのソフトウェアですが、詳細な機能を説明するようなドキュメントがない~~時間と人手がない~~ので、Advent calendarという機会にかこつけて紹介しようと思います。

このソフトウェアは、さまざまな用途で利用されるため、初心者にもわかりやすい情報を提供する必要性を感じていますが、時間的な制約から詳細なガイドラインを作成するのは難しい状況です。そこで、今回はその一部を簡単に紹介し、皆さんの研究や作業の役に立てればと思います。



# 質量分析とMS-DIAL

そもそも質量分析とはなんぞや？という方のために少し紹介すると、質量分析とは試料中に特定の質量のイオンが存在するのか？存在するならどのくらいあるのか？を調べる技術です。

質量分析という字面を見ると、秤の延長上のなにかと思うかもしれません（以前の私はそう思いました）が、注目するのは試料の質量ではなく、試料中にどのような（質量の）分子が含まれているかになります。質量を測定するのではなく、質量で分離するのです。

この質量分析は広く使われており、食品や医薬品、農業などさまざまな分野で活用される分析法となっております。例えば、食品業界では品質管理や異物検出に、医薬品分野では薬物の構造解析や代謝物の研究に活用されています。

さて、ではMS-DIALというソフトウェアは、質量分析に対してどのような立ち位置にいるのかというと、主にメタボロミクス研究において、質量分析の計測データを解析するためのソフトウェアとなっています。

質量分析で得られるデータは大雑把に言えば、ある質量の分子がどのくらい検出されたのかだけです。しかし、時間軸での試料の分離や、分子の断片化によって、人手で測定結果を解釈するには膨大すぎるデータを取得することになります。

そこからどんな分子が検出されているのか、試料によってそれらの検出量はどのように変動しているのか、そういった情報を抽出していく必要があります。生体に含まれる数千、数万の分子を同定し、変動をみて、どのように影響しあっているのかを解き明かしていく…、これを人手で行うにはとても現実的ではありません。そこで、これを解決するためにMS-DIALはメタボロミクス解析のためのワークベンチとして開発されました。

このように、MS-DIALは膨大な質量分析データを効率よく処理し、ユーザーにわかりやすい形で結果を提供するためのツールです。その使い勝手の良さが評価され、現在では世界中の研究者に利用されています。



# MS-DIAL機能紹介



ここからは質量分析について大まかに知っている方向けに、簡単に機能紹介をしていきます。

まず、こちらが[公式サイト](https://systemsomicslab.github.io/compms/msdial/main.html)になっております。こちらから、ソフトウェアのダウンロード、デモファイル等がダウンロードできます。

MS-DIALでは質量分析の生データから、以下のような解析を行うことが可能となっています。

1. ピークの検出
1. ライブラリを用いたMS/MSシミラリティでのアノテーション
1. 複数サンプル間でのピークアライメント
1. 結果の確認とアノテーションや、定量値の修正
1. （簡単な）多変量解析

以下はLC-MS/MSを解析した、MS-DIALの基本の画面になります。上に書いた機能で言うと、1～3までを実行した後です。

画面要素を簡単に紹介すると、画面中央下1に表示されているのが、生データの解析によって得られたピークスポットになります。横軸がRetention time (RT)、 縦軸が _m/z_ になります。この画面からピークスポットを選択すると、このピークスポットに対応する各種ピーク情報が2から5に表示されるというものになっています。

２から５はそれぞれ、基本ピーク情報、MSスペクトル、MS/MSスペクトル、各サンプルにおける定量値となっており、解析時に確認したい情報を一画面で表示しきるような構成になっています。

![analysis.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944004/9f29feb1-b5a0-137b-8a9e-be5819136f0c.png)

これ以外にも、ピーク情報のテーブル表示や、EIC (XIC)、化合物検索などの機能がそろったソフトウェアになっております。

![peakable.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944004/9285c9d8-be98-9aef-ac3c-06ef905e0c9b.png)

![eic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944004/4e38a870-a862-9389-829c-317fe1768d5f.png)

![compoundsearch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3944004/06a9b308-0bc8-5afc-c627-f847ddc12900.png)

さらに、MS-DIALは私たちの研究に実際に利用していることもあり、機能拡張も積極的にしており、例えばメタボロミクス以外の用途や、GC-MS、IM-MSなどの分析手法に適用するためのカスタマイズも可能となっています。


# 最後に



簡単ではありますが、MS-DIALの紹介でした。このアドベントカレンダーの今後の私の投稿では、MS-DIALのtips的なものを少し紹介していこうと考えています。

危うくアドベントカレンダーを言い出した当人が、投稿しそこなうところでしたが、当日中に投稿したということで許してください！

MS-DIALをまだ使ったことがない方や、使い方に悩んでいる方は、ぜひ公式サイトやこの投稿を参考にしてみてください。また、皆さんのフィードバックをいただけると大変励みになります。
オーディオプレイヤーを作る DAY5

## はじめに
Pythonを使ったオーディオプレイヤーの実装過程を順次投稿しています。
前回までの進捗は以下の通りです。

https://qiita.com/Jun-JP/items/ba0e131fb27f4e0e9031

https://qiita.com/Jun-JP/items/faa2e86b158d60db34ab

https://qiita.com/Jun-JP/items/365ee46ea6aeef6aa0b2

https://qiita.com/Jun-JP/items/02660126c5d15d3375c7

## 今回実装した内容

* GUI
    * ボリュームコントロールボタン
        * CTkToplevelを使って、ボリュームを調整するスライドバーをポップアップ表示
    * ループ再生のオンオフボタン
    * プログレスバーの再実装
        * CTkSliderからCTkProgressBarに変更
            * CTkSliderのマウスイベントをバインドできなかったため
* 機能
    * ボリュームコントロール
        * ~~人間の聴覚特性を考慮して、指数関数的に調整~~
    * ループ再生のオンオフ
    * プログレスバーのマウスイベントに、再生を一時停止する機能をバインド
        * 再生中にプログレスバーをマウス操作するとフリッカーが発生していたため、マウスイベントの発生中、再生を一時停止する機能を追加
    * マルチスレッド処理の見直し
        * 単純に仕様が悪く、デバッグも困難だったため
        * 複数のスレッドがオーディオ波形を同時に更新する場合があったため、ロックを追加
            * matplotlibがスレッドセーフではない？と思われるが、ロックがあると問題なく動作している（ようにみえる）

## ソースコード

https://github.com/junpiyo/Simple-Audio-Player-with-Python/tree/main/Day5

##  環境

Windows11
Python3.12.7

## 動作イメージ
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483587/1387a446-b81a-8657-e571-8e1fba61d65f.gif width=80%>

音楽 [BGMer](https://bgmer.net)

## ソースコードの補足
### マルチスレッド処理
イベントループを処理するスレッド以外に、以下の４つのスレッドを非同期で動かしています。

* オーディオを再生するスレッド
* プログレスバーとタイム表示を更新する（ためのイベントを発生させる）スレッド
* オーディオ波形を更新するスレッド
* 再生／停止ボタンを切り替えるスレッド

スレッドを協調して動作させるために、オーディオプレイヤーの状態（State）をEnumクラスAudioPlayerStateを使って管理していました。しかしながら、Stateが色々な場所・タイミングで非同期に更新されるためバグがたびたび発生していました。そこで、オーディオプレイヤーへの命令（Instraction）を管理するためにEnumクラスAudioPlayerInstructionを新たに追加。メインスレッドがGUI操作に応じてInstructionを更新し、オーディオを再生するスレッドがInstructionに応じた処理を行いStateを更新、その他のスレッドはStateに応じた処理を行うように仕様を変更しました。以前は、複数のスレッドがStateを非同期に更新していたためデバッグが困難でした。

```python: audio.py
class AudioPlayerState(IntEnum):
    PLAYING = auto()
    POSED = auto()
    READY = auto()
    NOT_READY = auto()
    CLOSING = auto()
    CLOSED = auto()

class AudioPlayerInstruction(IntEnum):
    PLAY = auto()
    POSE = auto()
    CLOSE = auto()
    STOP = auto()
```

### ボリュームコントロール
~~人間の聴覚は音の強さの対数に比例すると言われているので、ボリュームを指数関数的に調整する。リニアの場合よりも明らかに自然な変化をする。~~
実装がリニアのままだった…

```python: audio.py
    def __controll_volume(self, data:bytes):
        if data == []:
            return data
        
        volume = self.volume
        if volume == 100:
            return data

        volume =  0 if volume == 0 else 10 ** (volume / 50)
        nchannels = self.__audio.nchannels
        volume = self.volume
        channels = [np.frombuffer(data, dtype=np.int16)[i::nchannels] for i in range(nchannels)]
        channels = [channel.astype(dtype=np.float32) * volume / 100 for channel in channels]
        channels = [channel.astype(dtype=np.int16) for channel in channels]
        
        return np.column_stack(channels).tobytes()
```

## 備考
* オーディオファイルはWAVとMP3だけに対応
    * 他のフォーマットは次回以降に対応
* マルチプロセス化を検討中
    * 試しにマルチプロセス化の実装を行ったが、信頼性に問題があるのでペンディング

## おわりに
次回に続きます。
Qiitaの作法やソースコードに関するアドバイス、質問などがありましたらコメント欄までお願いします。
ARのSNS ソースコード公開します

# 経緯
　何回かの記事に分けて発信していたARのSNSアプリなんですが、アプリをリリースしようとしたら、Google Play Storeのリリース基準に阻まれた為、リリースは諦めてソースコードを公開することに決めました。

 https://qiita.com/yuto-ktok/items/f13d56d6aaceba892ecb#:~:text=Google%E3%81%AF%E3%80%812023%E5%B9%B411,%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%82%E3%82%89%E3%81%86%E3%81%A0%E3%81%A8%EF%BC%81%EF%BC%81

 # 機能
　基本的にARCore + Geospatial APIを使い拡張世界にコンテンツを投稿でき、他者が投稿したコンテンツを閲覧できます。

　画面構成は以下のようになっており、左上の電波塔のアイコンが現在の位置情報の精度、その隣が現在取得しているコンテンツ数を表しています。
 
![Screenshot_20241208-170901 (1) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267761/931bc964-f64c-8386-ff96-1ee541c5c9b7.png)

　初回起動または、ユーザアイコンをタップするとユーザ登録・編集画面に遷移して、ユーザアイコン、ユーザ名、投稿のベースの文字の色、コンテンツの色が入力できます。

 ![Screenshot_20241208-172335 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267761/3b9cd37e-0862-761b-bc43-49b6b994e32a.png)


　チャットマークをタップすると投稿したい内容を入力できる画面に遷移します。ここで投稿する文字の色やオブジェクトの色も選択できます。
 
 ![Screenshot_20241208-155428 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267761/31cafb32-ee35-7f00-2fe7-d45264c3300e.png)

　絵文字マークをタップすると投稿したい絵文字が選択できます。

 ![Screenshot_20241208-155441 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267761/0f7b228f-ec8f-c67e-3f76-b66128ada22c.png)

　このどちらかの操作を行った状態で画面を長押しすることでコンテンツが拡張世界に映し出されます。この時１本指の操作でコンテンツの移動、２本指の操作でコンテンツの回転が行えます。位置、向きが決まったら再度長押しでコンテンツが他ユーザからも閲覧可能になります。

![Screenshot_20241208-135325 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267761/51ff9c2c-7490-8d3f-69b7-7992a05aca18.png)

# ソースコード
　ソースコードはgithubで公開しています。ARCoreのAPIキーやデータベースのアクセス、文字フォントファイルはignoreしているので、そのあたりを補完したら動くと思います。
 　公開する予定はなかったので、ディレクトリ構成とかあまり綺麗にしていないので、ご容赦ください。分からない、気になるところあれば回答します。
 
https://github.com/shimizu223/ar_memos_oss

　以下のクラスがレンダリングを行うクラスで、投稿したい内容（テキスト、絵文字の種類）を元にオブジェクトの作成、描写を行ったり、位置情報が一定幅動いたらDBに現在地の近くのオブジェクトを取得して、取得情報を元にオブジェクトの作成、描写を行ったりしています。

https://github.com/shimizu223/ar_memos_oss/blob/oss/app/src/main/java/com/shimizu/ar/core/ar_message/kotlin/ar_message/MessageRenderer.kt

　以下のディレクトリはプロジェクトで利用するユーザ定義型やファーストクラスコレクションを定義しています。

https://github.com/shimizu223/ar_memos_oss/tree/oss/app/src/main/java/com/shimizu/ar/core/ar_message/kotlin/domain
Ubuntuコマンドnot found時メモ

Ubuntu24で、特にDockerイメージには何も入っていないことが多いので、インストールするものメモ。

iproute2
* ipコマンド

curl
* curlコマンド

net-tools
* digコマンド
* arpコマンド

whois
* whoisコマンド

traceroute
* tracerouteコマンド

## Macの場合(別記事にするほどでもないので、一旦混ぜてしまう)
brewでインストールする。

iproute2mac
* ipコマンド
TOMLの復習（基本構文）

前回、[TOMLの復習（初級編）](https://qiita.com/yam_dev/items/fdfe4ab348c15123ff55)を書いたので、構文についてまとめます。

以下、[公式サイト](https://toml.io/)を参考にしてます。

### 1. コメント

行の先頭に `#` を付けると、その行全体がコメントとして扱われます。
行末にもコメントを記述できます。

```toml
# これは全文コメントです
key = "value"  # これは行末コメントです
another = "# これはコメントではありません"
```

### 2. キーと値のペア (Key/Value Pair)

TOML文書の基本単位は、`キー = 値` のペアです。
キーと値の間には `=` を使用し、キーと値の周囲の空白は無視されます。
キー、`=`、値は同一行に記述する必要があります。
```toml
key = "value"
```
### 3. データ型

TOMLの値は、以下のデータ型を取ります。

#### 3.1 文字列 (String)

二重引用符 " " または単一引用符 ' ' で囲まれた文字列。
二重引用符で囲まれた文字列では、エスケープシーケンスを使用できます。
```toml
simple_string = "This is a string."
escaped_string = "This string contains a \"quote\" and a \n newline."
literal_string = 'This is a literal string.  No escaping needed.'
```

#### 3.2 整数 (Integer)

符号付きまたは符号なしの整数。

```toml
positive_integer = 12345
negative_integer = -67890
```

#### 3.3 浮動小数点数 (Float)
小数点を含む数値。

```toml
positive_float = 3.14159
negative_float = -2.71828
exponent_float = 1.23e4
```

#### 3.4 ブール値 (Boolean)
true または false。

```toml
bool_value1 = true
bool_value2 = false
```

#### 3.5 オフセット日時 (Offset Date-Time)
UTCからのオフセットを含む日時。
`YYYY-MM-DDTHH:mm:ss+HH:mm` の形式で記述します。

```toml
offset_datetime = 2024-03-08T12:34:56+09:00
```

#### 3.6 ローカル日時 (Local Date-Time)
ローカルの日時。`YYYY-MM-DDTHH:mm:ss` の形式で記述します。

```toml
local_datetime = 2024-03-08T12:34:56
```

#### 3.7 ローカル日付 (Local Date)
ローカルの日付。`YYYY-MM-DD` の形式で記述します。

```toml
local_date = 2024-03-08
```

#### 3.8 ローカル時刻 (Local Time)
ローカルの時刻。`HH:mm:ss` の形式で記述します。

```toml
local_time = 12:34:56
```

#### 3.9 配列 (Array)
[] で囲まれた値のリスト。

```toml
integer_array = [1, 2, 3, 4, 5]
string_array = ["apple", "banana", "orange"]
```

#### 3.10 インラインテーブル (Inline Table)
{} で囲まれたキーと値のペアの集合です。

```toml
inline_table = {name = "Example", value = 10}
```


### 4. キー
キーは、プレーンキー、引用符付きキー、ドット付きキーのいずれかです。

* **プレーンキー:**
ASCII文字、数字、アンダースコア、ハイフンのみを使用できます。数字のみのキーも許容されますが、文字列として解釈されます。
```toml
bare_key = "value"
bare_key_with_numbers = "123"
bare_key_with_hyphen = "my-key"
_underscore_key = "value"
```

* **引用符付きキー:**
基本文字列またはリテラル文字列と同じルールに従います。より幅広いキー名を使用できますが、特別な場合を除きプレーンキーを使用することを推奨します。
```toml
"quoted key" = "value"
"key with spaces" = "value"
'single quoted key' = "value"
"key with \"quotes\"" = "value"
```

* **ドット付きキー:**
レーンキーまたは引用符付きキーをドットで連結したキーです。ネストされた構造を表すのに使用します。
```toml
database.server = "192.168.1.1"
database.port = 5432
user.name = "Tom"
user.email = "tom@example.com"
server."google.com".port = 80
```

### 5. 重複キー (エラー)
同じキーを複数回定義することはできません。

```toml
# nameキーが重複しているためエラー
name = "Tom"
name = "Pradyun"
```

# まとめ
今回は、コメント、キー、値、データ型についてまとめました。
他にも構文があるので、別途まとめます。
【転職活動思考整理術】8年半勤めた会社を転職したときに考えたこと。

## はじめに
私は転職を勧めたいわけではありません。
転職は1つの選択であってタイミングによっては悪手になると考えています…。

:::note alert
個人的な意見なので押し付ける気は毛頭ありませんが、**何かしらの不満**を理由に転職を考えているときは転職のタイミングではないと考えています。
:::

不満を抱いているときは**すべての事柄を否定的に捉えてしまい自暴自棄になっている可能性**があります…。

:::note
不満の理由はどこからくるものなのか？
を自身の状況を俯瞰し、冷静に検討してください。
:::

皆さんの転職活動が良いものになるための糧にしていただけると幸いです！

## 転職する時に考えたい2つのこと
私は転職する際に2つのことを自分の中で整理しました。

- 転職で何を得たいのか？
- 自分にとって「仕事」とは何か？

上記2つをハッキリさせたことで良い選択ができたと考えています。

:::note
何事も判断軸が必要です。
転職においては「転職によって得たいもの」「仕事に対する価値観」が重要な判断軸になる考えています。
:::

## 転職で何を得たいのか？
転職しようと考えている時の理由として大枠2つだと思っています。

- お金
- 環境

環境というのは「成長できる環境」や「フレキシブルに働ける環境」「人間関係」などを想定しています。

### 得たいものについて具体的に考える
「何を得たいのか？」がわかってきたら具体的に考えてみます。
例えば…

- フルリモート環境で働きたい
- 給与を〇〇万円あげたい
- 人間関係を改善したい
- 成長環境が整っている
- 休暇が取りやすい
- 事業会社で働きたい

少し具体的になったら「なぜそれを求めているのか？」を深掘りします！

:::note
どうやって深掘りしたらいいのかわからない…
という方のために「私が深掘りした結果」と「なぜそのような結論にいたったか」をセットで紹介します！

考えを深掘りするときはChatGPTなどのAIを活用して壁打ち相手になってもらうと捗ると思います！
また、エージェントとのキャリア面談を利用するのもオススメです！
:::

### ① 給与をあげたい
私はこちらの優先度を下げました。

#### 優先度を下げた理由
給与をあげる方法は転職でなくてもいいのでは？と考えたからです。
極論ですが、本業で給与アップを叶えられなくても副業で稼げれば問題ないのでは？と考えました。
また、本業の給与を上げるより副業の方が早く得られるお金の額を増やせる可能性すらあります。

:::note
転職を機に給与が増えることにこしたことがありませんが、「たくさん稼ぐ」という目的において転職で最も優先すべきことではないと考えました！
:::

副業なんてしなくてもたくさん給与がほしい！って人もいると思うので個人の価値観に合わせて優先度を決定してください！

### ② 人間関係で悩みたくない
私はこちらを最も優先だと考えました。

#### 優先度をあげた理由
人との関係性が悪い状態は自分にとって「1番のストレスになる」と考えたからです。

:::note
幸いなことに前職は人間関係がとても良好でした！
そうだったからこそ長い間頑張ってこれたと考えています！
:::

転職先も良い関係が構築できる環境で働けることが1番だと考えていました。

:::note alert
ストレスは心の健康状態を害し、病気になることもあります…。
どんな仕事でも健康でいれることが重要だと考えています。
:::

仕事をコンスタントにこなす、成果を出すことにおいて人間関係を起因とするストレスの少ない環境であることが最も重要だと考えました。

:::note warn
「人間環境が良い・悪いなんてわからんやろ？」

そのとおりです…。
ただ、カジュアルマッチしないことを懸念して、ほとんどの企業でカジュアル面談してくれます！

希望が通るなら採用担当だけでなく、メンバーと複数人でのカジュアル面談を希望すると良いでしょう！
:::

とはいえ、人間関係が良さをカジュアル面談で判断するのは難しいです…。
カジュアル面談やエージェントからの情報提供、ネットの口コミなども利用して言葉尻や面談中の態度などいろんなところから感じてください。

:::note
もともこもないことを言うと…
最終的には話していて「気が楽だとか」「話しやすい」などフィーリングが合うかだと思います！

彼女を選ぶような気持ちで「これから付き合っていけるか？」を決めてみてはどうかと思います！
:::

### ③ どんな環境で働きたいか
私はこちらの優先度もあげました。

#### 優先度をあげた理由
家族と同じ空間にいる時間を増やしたかったからです！

フルリモートでも家族と過ごせる時間、絶対量は大きく増えません。
ただ、同じ空間にいれることが家族にとっても、自分にとっても大切だと考えました。

:::note
どんな環境で働きたいかは十人十色、いろんな考え方があると思います！
叶うかどうかは別として、理想の働き方を考えてみてください！
:::

## 自分にとって「仕事」とは何か？
**何のために仕事をしているのか？**

と聞かれてなんて答えますか？

- 家族のため
- もっと良い生活をしたいから
- ローンを返すため
- 世の中もっと住み良くするため

:::note alert
私は家族のために働いていると思っていました。
ただ、家族を家に残し、家事や育児は妻に丸投げ状態。帰りは遅く会話すらもほとんどない。

家族のために働いているのは間違いないけど、
本当は家族の近くにいたいはずなのにほとんど家族と一緒にいない…
考えと行動が矛盾していることに気がつきました…。
:::

自分にとっての「仕事」を言語化することで「職場に求める環境」を具体的にできます。

:::note
もし、どんな環境でも実現できるとするならどんなふうに仕事がしたいのか？を考えてみてください！
:::

## まとめ
転職活動では自分の考えを整理することが成功への鍵だと実感しました。
ただ、もう一度言いたいのは「転職」は選択の1つです。

転職活動をしたからといって**必ず転職しなければならないわけではない**と思います。
また、「転職」が最善の選択ではない可能性もあります。

:::note
転職活動しているうちに現職の状況も変化すると思います。
変化によっては転職しなくても望んだ環境が手に入る可能性もあると思います。

転職活動が一段落した時点で客観的に判断してください！
できれば信頼できる人に壁打ちしてもらうので良いと思います！
:::

皆さんにとって良い選択ができること祈っています！
【framer-motion】個人メモ


## transitionで指定するプロパティ

### type:{タイプ名}
`type:"spring"`：バネっぽいアニメーションになる。

### stiffness:{数字}
`type:"spring"`の時に有効。
バネの硬さを表現。
値が低いほど動きが柔らかくなり、アニメーションがゆっくりになる。


### damping:{数字}
`type:"spring"`の時に有効。
バネの反発力を表現。
0に指定すると無限に反発する。

### restDelta:{数字}
今の値と目標の値の差が数値以下になったら、アニメーション終了。

- 単位はアニメーション対象のプロパティによって変わる
  - XやY：ピクセル単位
  - background-color：数値的な色
  - rotate：角度（°）

以下の場合、要素のxの値が0から100に向かってバネアニメーションする
`restDelta:2`の指定により、xの値が「98～100の範囲」になった時点でアニメーションが停止する。
```react
<motion.div
  initial={{ x: 0 }}
  animate={{ x: 100 }}
  transition={{
    type: "spring",
    stiffness: 300,
    damping: 20,
    restDelta: 2, // xの値が「98～100の範囲」になった時点でアニメーションが停止
  }}
>
  Move me
</motion.div>
```




## useCycle
メソッドが発火するたびに、引数に渡した値を循環させる。 
以下の例ではcycleX()を呼び出す度に、xが0→50→100→150→0と変化する。
一回呼び出すと1つ進む。一回の呼び出しですべての値に変化するわけではない。
(例：xが50の状態で呼び出すと、100に移動する）
```react
import { motion, useCycle } from "framer-motion";

const Sample = () => {
  const [x, cycleX] = useCycle(0, 50, 100, 150);

  return (
    <motion.div
      style={{ width: "200px", height: "200px", background: "skyblue" }}
      animate={{ x }}
      onClick={() => cycleX()}
    />
  );
};

export default Sample;
```
day12 『プロジェクトのトラブル解決大全』

## はじめに
　**もし私がアジャイル開発にシフトしていなかったら…**
　昭和の体質を残すパラレル世界に転移したら…
　そんな時に**火消し術**として使っただろう手法が紹介されています。副題は「**小さな問題から大炎上まで使えるプロの火消し術86**」です。

![プロジェクトのトラブル解決大全 目次2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533414/b83fc4ae-81bd-96d2-d0f6-827c4fc3fa65.png)




## ポイント
### PMBOK
- PMBOK（第６版）を知っているだけでは、トラブルプロジェクトには太刀打ちできないことが多くある。

### 小さな火種
- 小さな火種を放置してはいけない。小さな火種のうちに、一つひとつをタイムリーに潰していく。課題対応を後回しにしたり、放置したり、課題として扱わずに埋もれさせると、大炎上に至る。

### 火消しリーダ
- 腹をくくって、覚悟を決めて、火消しに当たる。腹をくくれていないと、責任回避的な言い回しが出て、メンバが付いてこない。

### 状況把握
##### 最初に見るべき４つの資料
  - プロジェクト計画書
  - 体制図。一人のメンバよりも、リーダや主要メンバに要因があることが多い。
  - 課題管理表
  - 進捗報告資料
  - 資料が信じ切ってはいけない。炎上するプロジェクトでは、古かったりメンテされていないことが多い。間違っていることもある。対外的に差し障りのない報告になっていて、実態と異なることもよくある。
##### ヒアリング
  - ４つの資料を読み込んでプロジェクトを俯瞰してから、メンバに質問する。
  - 仮説を持っていく。
  - 全体像も、詳細も聞く。
  - ヒアリングは事実ではない場合もある。主観が入っている。
  - トヨタの「なぜなぜ５回」をっ使って、真因に辿り着く。

- 単身乗り込んでも局面は変わらない。優秀なメンバを連れて行く。

### 対処
##### 人
  - 犯人探しには意味はない。
  - 炎上プロジェクトには、スペシャルなキャラクターがいる。取りうる策は、「排除する」、「影響力を弱める」、「我慢する」
  - [トラブルプロジェクトではむやみに人を増やさない](https://qiita.com/AkmIOtUE4/items/2f8945a1b4756dadb729#%E7%AC%AC%EF%BC%92%E7%AB%A0%E4%BA%BA%E6%9C%88%E3%81%AE%E7%A5%9E%E8%A9%B1)。プロジェクトに足りないスキルやパーツがある場合のみに限定する。

##### 計画
  - 課題は重要度と難易度で優先順位をつけて、絞り込む。
  - やらないことを決める。
  - 計画は、見積りの「-10%」で組む。見積もり通りに計画を建てると失敗する。このバッファをメンバには秘密とする。バッファは各作業に分散させずに１つにまとめる。

##### 無駄の切り捨て
  - 「それで本当にできるの？」というダメ質問をしてくる奴は、聞き流して相手にしない。そんなこと、誰にもわからない。実質的な意味がない。
  - 機能しない会議を見直す。不毛な社内報告は、空気が読めないフリをして減らす。建設的な議論がされていない会議は無駄。

### リカバリ開始
- リカバリをスタートする際にも、キックオフ会議を行う。
##### 作業場所
  - メンバーの座席をまとめて、見渡せるようにする。フリーアドレスはダメ。クイックにできる会議スペースも設置する。ホワイトボード（相当）も置く。
  - 部屋の証明は明るくする。


##### 状況の把握
- 問題提起をした人を自動的に担当者にしてはいけない。問題提起をすると損と捉えられるので、課題が報告されなくなる。課題に適した人に割り当てる。
- 毎日、朝会を実施する。状況をタイムリーに把握し、新たな課題に即応する。
- タスクの遅延は、それが分かった時点で報告する。仕事が期限に遅れたときは、なぜ遅れたのかと、毎回問いただす😱。ビジネスパーソンが仕事の期限を守る動機は、プロ意識か、怒られたくないから。９割は後者だから。
- 悪い情報が上がりやすい環境を作る。受け止める。事実をヒアリングする。自分が受け取るか、メンバに戻すかを決める。悪い報告を上げてきたことを評価する。
- １日２回のパトロールをする。現場の小さな異変に気づく。気軽に相談を受ける場にする。雑談もする。現場に緊張感をもたせる。現場・現物を確認する。


#### 特別な対処
- 危険なところはマイクロマネジメントする。ただし、モチベーションを下げ成長の妨げとなる面もあるので、２点に注意する。
    - 早目に始めてはいけない。
    - ずっとやり続けてはいけない。
- コミュニケーションのミスを防ぐ。
    - 相手が日本人であっても、口頭だけでは、伝わらないことが多い。
    - 図表を使ってコミュニケーションする。
- トラブル解決
    - ミラクルはない。
    - 飛び道具はない。
    - 地味なことを地味にやるしかない。
- 請負契約で、うかつに謝れない場合の話法😱
    - 「すみません」というと、「全量見直しててね」など火が大きくなる。
    - 「お手数を取らせてすみません」、「ご心配をおかけしてすみません」
    - 「追って報告します」と期限を言わない。言われなければ報告もしない。
    - 原因がわからないうちに、原因の可能性に言及すると余計なアクションを課せられることがある。
- リーダの威厳とオーラを醸し出す😱
    - リーダは走ってはいけない。ゆっくり歩く。
    - 背筋をまっすぐにする。
    - 身だしなみを整える。
- 炎上プロジェクトのリーダは９割が苦しいこと。理不尽な目に遭うことも給与の内。
- チェックリスト
    - 「マズい秘伝のタレ」にしてはいけない。
    - ムダなチェック項目を増やさない。多すぎると形骸化して意味をなさなくなる。


## 書誌情報
- 書籍名：プロジェクトのトラブル解決大全
- 著者：木部智之
- 出版社：KADOKAWA
- ISBN：978-4-04-605531-6

## 参考
-
【CSS/SCSS】個人メモ

## :hoverと:activeの適用タイミング
| デバイス |:hover | :active |
|:-:|:-:|:-:|
| PC  | マウスカーソルが要素に重なっている時  |要素をクリックした時   |
|   スマホ|  タップ後、別要素がタップされるまで| タップ中のみ  |


:::note info
タッチ端末でタップする瞬間のスタイルを変更したいなら`:active`を使う
:::


## clip-pathの使い方

```css

/*半径10pxの円を横50px、縦50pxの円に変更*/
div {
    clip-path: circle(10px at 50px 50px);
}
```

https://developer.mozilla.org/ja/docs/Web/CSS/clip-path

### clip-pathが影響するポイント
#### 視覚的なクリッピング
clip-pathを設定すると、対象要素の表示部分が指定した形状で切り取られる。

#### ポインタイベントへの影響
clip-pathは要素の表示だけでなく、ポインタイベント（クリックやホバー）の対象領域にも影響を与える。したがって、clip-pathで切り取られた領域にはポインタイベントが発生しない。（実質的に「クリックできない」領域になっている。）
JavaScriptのifについて

# 背景
JavaScriptのif分について気になった部分について調べた内容を備忘録として投稿します。

# Truthy と Falsy とは？

JavaScriptでは、ブール値（true / false）以外の値も条件式で使用できます。その場合、値は暗黙的に "truthy" または "falsy" に変換されます。

## Falsy の値

次の値は "falsy" とみなされ、if 文の条件式では false と評価されます：

FALSE
0（数字のゼロ）
""（空文字列）
null
undefined
NaN（Not-a-Number）
## Truthy の値

上記以外の値はすべて "truthy" とみなされ、if 文の条件式では true と評価されます。

非空文字列（例: "hello", "0"）
数字（例: 1, -1）
オブジェクト（例: {}, []）
関数（例: function() {}）
ページ内リンクの位置がズレてしまう時の対処法

# はじめに
HP制作をしている駆け出しエンジニアです。
HPにページ内リンクを設置したのに、位置がズレてしまうことはありませんか？

私も丁度その罠にハマってしまい原因が分からず悩んだので、解決方法を備忘録として残します📝

# 今回のページ内リンクの実装方法
私は`id`タグを使用して実装しました。
具体的なソースコードは以下の通りです。

目次などに当たる箇所の、着地点までジャンプするタグの実装↓
```php:呼び出し箇所
<li><a> href='section1'</a></li>
<li><a> href='section2'</a></li>
<li><a> href='section3'</a></li>
```

ジャンプした先のタグ実装↓
```php:呼び出し先箇所
<h1 id="section1">XXXXX</h1>
//コンテンツ省略

<h1 id="section2">XXXXX</h1>
//コンテンツ省略

<h1 id="section3">XXXXX</h1>
//コンテンツ省略
```

# ページ内リンクの位置がズレてしまう場合
私の場合この実装でリンクを押下すると、なぜかタイトルの位置ぴったりに移動してくれなかったのです。

その原因は、ヘッダーを固定しているからでした...
ヘッダーのCSSに`position:fixed`を使用していると、ページ内リンクの着地位置がズレることが多いみたいです。

渡しの場合、`padding-top`でヘッダーの高さの分をずらし、`margin-top`でそのマイナスの値を入れる方法で解決しました。

今回はヘッダーの高さを98pxで固定していたので、下記のようにCSSを追加しました。
```CSS:style.css
/* ページ内リンク着地位置のズレ調整 */
#section1,
#section2,
#section3 {
  padding-top: 98px;
  margin-top: -98px;
}
```

# 【補足】他の実装方法
`padding-top`と`margin-top`を使用するのではなく、
`scroll-margin-top`を使用するとズレの解消が簡単になると分かったので追記しました!!

```CSS:style.css
/* ページ内リンク着地位置のズレ調整 */
#section1,
#section2,
#section3 {
    scroll-margin-top: 100px;
}
```

以上、参考になれば幸いです!!
コネクションの解放

# コネクションの種類には非対称的開放と対照的解放がある
>コネクションの種類には非対称的開放と対照的解放の二つの形態がある。非対称的開放は電話システムのような形であり、どちらかの参加者が電話を切ると、コネクションが切断される。対象的開放はコネクションを二つの独立した一方向コネクションとして扱い、各々を別々に開放する。

>非対称的開放は不意に起こる物で、データ・ロスを引き起こすかもしれない。

# ２つの軍隊問題で疎通が簡単に取れずコネクションの解放が容易ではない
>白軍が谷に野営していて、両側の山腹に青軍がいるとする。白軍は青軍の一つずつの軍隊よりも大きいが、青軍の両方をあわせると青軍の方が大きい。
青軍は各々が戦いを挑んだら負けるだろうが、同時に戦いを仕掛ければ勝利を得るだろう。
青軍は同時に攻撃を仕掛けたい。しかし、通信手段は徒歩の使者を谷にやることしかない。死者は捕まってしまうかもしれないし、メッセージがロスするかもしれない（すなわち、青軍は信頼性の低い通信チャネルを離礁しなければならない)

# どうすれば信頼性の低い通信チャネルで意思疎通できるか
>現実には、合意の必要性は放棄し、トランスポート・ユーザーに問題を任せてしまって、いつ切断するかを両サイドが独立に決定することによって、この難題を回避できる。

### トランスポート・ユーザーがいつ切断するかで決まる
>いつ切断するかをという問題をトランスポート・エンティティ自身では明確に解決することができないので、トランスポート・ユーザーがいつ切断するかを決めることに関与しなければならないと言うことである。

>アプリケーションの重要性をはっきりさせるために、次のような状況を考えてみよう。`TCPは通常、対照的な終了`をする（すなわち、データの送信が完了したらそれぞれの側が独立にFINパケットを送信してコネクションの半分ずつを閉じる)。それに対して多くのWebサーバーは、`コネクションを突然閉じるRSTパケットをクライアントに送信する`のであるが、これは非対称的な終了のしかたに近い。これがうまくいくのは、`Webサーバーがデータ交換のパターンを知っているから`である。最初にWebサーバーはクライアントからリクエストを受信する。それはクライアントがサーバーに送信しようとしているデータの全てである。
　次のWebサーバーはクライアントに応答を返す。Webサーバーが応答を返し終わったら、どちらかの方向に関してもデータはすべて送信されたと言うことである。`サーバーはクライアントに警告を送り、コネクションを突如的に切断することができる`。クライアントが警告を受信したのなら、その時直ちにコネクション状態を終了させるだろう。もし受信しないなら、最後には`サーバーがもはやそれ以上のデータを送信しようとしていないことを知って、コネクション状態を終了させる`だろう。どちらにしてもデータは正常に転送されているわけだ。

 https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/
【レビュー企画用献本御礼】「因果推論の計量経済学」の書評

# はじめに
「因果推論の計量経済学」の献本キャンペーンに応募し、本書を一冊ご恵贈頂きました。内容を一読した上での書評を以下に記させていただきます。
私自身、Qiitaを用いて記事を執筆するのが初めてであり、不備がございました際には、何卒ご容赦賜りますようお願い申し上げます。

# 内容
本書は「経済学訛りの強い因果推論に特化したテキスト」であり、経済学に関する分野で因果推論を用いた論文を読みたい人や、研究等で因果推論を用いたい人には非常に有用です。
第一部は全5章で構成されており、因果推論の基礎となる理論や無作為実験を中心に扱っています。1〜4章では、理論を中心に、5章ではその応用例としていくつかの論文を分析例として紹介しています。
第二部は全6章で構成されており「非回帰連続デザイン」「差の差法」を中心に、経済学分野の因果推論において用いられる手法について解説しています。

# 個人的なおすすめポイント
**1. 理論と応用のどちらも充実している**
本書は二人の著者が「理論」と「実践」の両面の充実を目指して書かれたテキストです。そのため、理論面では、考え方や手法について数学的に厳密に記述されています。一方で、実践面では、実際の論文をもとに、どのように応用されているのか丁寧に解説しています。加えて、妥当性チェックや頑健性チェックに関しても触れている点が魅力的であると感じています。

**2. Rによる実践的な実装例がある**
本書のサポートページでは、Rによる実装方法を紹介しています。数式を見ているだけではいまいち理解できなかった内容も、コードを見ることで「何をしているのか」はっきりと理解することができます。

# 本書を読むにあたってそばに置いておくと理解が捗る書籍
**因果推論**

1. [Rで学ぶ実証分析](https://www.ohmsha.co.jp/book/9784274230028/)
    このテキストの後半では因果推論に関するトピックを扱っています。内容が重複するところがあると思いますが、数学的な議論が少ないため、理解しやすいです。また、Rによる演習部分もあるため、本書との相性は良いと思います。
1. [はじめての統計的因果推論](https://www.iwanami.co.jp/book/b639904.html)
    因果推論やその手法の考え方についてイメージが湧きにくい方は、こちらの本の該当箇所を読んだ後に本書を読むと理解しやすいです。

**計量経済学**
1. [計量経済学 ミクロデータ分析へのいざない](https://www.nippyo.co.jp/shop/book/6899.html)
    本書の「回帰非連続デザイン」の部分ではノンパラメトリック回帰に関する記述があります。ノンパラメトリック回帰に触れたことがない人は、このテキストの該当部分を読むことをお勧めします。

## 想定される読者とおすすめの読み方
本書は経済学訛りの強い因果推論について、理論と実践の両面で充実したテキストになっています。そのため、ある程度の知識を持っている学部生・大学院生にお勧めしたいです。特に、因果推論に関する授業をとっている人や、因果推論に関する論文を読み始めたい人にとっては必須の一冊となると思います。ある程度の知識の一例としては

1. 行列を用いた計量経済学(中級レベル)
1. 因果推論に関する知識(回帰非連続デザインや差の差法、傾向スコアなどの手法について簡単に知っている)
1. 基礎的な解析学(微分積分の計算だけでは不十分)の知識


があげられます。これらの知識が不足している人は、その知識が必要になった際に、適宜教科書を参照すると良いと思います。特に、解析学の知識に関しては、経済学部に所属している(いた)人の場合、不足していることがあると思うので、そのように進めると良いと思います。ただし「〇〇を学んでから本書を読み進めよう」というのはお勧めできないです。それをやると、本書を読み始める前に卒業・修了してしまうと思います。「本書を読んだ初学者が短い期間で既存の研究者を乗り越え、それを上回る成果を発信し始めることを期待している」と本書のはしがきにある通り、まず読み終えることをお勧めします。

# 本書を読み終えて
本書を読み終えて、内容を全て理解できたというとそうではないです。まだまだ理解できない部分はあるのでそこはもう一度読み直したり、プログラミングコードをみて、理解に努めようと思います。また、近日中に身内でこちらの本の輪読を始めるので、そちらの方でより理解を深めていきたいと考えています。

また、本書の内容は、論文を読む上で有益なものであると確信しています。というのも、数学的な記述が随所に使用されており、論文とのギャップが少ないからです。また、近年使用されているトピックをカバーしている点もその理由の一つです。

私は現在、ノンパラメトリック・ベイズ的手法による因果推論に興味を持っており、指導教官から勧められた論文を読んでいたのですが、ベースとなる因果推論の理論についてあまり理解できていませんでした。しかし本書のおかげで、基礎の部分に関しては十分に理解できたと確信しています。特に、行列表記による記述は、論文の理解の一助になりました。

# 最後に
この度は「因果推論の計量経済学」をご献本いただき、誠にありがとうございました。
経済学分野における因果推論について、理論と応用の両面から学べる非常に充実した一冊であり、読了後も繰り返し手に取ることになることを確信しています。本書を通じて得た知識を、自身の研究に活かしていきたいと考えています。

また、初心者にも親しみやすい解説や、Rを用いた実践例の紹介など、非常に参考になる内容で、因果推論を学びたいと思っている多くの方々にもぜひ手に取ってほしい一冊です。この書評が、本書の魅力を少しでも多くの方に伝える助けとなれば幸いです。

改めて、貴重なご機会をいただきましたことに心より感謝申し上げます。
Vue.js の公式チュートリアルを行った際のメモ書き

## 対象読者

Vue.js 3 の公式チュートリアルの内容をざっと知りたい人

## はじめに

[Vue チュートリアル](https://ja.vuejs.org/tutorial/#step-1) をやった際のメモ書きを記載します｡

## 1. 宣言的レンダリング

- SFC (単一ファイルコンポーネント) は HTML､ CSS､ JavaScript をカプセル化して `.vue` ファイル内に記述する
- 宣言的レンダリング: HTML を拡張したテンプレート構文を用いて HTML がどのように見えるかを記述できる
- mastaches 構文 (二重中括弧)で HTML から変数の値を呼び出せる
	- ex) `<h1>{{ hoge }}</h1>`

## 2. 属性バインディング

- ディレクティブは `v-` から始まる特別な HTML 属性
	- Vue のテンプレート構文の一部
- `v-bind:{属性名}="変数名"` で指定した属性名を変数の値にできる

## 3. イベントリスナー

-  `v-on` ディレクティブで DOM イベント発火時の処理を指定できる

## 4. フォームバインディング

- `v-bind` と `v-on` を一緒につかうことで､双方向バインディングを作成することができる
- `v-model` ディレクティブを用いるだけで簡単に双方向バインディングを実現できる
- `v-model` ディレクティブはテキスト入力だけではなく､チェックボックス､ラジオボタン､セレクトボックスなどの他の入力タイプでも機能する

## 5. 条件付きレンダリング

- `v-if` ディレクティブで条件付きレンダリングを行える
- `v-else` ディレクティブや `v-else-if` ディレクティブもある

## 6. リストレンダリング

- `v-for` ディレクティブを使用すると､配列を基にした要素のリストをレンダリングできる
- `:key` で各オブジェクトを一意に特定出来るようにしている

## 7. 算出プロパティ

- `computed()` を用いることで他のリアクティブなデータソースに基づいて `.value` を計算する算出 ref を作ることが出来る
	- つまり､他のリアクティブが変更されたら､その変更を反映した値をレンダリングに反映できる

## 8. ライフサイクルとテンプレート参照

- `ref` 属性を使ってテンプレート参照ができる
- `onMounted` や `onUnmounted` などのライフサイクルがある

## 9. ウォッチャー

- `watch()` を用いることであるオブジェクトが変更したときの処理を記述することができる

## 10. コンポーネント

- import したコンポーネントはテンプレート内で `<{コンポーネント名} />` と記述することで使用できる

## 11. props

- 子コンポーネントで `defineProps()` で定義した props を親コンポーネントから子コンポーネントに渡すことができる
	- `<{子コンポーネント名} {props 名}="props の値">`

## 12 イベントの発行

- `emit` を用いて子コンポーネントから親コンポーネントへイベントを発行できる
- 親コンポーネントは `v-on` ディレクティブを用いて発行されたイベントを検知することができる

## 13 スロット

- 親コンポーネントは `slot` を用いてテンプレートを子コンポーネントに渡すことができる
- 子コンポーネントの `slot` 内のコンテンツに親からテンプレートが渡されなかった時に表示するテンプレートを記述することができる

## おわりに

Vue.js の全体観をざっと把握するには公式チュートリアルは良い教材でした｡
Figmaでレスポンシブデザインを細かめに表現する

## この記事の概要

Figmaデータ上でも結構細かくレスポンシブデザインの挙動を設定できます。
ただしVariablesをちゃんと理解している必要はあり、若干難しいです。
というわけで、この記事ではステップバイステップで解説します。

:::note warn
やり過ぎるとデータの管理や更新が大変になるので、どこまで再現するかはチームで相談しながら決めてください。
こんな記事を書いておいて元も子もないですが、どこまでFigmaで細かく表現したとて、最終的にユーザーに届けるのはコードによって実装されたものです。
Figmaで完璧に再現するのが最善とは限らない、という前提でこの記事を読んでください。
:::

## 完成品

- `Mobile`, `Tablet`, `Desktop`をAppearanceから選択可能
- それぞれのデバイスサイズごとに最小幅と最大幅が設定されている
- Appearance選択にあわせて、ページ内のコンポーネントのVariantも変更される

### 動画

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/2c467f02-af1c-567f-0ef2-d2697a4e5ff0.gif)

### 静止画

1~3番目のセクションをラップするComponentを作って、ページに配置しています。

| Mobile | Tablet | Desktop |
| --- | --- | --- |
| ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/ca45908c-e760-25c7-70d3-94a09776df85.png) | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/6be10e16-9c9c-4291-6e71-7705d30e151a.png) | ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/b1a9971d-809d-9956-e848-7cb5de58a9c9.png) |

## 作り方

### Variablesを設定する

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/b03f0db5-ecb1-192a-44d9-f3ff9b75cd75.png)

- Device type
    - コンポーネントのvariantsに設定するためのString
- Min width
    - 各デバイスごとの最小幅を設定するためのNumber
- Base width
    - 通常時、デザインデータを作る基準にするデバイス幅のためのNumber
- Max width
    - 各デバイスごとの最大幅を設定するためのNumber

それぞれの数値は一旦設定しているだけなので、参考程度に使ってください。

また、ここで使っている数値も別でVariableとして登録し、再利用するのも良いと思います。
例えば`640`という数値を「モバイルとタブレットの境界」といった名称で登録し、`Mobile`の`Max width`と`Tablet`の`Min width`の両方で使うイメージです。

### Componentを作成する

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/21edabdb-914d-6244-486f-aaf6e0df2bb1.png)

`Mobile`, `Tablet`, `Desktop`それぞれで必要な見た目を作ります。
必要に応じて、既存のComponentのInstanceをここで使用してください。

作成後、VariantのValueとして`Mobile`, `Tablet`, `Desktop`を設定します。
VariantのNameは何でも大丈夫ですが、ここでは`Responsive`にしました。

### Instanceに`Device type`のVariableを設定する

Instanceを作成したら、`Responsive`のVariantに`Device type`のVariableを設定します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/5999f202-c540-6cd1-be8f-34e87fdb7a9e.png)

### ページの設定をする

- Instanceを配置する
- FrameのWidth, Min width, Max widthに、Variablesの`Base width`, `Min width`, `Max width`をそれぞれ適用する

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/b0068db4-fc2a-4a5d-d0b5-41a7f4fdd455.png)

### 完成：ページのAppearanceを設定する

Appearanceが設定できるようになっているはずなので、適宜切り替えて検証します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/797d2807-83c5-f6c6-2f28-33a766bb904b.png)

## 最後に

やや細か過ぎるかもしれませんが、デバイスごとに`Base width`, `Min width`, `Max width`を設定しておくことで、検証時に「画面幅が1920pxもあるのにモバイルのレイアウトを表示している」といった事態を防げます。

また、はじめから`Device type`の分岐を前提としてコンポーネントやページを作る意識が生まれそうで、考慮漏れが減ると思います。

ただし最初にも記載したように、細かくすればするほど良いかと言えばそうではありません。

良いバランスを見極めながらデータを作ってください。
今の量子コンピュータは、"コンピュータ"ではないし、ほとんど"量子"でもない

# はじめに
こんにちは、実験系研究者のKuma(a.k.a. Quma)です。
今回はポエムです。

2024年も、新方式の量子コンピュータの実機が公開されたり[^1]、量子誤り訂正にも継続した進展がみられたり、GPTアシスト量子機械学習が出たり[^2]、面白い一年でした。
相変わらずHypeは飛び交っていますが。

どんどん量子コンピュータの実装が進むわけですが、
**今の量子コンピュータは本当に"コンピューター"らしい機能や見た目をしているんでしょうか？**

# 今の量子コンピュータは、実験装置群である
**実のところ、今の量子コンピュータは、一般にイメージされるようなコンピューターではないといえます。**

例えば構成一つとっても、「量子コンピュータ」は箱にすら入っておらず、むき出しの実験装置やデバイス達が、ただケーブルで繋がれているものの総体です。
「量子コンピュータ」として、シャンデリアのような冷凍機を目にすることもあるかと思いますが、あの中に入っているのは量子計算を行うCPUならぬ*QPU*と、そこへ繋がる電気ケーブルや電気増幅器だけです。
それらのケーブルや電気増幅器が、未来永劫壊れない保証もなければ、特性差があれば計算結果としてそのまま反映される状況です。

制御を行う実態は冷凍機の外にあり、それも「箱」には入っていますが、ただの電気波形発生器であり、言われた波形を出すだけの機能しか持ちません。

波形を設計したり渡したりする作業をする便利な(即日使える)「ソフトウェア」や「サーバー」なんて無く、各実験機関でオリジナルで（オレオレ仕様で）実装している状態だと思います。
当然ながら、そのような”ソフトウェア”、”サーバー”、”制御装置”、”QPU"に、実装方式互換性はおろかベンダー企業互換性なぞ期待できるわけもありません。

さらに当然ながら、OSなんかないし、メモリもない。何ならプロトコルも決まってない。

このような状況なので、量子コンピュータの実態は、
**「みんなが頑張って実験自動化しようとしている、ただの実験系」**
と言ってしまいたいと思います。
言われたことをやるだけの、巨大なアナログ装置なんです。
(面白いことに、複数の人から同じ意見を聞くのですが！）

ただし量子コンピュータは極めて繊細なので、実験自動化の技術進歩による効率化や高速フィードバックが、これを成り立たせるために不可欠なパーツであることは強調しておきます。
**もはや手動では成立しえない系が、高度な自動化の力で成立しつつあるのです。**
実験自動化は、ただ早く退勤するための技術ではないんです。

つまり量子コンピュータは
**「世界で初めて、クラウド公開されている、かつ複数人で運用されている、実験自動化システム」**
といえると思います。

これはすごいことでして、私なら自分の自動化の系を外部公開したいとは思いません。
保守が地獄だからです。
絶対いやだよ。

# 量子コンピュータはほとんど量子でもない

**量子コンピュータのうち、量子力学の技術(知識)が必要なのは、心臓部であるQPUと、QPUにごく近い領域のエレクトロニクスだけです。**
その制御装置もただのIF 5GHzの電気波形発生器ですし、読み取りもただのIQ復調です(IQといえば、まぁ無線の技術ですね)。
それより上はソフトウェアなので(もちろんアルゴリズムは量子情報の知識が必要ですが)実装は従来のプログラミング言語やツールです。

量子コンピュータにかかわる研究者やエンジニアの中には、もともと量子の出身の人もいますが、実際使っている知識を聞くと、量子関係ないものが主軸ということは多いです。
(量子に詳しいと、勘が効くということはあります。）

考えてみると、**量子コンピュータはただの実験自動化系なので、実験系の中身そのものに詳しくなくても、*自動化*に必要な技術をもっていれば貢献できるというのは、当然のように思います。**
私も自動化を進める仲間には、ソフトウェアのプロもいたりしますし、なくてはならない存在でもあります。

# まとめ

**今の量子コンピュータは、構成部品のほとんどが量子ではないし、コンピューターでもない　と言ってしまいたいと思います。**

いちおう言っておきますが、だから良いとか悪いとかいう話ではありません。
これが嘘偽りのない今の姿だ、という事実です。
そして、量子と付くからといって怖がる意味もないということです。気合と根性だよ。

[^1]:[新方式の量子コンピュータを実現 －世界に先駆けて汎用型光量子計算プラットフォームが始動－](https://www.t.u-tokyo.ac.jp/press/pr2024-11-08-002)
[^2]:[量子回路をAIが生成する"GQE"、前人未到の計算能力を実現へ](https://note.com/it_daytrading/n/n48e2e5914613)