OmniAICreator/Qiita-1.07M huggingface dataset:
grep活用術

たまにこういうケースがある

データがない部分を探したい
※データベース等にデータがある場合はいいんだけどね。。

今回の場合はgrepで
ddd=

```
aaa
bbb=123
ccc
ddd
aaa
bbb=123
ccc
ddd
aaa
bbb=123
ccc
ddd
aaa
bbb=123
ccc
ddd
aaa
bbb=123
ccc
ddd
aaa
bbb=123
ccc
ddd
aaa
bbb=
ccc
ddd
```

色々方法はあると思うけど

```
[root@centos8_1 ~]# grep  -rn "bbb=$" xya.txt
26:bbb=
```

正直イマイチ。

いい方法を教えてもらったので早速記載します

grep の「x」オプション。完全一致に使える！

```
grep  -rnx "bbb=" xya.txt
```
https://itamaev2.hatenablog.com/entry/2016/09/10/220312
【物語で学ぶ Swift Concurrency】actor と await を舞台俳優に例えて学ぶ（中学生向け対話物語）

この記事では、Swift の並行処理を安全に実現するための仕組み「actor」と、非同期処理の結果を待つためのキーワード「await」について、舞台の俳優をイメージした対話物語形式で解説します。先輩と後輩の会話を通して、actor の役割や await との連携がどのようにプログラムの安全性を保っているのか、一緒に学んでいきましょう。

---

## はじめに

Swift の並行処理では、複数の作業が同時に動くとデータがぶつかって大変なことになる可能性があります。そこで登場するのが「actor」という仕組みです。actor は、まるで舞台の俳優のように、それぞれが独立した役割を持って動くことで、データの混乱を防いでくれます。また、actor 内の処理は非同期で行われることが多く、その結果を安全に受け取るために「await」というキーワードが必要になります。

---

## 対話物語で学ぼう！

**後輩:**  
「先輩、Swift の 'actor' っていうのがあるって聞いたんだけど、どういうものなんですか？」

**先輩:**  
「actor は、Swift の並行処理を安全にするための仕組みなんだ。まるで舞台の俳優がそれぞれ自分の役を持って演技するように、actor も独立して自分の状態を管理するんだよ。これにより、たくさんの作業が同時に動いても、データがぶつかって混乱することが防がれるんだ。」

**後輩:**  
「なるほど！俳優が台本に沿って自分のセリフをきちんと演じるみたいに、actor は自分の仕事を確実にこなすんですね。」

**先輩:**  
「そうそう。actor は、自分の中にあるデータへのアクセスをひとつずつ順番に処理してくれるから、同時に複数の作業が同じデータを書き換えようとしても、順番に安全に行われるんだ。」

**後輩:**  
「ところで、actor のメソッドって非同期で動くことが多いって聞いたんですが、それと一緒に使う 'await' って何ですか？」

**先輩:**  
「await は、非同期処理の結果を待つためのキーワードだよ。actor のメソッドは非同期で実行されることが多いから、その処理が終わるのを待たずに次の命令に進むと、うまくいかなくなる可能性があるんだ。だから、await を使って『この処理が完了するまで待ってね』と指示するんだ。」

**後輩:**  
「つまり、actor が舞台の俳優のように自分の役割を果たしているとき、await を使うことで、次のシーンに移る前にその俳優の演技が終わるのを待って、みんなでスムーズにストーリーが進むようにしている、ということですか？」

**先輩:**  
「その通り！await と actor はセットで使われることが多いんだ。actor の内部で安全にデータが処理される間、await を使ってその結果を確実に受け取ることで、プログラム全体が予期しないエラーなく正しく動作するんだよ。」

**後輩:**  
「すごいですね。actor は舞台の俳優のように独立した役割を持って安全に動き、await はその演技が終わるのを待って、次のシーンへと繋げる役割を果たしているんですね！」

**先輩:**  
「その通り！actor と await をうまく連携させることで、Swift の並行処理はよりシンプルで安全になるんだ。まるで、役者たちが台本通りに完璧なタイミングで演技するかのようにね。」

---

## まとめ

- **actor の役割:**  
  舞台の俳優のように、各 actor は独立した役割を持って動き、内部の状態を安全に管理します。これにより、同時に多くの作業が行われても、データの混乱や競合を防げます。

- **await の役割:**  
  非同期処理が完了するのを待つためのキーワードです。actor の非同期メソッドと組み合わせることで、処理結果が正しく返ってくるまで待機し、プログラムの整合性を保ちます。

- **await と actor の連携:**  
  actor が安全に役割を果たしている間、await を使うことで次の処理に進む前にその結果を確実に取得できるため、全体としてスムーズかつ安全な並行処理が実現されます。

この記事を通じて、actor と await の基本的な考え方とその連携がどのようにプログラムの安全性に寄与しているかを理解してもらえたら嬉しいです。Swift の並行処理を使いこなして、より安全で効率的なプログラムを作っていきましょう！

Happy Coding!
京大院を中退して単身渡米→AI用のデータベース開発

僕は兵庫県出身、金沢知広と言います。
早稲田で工学（物理）の学士号をとったあと、京大の院の物理系の研究室に進学し、一年でやめて渡米しました。

今回は僕がなんで渡米して、どういう人生で的なことは一切書きません（笑）
今日はその辺を全部すっ飛ばして、僕のチームが開発したAI用データベースを紹介させてください。今後改めて自分についての記事を需要があれば書こうかとも思ってますので、フォロー等しておいてもらえればいいかなと思います。

# CapybaraDB （カピバラDB)
僕の作ったデータベース、カピバラDBは、厳密には「仮想データベース」という括りになります。これは、複数のデータベースとパイプラインを合わせ、一つのデータベースとして機能するシステムのことを言います。よって、厳密にはデータベース以外の要素も含んでいるため、「仮想」というわけです。

でも、AIに特化したデータベースって何？と思うかもしれません。これはもう少し具体的にいうと、「意味検索に特化した」データベースです。意味検索とは、厳密なキーワードの一致ではなく、「大体の意味」の一致によってデータを取り出す手法のことを言います。

この「意味検索」、厄介なのがデータの保存過程です。意味検索のアルゴリズムが、ベクトルデータに依存しているため、テキストデータとベクトルデータ、場合によっては写真等のメディアデータをうまく参照して、関係性を崩さないようにインデックスする必要があるのです。

LangChainやLlamaIndex等のフレームワークの開発が直近の１・２年、活発だった理由の１つは、このデータ管理の煩雑さを抽象化して、開発者が一切その辺を触らなくていいようにしたい、という背景があったからなんですね。

カピバラDBのチームでは、この意味検索に関わる煩雑なデータ処理のプロセスを、データベース側に移行させる、というアプローチをとっています。つまり、今までクライアント側で行なっていた、データの処理をデータベース側が引き受けてくれる、ということなんですね。

![Untitled-2025-02-02-1457-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3969394/7b1ed4dd-0b5f-4832-92ba-9f83e3216181.png)

かなり書き殴りで申し訳ないですが、今日は時間がないため、また後日じっくり解説させてください。

また、本日プロダクトハントにローンチしたので、よければ Upvote お願いします。

[プロダクトハント](https://www.producthunt.com/posts/capybaradb-beta-2)

では、Happy building!

[カピバラDBドキュメンテーション](https://docs.capybaradb.co)
2年目社員が考えるリモートでも新人が成長できる環境作り

## はじめに
みなさんは新人の時にこんな経験はありませんでしたか？

- 先輩社員に気を遣って質問できない
- リモートだと対面に比べて質問がしにくい

社会人1年目の私は、同じことを思っていました。


しかし今年度から外国籍のメンバーとのオフショア開発が始まり、それをきっかけとして個人やチームとして初めて触る技術への適応速度が速くなり成長速度が向上しました。その大きな要因として、質問のしやすさがあげられます。


本記事では外国籍メンバーと共に働くことでわかった「質問のしやすいチーム作り」の方法について解説します！

## なんでも聞ける雰囲気を作る
私のチームは、なんでも聞ける雰囲気があります。技術として基本的なことであっても、やったことありますか？と声を掛け合い、なかったら説明すると言う文化があります。私はこの文化のおかげで、わからないことについて自信を持って「わかりません！」と声を上げることができています。なんでも聞ける雰囲気のある私のチームですが、なぜなんでも聞けるのかを考えたところ、以下の二つを行っていることが大きいのではないかと思います。

### 1. 積極的な勉強会実施    
私のチームの外国籍メンバー新しい技術のキャッチアップに前向きです。そのため積極的に勉強会の開催を提案してくれ、開発で出てきた技術についてチームで学習しています。勉強会を行うことで、実際の業務の中でも質問するハードルが下がりました。

その要因として勉強会は、学習者が理解することを目的としているため、普段の業務とは異なり、遠慮せずにわからないことを言うことをできる環境があります。この環境でわからないを聞くことで、実際の業務の中でもわからないと言いやすくなります。また、勉強会を開催することで学習者だけでなく熟練者もメンバーの理解度を知ることができ、業務の中でどこまで説明するべきかについて知ることできます。


### 2. 説明の後に、「わかりましたか？」という問いかけがある 
外国籍メンバーは、他メンバーへの説明の後、必ず「質問はありますか？」や「わかりましたか？」と聞いてくれます。「わかりましたか？」と聞かれるだけで、理解しきれなかったメンバーは「わからないです」や「ちょっと難しいです」と言いやすくなり、その場でわからないことを解決できます。今ではチームメンバー全員がこの習慣を持っています。そのおかげで、普段から「教えてください」と言うハードルが下がりました。

## リモートワークの際に距離を感じさせない

私たちは、オフショアで開発を行なっており、開発をベトナムメンバー2人と日本メンバー4人の6人で行っています。コミュニケーションツールとしてZoomを使用していますが、対面で開発が行えないからこそ、距離を感じさせないような工夫を行っています。

### 1.アバターを用いる
アバターを用いるだけで、話しやすくなります。真っ暗な画面に向かっているかわからない相手に「〇〇さんいますか〜？（〇〇-san, Are you there?）」と聞くよりも、アバターが並んでいる画面の方が発言しやすいです。Zoomのアバターを使うには、Zoomアカウントを作成する必要がありますが、簡単に作成できますし、いくつか出来上がった動物アバターもあるので簡単に導入できます。

### 2.リアクションを声で行う
Zoomにはリアクション機能があり、グッドボタンとかハートとか表示させることができます。しかし、画面共有して説明していたらそんなものを見て確認する余裕がなかったり、全員がマイクOFFだと疎外感を感じます。そこで、リアクションとして「はい」とか「ん〜（考え中）」とかを実際に声で発して言うだけで発言者の疎外感がなくなります！対面で行っている時は、相手の表情をみて考え中だなとか、ここはわかっていそうだなと確認することができますが、Zoomではそれが難しいため、聞き手側が自分からわかっているよ〜とか、考え中だよ〜と教えてあげることが重要です。


## おわりに

新人の時は、質問することが成長につながると思います。しかし、気を遣ってしまったり、リモートで開発を行っている場合は、質問をするハードルが上がると思います。そのため、チームに新人がいる場合、積極的に「わかった？」と聞いたり、リモートで開発する時はアバター使用やリアクションを工夫して良い雰囲気のチームを作ってみてください。最後まで読んでいただきありがとうございました。
【物語で学ぶ Swift Concurrency】actor とは何か？（中学生向け対話物語）



この記事では、Swift の並行処理を安全に行うための新しい仕組み「actor」について、中学生でも分かるように、先輩と後輩の対話形式で解説します。ここでは、actor の特徴やその語源、そしてなぜこれで安全なのかについても説明しています。

---

## はじめに

Swift では、プログラムが同時にたくさんの作業を行う「並行処理」をサポートしています。  
しかし、たくさんの作業が同時に動くと、データがぶつかって大変なことになる場合があります。  
そこで登場するのが「actor」という仕組みです。actor は、データへのアクセスを安全に管理して、プログラムが正しく動くように守ってくれるんです。

---

## 先輩: と 後輩: の対話で学ぼう！

**後輩:**  
「ねえ、先輩。Swift で 'actor' っていうのがあるって聞いたんだけど、どういうものなんですか？」

**先輩:**  
「actor は、Swift の並行処理を安全にするための新しい仕組みなんだ。簡単に言うと、たくさんの作業が同時に動いても、データが混ざり合わずに正しく動くように守ってくれる『特別な型』だよ。」

**後輩:**  
「どうやって安全にするんですか？」

**先輩:**  
「actor は、自分の中にあるデータ（プロパティ）へのアクセスを、ひとつずつ順番に処理してくれるんだ。だから、たとえば複数の作業が同時に同じデータを書き換えようとしても、順番に安全に処理されるので『データ競合』が起こらないんだ。」

**後輩:**  
「つまり、actor があるおかげで、一度にたくさんの作業が同時にデータを変えようとしても、混乱せずにちゃんと処理できるってことですか？」

**先輩:**  
「そのとおり！さらに、actor 内のメソッドやプロパティへのアクセスは自動で順番に処理されるから、わざわざ自分でタイミングを合わせる処理をする必要がないんだ。」

**後輩:**  
「へえ、すごいですね。ところで、'actor' って言葉はどこから来てるんですか？」

**先輩:**  
「実は、『actor』という用語は、コンピュータサイエンスの『アクターモデル（Actor Model）』という考え方に由来しているんだ。1970年代初めにカール・ヒューイットという人たちが考え出したモデルで、『アクター』は舞台の役者のように、独立した実行単位として動き、メッセージを送り合うんだよ。」

**後輩:**  
「つまり、役者みたいに、自分だけの役割があって、みんなで協力して仕事を進めるんですね！」

**先輩:**  
「そのとおり！actor のおかげで、たとえバックグラウンドで重い処理が行われても、内部で順番に安全にデータが更新されるから、プログラムが混乱しないんだ。これが、『なぜこれで安全なのか』という理由なんだよ。」

---

## なぜ actor で安全なの？

- **状態の隔離:**  
  actor は内部の状態（プロパティ）へのアクセスを順番に処理します。これにより、複数の作業が同時に同じデータを書き換えようとしても、順番に実行されるのでデータがぶつかりません。

- **自動的な同期:**  
  actor 内のメソッドやプロパティへのアクセスは自動で順番に処理されるので、わざわざ自分で同期処理（タイミングを合わせる処理）を書く必要がありません。

- **並行処理のサポート:**  
  actor を使うと、バックグラウンドで重い処理を安全に実行しながら、必要なときだけ UI の更新などをメインスレッドで行う、といった設計がしやすくなります。

- **語源について:**  
  「actor」という言葉は、アクターモデルという理論から来ています。アクターモデルでは、各アクターが独立した実行単位として動き、メッセージ交換で通信することで、複雑な並行処理をシンプルかつ安全に扱えるように設計されています。

---

## まとめ

actor は、Swift の並行処理を安全に実現するための強力な仕組みです。  
- **データの混乱を防ぐ:**  
  複数の作業が同時にデータを更新しようとしても、actor が順番に処理してくれるので安全です。

- **同期処理が自動:**  
  自分で同期処理を書く必要がなく、コードがシンプルになります。

- **語源はアクターモデル:**  
  1970年代に提唱されたアクターモデルに基づいており、役者のように独立した役割を持って動くという考え方から来ています。

この記事を通じて、actor の基本的な考え方や安全性について理解してもらえたら嬉しいです。今後の Swift プログラミングにぜひ活用してみてくださいね！

Happy Coding!
【初心者向け】自分でホームページを1から作りたい①【HTML,CSS】

　
http://ss461349.stars.ne.jp/

 
とりあえずまだ何も書いていない自分専用のホームページを作ってみました。
0から始めてるので、これからゆっくりデザインを考えたりページ数を増やしたり
豪華にしていこうと思います。

以前、本格的にホームページを作ってGoogleアドセンスをゲットしたかったんですが、
 
・独自ドメインを取得する
・Googleアドセンスゲットのために有料(年額1万円くらい？）のレンタルサーバーを借りる

というのが金銭面で辛くて挫折してしまいました。

今は単純にHTML,CSS,JavaScript,PHP,python,Rubyなどなど
Web開発に必要な知識もつけていきたいので
Googleアドセンス認定を狙うのはやめます。

私は、色々調べて


https://www.star.ne.jp/

こちらのレンタルサーバー(無料版！！)を使わせて頂くことにしました。

過去に少しだけHTMLは触ったことがあるんですがCSSが何なのか全くわからないので、
調べながらコードが書けるようにしたいです。

swiftの勉強もしているので
掛け持ちになりますが、やりたいことは全部やる精神で少しずつやります。

適当に書いたHTMLコードはこちら

```index.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>みく＠IT開発者</title>
    <!-- ここでCSSを読み込む -->
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <header>
        <div class="container">
            <h1>Web開発で勉強したことをまとめています</h1>
            <nav>
                <ul>
                  <li><a href="index.html">ホーム</a></li>
                  <li><a href="about.html">自己紹介</a></li>
                  <li><a href="#">お問い合わせ</a></li>
                </ul>
            </nav>
        </div>
    </header>

    <div class="container">
        <main>
            <section class="blog-posts">
                <article>
                    <h2>HTMLの勉強を始めました</h2>
                    <p class="date">投稿日: 2025年2月13日</p>
                    <p>HTML,CSSとはなんぞや</p>
                    <a href="#">続きを読む</a>
                </article>

                <article>
                    <h2>記事タイトル2</h2>
                    <p class="date">投稿日: 2025年2月12日</p>
                    <p>この記事の概要</p>
                    <a href="#">続きを読む</a>
                </article>
                <!-- 他の記事を追加できます -->
            </section>
        </main>

        <aside>
            <section class="sidebar">
                <h3>サイドバー</h3>
                <ul>
                    <li><a href="#">人気の記事</a></li>
                    <li><a href="#">最新の投稿</a></li>
                    <li><a href="#">Web開発についてはこちら</a></li>
                    <li><a href="#">アプリ開発についてはこちら</a></li>
                </ul>
            </section>
        </aside>
    </div>

    <footer>
        <div class="container">
            <p>&copy; 2025 みく＠IT開発者. All Rights Reserved.</p>
        </div>
    </footer>

</body>
</html>

```

いずれはQiitaを卒業して自分のホームページで勉強したことをまとめていくのが目標です。

適当に書いたCSSもアップロードしたんですが、適用されてなくてまだよくわからないので
次のブログで書けたらいいなと思います。

ホームページ作りがんばるぞ！
&&について


## この記事はただいま修正中です
~~## 1. JavaScriptの`&&`の基本的な挙動~~

JavaScriptにおける&&は論理演算子として、2つの条件が両方とも**true**である場合にのみ、**全体がtrueになります。もし左側または右側の条件がfalseの場合、その時点で演算結果はfalse**となります。

例：

```react:qiita.rb
console.log(true && true)  // 結果は true
console.log(false && true) // 結果は false
console.log(true && false) // 結果は false
console.log(false && false) // 結果は false
```
&&演算子は左辺がfalseの場合、右辺を評価することなく結果がfalseになります。

~~## 2. JSX内での`&&`の使い方~~

ReactのJSXでは、&&は条件付きレンダリングに使われます。左辺の条件が**trueの場合のみ、右辺の要素が表示されます**。右辺の要素はそのまま評価され、条件がfalseの場合は何も表示されません。
```react:qiita.rb
{state !== 'button' && (
  <button>
    ボタンです
  </button>
)}
```

## 3. JSXでは`&&`の左辺に数値を置かない

&&を使う際に、左辺が**0**などの数値だと、思わぬ挙動をすることがあります。例えば：
```react:qiita.rb
messageCount && <p>New messages</p>
```

`messageCount`が0だと、0がそのまま表示されてしまいます。これは、JavaScriptが**0を偽として扱う**一方で、そのまま評価して表示してしまうためです。

修正方法：
```react:qiita.rb
messageCount > 0 && <p>New messages</p>
```

左辺を真偽値に変換することで解決できます：

---
### 公式ドキュメント

https://ja.react.dev/learn/conditional-rendering
HTTP/1.1 header parser received no bytesの原因調査

Javaのシステムで外部通信時に表題のエラーを調査したのでメモしておきます。

## 再現方法確認

参考URLにあるような記事を見る限りJava標準のHttpClientの挙動っぽい
とりあえず、Docker＆Javaで再現できるか準備して試してみ

```dockerfile: dockerfile
FROM amazoncorretto:17

# 作業ディレクトリを設定
WORKDIR /app

# Javaソースコードをコンテナ内にコピー
COPY TestNG.java .

# ソースコードをコンパイル
RUN javac Test.java

# コンテナ起動時に実行するコマンド
CMD ["java", "Test"]
```

```java: Test.java
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.Duration;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
        // 送信するJSON文字列
        String json = """
            {
                "id": "xxx"
            }
            """;

        final var request = HttpRequest.newBuilder()
            .uri(new URI("http://xxxxxxxxxxxxxxxx/yyyyy/zzzzz"))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(json))
            .timeout(Duration.ofSeconds(10))
            .build();

        // HttpClientを準備
        var httpClient = HttpClient.newBuilder().build();

        // リクエスト送信とレスポンス受信
        var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println("Status code: " + response.statusCode());
        System.out.println("Response body: " + response.body());
    }
}

```

これで再現は問題無くできたので、次は問題点の修正を確認

```shell
$ docker build -t testapp .
  ---  省略  ---  

$ docker run --rm testapp java Test
Exception in thread "main" java.io.IOException: HTTP/1.1 header parser received no bytes
        at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:591)
        at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)
        at Test.main(Test.java:29)
  ---  省略  ---  
```

## 対策

ネットの情報では、HTTP1.1を明示する必要があるとあったので試してみたらエラーが発生しなくなった

先ほどのTest.javaの修正点は以下の通り

```diff: Test.java変更点
-         // HttpClientを準備
-         var httpClient = HttpClient.newBuilder().build();
+         // HttpClientを準備
+         var httpClient = HttpClient.newBuilder()
+             .version(HttpClient.Version.HTTP_1_1) // 明示的に HTTP/1.1 を使うように設定
+             // .version(HttpClient.Version.HTTP_2) // デフォルトの挙動はこちらっぽい、これを使用すると同様のエラーが発生した
+             .build();
```

## 参考

https://bugs.openjdk.org/browse/JDK-8326420

https://github.com/spring-projects/spring-framework/issues/33275
RaspbianOSで構築したNAS×DLNA(minidlna)サーバに保存する動画・画像をテレビ鑑賞

## RaspbianOSで構築したNAS×DLNA(minidlna)サーバに保存する動画・画像をテレビ鑑賞

### 前提
・DLNA機能付きテレビがホームネットワークにつながっていること
・以下前提構築が完了していること
※この2点が完了していると、スマホからはDLNAアプリでNAS内の動画や画像が見れるのにテレビからNASの認識ができない、という状態。

### 前提構築
https://qiita.com/parapaper/items/b4cc4ee6d3b7498195eb

### 参考資料
https://qiita.com/blueknight611jp/items/316249de9b4653dc5f38

https://qiita.com/nak1114/items/ad3e9bdc2374a15530c3

https://hymd3a.hatenablog.com/entry/2021/05/22/120643

### 手順

参考 : 前提構築では/etc/samba/smb.confに以下内容を記載した。
```
[NAS]
   comment = USBHDD
   path = /mnt/hdd/usbhdd/NAS
   read only = no
   guest ok = Yes
   force user = pi
   unix extensions = No
```

上記参考とは別に末尾に以下を追加する。

```
[NAS2]
   comment = USBHDD2
   path = /mnt/hdd/usbhdd/NAS
   read only = no
   guest ok = Yes

   dos charset = CP932
   unix charset = UTF8
   display charset = UTF-8
   
   server string = %h server (Samba, Ubuntu)
   map to guest = Bad User
   syslog = 0
   log file = /var/log/samba/log.%m
   max log size = 1000
   unix extensions = No
   dns proxy = No
   idmap config * : backend = tdb

```

これで、OS再起動すれば、見れるはず
REGZAで確認しておりますが、他メーカーでは動作が異なる場合あります。


※NordVPNを利用している場合、一部不具合が発生するため、必要があれば、以下リンクの補足4を実施。

https://qiita.com/parapaper/items/0e6cfd6fd8bf8691f9fd
丁寧に学ぶフロントエンドアーキテクチャ：目次

# はじめに
この連載ではフロントエンドでの設計およびアーキテクチャについて解説します。
フロントエンドの責務、適切なレイヤー分け、ディレクトリ構成、テスト設計など、フロントエンドエンジニアが保守性を高めるために考える必要がある様々なトピックについて、一貫した観点から説明します。
**いいね、ストックをよろしくお願いします！**

## 前提知識
この記事では、フロントエンドである程度のアプリケーション（TODOアプリなど）を一通り作ることができる程度の基礎知識を仮定しています。
また、基礎的なソフトウェア設計についての知識があると理解しやすいです。興味がある方は、筆者の別の連載記事を参考にしてください。

https://qiita.com/wolfmagnate/items/73c3770cf036eada630d

## 開発環境
この記事では、サンプルコードに次のような技術を利用します。記事の題材はアーキテクチャであるため、細かい知識は不要ですが、ある程度の知識があると読みやすいと思います。

### フレームワーク：Astro

https://astro.build/

Astroは、コンテンツ主導のWebページを作成するためのシンプルなWebフレームワークです。フレームワーク独自の要素が少なく、標準のWeb技術やデファクトスタンダードを臨機応変に選択できるという利点があります。
コンテンツ主導という名前から、静的サイト専用というイメージを持たれているかもしれませんが、実はSSRに対応しており、動的なWebサービスも簡単に作成可能です。

### UIフレームワーク：React

https://ja.react.dev/

Reactは、もっともメジャーなUIフレームワークです。この記事では、単にコンポーネントに状態を持たせるために利用します。

### UIコンポーネントの表示ツール：Storybook

Storybookは、フロントエンドのUIコンポーネントを個別にレンダリングし、分かりやすく表示するツールです。コンポーネントのカタログとしての役割や、テストツールとしての役割、開発の補助ツールとしての役割を果たします。

https://storybook.js.org/

### ビルドツール：Vite

Viteは、フロントエンドのためのビルドツールです。TypeScriptのコンパイルやファイルの変換・バンドル、開発サーバーの立ち上げなどを行ってくれます。
ViteはAstroの標準のビルドツールです。

https://ja.vite.dev/

### 単体テストツール：Vitest
Vitestは単体テストツールです。Viteとの相性が良いため、Astroを使った開発では標準的なテストツールです。Jestと互換性があるため、標準的な書き味でテストを書くことができます。

https://vitest.dev/


# 目次

https://qiita.com/wolfmagnate/items/97b1c526b0e9ae2947c0

https://qiita.com/wolfmagnate/items/dc4184b97bf13b9f9e5e

https://qiita.com/wolfmagnate/items/c4101435fe49e7aeedc1

https://qiita.com/wolfmagnate/items/b4746ba7fa69d6553117

https://qiita.com/wolfmagnate/items/9599f48dcad83cf3a8ad

https://qiita.com/wolfmagnate/items/0401a80cf7aab2ae460e
Nordic nRF9160 DKをはじめよう4～toolchains&SDK追加編～

__Nordic nRF9160 DKをはじめよう3～Visual Studio Code編～__ の続きです。

https://qiita.com/usashirou/items/016f8193179bd47ef84a

__1nce__ 等特定の __toolchains__ や __SDK__ が必要な場合に __Visual Studio Code__ に追加する方法です。
今回は、1nceで使用する __v2.2.0__ を __インストール__ します。
# Toolchain v2.2.0のインストール
__Manage toolchains__ を __クリック__ し、__Install　Toolchain__ を __クリック__ します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/90cf61d3-3cf1-e5c6-85be-f6c9cfaaf7ac.png)
__nRF Connect SDK Toolchain v2.2.0__ を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/f2b17867-986c-21b3-9756-1a9e180ff11c.png)
# SDK v2.2.0のインストール
__Manage SDK__ を __クリック__ し、__Install　SDK__ を __クリック__ します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/843debd3-b973-f772-1d16-b42975661a20.png)
__ｖ2.2.0__ を __選択__ します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/51623f5e-714e-2d7e-66a5-7149a461f46c.png)
__インストール__ する __ディレクトリ__ を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/3d6ab64e-5d4d-ae94-85e8-25600aa07791.png)
# Lチカ　SDK選択
__Create a new application__ を __クリック__ します。
__RF Connect SDK ｖ2.2.0__ を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/24c609e0-707f-8e2c-15b5-3654fd489b5c.png)
__Blinky Sample__ を __クリック__ します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/1d1ba4d1-e40f-a9d4-cc56-90655669c679.png)
__ディレクトリ__ を __指定__ します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/5ac37b1b-d558-046b-dfe1-5641fe94f9e2.png)
__Open__ または、__Add to Workspace__ を __選択__ します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/c8b57865-05d3-27c9-bf3d-4aa408083616.png)
__Configulation__ の __SDK__ と __Toolchain__ を変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/cb317fe6-9bee-cb39-150a-0663dd977054.png)
それぞれ __v2.2.0__ に変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/5f1f817b-7412-e89e-f798-c3484b77771f.png)
__Build Configuration__ を __クリック__ します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/5a4ef80b-79ff-6055-5a8d-bb6960ea568a.png)
コンパイルが成功した後、__Flash__ を __クリック__ してLEDがチカチカすれば完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/d299d6d0-5c06-6145-5e47-ab22d8a742d6.png)
# nRF9160で1nceOSに接続しよう
それでは、1nceOSに接続してみましょう。
Nordic nRF9160 DKをはじめよう5～1nceOS編1～に続きます。
【kintone】時間の統計は数値にしないとできないぞ


# 怖い話

テスト運用の段階で業務日報を作っていたとき、”残業時間の統計を取ってグラフで可視化できたら便利だよね”という話が上がったので、以下のように設定して、残業時間を算出する項目を作りました


![スクリーンショット 2025-02-13 162307.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/7e3922fa-d5c7-4acb-b3b0-5712ecdee3d8.png)

自動計算は下記のような設定をしています

![スクリーンショット 2025-02-13 145617.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/378f9833-5071-4abe-8733-7d9bcc0adf15.png)

![スクリーンショット 2025-02-13 145626.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/f19e4011-ee18-4d0c-bbde-2aa0af88c62a.png)

:::note info 
　**備考**
* テーブル名=フィールドコードとします
* 勤務時間は休憩時間を除いたもの、帳尻合わせのため3600を引いています
* 残業時間は勤務時間=7.5×60×60を引いた値として扱っています
* 残業時間が負の値にならないように分岐させています
:::

入力すると、以下のような形になります

![スクリーンショット 2025-02-13 145820.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/82cafefd-ddd7-41fa-ad5c-b8ca838698fd.png)

ちゃんと残業時間も表示されています

![スクリーンショット 2025-02-13 150633.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/11a5c577-2625-4a15-9ac2-8d69e7292053.png)

よし早速グラフを作ろう

![スクリーンショット 2025-02-13 151741.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/cba422ed-125c-4cc5-a9e3-1d3ec3b49664.png)

...

...

集計方法に「「「合計」」」が、ない...

このままでは「残業時間」がわからないまま、「最も長かった残業時間」「残業した日」しかわからない...

...

## どうするの

ということで、この問題のオチですが、

タイトルの通り計算の方法の段階で、数値として算出しなければならなかった、というのがオチです

![スクリーンショット 2025-02-15 153254.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/6dc2603d-a088-41a4-9e72-31b8bc76a12b.png)

![スクリーンショット 2025-02-15 153343.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/ac55cf71-f099-446f-8dfa-f76121e9ddb7.png)

::: note warn
数値で扱う場合、値は「秒」として扱われます
よって、3600で割ることで、〇時間、としてわかりやすく変換しています
:::

![スクリーンショット 2025-02-15 154445.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839201/6044dee6-b8f8-4251-af2f-c6d9e58a9b2e.png)

集計できた！

## まとめ

* 時間を集計したいときは数値で扱うようにしましょう！

テスト運用の段階で気づけてよかった...
参考になれば幸いです、ご清聴ありがとうございました:bow_tone1:
自動シフト管理システムの提案　結果とその後

## 提案の経緯
身近な課題を解決するシステムを作ろうと考えていたところ、アルバイト先の飲食店で行っていた手動のシフト管理を思い出した。
勤怠管理は無料のアプリケーションを利用していたが、シフト管理機能とは結びついてなく、LINEで募集したものをExcelに手打ちで集計し、公平性を配慮して手動でシフトを組んでいた。

以前から手間がかかりそうな作業だなと薄々感じていたが、より良い案を提案してみようとは考えたこともなかった。
しかし、いざエンジニアを目指して勉強するにつれ、技術を用いることでこの課題を解決できると確信した際には、**一度真剣に提案をしてみたい**と思うようになった。

実際にシフト管理を担当している社員の方に、提案の背景や概要を伝え、後日店長代理も含め3人で話し合う機会をいただいた。
帰宅してA4資料2枚に急いで提案内容をまとめ、現状分析、自分が作る理由、既存サービスでない理由などを分かりやすく説明できるよう準備をした。

### 提案にあたり意識した点
- 対話型の提案にする
- 専門用語での説明は控える
- 曖昧な回答はせず、分からないものは正直に伝える

相手に価値観や本音を打ち明けてもらうよう、**自身の説明は4割程度に留める**よう努め、質問や不明点はないか頻繁に確認した。

## 結論
### 「実用化は現状難しいが、一度独立して作ってみてほしい」

この方向性で合意した。
実用が難しいのは、主にセキュリティや退社後の保守運用などの一般的なリスクを保証できる、信頼性やスキルセットを現状持っていないから。サポート体制も提案内容に含めたが、

**「技術的に作成可能」と「業務に導入して実用可能」の大きなギャップに気づいた。**

>実用化は一旦置いておき、提案内容をもとにシステムを作ってみなさい。サポートや欲しい機能の提案やフィードバック、レビューはいくらでも協力するから。

◎勇者はアジャイルな開発環境を手に入れた！

## 提案でご指摘いただいた点
主に2点、厳しめにご指摘をいただいた。

### 1. イメージが想像できない
提案資料はA4用紙が2枚。システムのイメージを想像できるモックは持ち合わせてない。

![IMG_4334.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3979023/db2db795-9491-466f-80f9-afbaacddddb7.jpeg)
（あまりにも簡素な資料）

適宜、不明点はないか慎重に質問し、スマートフォンとタブレット端末を見せてシフト管理の流れを分かりやすく伝えたつもりではあった。しかし、すべての話し合いが終わった後に店長代理が一言、

>「何を言っているか全然頭にイメージが湧かない。画面が想像できない。」

結構、驚いた。相槌もよく打っているし、不明点も細かく聞いてくださるので頭でイメージできていると思っていた。モックは作りたかったが、限られた時間で優先できなかった。

スピードが命だと思っていたのは自分のエゴであり、相手が求めるのはクオリティだった。

**開始2秒で結論は決まっていた。**
**視覚的なファーストインプレッションの重要性**を学んだ。

### 2. ボランティアなら作らないでほしい
実現可能性を検討するにあたり、システム構築の費用と自身の対価も重点的にお話しした。
提案当初の考えでは、見出しの通りボランティア精神で請け負うつもりだった。むしろ、多少の犠牲は厭わないと思っていた。

しかし全くもって賛同されず。
コストの対価を頂かない、それ即ち「あまりにも非常識な無責任」であると。
>それってあなたにとって都合が良すぎる話だよね。

ボランティアと実用化の提案は矛盾していると気づき、その場で大きく反省した。

## 最後に：高評価を受けた点
後日、店長がこの話を聞いて「一瞬詐欺かと思っちゃったよー」なんて言われたり。
しかし、機能に関してはよく考えられていると評価していただいた点もある。

機能を考えるにあたり、シフト管理の仕様を明確に考慮した。
例えば、期限の締切を過ぎても提出できるか、担当の管理権限はあるか、自動でシフト計算をするが後から提出した人が不利にならないか、など。

実装において必ず重要な概念なので、提案の中で要望があった仕様も含めて一旦まとめてみる。

### 機能に落とし込むべきシフト管理の仕様
- 担当者に管理権限を渡し、他の者は社員であってもシフト編集が不可
- シフト募集期限を過ぎても従業員はシフト希望を提出可能
- 後から希望を提出した人が自動計算で不利にならない
- キッチン/ホールなどのグループ選択（両方選択も可）
- 1日のシフト枠・募集期間・締切日時の自由設定
- 出勤希望日・出勤可能日の区別をラベルで選択
- 締切日時まではシフト希望を自由に再提出可能
- 交通費・時給・勤怠管理との連携
- シフトの手動変更
- 通知機能
- など


例えば、後からシフト希望を提出した人が不利にならないためには
管理者権限で「自動シフト計算をする/しない」を選択できる機能があると実現できる。
締切日時で自動計算されては、後から提出するたびに計算し直す必要がある。

また、入社して間もないアルバイトはシフトに多く入れたい。自分はそれでシフトが減った。自動シフト計算した後にも、管理者権限で簡単に編集できれば公平性は担保できる。

導入先によって必要/不必要が異なるので、優先度をつけなければならない。

### 悩んでいる仕様
**シフトの「公平性」をどう評価するか**
確定日数、それとも希望日数と確定日数の差か。後者だとすると、15日間の希望で12日間が確定した人と4日間の希望で1日確定した人は同じと言えるのだろうか。手動機能で変更できるが、他との調整も必要なので手間がかかる。


**シフト希望が重複する際の処理**
等しい希望日数でシフト希望が重複する際、自動計算ではエラーになる可能性が高い。あるいは、両方ともカウントしない。管理者権限で従業員に優先度を設定するか何らかの処理が必要。
PostgreSQLのプリペアドステートメント、6回目で実行計画が変わる件についての備忘録

PostgreSQL のプリペアドステートメントを使っていると、6回目の実行から急に遅くなることがある。
また、実行計画の内容が途中から変わっていることがある。
知らないとハマるので、備忘録としてまとめておく。

# 原因
PostgreSQL はプリペアドステートメントの実行回数をカウントしており、
6回目の実行から「カスタム計画」ではなく「汎用計画」を使う可能性がある。

### ・1〜5回目の実行
カスタム計画（Custom Plan） を使用
実行時のパラメータを考慮し、最適な実行計画を選択

### ・6回目の実行以降

PostgreSQL が カスタム計画と汎用計画のコストを比較
1～5回目のコストと比較し汎用計画のコストが低いと判断されると、それ以降汎用計画（Generic Plan）を使用
要するに、PostgreSQL は「カスタム計画を毎回作るより、汎用計画を使ったほうがトータルで効率的」と判断することがある。

# 実例
テスト環境作成
結果をわかりやすくするために極端なレコード分布とする

```sql
-- テスト用TBL作成
CREATE TABLE test (
    id SERIAL PRIMARY KEY,
    category_id INT,
    name TEXT
)

-- INDEX作成
CREATE INDEX idx_category ON test(category_id);

-- 大量データ（カテゴリ 1 に5万レコード）
INSERT INTO test (category_id, name)
SELECT 1, md5(random()::text) FROM generate_series(1, 50000);

-- 少数データ（カテゴリ 2-9 各1レコード）
INSERT INTO test (category_id, name)
SELECT generate_series(2, 9), '少数データ';
```

PREPARE文作成
```sql
PREPARE stmt (int) AS
SELECT * FROM test WHERE category_id = $1;
```

下記条件で6回実行
```sql
EXPLAIN ANALYZE EXECUTE stmt(1);
```

1～5回目の実行計画
```sql
Seq Scan on test  (cost=0.00..1093.10 rows=50003 width=40) (actual time=0.007..2.231 rows=50000 loops=1)
  Filter: (category_id = 1)
  Rows Removed by Filter: 8
Planning Time: 1.029 ms
Execution Time: 2.986 ms
```

6回目以降の実行計画
```sql
Index Scan using idx_category on test  (cost=0.29..385.18 rows=12502 width=40) (actual time=0.014..2.668 rows=50000 loops=1)
  Index Cond: (category_id = $1)
Planning Time: 0.075 ms
Execution Time: 3.435 ms
```

# 対策
### 1. plan_cache_mode を force_custom_plan にする
PostgreSQL 14 以降なら、カスタム計画を強制できる。
```sql
SET plan_cache_mode = force_custom_plan;
```
これを設定すれば、毎回カスタム計画が使われる ので、意図しない汎用計画の切り替えを防げる。

### 2. プリペアドステートメントを使わない
postgreSQLのバージョンによっては上記が使用できない場合がある。
そもそもの実装内容を変更することで防ぐこともできる。

# まとめ
PostgreSQL のプリペアドステートメントは、6回目の実行から汎用計画に切り替わる可能性がある
対策として plan_cache_mode = force_custom_plan を設定するか、プリペアドステートメントの使用を見直す
PostgreSQL の仕様を知らずにプリペアドステートメントを使うと、思わぬパフォーマンス低下にハマることがある。
実行計画を確認しながら、適切な方法を選ぶのが大事。
Windowsでbertopicをインストールできない場合の対処法

BERTopicをインストールする際に以下エラーが出ました。

```
Building wheels for collected packages: hdbscan
  Building wheel for hdbscan (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for hdbscan (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [26 lines of output]
  ...
  (中略)
  ...

      building 'hdbscan._hdbscan_tree' extension
      error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for hdbscan
Failed to build hdbscan
ERROR: Failed to build installable wheels for some pyproject.toml based projects (hdbscan)

```

このエラーは、必要な開発ツールが不足していることが原因でした。以下の手順で解決できます：

1. まず、Visual Studio Build Toolsをインストールします：
   1. https://visualstudio.microsoft.com/ja/visual-cpp-build-tools/ にアクセス
   2. 「Visual Studio Build Tools 2022」をダウンロード
   3. インストーラーを実行し、「C++によるデスクトップ開発」を選択してインストール


2 . BERTopicをインストール：
```bash
pip install --upgrade pip
pip install bertopic
```

もし特定のエラーが発生する場合は、以下の順序でインストールを試してください：
```bash
pip install hdbscan
pip install umap-learn
pip install bertopic
```

注意点：
- Python 3.7以上が必要です
- インストール中に一時的にCPU使用率が高くなる可能性があります
- メモリを十分に確保してください（最低4GB推奨）

エラーが続く場合は、エラーメッセージを共有していただければ、より具体的な解決方法をご案内できます。
F#、楽しすぎて一時期中毒になった

　私は普段C#を使っていますが、ある時同じ.NETの言語であるF#を触り始めました。
# F#楽しい！
　最初はどう書けばいいのかわかりませんでしたが、書いていくうちにコードの書きやすさに気づき、だんだんとF#にハマっていきました。「これは楽しい」とF#でコードを書きまくっていました。
# F#中毒
　「久しぶりにC#やるか」とC#のプロジェクトを作り、書き始めた時、

　「C#が、書けない………」
　
```cs
if (a == 1)
{
    
}
```
と書こうにも
```cs
if a = 1
{

}
```
と書いてしまいました（今はC#もF#も書ける）。何度書き直しても、別のところでまたF#になる…。
元ヤフーエンジニア社長が考える、市場価値の高いエンジニアとは


## 自己紹介
株式会社PRUMという会社の代表をしています。岩本です。  
[PRUM公式サイト](https://prum.jp/)  

SES企業でエンジニアとして就業したのち、ヤフーでもエンジニアとして働いておりました。  
2019年、PRUMを創業し、組織を5期目の途中で70名の規模まで成長させました。  
エンジニアの成長について、誰よりも考え抜いてきた自信があります。  

## はじめに
近年、テクノロジーの進化は驚異的で、特にAIの発展はエンジニア業界に大きな変化をもたらしています。  
この変化の中で、「市場価値の高いエンジニア」として存在し続けるためには、何が必要なのか？  
これからの時代に求められるエンジニア像を3つの観点からお話しします。

---

## 1. 主体性が未来を切り拓く
エンジニアという職業ほど、主体性を評価される職業はないと思います。

システム開発業界は、まだ30〜40年ほどの歴史しかない未成熟な産業です。  
建築業界のように確立された手法がないため、プロジェクトが失敗することも珍しくありません。  
遅延、仕様漏れ、バグ……。こういった課題を乗り越えるためには、各メンバーが「自分の仕事だけやればいい」という考えを捨てる必要があります。  

**重宝されるエンジニアとは、自分の担当範囲を超えて全体に目を向けられる人。**  
問題を察知し、解決に向けて動ける主体性のある人です。  

例えば、  
- **スキルレベル10 × 主体性レベル3** のエンジニア  
- **スキルレベル5 × 主体性レベル10** のエンジニア  

この場合、後者の方がチーム全体の成功に貢献できることが多いのです。  
エンジニアに必要なのは、プロジェクト全体を成功させる意識を持つこと。  
これが主体性の重要性です。

**スキルだけ高くて、人間力が低く、現場を切られてしまったエンジニアを何人も何人も見てきました。** せっかく努力してスキルを身につけたのにもったいない！

**どんな人がチームに求められる人なのか？**
僕はバスケをやるので、バスケで例えさせてください。

3ポイントがめちゃめちゃ上手い選手がいたとして「ああ、パスもらえたらスリー決めますよ」というスタンスでずっとコートの端で立ってるだけの人がいても役に立たないですよね。
リバウンドも取りに行くしディフェンスも頑張るし、なんならベンチに下がっても誰よりも声を出してチームを応援する。
プレーに粗が多少あっても、そういう人がチームから求められます。

そしてこれからAIの台頭により、100%シュートを決めてくれるロボットが登場します。（ずっと無理やりバスケに例えてすいません）
余計、受け身の人に価値はなくなります。

**自分には今何が貢献できるだろう。** と考え続けられる人の価値がより高まってくるはずです。

---

## 2. AIの利活用ができる人が勝つ時代
今後のエンジニアにとって、AIを活用できるスキルは必須です。  

AI技術は飛躍的に進化しており、これを活用できるかどうかがエンジニアの未来を大きく分けます。  
2年後には、AIを使いこなせないエンジニアは仕事がなくなるかもしれない……  
そんな危機感を持つくらいがちょうどいいでしょう。  

例えば、  
- **「プログラミングを10年やってきました」** というエンジニア  
- **「プログラミング経験は3年だけど、AIの活用に長けています」** というエンジニア  

この場合、後者の方が高く評価される時代が来ています。  
AIは単なる技術ではなく、人間の作業を補助し、効率化するための強力なツールです。  

**AIを活用して仕事の生産性を上げられるエンジニアこそ、これからの時代に重宝される存在になるでしょう。**  

AI活用は、ヨーイドンで始まったばかり。今からでも業界No.1に誰でもなれるチャンスがあります！そして、プログラミング言語を習得するよりはるかに簡単です。

ここに乗らない選択肢はありません。

---

## 3. ビジネス力を持つエンジニアが生き残る
エンジニアである前に、まずはビジネスパーソンであることを忘れてはいけません。  

技術力があれば十分だと考えるエンジニアも少なくありませんが、それは大きな誤解です。  

- **「エンジニアだからコミュニケーションが苦手でも仕方ない」**  
- **「技術力さえあれば評価される」**  

こういった考えを持つエンジニアは、やがて頭打ちになります。  

特にマネジメント能力や改善力、プロジェクトをリードする力が欠かせなくなっています。  
AIが発展する中で、人間にしかできないこと、つまり **「チームを束ねる力」** や **「ビジネスとして利益を生む視点」** がますます重要になっているのです。  

**重宝されるエンジニアとは、技術だけでなく、チーム全体やプロジェクト全体を見渡し、価値を生み出せる人です。**  

---

## 重宝されるエンジニアになるための3つの行動指針
✅ **主体性を持って動く**  
　自分の業務範囲にとどまらず、チーム全体やプロジェクトの成功を意識しましょう。  

✅ **AIスキルを磨く**  
　AIツールや技術を積極的に学び、実践で活用する力を身につけましょう。  

✅ **ビジネス視点を持つ**  
　エンジニアとしてのスキルを武器に、プロジェクトに利益をもたらす意識を持ちましょう。  

---

## 最後に：変化に対応できるエンジニアを目指して
これからのエンジニアには、**技術力だけでなく、主体性、AIの活用力、そしてビジネス力が大切** です。  
環境が大きく変化する中で、こういった力を網羅的に伸ばしていくことが、今後「市場価値の高いエンジニア」として存在し続けるために必要なことだと思います。  

ぜひ、**「自分の仕事にどんな価値を提供できるか？」** を常に考え、日々の行動に落とし込んでいきましょう。  

あなたも、これからの時代に欠かせないエンジニアになれるはずです！

---
PRUMのエンジニアの95%以上は、未経験からの採用です。
ぜひ、求人を見てみてください！

▼ Wantedly求人
https://www.wantedly.com/projects/626662

▼ コーポレートサイト
https://prum.jp/

VISION 『日本で一番エンジニアが成長する会社を創る』

ご応募お待ちしておりますー！
LT(Lightning talk)の創り方


LT(Lightning talk)の創り方

# 即興　
資料を何も用意せず、単語から始める。　
お題を会場からもらってもいい。　

一つ前の発表者の最後の言葉または、一番印象を受けた言葉から始めてもいい。　

２０代の頃、元IBMのコンサルの方から教えてもらった。　
コンサルなら、白紙の前に立って、一日、議論を組織できるものだと。　

聴衆からお題をいただき、そのお題に対する聴衆のいいたいことを聞くという手法がある。

初めておうかがいする企業では、この方法が受けるし、自分でもその企業の傾向が把握できありがたい。

いいたいことがない場合には、聴衆の好みの調査をする。
２つまたは３つのうち、挙手（オンラインの場合は集計できる方法）してもらう。選択肢は多くても５つくらい。
選択肢が多すぎると迷っている時間が無駄になる。
直観の傾向を知ればよく、本当のところを知る必要はない。

多い順に、自分の経験談をする。
あるいは、聴衆の経験談をしてもらう。

自分の話をしたときと、聴衆の話をしたときの反応や、展開により次の題材をこちらから提供するか、聴衆から聞くかを決める。

聴衆の意見や反応は、次の自分の話の題材にもできる点がよい。

研修アンケートを事後にしかとらないと、実際の話の評価かどうかはわからない。
事前アンケートを取っていれば、事後との比較で、話の前後の差から、話のよしあしが評価できる。

事後アンケートだけでは、聴衆の性格評価はできるものの話の評価になる可能性が低くなる。

話の途中で意見を聞いたり、挙手してもらえれば、それが事前アンケートの補完になり、話の最終的な成果を評価しやすい。










Qiita Engineer Festa 2023〜私しか得しないニッチな技術でLT〜

https://increments.connpass.com/event/285824/






「Qiita Engineer Festa 2023〜私しか得しないニッチな技術でLT〜」題材アンケート

https://qiita.com/kaizen_nagoya/items/97a527f63c94ba305fe4


【24卒向け】9ヶ月後に年収１０００万円を目指す。二つの関門と三つの道。


https://qiita.com/kaizen_nagoya/items/fb5bff147193f726ad25
Mayaでシーンイベントに駆動するプラグインを作成する

## 環境

* Windows
* Autodesk Maya 2025.3

## イベントに駆動する処理の作成

Mayaではファイルを開くなどの特定のイベントに合わせて駆動する処理を設定することが可能です。[scriptJob](https://help.autodesk.com/view/MAYAUL/2025/JPN//?guid=__CommandsPython_index_html) コマンドを使用してスクリプトとして作成することも可能ですが、ここではユーザーがON, OFFできるプラグインとして作成する方法を記載します。
[DevKit](https://aps.autodesk.com/developer/overview/maya) にC++での実装例として [pluginCallbacks.cpp](https://help.autodesk.com/view/MAYADEV/2025/JPN/?guid=MAYA_API_REF_cpp_ref_plugin_callbacks_2plugin_callbacks_8cpp_example_html) がありますので、こちらを参考にPython版のプラグインの作成例を示します。

## プラグインの例

以下に「ファイルを開く」というイベントの「後」に、「"After Open"とprintする」処理を行うプラグインの例を記載します。
なお、以下のコードは説明のわかりやすさを重視したものです。コーディングのベストプラクティスを示したものではありませんのでご注意ください。

```python
from typing import Any

import maya.api.OpenMaya as om

_AFTER_OPEN_ID = None


def initializePlugin(plugin: om.MObject) -> None:
    global _AFTER_OPEN_ID
    if _AFTER_OPEN_ID is not None:
        return

    _AFTER_OPEN_ID = om.MSceneMessage.addCallback(
        om.MSceneMessage.kAfterOpen,
        _after_open_callback,
        None,
    )


def uninitializePlugin(plugin: om.MObject) -> None:
    global _AFTER_OPEN_ID
    if _AFTER_OPEN_ID is None:
        return

    om.MSceneMessage.removeCallback(_AFTER_OPEN_ID)
    _AFTER_OPEN_ID = None


def _after_open_callback(client_data: Any = None) -> None:
    print("After Open")
```

### プラグインのエントリポイント

Mayaではプラグインのエントリポイントとして、ロード用に ```initializePlugin```, アンロード用に ```uninitializePlugin``` という名前で実装する必要があります。

今回の例はイベントに合わせて駆動する処理を設定するプラグインであるため、ロード時にはどのイベントに対して何の処理が動くかを登録し、アンロード時にはロード時に登録した情報を解除することになります。その処理を実装するのが ```initializePlugin```、```uninitializePlugin``` となります。

### コールバックの登録と削除

Maya にはシーン関連のコールバックを登録・解除するクラスとして ```MSceneMessage``` クラスがあります。登録用のメソッドはイベントに応じて使用するメソッドが異なるので注意してください。(今回の例ではファイルを開いた後に実行する処理を登録出来る ```addCallback``` メソッドを使用します)

```addCallback``` メソッドの引数については ```message```、```function```、```clientData``` の3つがあります。
* ```message``` はコールバック関数をトリガーするタイミング (シーンメッセージの指定)
* ```function``` はコールバック関数
* ```clientData``` はコールバック関数に渡すユーザー定義データ

戻り値については登録IDが返されます。

また削除に関しては ```removeCallback``` メソッドを使用し登録時のIDを指定して削除します。


### コールバック関数
```_after_open_callback``` 関数の箇所です。イベント時に実行したい処理を実装します。コールバック関数では登録時に設定するclientDataを受け取って利用することも可能です。


## 参考
* [Maya デベロッパー センター](https://aps.autodesk.com/developer/overview/maya)
* [scriptJob](https://help.autodesk.com/view/MAYAUL/2025/JPN//?guid=__CommandsPython_index_html)
* [pluginCallbacks.cpp](https://help.autodesk.com/view/MAYADEV/2025/JPN/?guid=MAYA_API_REF_cpp_ref_plugin_callbacks_2plugin_callbacks_8cpp_example_html)
* [プラグイン エントリ ポイント](https://help.autodesk.com/view/MAYADEV/2025/JPN/?guid=Maya_DEVHELP_Maya_API_introduction_initialize_uninitialize_html)
* [MSceneMessage](https://help.autodesk.com/view/MAYADEV/2025/JPN/?guid=MAYA_API_REF_py_ref_class_open_maya_1_1_m_scene_message_html)
Amazon Bedrock Nova Reelを試してみた

# 勇気を出して動画生成をしたい
どうも、アスカです。
皆さんAmazon Bedrock Nova触ってますか？

昨年のre:inventで公開されたAmazonの新規基盤モデルですが、テキストモデルが安い、早いというだけでなく、画像生成・動画生成できるモデルもありますね。

動画生成はお高いイメージがあったので、正直今まで避けてきましたが
勇気を出して触ってみましょう。

## Amazon Nova Reelの料金
触る前に料金を確認。
[Bedrockの料金ページ](https://aws.amazon.com/jp/bedrock/pricing/)

720p, 24[fps]で動画生成性1秒あたりUSD 0.08

まあ多少ドジっても死にはしない値段な気がします。

## 使い方
### まずモデルアクセスリクエスト
:::note info
最初は制限によりアクセスできませんが、サポートに問い合わせると比較的すぐに解除してもらえます。
:::
:::note warn
2025年2月15日時点で
バージニア北部リージョンでしか使えません。
:::

### プレイグラウンドに入る
有効化したAmazon Nova Reelを選択しましょう！
![スクリーンショット 2025-02-15 13.47.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3349905/5ee5d439-820a-47fa-8adc-a93ac1abd6d2.png)

動画保存用のS3バケットが必要なようなので、"確認"ボタンを押してあげます。
![スクリーンショット 2025-02-15 13.48.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3349905/31b313c2-82fb-4cfb-bca1-ef40db0b746f.png)

### 実行画面
左端に設定できるパラメータがありますね。
![スクリーンショット 2025-02-15 14.12.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3349905/97944fd9-46eb-453c-bc2b-40c2a0aa5cd7.png)


- Action
- Start Frame
- S3 Storage
- シード

アクションは現状一つしか選べず、
6秒で720p 24fpsでした。これから増えていくことを想定したUIです。

入力画像のサイズも720pの規格に合わせて1280✖︎720に固定ですね。

では早速試してみましょう。
ちょっと寂しげな風景を見たいと思い、ひとまずは初期画像なしで以下のようなプロンプトを入れました
```
In a desolate scene of a crumbling New York City, 
a solitary Japanese girl with black hair sits atop a pile of rubble, 
reading a book. 
Tears glisten in her eyes as she absorbs the contents of the pages amidst the chaotic backdrop of destroyed buildings and scattered debris.
```

https://x.com/achan_engineer/status/1890634843559465280

画風とかが思ってたのと違うなと思いましたが、プロンプトでちゃんと指定しないとですね。次は自分を初期画像として入れてみます。少しタイプスリップさせたくなって以下のプロンプトを入れました。
```
"A young boy is caught in an explosion and mysteriously time-slips into the era of the Three Kingdoms in ancient China. 
The image captures his moment of confusion and awe as he stands amidst traditional Chinese architecture, 
with warriors clad in period armor rushing past him, 
and banners fluttering in the wind."
```

https://x.com/achan_engineer/status/1890640014251348145

正直思ったものとは違いますが、まあ面白いから良しとします。

## 非同期実行するAPIが利用可能
プレイグラウンドでも楽しめましたが、アプリに組み込むこともできそうです！
https://docs.aws.amazon.com/ja_jp/nova/latest/userguide/video-gen-access.html

# まとめ
今回は勇気を出して動画生成に手を出してみました。
1本当たり6秒なので約0.5[USD]です。今回は２本生成したので約1[USD]かかりました。

慎重にやれば、そんなにビビるものでもなかったなと思います。
ただ、アプリに組み込もうとしてトライ&エラーを繰り返すと結構大変なことになります。

引き続き慎重に触っていきます。
ハイパーバイザーのタイプ別起動プロセス

# ハイパーバイザーとは
- 仮想マシンの作成・管理をするソフトウェア
- ハードウェアレベルで仮想化を実施する

### タイプ1: ベアメタル型
- 直接ハードウェア上で動作する
  - PC電源ON → BIOS/UEFI起動 → ブートローダー起動 → ハイパーバイザー

### タイプ2: ホスト型
- ホストOS上で動作する
  - PC電源ON → BIOS/UEFI起動 → ブートローダー起動 → ホストOS起動 → ハイパーバイザー
新卒2年目エンジニアの学習記録：学習12カ月目

# はじめに
新卒2年目エンジニアのA.Kと申します。
1月から自社開発企業にフルスタックSEとして転職し、たくさんのことを学びながらも徐々に環境に慣れてきました。
先月に引き続き、今月に個人学習でやっていたことを記録していきます。

先月の記事です↓

https://qiita.com/AK_React/items/c6880e610310cbcc9023

# 学習12か月目にやったこと

### <font color="Red">フルスタック個人開発</font>
**新しい職場ではフルスタックな対応を求められるため、個人学習でも簡単なSNSアプリをフルスタックで作りきろうと決意**しました。
**今年中に完成＆チュートリアルとして記事を投稿することが目標**です。

目的はあくまでも技術のキャッチアップになりますので、機能やUIはシンプルなものを考えています。

**～技術スタック～**

- **フロントエンド**: Next.js, TypeScript  
- **バックエンド**: Rails API, Apollo Client  
- **テスト**: Jest, React Testing Library, Rspec
- **デプロイ**: AWS  
- **開発環境**: Docker  
- **CICD**：Github Actions

**～実装機能（SNSアプリ）～**
- 投稿機能
- 投稿表示機能
- 投稿編集機能
- 投稿削除機能
- メール認証機能
- 画像保存機能

**～✅現在の進捗～**

✔Rails API実装
✔Rspec
✔フロントエンド機能実装
✔フロントエンドテスト（途中）

AWS・Dockerはキャッチアップも込みなので鬼門ですね。。
***

### <font color="Red">英語イベント参加</font>

今年は生きた英語にも触れておきたくて参加しました。
こういう「興味はあるしやってみたい」ことって後回しになりがちなので、思い切ってその環境に飛び込んでみるのを大切にしています。

https://japanglish.connpass.com/event/335212/

今回参加したイベントでは、参加者同士が英語でディスカッションする時間が設けられていたので、私にとってはすごくいい機会でした。
いやー改めて全然しゃべれねえな。。頑張ろう。
年内にLT登壇もしようと思います。


# おわりに
余談ですが、今年はボディメイクの大会をお休みすることもあり、トレーナーさんと相談してトレーニングの頻度を週5→週4に減らしてみました。
おかげで学習に割ける時間が少し増えて、体力的にも余裕があります。
今年一年は元気な状態で過ごせるので、基礎固めに徹しつつも精力的に活動していきたいと思っています。
LTはもちろん、イベント運営とかOSSコミットとかやってみたいな。。
最小努力と最短時間でデータ分析実務スキル検定　シチズン・データサイエンティスト級合格記

こんにちは。今年2個目の資格「データ分析実務スキル検定　シチズン・データサイエンティスト級」に受かったので合格記です。いつも通りショートカット勉強法のため、真面目に点を取りたい方、コツコツ基礎を積み上げたい方にはあまり参考にならない記事です。勉強時間は２時間くらいです。

本屋の資格コーナーで偶然見つけたこちらの試験、エクセル系だったので即申し込みました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">昨日本屋行ったら発見したエクセル系資格。ビジネス統計スペシャリストは取得済みだったけどこれは知らなかった。近日中に受けてみます✊🔥(テキストチラ見したけどエクセルの関数とピボットで頑張る系っぽい) <a href="https://t.co/ORbVwOCpE6">pic.twitter.com/ORbVwOCpE6</a></p>&mdash; 🍊 (@ponponmikankan) <a href="https://twitter.com/ponponmikankan/status/1885865115939148122?ref_src=twsrc%5Etfw">February 2, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

## 試験について
> デジタル時代のビジネスパーソンに求められる実践的なデータ分析スキルを可視化し、評価するための検定試験

https://cbas-exam.jp/

民間の資格で、
 * CBAS プロジェクトマネージャー級（PM級）
 * CBAS シチズン・データサイエンティスト級（Citizen級）

の2つのレベルがあり、今回受けたのはシチズン級でエクセルでの前処理や関数の利用に重きを置いたデータ分析初学者向けの試験でした。PM級はSQLとかも出るみたいです。
MOSでおなじみ、オデッセイさんのページから申し込むことができます。

https://cbt.odyssey-com.co.jp/cbas-exam/

エクセルのデータ分析系資格にビジネス統計スペシャリストがあります。ビジネス統計スペシャリストのほうが、統計っぽい内容なので、データサイエンスを学びたいかたはこちらの試験の受講よりもビジネス統計スペシャリストをお勧めします。

## 利用教材について
公式で出ている以下のテキストを利用しました。エクセル慣れている方であればお風呂に入りながらでも、２時間くらいで読めると思います。だがしかしこのテキスト、なかなか高いです。高いのに…非常にレイアウトが見づらく不親切なのと最後の模擬試験は問題が掲載されているのみ…、公式テキストをうたうならもう少し頑張ってほしいところです…。。

https://amzn.asia/d/ioli3Oc

## 学習について
テキストを見ていただけるとわかると思うのですが、基本的にはエクセルの基本機能や関数を使って前処理をして出したいデータを算出していきます。エクセルに慣れている方であれば、実際にエクセルを操作しなくとも学習を進めることができると思います。私はお風呂で流し読みしました。

## 本番について
テストセンターで80分の回答時間の中で、20問を択一で回答します。並べ替えや複数選択等はありませんでした。解答を導き出すためのエクセルが用意されますが、MOSと違って、エクセル自体を提出するわけではありません。つまり自由に解いてOK！私が受けたテストセンターのエクセル環境はPower Queryエディタを起動できたので、いろいろ使いました。新関数（UNIQUE関数等）は使えなかったので、ちょっと制約はあるかも。What if分析とかも使えそうな場面があったので、エクセル好きな方はいろんな手法を使ってみるといいでしょう。

何回か見直して、50分くらいで回答し終わりました。最後に合否判定されます。認定証は紙の発行はなく、オープンバッジで受け取るようです。

というわけで、新興エクセル資格でした！前処理や関数中心の内容のため、データサイエンス目的で受験されたい方はビジネス統計スペシャリストのほうがおすすめです。
React Hook Form 入門


この記事では、React でフォーム処理を簡単かつ効率的に実装できるライブラリ [React Hook Form](https://react-hook-form.com/) について、基本的な使い方からバリデーションの実装方法まで、初心者でもわかりやすく解説します。

## React Hook Form の特徴

- **シンプルな API**  
  フォームの状態管理を簡潔なコードで実装できます。

- **パフォーマンス最適化**  
  不要なレンダリングを避ける仕組みが備わっており、パフォーマンスに優れています。

- **柔軟なバリデーション**  
  HTML 標準のバリデーションや、カスタムバリデーションの実装が容易です。

## インストール方法

npm または yarn を利用して簡単にインストールできます。

```bash
npm install react-hook-form
# または
yarn add react-hook-form
```

## 基本的な使い方

React Hook Form を使った基本的なフォームの実装例です。  
`useForm` フックを利用して、フォームの状態管理やバリデーション、送信処理を行います。

```jsx
import React from 'react';
import { useForm } from 'react-hook-form';

function App() {
  // useForm フックから必要な関数やオブジェクトを取得
  const {
    register,
    handleSubmit,
    formState: { errors },
  } = useForm();

  // フォーム送信時の処理
  const onSubmit = (data) => {
    console.log(data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <div>
        <label htmlFor="firstName">First Name</label>
        <input
          id="firstName"
          // register 関数でフォームのフィールドを登録、バリデーションルールも設定
          {...register('firstName', { required: 'このフィールドは必須です' })}
        />
        {errors.firstName && <p>{errors.firstName.message}</p>}
      </div>

      <div>
        <label htmlFor="lastName">Last Name</label>
        <input
          id="lastName"
          {...register('lastName', { required: 'このフィールドは必須です' })}
        />
        {errors.lastName && <p>{errors.lastName.message}</p>}
      </div>

      <button type="submit">送信</button>
    </form>
  );
}

export default App;
```

上記の例では、`register` 関数で各入力項目を登録し、`handleSubmit` でフォーム送信時にバリデーションを実行しています。エラーがある場合は `errors` オブジェクトから取得し、エラーメッセージを表示しています。

## バリデーションの実装

React Hook Form では、各フィールドに対して簡単にバリデーションルールを定義できます。  
以下は、カスタムバリデーションを使った例です。

```jsx
<input
  id="age"
  {...register('age', {
    required: '年齢は必須です',
    validate: (value) => value >= 18 || '18歳以上である必要があります',
  })}
/>
{errors.age && <p>{errors.age.message}</p>}
```

この例では、`age` フィールドが必須であり、かつ入力された値が 18 以上でなければエラーメッセージが表示されます。

## React Hook Form のメリットと注意点

### メリット

- **コード量の削減**  
  複雑なフォームの状態管理やバリデーションをシンプルな記述で実装できます。

- **高いパフォーマンス**  
  不要なレンダリングを抑制するため、大規模なフォームでもパフォーマンスが向上します。

- **柔軟な設計**  
  外部ライブラリやカスタムコンポーネントとの連携もスムーズです。

### 注意点

- **学習曲線**  
  React Hooks や非同期バリデーションに慣れていない場合、初めは理解に時間がかかる可能性があります。

- **複雑なフォームでの管理**  
  フォーム項目が多数ある場合、設計や管理が少し複雑になることも考えられます。

## まとめ

React Hook Form は、React アプリケーションでのフォーム処理を効率化するための強力なツールです。  
シンプルな API と高いパフォーマンス、柔軟なバリデーション機能により、開発者の生産性を向上させることができます。  
ぜひプロジェクトに導入して、その便利さを実感してみてください！

### 参考リンク

- [React Hook Form 公式サイト](https://react-hook-form.com/)
- [React Hook Form GitHub](https://github.com/react-hook-form/react-hook-form)

---

以上、React Hook Form の基本的な使い方と特徴について解説しました。この記事が皆さんの開発の参考になれば幸いです。
【Vue.js】computedとmethodsの違い　~VuexのmapActionsをmethodsに書く理由~

# はじめに
Vuexを使用して実装しているとき、
「`mapGetters`や`mapState`はcomputed内に書き、`mapActions`や`mapMutations`はmethods内に書く」ということを深く理解せずに書いてしまっていました。

その結果、`mapActions`を使用したいとき、どっちに書くのか明確な根拠を持って実装することができませんでした。

その要因として、以下の2点が理解できていないと気づいたので、アウトプットします。
 1. computedとmethodsの違いを明確に理解できていない
 2. VuexのActionsの役割を明確に理解できていない

# computedとmethodsの違い
`computed`は、Vueコンポーネントのデータに基づいて計算された値を提供する「プロパティ」で、`methods`はVueコンポーネント内で定義される「関数」です。

大きな違いは、**キャッシュの有無**です。
以下にそれぞれの役割と特徴の違いを説明します。

:::note info
キャッシュとは、一度計算した結果や取得したデータを一時的に保存しておき、次回以降の処理を高速化する仕組みのこと
:::


## computed（キャッシュあり）
**役割：データの変化に応じて計算された値を提供し、その値をキャッシュする**

computed は、その計算に使用されるデータ（依存関係）を自動的に追跡します。
これには、data、props、他のcomputedプロパティなどが含まれます。

依存するデータが**変わらない限り、その計算結果をキャッシュし、再計算を行いません。**
逆に言うと、**依存するデータが変更されると自動的に再計算**され、Vueのリアクティブシステムに基づき、UIが更新されます。

:::note info
Vue のリアクティブシステムは、データの変更を自動的に検知し、必要な箇所の UI を更新する仕組みです。
data や computed の依存関係を追跡し、変更があった場合のみ再レンダリングを行うため、無駄な処理を最小限に抑えられます。
:::


## methods（キャッシュなし）
**役割：ユーザーの操作やイベントに応じて処理を実行する**

methodsはキャッシュされないため、**呼び出されるたびに実行**されます。
そのため、非同期処理や、DOM操作やAPI通信などの副作用を伴う処理に適しています。

methodsは Vue のリアクティブシステムとは独立して動作するため、computedとは異なり、**依存するデータが変更されても自動的に再計算されることはありません。**

そのため、「あるデータに基づいて新しい値を計算する」だけでなく、イベントの処理、データの取得・更新、その他の動的な操作に利用されます。

## computedとmethodsの関係
具体的なコードを参考にして、computedとmethodsの違いと関係を理解します。

以下の例では、`totalPrice`は`items`に依存しています。
したがって、`items`が変更されない限り、`totalPrice`を参照しても「合計金額を計算中...」は表示されません。
（computedは依存するデータが変わらない限り、その計算結果をキャッシュし、再計算を行わないから！）
しかし、`addItem`メソッドで`items`が変更されると、次に`totalPrice`が参照されたときに再計算が行われ、「合計金額を計算中...」が表示されます。

これがcomputedとmethodsの関係です。

```vue
<template>
  <div>
    <p>合計金額: {{ totalPrice }}</p>
    <button @click="addItem">商品を追加</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { price: 100, quantity: 2 },
        { price: 200, quantity: 1 }
      ]
    };
  },
  computed: {
    totalPrice() {
      console.log("合計金額を計算中...");
      return this.items.reduce((sum, item) => sum + item.price * item.quantity, 0);
    }
  },
  methods: {
    addItem() {
      this.items.push({ price: 150, quantity: 1 });
    }
  }
};
</script>
```

# mapActionsをなぜmethodsに書くのか
computedとmethodsの違いを理解したところで、はじめに触れた「`mapActions`をなぜmethodsに書くのか」を考えます。


まず、**mapActionsの役割**について理解します。
`mapActions`はVuexストアの actions をVueコンポーネントのメソッドとして使えるようにするためのものです。
Vuexの actions は、APIの呼び出しや非同期処理など、副作用を伴う処理を実行するために使用されます。
そのため、computed に actions を入れると、リアクティブなデータの変更時に意図せず実行される可能性があるため、methods に書くのが適切です。


:::note info
mapState / mapGettersについて
ここでは詳しく触れませんが、Vuexのstateはリアクティブ（変更を検知しUIを更新する）なデータであり、gettersはリアクティブなstateに依存する計算値であることから、mapState や mapGetters は computed に書くのが適切です。
computed に書くことで、Vueのリアクティブシステムと連携可能になり、キャッシュされることでパフォーマンスが向上します。
:::

詳しくは以下を参照してください。

https://vuex.vuejs.org/ja/guide/state.html


# 最後に
今回は、`mapActions`どこに書くんだっけ？からはじまった疑問でしたが、この1つの疑問を解消するために理解するべきことが複数ありました。
疑問と向き合ってはじめて、自分が理解できてない点を明確にすることができました。
理解していない点がどんどん見つかるときは心が折れそうになりますが、理解する対象を見つけられた！とポジティブに捉えてひとつずつ丁寧に理解していきたいです。

最後までお読みいただきありがとうございました！

# 参考

https://ja.vuejs.org/guide/essentials/computed.html

https://vuex.vuejs.org/ja/
Python初心者から中級者へ！実際に使って便利だったライブラリ5選

# はじめに
Pythonの魅力の一つは、豊富なライブラリが利用できることです。2025年現在、Pythonはデータ分析、機械学習、Web開発など、様々な分野で活用されています。ここでは、私が実際に利用したことがあるライブラリの中から、特におすすめ5つを紹介します。

## 1. NumPy

NumPyは数値計算や配列操作に特化したライブラリです。多次元配列の操作に優れており、高速な演算処理が可能です。

- 特徴：
  - 効率的な数値データの操作
  - 多次元配列オブジェクトの提供
  - 科学計算、データ分析、機械学習に不可欠

<INS>詳細は以下のサイトをご覧ください。</INS>

https://www.kikagaku.co.jp/kikagaku-blog/numpy-base/

## 2. Pandas

Pandasはデータ分析を効率的に行うためのライブラリです。

- 特徴：
  - DataFrame形式でのデータ操作
  - データの読み込み、整理、分析が容易
  - 欠損データの補完や時系列データの操作に強い

<INS>詳細は以下のサイトをご覧ください。</INS>

https://aiacademy.jp/media/?p=152

## 3. Matplotlib

Matplotlibは、Pythonで最も広く使われているデータ可視化ライブラリです。

- 特徴：
  - グラフや図表作成のための豊富な機能
  - 科学技術計算やデータ分析結果の視覚化に最適
  - カスタマイズ性が高い

<INS>詳細は以下のサイトをご覧ください。</INS>

https://qiita.com/Shmwa2/items/8f0d337c0bfb75a8716f

## 4. Scikit-learn

Scikit-learnは、機械学習アルゴリズムを提供する人気のライブラリです。

- 特徴：
  - 幅広い機械学習アルゴリズムをサポート
  - データの前処理から評価まで一貫して扱える
  - 豊富なドキュメントと事例

<INS>詳細は以下のサイトをご覧ください。</INS>

https://qiita.com/Isaka-code/items/07474ff91810320ec79a

## 5. Flask

Flaskは軽量なWebアプリケーションフレームワークです。

- 特徴：
  - シンプルで学習曲線が緩やか
  - 小規模プロジェクトやAPI開発に適している
  - 柔軟性が高く、拡張性も豊富

<INS>詳細は以下のサイトをご覧ください。</INS>


https://aiacademy.jp/media/?p=57

# まとめ
Pythonの豊富なライブラリは、開発効率を大幅に向上させ、データ処理や分析、機械学習、Web開発など多様な分野で活用されています。本記事で紹介したNumPy、Pandas、Matplotlib、Scikit-learn、Flaskは、それぞれ異なる領域をサポートする強力なツールです。興味のある分野から使い始め、実際のプロジェクトに取り入れることで、スキルを着実に向上させていきましょう。最後まで読んでくださり、ありがとうございました。もし改善点や質問があれば、ぜひコメントしてください！