OmniAICreator/Qiita-1.07M huggingface dataset:
Pythonで画像内のバーコードやQRコードを読み取る方法

倉庫管理、配送追跡、チケット認識などの業務シーンにおいて、画像からバーコードやQRコードの情報を読み取ることは非常に一般的です。従来の手入力に比べて、Pythonを用いて画像からコードを自動で読み取ることで、作業効率を大幅に向上させ、入力ミスのリスクも軽減できます。

本記事では、[Free Spire.Barcode for Python](https://jp.e-iceblue.com/introduce/introduce-free-barcode-for-python.html) を使って、画像ファイルからバーコードやQRコードをスキャンし、そこに含まれるデータを抽出する方法をご紹介します。

- 単一のバーコードを含む画像のスキャン
- 複数のバーコードを含む画像のスキャン

ライブラリのインストール：
```bash
pip install spire.barcode.free
````

## Pythonで画像内の単一バーコードを読み取る

画像にバーコードまたはQRコードが1つだけ含まれている場合は、`BarcodeScanner.ScanOneFile()` メソッドを使用して簡単にデータを取得できます。基本的な手順は以下のとおりです：

1. 必要なモジュールをインポート
2. スキャンメソッドを使って画像を読み込む
3. 結果を出力する

**コード例：**

```python
from spire.barcode import *

# 単一のバーコードが含まれる画像ファイルをスキャン
result = BarcodeScanner.ScanOneFile("Code 128.png")

# 読み取り結果を出力
print(result)
```

このコードを実行すると、画像内のバーコードにエンコードされている文字列がコンソールに出力されます。

バーコード画像：
![Code128.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/31376bb4-e870-4f48-90ff-2edf98410844.png)

出力結果：
![2025-05-16_180117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/89731882-5dcd-4fb2-9dd3-867f1ccc718b.png)

## 複数バーコードを含む画像のスキャン

画像内に複数のバーコードが含まれている場合は、`BarcodeScanner.ScanFile()` メソッドを使うことで、すべてのバーコードを一括で認識し、それぞれの結果をリストとして取得できます。

**コード例：**

```python
from spire.barcode import *

# 複数のバーコードが含まれる画像をスキャン
results = BarcodeScanner.ScanFile("Image.png")

# 各バーコードの内容を順に出力
for index, item in enumerate(results):
    print(f"{index + 1}つ目のバーコード内容：{item}")
```

この方法は、帳票やラベルなどに複数のバーコードがある場合や、大量の画像から一括でデータ抽出を行いたいときに非常に有効です。全てのバーコードを自動的に読み取り、効率的に処理できます。

## まとめ

この記事で紹介したように、PythonとSpire.Barcode for Pythonを使えば、画像からバーコードやQRコードを簡単にスキャンしてデータを取得することが可能です。コードの生成と認識の両機能を組み合わせることで、物流、販売、在庫、帳票処理など多様な場面において、自動化されたデータ処理ワークフローを構築できます。

さらに詳しい機能やAPIの使用方法については、[公式ドキュメント](https://jp.e-iceblue.com/introduce/spire-barcode-for-python.html)をご参照ください。
showPopover() にポジショニングアンカー要素を渡す

`popoverElement.showPopover({source: AnchorElement})`とすると渡せるようです。たとえば：

<p class="codepen" data-height="300" data-default-tab="result" data-slug-hash="dPPrmxP" data-pen-title="showPopover() にアンカー要素を渡す" data-user="lhankor_mhy" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/lhankor_mhy/pen/dPPrmxP">
  showPopover() にアンカー要素を渡す</a> by lhankor_mhy (<a href="https://codepen.io/lhankor_mhy">@lhankor_mhy</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://public.codepenassets.com/embed/index.js"></script>

最小の数値の下にポップオーバーを表示します。

```js
document.querySelectorAll('input[type="number"]').forEach(input => {
    input.addEventListener('change', () => {
        const target = [...document.querySelectorAll('input[type="number"]')].reduce(
            (min, input) => Number(min.value) <= Number(input.value) ? min : input
        );
        document.querySelector('dialog').showPopover({ source: target });
    });
});
```
Pythonでバーコード画像を生成する方法

自動化された生産ライン、物流管理、スーパーマーケットのシステムなど、日常の業務においてバーコードはデータの高速読み取りと追跡を可能にする重要な手段です。手動でデザインする方法に比べ、Pythonを使ってバーコード画像を生成することで、効率が大幅に向上し、大量処理にも対応できます。

本記事では、Pythonを使用してバーコードを生成する方法を紹介し、バーコードの種類やエンコードする内容、スタイルの設定、画像として保存する手順を実際のコードとともに解説します。

- Pythonで指定タイプのバーコード画像を生成
- 複数のバーコードを一括で生成
- 対応しているバーコードタイプの紹介

使用ライブラリ： [https://jp.e-iceblue.com/introduce/introduce-free-barcode-for-python.html)  
インストールコマンド：`pip install spire.barcode.free`

## Pythonで指定タイプのバーコードを生成する

このライブラリでは、Code 128 や UPC などさまざまなバーコードタイプを生成できます。ここでは、Code 128 を例に説明します。Code 128 は高密度な一次元バーコードで、ASCII 全文字に対応しており、在庫管理や配送番号のエンコードに最適です。

バーコードを生成する基本手順は以下の通りです：

1. 必要なモジュールをインポート
2. `BarcodeSettings()`オブジェクトでバーコードのタイプや内容を設定
3. `BarCodeGenerator()`インスタンスで画像を生成
4. PNG画像として保存

**コード例：**
```python
from spire.barcode import BarcodeSettings, BarCodeType, BarCodeGenerator, Code128SetMode, FontStyle, Color

# バーコードの設定を初期化
settings = BarcodeSettings()
settings.Type = BarCodeType.Code128            # バーコードタイプの設定
settings.Data = "ABC123456789"                 # エンコードするデータ
settings.Code128SetMode = Code128SetMode.Auto  # 自動文字セットを使用
settings.ShowTextOnBottom = True               # 下部にテキストを表示
settings.BottomText = "Code 128 サンプル"       # 下部テキストの設定
settings.SetTextFont("Arial", 12.0, FontStyle.Regular)
settings.ShowBottomText = True
settings.BackColor = Color.get_Beige()         # 背景色を設定

# バーコード画像の生成
generator = BarCodeGenerator(settings)
barcode_image = generator.GenerateImage()

# PNG形式で保存
with open("output/code128.png", "wb") as f:
    f.write(barcode_image)
```

生成されるイメージの一例：
![Code128.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/53bf3df0-89b5-4e6c-83c2-1050e7b26846.png)

## 複数のバーコードを一括生成する

商品や注文ごとに固有のバーコードを生成したい場合など、一度に多数のバーコードを作成する必要がある場面があります。以下の例では、ループ処理を使って複数のバーコードを一括生成する方法を紹介します。

```python
from spire.barcode import BarcodeSettings, BarCodeType, BarCodeGenerator

# エンコード対象のデータリスト
barcode_list = ["ITEM001", "ITEM002", "ITEM003"]

# 各データに対してバーコードを生成
for data in barcode_list:
    settings = BarcodeSettings()
    settings.Type = BarCodeType.Code39  # 必要に応じて他のタイプに変更可
    settings.Data = data

    generator = BarCodeGenerator(settings)
    barcode_image = generator.GenerateImage()

    with open(f"output/{data}.png", "wb") as f:
        f.write(barcode_image)
```

各データに対してPNG形式のバーコード画像が自動生成され、ファイル名も自動で付けられます。大量の識別ラベル作成などに最適です。

## 対応しているバーコードタイプ

Spire.Barcode for Python は、一次元バーコードから二次元コード、郵便コードまで幅広く対応しています。

* **一次元バーコード（1D）**：Code 128、Code 39、EAN-13、UPC-A、Codabar など
* **二次元コード（2D）**：QR Code、DataMatrix、PDF417、Aztec など
* **郵便コード・スタック型コード** もサポート

詳細は[公式ドキュメント](https://jp.e-iceblue.com/introduce/spire-barcode-for-python.html)をご確認ください。

---

このように、Pythonを使えばバーコード生成機能を柔軟にプロジェクトへ統合でき、バッチ処理、自動ラベル生成、個別カスタマイズに対応できます。小規模なスクリプトから大規模システムへの導入まで、**Spire.Barcode for Python** は高品質で使いやすいバーコードソリューションを提供します。
SSL証明書の形式変換：CSRバンドルからPFXファイル

SSL証明書をインストールする際、Linux系サーバでは `.crt`（証明書）や `.key`（秘密鍵）形式が一般的ですが、Windows/IISや一部クラウドサービス（Azure、AWS ACMなど）では `.pfx` 形式が求められるケースがあります。

## 準備するファイル

PFX形式を生成するには、以下の3つのファイルが必要です：

| ファイル名                                  | 役割                  |
| -------------------------------------- | ------------------- |
| `your_domain.crt`                      | サーバ証明書（CAから発行されたもの） |
| `your_domain.key`                      | 秘密鍵（CSR作成時に生成したもの）  |
| `intermediate.crt` または `ca-bundle.crt` | 中間CA証明書（CAが提供）      |



## OpenSSLでの変換コマンド

```bash
openssl pkcs12 -export \
  -out your_domain.pfx \
  -inkey your_domain.key \
  -in your_domain.crt \
  -certfile intermediate.crt
```

### 各オプションの意味

* `-export`: PFX形式で出力する
* `-out`: 出力先ファイル名（PFXファイル）
* `-inkey`: 秘密鍵ファイル
* `-in`: サーバ証明書
* `-certfile`: 中間CA証明書（バンドル）


## 変換後の用途例

* Windowsサーバ（IIS）でのSSL設定
* Azure App Serviceでのカスタムドメイン証明書設定
* AWS Certificate Manager（インポート型）での利用
2025/05/12 〜 2025/05/16 振り返り

## はじめに
こんにちは。
@hayatohanaoka です
今週も個人の振り返りを行っていこうと思います。
個人的に、今週はとても悔いが残る週だったので、来週の自分がより良い動きを取れるように生かしたいと思っています。

## 今週の行動
### 先週のアクション
:::note info
よりシンプルで良い設計や実装が何かを考えるきっかけを失わないために、
ペアチェンジの際に引き継いだ内容の背景や経緯について質問をする。
:::

#### 良かった
- ペアチェンジをしたかどうかに関わらず、ペアの相手に質問を多く出すことができた
    - これにより、これまでより実装や設計に関する内容のキャッチアップを多く行うことができた
- リファクタが多かったので、実装のイメージをすり合わせつつ行うことができた
- 他チームから1週間限定でチームに来てくれた人がいて、その人にコンテキストを説明したり、逆に説明を受けて質問をすることができた

#### 伸び代
- 実装のイメージについて質問をして解像度は上げたものの、実際の作業になると理解しきれていないことに気づき、再度確認を行ってしまうことがあった
- リファクタそのものに時間がかかってしまい、本筋の開発の時間が少し圧迫されてしまった
- 新しい実装を行う際に必要なロジックで、既存の実装を使いまわせたにも関わらず、新規ロジックを実装してしまった
    - それにより手戻りが発生し、チームがアジャイルに動けない状況を作り出してしまった

### 何が問題だったのか
- そもそも既存の実装の詳細を把握できていない
    - 実装に入る際、使いまわせそうなものはあるのか？と探すことが必要
- 安易に新しい実装を行おうとしてしまう視野の狭さ
    - 新規の実装で既存のものは安易に使えないという先入観
        - 一覧と詳細の画面で使うメソッドは異なる **だろう**
        - 引数の型が異なるからこれは使えない **だろう**
- 実装の際にすぐにコードを書き始めがち
    - データフローや簡単なアーキテクチャ図を書いて、「どのメソッドを使おうか」などを考える時間を設ける

### 来週のアクション
自身の技術レベルの低さのせいもあるが、そもそも安直に手を動かしてしまったことを今週の反省点とし、以下のアクションを行います。
:::note info
設計や実装について考える時、既存か新規かに関わらず自分の理解を図に起こし、ペア相手にフィードバックをもらう
:::
Smash Balloon の接続で「400 session invalid」になった時にやったこと

WordPressにInstagramのフィードを載せるのに便利な『Smash Balloon Social Photo Feed』。

https://ja.wordpress.org/plugins/instagram-feed/

時々、インスタ側のAPI仕様変更で、再接続が必要になることがあるんですけど（こまめにアプデしようね）
今回はその再接続の際に困ったことが起きて、色々調べたりやってみた結果なんとかなったよ、という話です。

## やりたいこと
Smash Ballonにアカウントを再接続したい。

2024年の12月に『Instagram Basic Display API』が廃止になったタイミングで、接続が切れてしまったのを放置してまして。今頃（2025年5月）になって再接続しようとした感じです。

## 起きている問題
再接続をしようとすると、インスタ側のページに遷移する途中で「400 session invalid」だけが表示され、にっちもさっちもいかなくなり、接続が完了できない。

## やったこと
色々調べても「プロアカウントにしよう」とか「最新バージョンにアップデートしよう」とかばかりで、全部やってるんだけどなぁ、の状態。
アカウントも元々プロアカウントだったし。

アカウントの設定なんかが原因の場合もあるようで、そっちも調べたけど特に問題なし。

じゃあサーバーの問題か？
ということで、公開サイトとは別のサーバーにつくっておいたテストサイトで試しに再接続をしてみたところ、あっさり再接続できた！

### テストサイトで再接続したフィード設定をインポート

Smash Balloonは、別サイトで作ったフィード設定をエクスポート＆インポートできる機能があります。
ためしにテストサイトのフィード設定をエクスポートし、公開サイトのほうにインポートしたところ、再接続された状態になりました。

表示周りも問題なく、最新の投稿が表示されるようになり、ひとまずこれで解決？としていいのかな、という感じです。

## 原因は？
やっぱり、公開サイトで使っていたサーバーですかねぇ？

テストサイトはさくらのレンタルサーバーで、公開サイトはロリポップのLiteSpeedサーバーでした。
LiteSpeedサーバーはキャッシュやセキュリティ周りが強いみたいなので、もしかしたらその辺で画面遷移中に弾かれた→400 session invalid となったのかなぁと。

根本的な解決というわけではないのですが、私はこんな感じで対応しましたよ、という参考例の一つとして記事にしておきます。
C#エンジニアが知識ゼロから10時間でAWS+Next.jsのWebサイトを公開してみた話


### はじめに

こんにちは。普段はC++やC#を使って開発をしているエンジニアです。業務経験は5年以上ありますが、Webに関しては完全に未経験でした。

そんな自分が、**わずか10時間でWebサイトを公開する**という無謀な挑戦をしました。
きっかけは単純で、「フリーランスならブログくらい持っていたほうがいいよな」と思ったからです。

この記事では、**どんな技術を選び、何に苦戦し、何を学んだか**を記録として残しておきます。
同じように「Web触ったことないけど、やってみたい」と思っている方の参考になれば幸いです。

今回作成したWebサイトは以下のURLからご覧いただけます。
https://bamba-news.com/

---

### 準備編：まず何から始めたか

Webについて完全に知識ゼロだったので、**最初から最後までChatGPTに質問しまくる**というスタイルで進めました。
検索も多少はしましたが、基本的には会話ベースで疑問を潰していくやり方が性に合っていたようです。

#### 技術の選定

以下の方針で技術を決めました：

* **将来的に仕事でも使えそうな技術を選びたい**
* **レンタルサーバーよりも、せっかくならAWSを触ってみたい**
* **とはいえコストは極力抑えたい**

これらをChatGPTに相談したところ、
「**S3 + CloudFrontで静的サイトをホスティングする**のがコストも安くて手軽」と教えてもらいました。

静的サイトの生成には**Next.js**を使うのが一般的とのことだったので、そこも深く考えずに採用。
最初は「とりあえず記事が書けて、公開できればOK」というシンプルな設計を目指しました。

---

### 実装編：やったこと

#### 開発環境の構築

最初は本当に意味不明でした。Node.js？npm？npx？なにそれ状態。
とはいえここでもChatGPTが大活躍。手取り足取り教えてもらいながら、なんとか**VS Code + Node.js**の環境を構築しました。

#### ページ作成とビルド

記事ページは**Next.js**を使って作成。
ビルドして静的ファイルに変換し、それを**GitHub Actions**で自動デプロイする仕組みにしました。

#### 公開の仕組み

ホスティングは**AWS S3 + CloudFront**。
これもChatGPTに「料金抑えるにはどうするべきか？」と聞きながら構成を決めていきました。

---

### やってみた感想と学び

正直、**めちゃくちゃ楽しかった**です。
普段の業務では「知らないことを一から調べて構築する」みたいな機会が減っていたので、すごく新鮮でした。

ChatGPTがなかったら、多分5〜10倍は時間がかかっていたと思います。
疑問を聞いたら即答してくれるのは、調べもののストレスが一気に減るのでありがたい限りです。

#### C++/C#エンジニア目線での気づき

Web系の技術、とくにJavaScriptやNode.jsまわりは**環境構築がかなり難しい**と感じました。
バージョンの違いによるエラーや、ツール同士の相性など、慣れていないと詰まりやすい印象です。
（Pythonも似たような課題がありますね）

---

### 今後やりたいこと

今後は以下のようなこともやってみたいと思っています：

* 独自ドメインの取得
　→完了
* 広告を貼って収益化
　→審査中

「ブログ記事を書きまくって広告収入が入る」みたいな展開になったら最高ですね。

---

### まとめ

今回、Web完全未経験からたった10時間でサイトを公開するというチャレンジをしてみて、改めて感じたのはこれです：

**「まずやってみること」が何より大事だった。**

AIで生産性が上がるとか、最初は半信半疑でしたが、実際にやってみるとその威力を実感できました。

また、言語や技術スタックに縛られすぎるのではなく、**基本的なプログラミング力があればどんな領域でもそれなりに立ち上がれる**という手応えもありました。

これからもどんどん知らない分野にチャレンジしていきたいと思います。
【未経験】【独学】プログラミング学習２週間目　進捗記録

[現在の学習の進捗]
・プログラミング学習をprogateで始めて２週間が経過
・progateのpythonコースを２周ほど行い、関数やコードなど基本的な知識を軽くさらった程度

[今後の予定]
・なるべく早く長期インターンに参加して、実力を磨きたい。

[疑問]
・どの程度勉強すればインターンに参加できるレベルなのか。とりあえず参加するだけなら、ポートフォリオはpythonのみを使用して作成した簡単なもので良いのか（そもそもpythonだけでつくれるのか）。
IBM DOORS NEXTトライアル環境の使用方法

要求管理ツール DOORS Next ([IBM Engineering Requirements Management DOORS Next](https://www.ibm.com/docs/en/engineering-lifecycle-management-suite/doors-next/7.1.0) ) の評価方法を紹介します。WWWブラウザがあれば、インストールすることなくDOORS Nextを無償で試すことができます。

# DOORS Next、ELMについて
ELM([IBM Engineering Lifecycle Management](https://www.ibm.com/docs/ja/engineering-lifecycle-management-suite/lifecycle-management/7.1.0))は、システムズエンジニアリングやソフトウェアエンジニアリングにて、要求定義から、設計、実装、テストまで、開発のライフサイクル全体を管理する製品です。自動車、航空宇宙、防衛、医療機器、鉄道、原子力発電所の開発などで使用されています。
ELMは、複数のコンポーネントからなり、DOORS Nextは、主に要求管理を提供するコンポーネントです。

# DOORS Next評価環境の利用方法
1.	WWWブラウザにて、下記のWWWサイトを開きます。
[Jazz Community (https://jazz.net/)](https://jazz.net/)[^1]

2. このサイトのUserアカウントが必要です。このアカウントをお持ちではない場合、右上の人マーク ＞ Registerを選択し、アカウントを作成してください。このアカウントは無料で作成できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129990/cefd045b-57c5-475d-8bf4-137ed7a5cd3c.png)

3.	[Start the trial]ボタンをクリックし、下記のTrial ELM 7.1 Releaseボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129990/17082418-ad1c-440c-b361-f7245f0c9ff1.png)
 
4.	プロジェクト名+Project (Requirements Management)のOpen Trialリンクをクリックすると、DOORS Nextを使用することができます。このリンクがない場合は、画面のプロジェクトの作成等の指示に従ってください。

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129990/e3ee3045-3cbf-4db3-a40d-d0085904ad53.png)

5.	ローディング画面が表示され、１，２分経過すると、下記のプロジェクトの設定画面（ELMでは設定画面のことをプロジェクトエリアとよびｍ）が開きます。右上の [プロジェクトの詳細] リンクをクリックするとDOORS Nextの操作画面が開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129990/29d6b197-1c2e-4822-92d1-c68d4fbf1239.png)

--

[^1]: Jazz Community について
[Jazz Community for IBM Engineering Lifecycle Management](https://jazz.net/)は、IBMが開催しているELMの情報交換サイトです。ELMのトライアル版、技術情報、Q&Aなどあります。このサイトにアクセスすためには、無料の[Userアカウントの作成](https://jazz.net/action/register)を実行し、ログインします。
アリババの新しいAIトレーニング方法が検索コストをほぼ90%削減

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/alibabas-new-ai-training-method-cuts-search-costs-by-nearly-90%25_602221?spm=a2c65.11461433.0.0.4ee35355xnGg8q)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# アリババのZEROSEARCHは、APIコストを削減するための2段階シミュレーション戦略を採用

著名な独立評価分析において、Qwen3-235B-A22Bがトップモデルの中で最も手頃な価格で利用可能であると1位にランクインしました。

![1](https://yqintl.alicdn.com/34950e075ad32dcc3d04c87b0196a6d1865da4c4.jpeg)

アリババは、大規模言語モデル（LLMs）を訓練するための革新的な手法である[ZEROSEARCH](https://arxiv.org/pdf/2505.04588)を導入しました。この方法は、AIに検索タスクを教える際のコストを大幅に削減します。この革新的な手法は、商用検索エンジンへの高額なAPI呼び出しを排除し、LLMが検索行動をシミュレートすることを学習することで、訓練費用を約90%削減し、高度なAI検索機能をよりアクセスしやすくします。「LLMが検索エンジンの行動をシミュレートするために必要なコストを大幅に削減したことで、特に中小企業を含む開発者やビジネスが高価な検索エンジンとのやり取りなしに独自の強化学習（RL）フレームワークを独立して開発できるようになります」と、アリババTongyi自然言語処理ラボの責任者である黄飛（Huang Fei）氏は述べています。ZEROSEARCHは、パフォーマンスを損なうことなく、大規模な強化学習技術の民主化にとって重要なマイルストーンです。

## 開発者とビジネスに対する障壁の低減

関連する情報を検索することは、LLMの推論および応答精度を向上させる上で重要です。従来の強化学習（RL）手法では、コストのかかるAPIリクエストを通じて実際の検索エンジンと数十万回のインタラクションを行うことが必要であり、これによりトレーニングが非常に高価になり、拡張性も制限されていました。さらに、検索エンジンから得られる結果の品質の不一致が、トレーニングプロセスの効果に影響を与えることもしばしばありました。

## 検索を効率的かつ安価にシミュレート

これらの課題に対処するため、アリババのZEROSEARCHは、高価なAPI呼び出しを不要にする2段階のシミュレーション戦略を採用しています。

まず、チームは軽量な教師あり微調整を適用し、LLMを検索モジュールに変換しました。このモジュールは、ユーザークエリに対して関連する文書を生成でき、実際の検索エンジンの動作を模倣します。次に、強化学習（RL）フェーズでは、研究者たちはカリキュラムに基づくロールアウト戦略を使用しました。この方法では、シミュレートされた文書の品質を徐々に低下させ、モデルが適応し、継続的にパフォーマンスを向上させるように促します。

テストでは、ZEROSEARCHを使用して訓練されたモデルは、実際の検索エンジンAPIを使用して訓練されたモデルと同等またはそれを上回るパフォーマンスを示しました。例えば、Qwen2.5-7Bの検索モジュールはGoogle検索と同等のパフォーマンスを示し、さらに大きな14BモジュールはGoogleの能力を超えており、トレーニングコストを88%削減しました。

## アリババによるオープンで手頃なAIへの継続的な取り組み

コスト効率の高いトレーニングに加え、アリババはさまざまなサイズ、言語、モダリティの複数のAIモデルをオープンソース化しており、グローバルな開発者がカスタムAIソリューションをコスト効率よく構築することを支援しています。

![2](https://yqintl.alicdn.com/3beecd4360b5d2e59b6227e9f3facdb8eb11b1ed.png)
![3](https://yqintl.alicdn.com/bca9fed41665199ba5199306a0ddcbf1d363a3a4.png)

[Artificial Analysis](https://artificialanalysis.ai/)による独立評価では、アリババの最新LLMである[Qwen3-235B-A22B](https://www.alibabacloud.com/blog/alibaba-introduces-qwen3-setting-new-benchmark-in-open-source-ai-with-hybrid-reasoning_602192)は、総合的な知能（数学、コーディング、推論、科学）部門で5位、そして手頃さの観点で1位にランクされました。これは競合他社よりも大幅に低いコストでの提供を意味します。

[Alibaba Cloud for Generative AI](https://www.alibabacloud.com/en/solutions/generative-ai)についてさらに詳しくお読みください。

この記事は元々[Alizila](https://www.alizila.com/alibabas-new-ai-training-method-heavily-reduces-costs-by-almost-90/)にてCrystal Liuによって執筆されました。
アリババクラウドのAI革命：Mixture of Experts (MoE)、高度な推論モデル、エンドツーエンドのマルチモーダルモデルで前線を進化させる

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/alibaba-clouds-ai-revolution-advancing-the-frontier-with-mixture-of-experts-moe-advanced-reasoning-model-and-end-to-end-multimodal-model_602222?spm=a2c65.11461433.0.0.4ee35355xnGg8q)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# 著者: Kidd Ip

## はじめに
AIのスケーラビリティ、解釈可能性、そしてクロスモーダル統合が競争優位性を決定する時代において、アリババクラウドは4つの革新的なモデルを発表しました：Qwen-Max、QwQ-Plus、QVQ-Max、およびQwen2.5-Omni-7b。これらの進歩は、動的MoEアーキテクチャ、因果推論システム、視覚言語基盤、および統一されたマルチモーダルオーケストレーションの境界を再定義し、アリババをプロダクショングレードのAIインフラストラクチャにおけるリーダーとして確立しています。

## Qwen-Max: 1兆パラメータ効率のためのスパースMoE
Qwen-Maxは、スパースMixture of Experts (MoE) フレームワークを活用して、密なトランスフォーマーモデルの計算効率の低さに対処します。動的なトークンルーティングとエキスパートの専門化を採用することで、以下の点を実現しています：
- **条件付き計算**: 入力ごとに20〜30%のエキスパートのみがアクティブになり、175Bパラメータの密モデルと比較してFLOPsを4倍削減。
- **弾力的なスケーリング**: アリババ独自のPaaSベースの分散フレームワークを通じて、文書要約や多言語翻訳などのNLPタスクに対するリアルタイム推論を可能にする1兆パラメータの学習をサポート。
- **ドメイン固有の最適化**: 金融（例：リスクモデリング）や電子商取引（パーソナライズされた推薦）向けのカスタムエキスパートクラスターで、アリババの内部1兆トークンデータセット上で検証済み。このアーキテクチャは、アルゴリズミックトレーディングやリアルタイム不正検出など、低遅延・高スループットのAIが必要な業界向けに設計されています。

## QwQ-Plus: 企業ロジックのためのハイブリッドニューロシンボリック推論
QwQ-Plusは、トランスフォーマーベースのアテンションとシンボリックなナレッジグラフを統合し、統計的学習と演繹的推論を橋渡しします。主な革新点は次の通りです：
- **因果発見モジュール**: ベイジアン構造学習により、データセット内の潜在変数を特定し、サプライチェーン最適化や臨床試験シミュレーションのための反実仮想分析を改善。
- **数学的定式化**: トランスフォーマー層とSATソルバーを組み合わせたステップワイズの定理証明により、MATHベンチマークで92%の精度を達成。
- **規制遵守**: GDPRや業界固有の規制に準拠した出力を生成するための組み込みロジック制約があり、法的文書分析や監査自動化にとって重要。QwQ-Plusは、医療診断や保険数理モデリングなど、監査可能なロジック駆動型AIに依存する分野を変革する準備ができています。

## QVQ-Max: 階層的アテンションによる視覚言語の連携
QVQ-Maxは、視覚とテキストのセマンティクスを統合するカスケード型エンコーダー・デコーダーアーキテクチャによってマルチモーダル推論を再定義します。技術的な特長は次の通りです：
- **クロスモーダルコントラスティブ事前学習**: 10B以上の画像-テキストペアで訓練され、VQAv2（79.3%の精度）およびScienceQA（91.2%）でSOTAを達成。
- **反復的な視覚チェーンオブ思考**: 空間的アテンションマップを使用した視覚仮説の多段階修正により、放射線画像タスクでのエラー率を34%削減。
- **エッジ展開**: 量子化対応トレーニングにより、NVIDIA A10G GPUで50ms未満のレイテンシを実現し、自動運転車両の知覚や産業品質管理に最適。このモデルの説明可能な視覚推論は、すでにアリババのスマートシティイニシアチブで交通管理やインフラ監視に展開されています。

## Qwen2.5-Omni-7b: 企業AIのための統一マルチモーダルファブリック
Qwen2.5-Omni-7bは、単一の微分可能なグラフ内でテキスト、画像、ビデオ、および構造化データを処理するモダリティ非依存型トランスフォーマーを導入します。主要なブレークスルーには以下が含まれます：
- **動的モダリティルーティング**: 強化学習を介して関連するエンコーダー（例：画像の場合はViT、テキストの場合はT5）を自動選択し、前処理オーバーヘッドを60%削減。
- **企業セキュリティ**: フェデレーテッドラーニングの互換性と、銀行および防衛分野の機密データに対する準同型暗号化のサポート。
- **マルチタスクオーケストレーション**: 翻訳（テキスト）、異常検出（ビデオ）、予測（テーブルデータ）の同時学習により、12の業界ベンチマーク全体で89%の平均精度を達成。このフレームワークは、アリババのスマート製造におけるパートナーシップを推進し、センサーとビジョンの融合分析を通じて予知保全を可能にしています。

## 結論: アリババの産業グレードAIへの青写真
アリババクラウドのQwen大規模言語モデル（LLM）シリーズは、研究中心のAIから企業向けインテリジェンスへのパラダイムシフトを象徴しています。Qwen-MaxのMoE効率、QwQ-Plusの因果的厳密さ、QVQ-Maxの視覚基盤、そしてQwen2.5-Omni-7bのマルチモーダル融合は、産業AIの4本柱であるスケーラビリティ、信頼性、適応性、およびROIに対応しています。組織がパイロットプロジェクトからミッションクリティカルな展開に移行する中、これらのモデルは、半導体製造ラインの最適化からゲノム医療のパーソナライズまで、目的を持ってスケールするAIシステムのテンプレートを提供します。未来は単なる自動化ではなく、知能的にオーケストレーションされているのです！

## 免責事項
ここで述べられている見解は参考用であり、必ずしもアリババクラウドの公式見解を代表するものではありません。
WSL2でGitのブランチ名をプロンプトに表示する方法

## はじめに

WSL2を用いて開発を行っていると、コマンドライン操作を行うことが多くなります。
その際にGitを使用することも頻繁なはずで、Git Bashのように現在のブランチ名がプロンプトに表示されると非常に便利です。

## なぜブランチ名表示が重要か？

Gitを使っていると「今どのブランチで作業しているっけ？」という時間を生みたくありません。
そんな状況だと作業ミスも発生しやすくなります。
しかしながらWSL2のデフォルトプロンプトだとブランチ名などは特に表示されないため、非常に不便ですし、いちいち`git branch`などのコマンドを実行するのはとてもめんどくさいです。

## 背景知識

WSL2では、プロンプトのカスタマイズを行うために、シェルの設定ファイルである`.bashrc`を使用することができます。
このファイルにカスタム設定を追加することで、プロンプトのスタイルや表示を変更できます。
(もちろん、プロンプトのカスタマイズ以外にも、エイリアスの設定や環境変数の定義なども行えます。)

今回はGitの現在のブランチ名を取得する関数を定義し、シェルプロンプトに組み込むことで、ブランチ名が表示されるようにしてみましょう。

## 方法

### ステップ1: `.bashrc`ファイルを編集

まず、WSL2で利用されるホームディレクトリにある`.bashrc`ファイルを編集します。
コマンドを使用して、エディタで該当のファイルを開きます。
自分はVSCodeを使っているので、以下のようにVSCodeで開いています。

```bash
code ~/.bashrc
```

### ステップ2: `.bashrc`にコードを追加

`.bashrc`ファイルに以下のコードを追加します。このコードは、プロンプトに現在のGitブランチを表示するためのものです。

```bash
# color
USER_COLOR="\[\033[1;37m\]"  # white
LOCATION_COLOR="\[\033[1;32m\]"  # green
GIT_BRANCH_COLOR="\[\033[0;33m\]"  # orange
NO_COLOR="\[\033[0m\]"  # No_Color

# git branch
parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

# PS1
PS1="${USER_COLOR}\u ${LOCATION_COLOR}\w${GIT_BRANCH_COLOR}\$(parse_git_branch) ${NO_COLOR}\$ "
```

#### コードの解説

- **カラー設定**: プロンプトの色を指定します。好きに変更してもらって構いません。
  - 参考
    - https://qiita.com/arakaki_tokyo/items/e54d95911ec7a22a7846
    - https://gist.github.com/vratiu/9780109
- **`parse_git_branch`**: 現在のGitブランチを取得するコマンドを実行します。
  - `git branch 2> /dev/null`について:
    - `2> /dev/null`は、「標準エラー出力」を無視するための記述です。Gitリポジトリではないディレクトリで`git branch`を実行すると、エラーメッセージが表示されることがあります。このエラーメッセージは通常画面上には必要ないので、「ブラックホール」とも呼ばれる`/dev/null`にエラーメッセージを送って捨てています。
- **`PS1`**: シェルプロンプトのデザインを設定する変数です。`parse_git_branch`を呼び出し、プロンプトにブランチ名を追加しています。

### ステップ3: 設定を反映

ファイルを保存してエディタを閉じたら、以下のコマンドを実行して設定を反映します。

```bash
source ~/.bashrc
```

これで、新しいプロンプト設定が有効になります。

## まとめ

あくまで今回のカスタムプロンプトの設定は私好みの一例に過ぎないので、みなさんなりのカスタマイズを楽しんでみてください。(もしよかったらコメントなどで教えてもらえると嬉しいです！)
アリババ、ビデオ作成および編集のためのオープンソースモデルを紹介

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/alibaba-introduces-open-source-model-for-video-creation-and-editing_602226?spm=a2c65.11461433.0.0.4ee35355xnGg8q)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# アリババ、最新のオープンソース動画生成・編集モデル「Wan 2.1-VACE」を発表

中国・杭州、2025年5月15日 — アリババは、最新のオープンソース動画生成および編集モデル「Wan 2.1-VACE (Video All-in-one Creation and Editing)」を公開しました。この革新的なツールは、複数の動画処理機能を1つのモデルに統合し、動画制作プロセスを合理化することで効率と生産性を向上させます。  
[https://video-intl.alicdn.com/2025/PR/VACE%20Release.mp4](https://video-intl.alicdn.com/2025/PR/VACE%20Release.mp4)

アリババの動画生成大規模モデル「Wan2.1シリーズ」の一環として、VACEは業界初のオープンソースモデルであり、さまざまな動画生成および編集タスクに統一的なソリューションを提供します。Wan2.1-VACEは、テキスト、画像、動画など多様なモーダル入力をサポートする動画生成を行いながら、クリエイターに包括的な動画編集機能を提供します。これらの編集機能には、画像やフレームの参照、動画の再描画、動画内の選択範囲の変更、時空間拡張が含まれており、これらすべてによりさまざまなタスクを柔軟に組み合わせて創造性を高めることができます。

この高度なツールを使用することで、ユーザーは画像サンプルに基づいて特定の相互作用を持つ主体を含む動画を生成したり、静止画像に自然な動き効果を追加して命を吹き込んだりすることができます。また、ポーズ転送、モーション制御、深度制御、再着色などの高度な動画再描画機能も楽しめます。さらに、周囲に影響を与えることなく、動画の特定部分に追加、修正、または削除を行うことも可能です。動画の境界を拡張しながら、コンテンツをインテリジェントに補完して視覚体験を豊かにすることもサポートしています。

オールインワン型のAIモデルであるWan2.1-VACEは、比類のない汎用性を提供し、ユーザーが複数の機能をシームレスに組み合わせ、革新的な可能性を引き出せるようにします。ユーザーは静止画像を動画に変換しつつ、指定された運動軌跡に基づいて物体の動きを制御できます。また、指定された参照を使ってキャラクターや物体をシームレスに置き換えたり、参照キャラクターをアニメ化したり、ポーズを制御したり、縦型の画像を水平方向に拡張して新しい要素を追加しながら横長の動画を作成することも可能です。

## 革新的な技術
![O1CN01aUJ8D51N3v5zvDAgV_!!6000000001515-](https://img.alicdn.com/imgextra/i2/O1CN01aUJ8D51N3v5zvDAgV_!!6000000001515-2-tps-975-528.png)

Wan2.1-VACEは、さまざまな動画編集タスクのニーズを考慮して設計および構築されています。その統一インターフェース「Video Condition Unit (VCU)」は、テキスト、画像、動画、マスクなどの多様なモーダル入力に対応した統一処理をサポートします。このモデルは、Context Adapter構造を採用しており、時間的および空間的次元の形式化された表現を用いてさまざまなタスクコンセプトを注入します。この革新的な設計により、幅広い動画合成タスクを柔軟に管理することが可能になります。

モデルアーキテクチャの進歩により、Wan2.1-VACEはソーシャルメディア向け短尺動画の迅速な制作、広告やマーケティング向けのコンテンツ作成、映像制作におけるポストプロダクションや特殊効果処理、教育用トレーニング動画の生成など、幅広い分野で活用できます。動画基盤モデルのトレーニングには膨大な計算リソースと高品質な学習データが必要です。オープンアクセスにより、より多くの企業がAIを活用するための障壁が低くなり、自社のニーズに応じた高品質なビジュアルコンテンツを迅速かつコスト効率よく作成できるようになります。

アリババは、Wan2.1-VACEモデルを140億(B)パラメータ版と13億(B)パラメータ版の2種類でオープンソース化しています。これらのモデルは、[Hugging Face](https://huggingface.co/Wan-AI/Wan2.1-VACE-1.3B)、[GitHub](https://github.com/Wan-Video/Wan2.1)、およびアリババクラウドのオープンソースコミュニティである[ModelScope](https://www.modelscope.cn/models/Wan-AI/Wan2.1-VACE-14B)から無料でダウンロードできます。

主要なグローバルテック企業の中でも初期に自社開発の大規模AIモデルをオープンソース化した企業の一つであるアリババは、2025年2月に4つのWan2.1モデルをオープンソース化し、先月には開始フレームと終了フレームを指定して動画生成をサポートするモデルを公開しました。これまでに、これらのモデルはHugging FaceとModelScopeで330万回以上のダウンロードを記録しています。
アリババが成長の勢いを加速させ、株主還元を強化

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/alibaba-accelerates-growth-momentum-enhances-shareholder-returns_602232?spm=a2c65.11461433.0.0.4ee35355xnGg8q)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# 「AI + Cloud」は新たな長期成長エンジン、AI関連製品の収益が7四半期連続で前年比3桁成長を記録

株主へのコミットメントを履行し、46億米ドルの配当と発行済み株式の5.1%の純減少を達成

アリババグループは、2024年3月31日を終了する四半期において、コアビジネス全体で持続的な収益加速を報告しました。グループ全体の四半期収益は前年同期比7%増加し、これは強力なAI需要と中国のEコマースにおける堅調な収益化に牽引されたものです。また、調整後のEBITAは36%増加しました。Cloud Intelligence Groupの収益は前年同期比18%増加し、AI関連製品の強い需要に支えられ、これで7四半期連続して収益が前年比3桁の成長を遂げました。Taobao and Tmall Group (TTG) は顧客管理収益が12%増加し、国際Eコマース事業セグメントは22%の収益成長を達成しました。「今四半期および通年の結果は、『ユーザー第一、AI駆動』という戦略の継続的な効果を示しており、コアビジネスの成長は引き続き加速しています」とアリババグループの最高経営責任者（CEO）であるEddie Wuは述べています。同社はさらに、2025会計年度を通じて株主還元への取り組みを強化し、165億米ドルを株主に還元します。これには、119億米ドルの自社株買いによる発行済み株式の5.1%の純減少と、大幅に増加した総額46億米ドルの配当支払いが含まれます。

## 強力なAI需要がクラウドの勢いを牽引

Cloud Intelligence Groupはこの四半期、収益が18%成長し、3,012.7億元（41億5,200万米ドル）に達しました。これは、パブリッククラウド収益の加速とAI関連製品の採用拡大に支えられたものです。AI関連製品の収益は7四半期連続で前年比3桁の成長を遂げました。インターネット、小売、製造、メディアなど、幅広い業界でアリババの付加価値のある提供がますます採用されています。昨年リリースされたアリババのAIコーディングアシスタント「Lingma」は、企業顧客からの高い支持を受け、堅調な収益成長をもたらしました。「今後も我々はコアビジネスに焦点を当て、『AI + Cloud』を長期的な成長の新たなエンジンとして推進し続けます」とWu氏は述べています。4月には、[Qwen3シリーズ](https://www.alibabacloud.com/blog/alibaba-introduces-qwen3-setting-new-benchmark-in-open-source-ai-with-hybrid-reasoning_602192)をローンチしました。これは最新世代のオープンソースハイブリッド推論モデルで、迅速で直接的な応答と高度な思考チェーン推論を組み合わせたものです。Qwenモデルファミリーは現在、全世界で3億ダウンロードを超え、10万以上の派生モデルがグローバルなオープンソースコミュニティによって開発され、スタートアップや企業でのAIイノベーションをサポートしています。

## マーチャントおよびユーザーエクスペリエンスへの投資が堅調なEコマース成長を牽引

Taobao and Tmall Group（TTG）は、もう四半期の堅調な成長を達成し、顧客管理収益が前年同期比12%増加して7,107.7億元（97億9,400万米ドル）となりました。この成長は、ソフトウェアサービス料金の影響とAI搭載マーケティングツール「Quanzhantui」のより広範な導入により改善されたタケレート（取引手数料率）によって支えられました。TTGのユーザー成長とエクスペリエンスへの投資が新しい消費者と注文量の成長を促進しました。アリババの高価値消費者層である88VIP会員数は5,000万人を超え、前年比2桁の成長を遂げ、プレミアム消費者からの高いエンゲージメントを示しています。また、TTGは[Xiaohongshuとのパートナーシップ](https://www.alizila.com/taobao-and-tmall-deepen-partnership-with-xiaohongshu/)を深め、XiaohongshuのコンテンツからTaobaoおよびTmallのストアフロントへの直接リンクを可能にし、シームレスなショッピング体験を提供し、マーチャントにとって新しいトラフィック機会を解禁しました。

## 様々な国際Eコマース事業

アリババインターナショナルデジタルコマースグループ（AIDC）は、この四半期において前年同期比22%の収益成長を達成し、3,357.9億元（46億2,700万米ドル）に達しました。これは主に越境Eコマースの強力なパフォーマンスに牽引されたものです。AIDCは、運営および投資効率を継続的に改善し、損失を縮小しながら事業と製品提供を多様化させ、競争優位性を維持しました。AliExpressとTrendyolは、地元のマーチャントやパートナーと緊密に協力し、ビジネスモデルを地域市場のニーズに合わせることで、製品提供を積極的に多様化させました。今年は2010年にローンチされたAliExpressの15周年にあたります。現在、プラットフォームは200以上の国と地域で1億5,000万人以上の消費者にサービスを提供しています。

この記事はもともと[Alizila](https://www.alizila.com/alibaba-accelerates-growth-momentum-enhances-shareholder-returns/)に掲載され、Alizilaスタッフによって書かれました。
### 注意点：
- リンクについては指定通りそのまま保持しています。
- 専門用語やプロダクト名は翻訳せず、原文のまま表記しています。
ChatGPTで音声入力の録音が認識しない

# どうなった？

* PCのブラウザでChatGPTを使用中、音声入力の録音がまったく認識されない
* 録音ボタンを押すと開始はするが、UIのバーが微動だにせず音声をまったくキャッチしていない様子

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136398/39090197-b6fa-4c5f-9484-1fb510b7a2f8.png)

# 考察

1. **ブラウザにマイクアクセス権限がない？**

   * 検証: Chromeの「設定 > プライバシーとセキュリティ > サイトの設定 > マイク」で権限を確認
       * → 既に付与済み
   
2. **マイク自体が悪い？**

   * 検証: Geminiの音声入力機能で録音を試し、正常に動作することを確認
       * → 他のサイトやChatGPTのリアルタイム会話では問題なく動作
   
3. **ブラウザ固有の問題？**

   * 検証: EdgeとChromeで音声入力テストを実施し、両方で同じ現象を再現
       * → Edge使用時に発生。ChromeやChatGPT公式アプリでも同じ結果

# どうした？

* Windowsのサウンド設定で対象入力デバイスのサンプリングレートを変更

  * 24ビット48000Hz → 24ビット44100Hz

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136398/4eb0f9ca-c059-47b0-88db-cd9e475b8f94.png)


# 結論

* サンプリングレートが高すぎると認識されないらしい

  * 変更前（24ビット48000 Hz）：音声をまったく認識せず
  * 変更後（24ビット44100 Hz）：正常に音声を認識
* リアルタイム会話（ChatGPT公式アプリなど）は高いサンプリングレートでも問題なし
GitHubにコード変更を反映する手順

## ✅ 変更ファイルを確認
```
git status
```
## ✅ 変更をステージング（commitする準備）
```
git add .
```
## ✅ 変更をコミット（説明付きで保存）
```
git commit -m "説明"
```
## ✅ GitHubへプッシュ（アップロード）
```
git push origin main
```
### 🔁 main でなく master を使っている場合もあるので、念のためブランチ名を確認するには以下のコマンド
```
git branch
```

## ✅ エディタを使わず、直接メッセージを修正したいときは：
```
git commit --amend -m "説明を修正しました"
```
【Snowflake】SnowPro Associate: Platform認定資格 について

みなさん、こんにちは！
SnowflakeのSnowPro Associate: Platform認定資格に合格することができたので、その時に学習した方法等を紹介します。
なお、試験のスコアは 925/1000 でした。

## 試験概要
当認定資格は今年(2025年)の2月に開始され、Snowflakeの認定資格の中では最も初学者向けの資格になっています。

公式サイトの試験概要は下記リンク先にあります。
https://learn.snowflake.com/en/certifications/snowpro-platform/?pdf_name=SnowProPlatformStudyGuide

当認定資格は英語版のみ対応しており、日本語版は未対応のようです。
上位試験のSnowPro Core認定資格は日本語版が提供されていますので、当認定資格もいずれは日本語版が提供されるのではと予想しています。

問われる内容としては単純な知識確認のものが多く、Snowflakeの学習を始めたばかりの私にとっては理解を深めるのにとても役立ちました。

試験は選択式の問題(多肢選択含む)が65問出題されました。
全ての問題が採点対象ではないようです。

オンラインでPCから受験することができ、無監督試験なので気楽に受験することができました。
カメラによる監視等もありませんでした。

## 学習内容
主に以下を使用して学習を進めました。

* 書籍「ゼロからのデータ基盤 Snowflake実践ガイド 技術の泉シリーズ」
* 社内のSnowflakeに関するナレッジ
* Udemy講座

それぞれについて簡単に解説します。

* 書籍「ゼロからのデータ基盤 Snowflake実践ガイド 技術の泉シリーズ」について
まずは日本語の書籍で学習したいと思い、こちらの書籍のKindle版を購入しました。
[Amazonリンク](https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E5%9F%BA%E7%9B%A4-Snowflake%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E6%8A%80%E8%A1%93%E3%81%AE%E6%B3%89%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E5%B1%B1%E4%B8%AD-%E9%9B%84%E7%94%9F-ebook/dp/B0CW1BZRZ5/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3OEC6SFOPBZYK&dib=eyJ2IjoiMSJ9.eTbWNodoaoEE1GW2EdOncsgPgMoFHbIJ4WEBKp16oNK0ztrTZeI1bMMT7C7lsnJh441m81iHUeemxtT80qA-IpEkRCL9VGCZxtjvDfh1QRSh8UAmVBL5J8nWW328BU-jHF8H0xUxE2XBZvdjFnR3Vyt7vtVNpEW6R1GMEfoYGgT8chho4KVoItR9oPVYWRvuc9bsXdCiDT5hYdtMO_QmCjoCze1YDlRbTFT1t0c8BiI.VQ2tW-QaMp5XLCr5cXr77CQVCgSACompIT5rhhIAJkU&dib_tag=se&keywords=snowflake&qid=1747281300&s=digital-text&sprefix=snowflake%2Cdigital-text%2C158&sr=1-1)
試験対策用の書籍ではありませんが、Snowflakeやデータ基盤に関する内容があるので、Snowflakeの理解を深めるのにとても役立ちました。


* 社内のSnowflakeに関するナレッジについて
弊社内のSnowflakeの経験があるエンジニアの方がSnowflakeの基本的な操作方法等をまとめたドキュメントをナレッジとして用意していたので、まずはそちらを利用してトライアル環境で基本的な操作を一通り試しました。
私は社内のナレッジを利用しましたが、以下のSnowflake社が提供しているハンズオンを活用するとさらに理解が進むかもしれません。
https://quickstarts.snowflake.com/guide/getting_started_with_snowflake_ja/index.html?index=..%2F..ja


* Udemy講座について
以下リンク先の講座が今回の試験対策用だったこともあり、受講しました。
https://www.udemy.com/course/snowpro-associate-platform-certification-exam
約5時間ほどの動画および65問の模擬試験2回分が含まれていました。
内容は全て英語で提供されていて、動画の字幕は日本語に対応しています。
動画内のスライドの内容は英語のままということもあり、英語の字幕ありで視聴していました。
また、講座内で気になった箇所はトライアル環境で実機確認していました。
模擬試験については1問ずつ回答を確認できるモードも提供されていて、解説も公式マニュアルへのリンク付きで問題ごとに用意されているので、英語である点を除けばとても学習を進めやすかったです。
こちらの模擬問題の正答率がそれぞれ9割を超えるまで繰り返し実施したところで本番試験を受験し、合格することができました。
模擬問題がそのまま出題されるわけではないので、解説やマニュアルの該当箇所の読み込み、および実機での動作確認をお勧めします。

## さいごに
今回はSnowflakeのAssociate資格を受験した時の話を記載させて頂きました。
本記事がお役に立ちましたら幸いです。

## 参考記事
[SnowPro Associate: Platform認定試験 合格体験記](https://zenn.dev/kokisato/articles/c463bc1859f050)
とても詳細に記載されており、当試験に関する情報があまりない中でとても助かりました。
生のマンファをオンラインで翻訳する方法

マンファ（韓国漫画）は世界中で人気を集めています。しかし、多くのマンファは英語版が提供されておらず、韓国語を話せない人にとっては理解が難しいことがあります。幸いなことに、AI Manga Translatorのようなツールが役立ちます。

## AI Manga Translatorとは？

AI Manga Translatorは、高度な光学式文字認識（OCR）技術を使用して、マンファ画像をお好みの言語に翻訳する便利なオンラインツールです。

## AI Manga Translatorの使い方

AI Manga Translatorの使用方法は簡単です。以下の手順に従ってください：

### ステップ1：AI Manga Translatorのウェブサイトにアクセスする

ブラウザを開き、https://aimangatranslator.com/ja にアクセスします。

### ステップ2：マンファ画像をアップロードする

「アップロード」ボタンをクリックし、翻訳したいマンファ画像を選択します。

### ステップ3：言語を選択して翻訳する

アップロード後、希望する翻訳言語を選択し、「翻訳」ボタンをクリックします。

数秒以内に翻訳結果がページに表示され、翻訳されたコンテンツを直接読むことができます。

## ヒント

- AI Manga Translatorは高画質の画像で最も効果を発揮します。画像がぼやけていたり解像度が低かったりすると、翻訳精度に影響する場合があります。
- AI Manga Translatorは英語、中国語、日本語、韓国語、フランス語など、さまざまな言語をサポートしています。
- 翻訳が正しく機能しない場合は、ページを更新するか、画像を再アップロードしてみてください。

## 詳細情報

閲覧リンク：[https://blog.aimangatranslator.com/ja/comic-translator]
BME280の湿度が102%!? センサー換算ミスの実例と正しいスケーリング方法

## はじめに

環境モニタリング用のLoRaデバイスをテストしていたとき、LCDに表示された湿度に違和感がありました。なんと、

```
湿度: 102.4 %RH
```

湿度が100%を超えることは結露など特殊な状況ではありえなくもないのですが、**高湿度時に最大値として 102.4% が表示される**のは何かおかしい…。  
今思えば、102.4%なんて明らかに2^10 = 1024 が絡んでるってわかるのですが、なぜか湿度の％だとそのことに暫く気がつきませんでした。
あるとき、ふと気になって、調べてみると、**BME280センサーの補償演算から換算する際のスケーリングミス**が原因だったことが分かりました。  
この記事ではその内容と、正しい換算方法について解説します。

---

## 症状

* センサーで取得した湿度が **高湿度のとき "102.4 %RH"** と表示される
* センサー値の上限として "1024" が使われている
* 表示形式は `float` ではなく、整数を10で割って表現（例：1024 → 102.4）
* その他の値も、全体的に **実際より 2% ほど高く表示されていた** (結果的に）

---

## 原因：Q22.10形式とスケーリングの誤解

BME280 の湿度出力は、Boschのドキュメントにある通り **Q22.10形式**（固定小数点）です。これはつまり：

> **湿度値 = 出力値 / 1024（単位：%RH）**

したがって、出力値 `47445` は次のように換算されます：

```
湿度 [%RH] = 47445 / 1024 ≒ 46.333 %RH
```

しかし、以下のように `/100` をしていたコードでは：

```c
uint16_t hum = raw_hum / 100; // 誤り
```

最大値 `102400` → `1024` → **"102.4 %"と表示されてしまう**のです。

また、全体的に本来よりも約2%高い湿度が表示される結果となっていました。

この実装は、**Bosch公式サイトで公開されている補正演算コードをそのまま使っている場合に起こりうる現象**です。なぜなら、

* 気温や気圧の出力値は `/100` で正しく換算できる形式
* それに対して湿度だけが **`/1024` という別のスケーリング係数**を使う仕様

つまり、**気温・気圧と同じ感覚で `/1000` にしてしまうと湿度だけがズレる**、という紛らわしさが原因のひとつでもあります。

気温と気圧は**整数**なのに、湿度だけが**固定小数点**だなんて・・・

---

## 修正方法：正しくは `/1024`

正しく換算するには `/1024` でスケーリングする必要があります。
もし 0.1% 単位の整数値（例：562 = 56.2 %RH）として扱いたい場合は、

```c
uint16_t hum10 = (raw_hum * 10) / 1024; // 小数1桁を保持
```

こうすれば、LCDなどへの整数出力もしやすくなります。

---

## Before / After の比較

| 状態    | コード例                           | 表示結果例               |
| ----- | ------------------------------ | ------------------- |
| ❌ 誤実装 | `hum = raw_hum / 100;`         | 最大で 102.4 %RH、高めに出る |
| ✅ 正実装 | `hum = (raw_hum * 10) / 1024;` | 最大で 100.0 %RH、実測値    |

---

## 学びと再発防止のためのチェックリスト

* [x] センサーデータは **必ずデータシートの形式（整数/小数/固定小数点）を確認する**
* [x] `/100` や `*0.01` のような "なんとなくそれっぽい係数" に注意！
* [x] **換算式の単位・ビット数・精度** を明示的にコメントに残す
* [x] センサーからの生データを printf などで **必ず一度ログ表示する**

---

## おわりに

この換算ミス、組み込み開発では意外とあるあるな話です。ADCの値やセンサー出力をそのままスケーリングする際に、**"見た目それっぽい" 値が出る**という落とし穴に気づきにくいんですよね。　　
ただ、今回のような102.4%なんて数値は、組み込みソフトやってたら秒で気が付きそうなので、単に自分がアホだっただけというお話でした。

🎀「あなたの湿度表示が102.4%になっていたら、それはセンサーではなく ”コードが湿気ってる” かも…？」

---

## 参考リンク

* [BME280 Datasheet](https://www.bosch-sensortec.com/products/environmental-sensors/humidity-sensors-bme280/)
* [しゃちらぼブログ Vol.9](https://blog.shachi-lab.com/009_humidity_over100/)（記事元）
プロジェクトマネジメントツールは、組み合わせて使う時代からオールインワンツールを使う時代へ

🧩 はじめに：プロジェクトマネジメントツールの複数ツール組み合わせに限界を感じていませんか？

エンジニアチームやビジネスチームの現場では、プロジェクト管理において次のようなツールの組み合わせが一般的です。

💬 例：「JIRAでタスク管理、Slackで会話、Notionで情報共有」
一見すると便利そうですが、実際には次のような課題に直面することも少なくありません。


💢 よくある組み合わせパターン vs 現場の課題（以下①②③）及び理想的なパターン
（以下X）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4052580/85fca27c-4329-4d4a-a8b9-a5d9661b9e4f.png)


🔍 共通する課題：「情報と作業が分断されやすい」

各ツールにはそれぞれ強みがありますが、「ツール間を横断した情報のつながり」が不十分だと、以下のような問題が発生します。
🔍 ドキュメントややりとりを探すのに時間がかかる
🔁 同じ情報を複数ツールに展開する手間がかかる
❌ 背景や意図が共有されず、属人化・再確認が頻発する


🚀 私たちはどう対応しているか？

このような課題を解消するため、私たちは現在、RISAをベースにしたプロジェクト管理を実践しています。
RISA PMTを選んだ理由は、「コミュニケーションと作業をシームレスに行えること」、そして「誰でも扱いやすい直感的なUIがあること」でした。
実際の運用では、以下のような工夫をしています。


よくある課題

🌀 タスクとチャットが別々のツールに存在し、切り替えの手間があるチケット上にチャット機能があるため、チケット単位でリアルタイムにやりとりが可能
📁 資料やその背景にあるチャットのリンクが散在し、探しにくいチケットとWikiが連携しており、会議や朝会の進行がスムーズ
📊 全体の進捗が把握しづらく、報告や確認に時間がかかるカンバン・ガントチャート・チャットが連携し、進捗や課題をすぐに可視化・調整可能


🎯 まとめ：「ツールを組み合わせる」から「つながりのある管理」へ

各ツールの特長を活かして組み合わせる方法もありますが、コミュニケーションと作業がシームレスに連携された状態でプロジェクト管理を行う効果は非常に大きいと感じています。
私たちがRISA PMTを導入して得られた成果の一部をご紹介します。
・過去のチャットや資料を探す時間が減少
・チーム間での認識のズレが減少
・タスク・チャット・資料が一つの流れで追跡容易化
プロジェクト管理を一つのツールで完結させることが目的ではなく、「分断をどう防ぐか」を意識して設計することが、最終的な生産性の向上とチームの健全性につながると私たちは考えています。


参考）RISA PMTについて
※2025/6頃ティザーWebサイトが完成次第本項目を更新してご共有する予定です。
【学生インターン挑戦記】学務課の依頼に応えて、SPIRALで申請業務をシステム化してみた！

https://www.pi-pe.co.jp/regist/is?SMPFORM=man-lanerf-2473a633d82734eb22aa64cad426ae23&utm_source=pup-qiita&utm_medium=contentlink&utm_campaign=/SPIRAL_internship/items/1ea3e792ae893ff390a1&utm_content=link-top&f000099824=https://qiita.com/SPIRAL_internship/items/1ea3e792ae893ff390a1

---

## はじめに

こんにちは！スパイラル株式会社でインターン中の大学生です。
今回は、**私の大学の「学務課」から受けた業務改善の依頼** に対し、SPIRAL ver.1（以下SPIRAL）を使ってシステム化に挑戦した体験談をお届けします。
実務に近いテーマながら、ローコードツールであるSPIRALを使えば、 **学生でも驚くほどスムーズに業務改善ができた！** という話です。

## この記事はこんな方におすすめ

- 「ローコードって実務でどこまで使えるの？」と気になっている方
- 大学・行政・中小企業などで **申請業務の改善ニーズ** がある方
- SPIRALでの **実践的な業務構築例** を知りたい方

## 課題：煩雑な申請管理に現場が困っていた

ある日、学務課の担当者からこんな相談を受けました。
「授業外活動の申請フォームがいくつもあって、学生も職員も混乱していて…。一元化ってできないかな？」
現状は、Excel・Googleフォームなど複数ツールを並行運用しており、

- 学生：「どのフォーム使えばいいの？」
- 職員：「確認・承認作業にめちゃくちゃ時間かかる…」

という **現場あるあるの課題** が浮き彫りになっていました。

## 工夫：SPIRALでゼロから業務フローを構築

「これはSPIRALの出番だ！」と思った私は、以下のステップで改善に取り組み、プロトタイプを作成しました。

 **1. 現状ヒアリングと業務整理**

- 申請の種類・承認ステップを学務課と洗い出し 
- ユーザー視点・職員視点の両面から要件を整理

**2. SPIRALでフォーム構築とDB連携**

- ドラッグ＆ドロップで申請フォームを作成 
- 送信データはDBに自動登録、重複チェックも追加

**3. ワークフロー＆自動通知設定**

- ステータスに応じて処理を自動分岐 
- 申請者・職員に自動で確認メールが届く設計に

---

（ちなみに使っている開発環境はココから体験できますよ！）

https://www.pi-pe.co.jp/regist/is?SMPFORM=man-lanerf-2473a633d82734eb22aa64cad426ae23&utm_source=pup-qiita&utm_medium=contentlink&utm_campaign=/SPIRAL_internship/items/1ea3e792ae893ff390a1&utm_content=link-middle&f000099824=https://qiita.com/SPIRAL_internship/items/1ea3e792ae893ff390a1

---

## 成果：SPIRALで完成した“実務用ミニシステム”

実際に構築した内容はこちら：

- 用途に応じて変化する「共通申請フォーム」 
- 職員向けログインポータル＆承認画面 
- 自動で分岐・通知されるワークフロー設計 
- 完了後には返信メールで学生へ即時通知

数日で動く仕組みが完成し、 **「これ本当にインターンが作ったの!?」と驚かれました。**

## 実際に作ってみて思ったこと

正直「ローコードって所詮お試しレベルでしょ？」と思っていました。
でもSPIRALは違いました。

- UIが直感的で、非エンジニアの私でもすぐに操作できた 
- データベース連携や通知設定も1つの画面で完結 
-  **「学生でも本物の業務改善ができた」 という実感** が持てました

## おわりに

今回の経験から、「現場の課題」に対して **SPIRALを使えば、非エンジニアでも即戦力になれる** と感じました。
もしあなたの職場や学校でも、「ちょっと不便だけど誰も手をつけられていない」業務があればーー
 **今こそ、SPIRALで動き出すチャンス** かもしれません。

ぜひ一度、SPIRALの無料トライアルで触ってみてください。

---
 
 
私がインターンしているスパイラル株式会社は、ローコードプラットフォーム、SPIRAL ver.1の**トライアルアカウント**を**無償提供**しています。このアカウントの記事でも紹介するように、たくさんの機能ございます。






 
▶︎ フォーム
▶︎ 認証エリア
▶︎ ログイン
▶︎ メール送信
▶︎ カスタムプログラム
 
などの作成できますので、ぜひ試してみてください!!
 
https://www.pi-pe.co.jp/regist/is?SMPFORM=man-lanerf-2473a633d82734eb22aa64cad426ae23&utm_source=pup-qiita&utm_medium=contentlink&utm_campaign=/SPIRAL_internship/items/1ea3e792ae893ff390a1&utm_content=link-bottom&f000099824=https://qiita.com/SPIRAL_internship/items/1ea3e792ae893ff390a1
 
そして、今チームでトライアル登録者向けに、オンボーディングコンテンツを作成しています。**SPIRAL ver.1**にご興味のある方、ぜひこちらもご覧ください👇
 
https://knowledge.spirers.jp/special/detail/11680
自動 連続 ポモドーロタイマー　Tkinter

```php:作れるもん
[TkinterやPyQt]
データ入力ツール：ボタンで面倒な処理を一発実行

家計簿アプリ：支出を自動で整理

通知付きTodoアプリ　
```


```php:
import tkinter as tk
from threading import Thread
import time

class MultiTimer:
    def __init__(self, root):
        self.root = root
        self.root.title("連続タイマー")

        self.label = tk.Label(root, text="停止中", font=("Arial", 18))
        self.label.pack(pady=10)

        self.start_button = tk.Button(root, text="スタート", command=self.start)
        self.start_button.pack(pady=5)

        self.stop_button = tk.Button(root, text="ストップ", command=self.stop)
        self.stop_button.pack(pady=5)

        self.running = False

    def update(self, text):
        self.label.config(text=text)

    def countdown(self, minutes, label):
        for i in range(minutes * 60, -1, -1):
            if not self.running:
                return
            m, s = divmod(i, 60)
            self.update(f"{label}: {m:02d}:{s:02d}")
            time.sleep(1)

    def run_timers(self):
        for i in range(12):
            if not self.running: break
            self.countdown(30, f"作業({i+1}/12)")
            if not self.running: break
            self.countdown(15, f"休憩({i+1}/12)")

        for i in range(10):
            if not self.running: break
            self.countdown(5, f"短作業({i+1}/10)")
            if not self.running: break
            self.countdown(3, f"短休憩({i+1}/10)")

        self.update("終了！")

    def start(self):
        if not self.running:
            self.running = True
            Thread(target=self.run_timers).start()

    def stop(self):
        self.running = False
        self.update("停止中")

root = tk.Tk()
app = MultiTimer(root)
root.mainloop()
```

```ruby:ボタンを押したら、calculate関数が処理されるようセット
feet_entry.focus()
root.bind("<Return>", calculate)
```

https://www.tutorialspoint.com/python/python_gui_programming.htm

https://tkdocs.com/tutorial/index.html
Chromeのイベントがとばなくなってしまうケースの事例

# 再生している時にいろいろな都合でイベントが飛ばなくなる
Netflixとかでもやってるらしいですが、ユーザーの操作がない状態で動画再生とかしつづけた場合、動画のイベントなどがブラウザからとんでこなくなることがあります
(例えばloadeddataとかcanplaythroughとか)
以下は上記の対処例です

# eventがとんでこなくなる理由
- tab sleepしてる
- lockしてる
のとりあえず2つ

# tabがsleepする?
chrome://discards
のページごとのAuto Discardableを無効にする


# Lockを無効にする
https://developer.chrome.com/docs/capabilities/web-apis/wake-lock?hl=ja
このあたりに書いてあるやつです
```javascript
const requestWakeLock = async () => {
  try {
    wakeLock = await navigator.wakeLock.request();
    wakeLock.addEventListener('release', () => {
      console.log('Screen Wake Lock released:', wakeLock.released);
    });
    console.log('Screen Wake Lock released:', wakeLock.released);
  } catch (err) {
    console.error(`${err.name}, ${err.message}`);
  }
};

await requestWakeLock()

const handleVisibilityChange = () => {
      if (document.visibilityState === 'visible') {
        requestWakeLock()
      }
}
document.addEventListener('visibilitychange', handleVisibilityChange)

```
tabを切り替えしたり、browserを最小化したりするとwake lockは解除されてしまうので、そこは考慮します
Microsoft Fabric における Pipeline / Dataflow Gen2 / Notebook の使い分け

Microsoft Fabric を活用してデータ基盤や分析環境を構築する際、

> 「どの方法でデータを取り込めば良いのか？」
> 「Pipeline、Dataflow Gen2、Notebook のどれを使えばいいのか？」

といった悩みを抱える方も多いのではないでしょうか。

本記事では、Microsoft Fabric における代表的な3つのデータ取り込み手段：

- Pipeline（Copy Activity）
- Dataflow Gen2（Power Query ベース）
- Notebook（PySpark 等）

の特徴や使い分けを、**比較表形式**でわかりやすく整理しました。

ユースケースに応じて最適な選択をできるように、**対象ユーザー／スキル／変換の複雑さ／開発インターフェース**などの観点でまとめています。

Fabricをこれから導入しようとしている方、PoCフェーズで手段に迷っている方の参考になれば幸いです 🙌


| 項目 | Pipeline（Copy Activity） | Dataflow Gen2 | Notebook |
|:-----|:--------------------------|:--------------|:---------|
| **主な用途** | データレイク／DWHへの取り込み、軽量ETL | データ整形・変換（データラングリング） | 高度なデータ処理、ML前処理など |
| **対象ユーザー** | データエンジニア、データ統合担当 | ビジネスアナリスト | データサイエンティスト、開発者 |
| **スキルセット** | ETL、SQL、JSON | ETL、M 言語、SQL | Python (PySpark)、Spark SQL、Scala、R |
| **開発インターフェース** | GUI（ウィザード・キャンバス）<br>ノーコード／ローコード | Power Query（GUI）<br>ノーコード／ローコード | ノートブック上でのコード（コード必須） |
| **対応ソース数** | 30以上のコネクタ | 150以上のコネクタ | Spark ライブラリ経由で無数 |
| **対応シンク数** | 18以上のデスティネーション | 少数（Lakehouseテーブルなど） | ほぼ制限なし（Sparkの出力対象） |
| **変換の複雑度** | 低：型変換、列マッピング、階層フラット化など | 中〜高：300以上の関数 | 高：ネイティブSpark処理、外部ライブラリ利用可 |
| **代表的なシナリオ** | オンプレCSV → Lakehouseファイルへの取り込み | Excel/SharePointデータ → Delta変換 | 非構造データ処理、MLと連携した分析処理 |

## ユースケース別おすすめ

| 利用シーン | 推奨手段 |
|:-----------|:----------|
| ファイルのコピーや移行中心の処理 | ✅ Pipeline |
| GUIベースでのデータ前処理や簡易ETL | ✅ Dataflow Gen2 |
| 柔軟なETLや分析処理、機械学習との連携 | ✅ Notebook |
文系からエンジニアへ。1年間のギャップイヤーと就活で得た学び

# はじめに
この記事は、自分が就活を通して考えたこと・行ったことの整理として書いています。現段階の自分がこんな記事を書くのもどうかと感じましたが、同じように文系からエンジニアを目指す誰かの参考になれば嬉しいです。

# プログラミングとの出会いと、ギャップイヤー

:::note 
ここはポエム色が強いので、就活の話のみ見たい人は[こちら](#就活編)
:::


大学では文系の学部に所属していたのですが、ふとしたきっかけでプログラミングに出会いました。最初はものづくりという純粋な楽しさから始まり、そこから少しずつ日常的にコードを書くようになっていきました。

その後「プロダクト作りに没頭できる期間を取りたい」と思うようになり、1年間のギャップイヤーを取ることに決めました。ギャップイヤーを取る不安もありましたが、結果的にこの期間は、自分にとって大きな意味のある時間でした。プロダクト開発に没頭でき、何より「サービスをどう作るか」「どうやってユーザーに届けるか」といったことに真剣に向き合うことができました。

ただ、うまくいかないことも当然多く、特に、プロダクトを多くの人に使ってもらう難しさは痛感しました。
当たり前ですが、作って公開するだけでは届かない。その中でSNSマーケティングなどを通じて認知を広げていく過程を経験し、「良いものを作ること」と同じくらい「認知、マーケティング」も大切だと再認識させられました。

結果的に、この経験が就活の軸になります。

# 就活編

自分の場合は、新卒や微経験での応募だったので、高度な技術力が求められることはあまりありませんでした。その代わりに重視されていたと感じたのは、大きく分けて以下の3つです。

- ミッションや事業内容への共感
- 人柄がその企業にフィットするか
- 一定レベルの技術力

それぞれ具体的に話したいと思います。

## ミッション・事業内容への共感

面接を受ける中で強く感じたのは、***「自分の原体験と、その会社でできることに一貫性を持たせること」*** がとても大事だということです。小さな経験でも構わないので、それがその企業のビジョンや事業内容とどうつながっているのか、自分なりに筋の通った話を持っていると、自然体で話すことができました。
無理して嘘をつかなくていいのは、自分にとっても面接に臨む上での精神的な支えになりました。

## 人柄が企業に合うか

入りたい会社と自分の人柄が合うかは、正直「運」みたいな側面もあるので難しいですが、共通して大事にされていたと感じたのは「素直さ」と「謙虚さ」でした。なので、この点が伝わりさえすれば最低限は大丈夫なのかなと感じます。

また、カジュアル面談をしてくれる会社では、選考に進む前に事業内容や社風について直接話を聞くことができる場合も多かったので、とても参考になります。

## 一定の技術力

技術面では、自分でプロダクトを作ってみることが何よりも効果的だったと思います。特にエンジニア採用では、UIの見た目よりも「どれだけ細かい部分まで気を配れているか」が評価の対象になっていたと感じます。

思いつく範囲になりますが、具体的には以下のような点が話題になりました：

- テスト設計の方針
- CI/CD の活用
- クラウドサービス（例：GCPやAWS）を使った経験
- 技術選定の理由

これらの点に自信を持って話すことができれば、特に評価していただけるのかな？って思います。

また、面接の中で **「公式ドキュメントやGitHubのIssueを読む習慣があること」** も話したところ、評価していただける場面が何度かありました。答えを探すときに、まず一次情報を丁寧に読む姿勢は、意外と見られているのかもしれません。

他にも、これは会社によると思いますが、自分は単に技術を追うだけでなく、「ユーザーにどう価値を届けるか」という視点を個人開発でずっと考えていたので、その話をした際も面白がってくれることがありました。

---
もちろん会社がどこを重視するかは傾斜があると思いますが、面接では以上の3つの点を、自信を持って伝えられる状況になる必要があると感じました。

## 振り返り

### 良かったこと

- 自分で手を動かしてプロダクトを作ったこと
- 自分が実体験として感じた課題に出会えたこと

どれだけ、自分が嘘をつかなくて良い状況になってるかが大切だと感じた。
文系やギャップイヤーを取ったことがマイナスに生じることは覚悟していたが、自分の言葉で話せば納得していただけることが多かった。

### するべきだったこと

- もっとチーム開発の経験（インターンでもハッカソンでもよかった）
- 面接の場数をもっと踏むこと（経験を積めば、次はうまく答えられるようになる）

カジュアル面談なんかも、手間に感じる気がするけど、フラットに会社の説明をしてもらえるし、初めから積極的に行うべきだった。

### あまり意味なかったと感じたこと

- 資格の取得（基本情報技術者、TOEIC 840など）

選考を通してあまり影響してる気はしなかった。書類選考には影響ある？かもだけど分からない。

# 最後に

結果的に、自分は個人開発を通して「マーケティングの難しさと大切さ」を実感した経験から、「Webマーケティングを大衆化する」を掲げる[株式会社ベーシック](https://basicinc.jp/)に内定をいただきました。

ペーペーすぎる段階でこんな偉そうな記事を書くのはどうかとも思いましたが、自分自身の振り返りと、誰かにとっての参考になればと思って書きました。

ここまで読んでくださってありがとうございました！！
このセキュリティグループ使ってるの？

# 前置き
AWSのデフォルトセキュリティグループはインバウンドルールもアウトバウンドルールもフル解放されており、使用しないことが推奨されています。
デフォルトセキュリティグループは削除できない仕様だったはずなので、AWS Configのルールでインバウンドルールを自動削除する設定をするのが望ましいと思います。

# セキュリティグループが実際に使われているかを確認する
AWS CLIでEC2のReadOnly権限があれば、以下コマンドで確認することができます。

```
aws ec2 describe-instances --filters "Name=instance.group-id,Values=sg-xxx" --query "Reservations[*].Instances[*].[InstanceId,Tags[?Key=='Name'].Value|[0]]" --output table
```
※ValuesにはセキュリティグループIDを指定します
Docker × Rails × Copilot デプロイで `lograge_development.log` エラー発生と解決メモ

## 背景

Copilot + Docker + Rails 環境で `./copilot/deploy.sh dev2` を実行した際に、これまで動いていた環境で突然アセットプリコンパイルエラーが発生しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37718/4f4b5e06-9d50-4805-9213-48c0712f795b.png)

---

## エラー内容

```docker
=> ERROR [9/9] RUN bin/rake assets:precompile

Rails Error: Unable to access log file.
Please ensure that /app/log/development.log exists and is writable.

Errno::ENOENT: No such file or directory @ rb_sysopen - /app/log/lograge_development.log

Dockerfile の以下のステップで失敗：

RUN bin/rake assets:precompile
```

---

## 調査
- ソースコード自体には変更がなく、以前は動いていたため、環境依存の問題を疑いました
- エラーメッセージを見ると、lograge_development.log ファイルがなくアクセスできないことが原因のようです

---

## 一時対応（失敗）

Dockerfile に以下の処理を追加して、ログファイルを作成・権限付与しようとしました。

```docker
# Ensure log directory and files exist and are writable
RUN mkdir -p log \
 && touch log/development.log log/lograge_development.log \
 && chmod -R 0664 log
```

しかし、以下のように別のエラーが発生：

mkdir: cannot create directory ‘log’: No space left on device

---

## 原因

ディスク容量不足（**No space left on device**） が原因でした。

Docker Desktop for Mac のディスク使用状況を確認すると、容量が上限に達していました。

---

## 解決策
### 解決策１
不要な Docker イメージとコンテナを削除してディスクを解放：

```zsh
docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

Are you sure you want to continue? [y/N] y
```

```zsh
docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          3         3         929.8MB   0B (0%)
Containers      3         3         1.287kB   0B (0%)
Local Volumes   13        1         1.983GB   1.982GB (99%)
Build Cache     0         0         0B        0B
```

これにより容量が空き、再度デプロイすると正常に通りました。

### 解決策２
Dockerのdiskの制限容量を上げる
【Power Apps】Filter関数を駆使してギャラリーのデータを簡単フィルタリング！

# はじめに
Dataverse や SharePoint リストにある大量のデータを全てアプリ上で表示させようとすると、表示件数の上限にひっかかったり読み込みに時間がかかったりなどの問題があったりしませんか？
Power Apps のギャラリーコントロールでは `Filter` 関数を用いてデータの絞り込みを行うことが可能です。
本記事ではドロップダウンリストや検索ボックスなどを用いてフィルタリングを行う方法について解説をしていきます！

## Filter 関数とは
`Filter` 関数とはデータソースに対して条件を指定し、絞り込みを行う関数のことです。
基本的な構文は以下になります。

```ruby:書き方
Filter(データソース, 条件1, 条件2, ...)
```
+ データソース...検索対象データ (DataverseやSharePointリストなど)
+ 条件　　　　...絞り込みを行う条件を設定します。`=` `>` `<` `And` `Or`などが使用できます。

## 基本的な使い方
**ドロップダウンでカテゴリを選択してフィルタリング**
こちらの `社員名簿テーブル` は `在籍状態` の列が `在籍/退職` のブール値で作られています。
ブール値列や選択肢列の値をフィルタリングしたい場合はドロップダウンを利用するとフィルタリングを行いやすいです。

**【フィルタリング前】**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/5d743523-78d0-44a3-9c64-fad6b81ba144.png)

```ruby:書き方
ギャラリーのItems
Filter(社員名簿テーブル , 在籍情報 = Dropdown1.Selected.Value)

ドロップダウンのItems
Choices('在籍情報 (社員名簿テーブル)')
```

ギャラリーの `Items` に上記の関数を設定すると以下のように動的にフィルターをかけることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/a9b92659-e98b-4a6c-a2c7-e84f815a6925.png)

**And関数を用いて複数条件を設定**
次は `在職中` の `総務部` でフィルタリングをかけてみたいと思います。
```ruby:書き方
Filter(社員名簿テーブル,在籍情報 = Dropdown1.Selected.Value && 部署 ="総務部")
```

**【フィルタリング結果】**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/f063b53b-ac6f-4ba8-aacc-2a224204a6ef.png)

:::note info
今回 `部署` については直接記入していますが `在籍情報` と同様にドロップダウンリストを使用したり、テキストボックスに入力した値を持ってくることも可能です。
:::

## `Filter` と `Lookup` の違いについて
同じテーブルを検索しにいくのでも `Filter` と `Lookup` では用途や返す値が変わってきます。
`Filter` は条件にあてはまるすべてのレコードを取得してテーブル値で返してくれるのに対して `Lookup` は条件に一致した最初のレコードのみを取得する関数となっています。
ギャラリーに表示させるのであれば `Filter` 関数を使用してフォームの編集など単一のレコードを抽出したいのであれば `Lookup` 関数を用いて使い分けてください。

## まとめ
`Filter` 関数では `And` や `Or` などの複数条件をフィルターにすることができるので、条件に合った一覧を表示させやすいです。
また、ドロップダウンや検索ボックス、日付などコントロールと組み合わせることも可能なので柔軟なフィルタリングが可能となります！！
あまりにもデータ数が多すぎると上限にひっかかって全件取得がうまくできなかったりするので、可能な限りフィルターで絞り込んで条件に合ったデータ表示を行っていきましょう！