OmniAICreator/Qiita-1.07M huggingface dataset:
Azure Import/Exportとは？

AZ-104の学習をしていて、思考を整理するために記事として書き記しています。
ご参考になれば幸いです。
# Azure Import/Exportとは？
<a href="https://learn.microsoft.com/ja-jp/azure/import-export/storage-import-export-service">Azure Import/Export</a>は、ディスクドライブを使用して大量のデータを安全かつ迅速にAzure Blob StorageやAzure Filesにインポート・エクスポートできるサービスです。ネットワーク経由でデータを転送する際に時間がかかりすぎる場合や、ネットワーク帯域幅のコストが高すぎる場合に、効率的でコスト削減につながる方法として利用されます。
![宅配.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750668/fad3182f-d492-2b35-35a9-3322e4d13f6a.png)

# Import/Exportの基本的な仕組み
### データ転送の流れ
このサービスでは、ユーザーは自分のディスクドライブを使用するか、Microsoftが提供するAzure Data Box Diskを使ってデータを転送します。Data Box Diskを利用すると、最大40TBのデータを暗号化されたSSDに保存し、Azureデータセンターに送付できます。また、オンプレミス環境からAzureにデータを迅速に移行したり、Azureからデータをエクスポートしてオンプレミスに返送することが可能です。
### Azure Import
データが格納されたディスクをAzureデータセンターに送付し、データを<a href="https://learn.microsoft.com/ja-jp/azure/import-export/storage-import-export-data-to-blobs?tabs=azure-portal-preview">Blob Storage</a>や<a href="https://learn.microsoft.com/ja-jp/azure/import-export/storage-import-export-data-to-files?tabs=azure-portal-preview">Azure Files</a>にコピーします。
![お歳暮渡す.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750668/9641dd07-d283-8c67-628b-6aa0077cb6d9.png)
↑データを格納し送付します。
実際の手順は次の通りです。

- Blob Storage
✔手順 1:ドライブを準備する
✔手順 2:インポート ジョブの作成
✔手順 3: カスタマー マネージド キーを構成する (省略可能)
✔手順 4:ドライブを送付する
✔手順 5: 追跡情報を使用してジョブを更新する
✔手順 6:Azure へのデータのアップロードを確認する

- Azure Files
✔手順 1:ドライブを準備する
✔手順 2:インポート ジョブの作成
✔手順 3: ドライブを Azure データセンターに送付する
✔手順 4: 追跡情報を使用してジョブを更新する
✔手順 5: Azure へのデータのアップロードを確認する

より詳しく知りたい方は<a href="https://learn.microsoft.com/ja-jp/azure/import-export/storage-import-export-data-to-blobs?tabs=azure-portal-preview">公式ドキュメント</a>をご参照ください。

### Azure Export 
空のディスクをAzureに送り、Azureデータセンター側で<a href="https://learn.microsoft.com/ja-jp/azure/import-export/storage-import-export-data-from-blobs?tabs=azure-portal-preview">Azure Blob Storage</a>からデータをディスクに書き込み、ユーザーに返送します。
![手紙渡す.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3750668/7285ff01-a573-8c0b-e359-31a1b182dfbb.png)
↑データを格納せず送付します。
実際の手順は次の通りです。

- Blob Storage
✔手順 1:エクスポート ジョブの作成
✔手順 2:ドライブを送付する
✔手順 3:追跡情報を使用してジョブを更新する
✔手順 4:ディスクを受け取る
✔手順 5:ディスクのロックを解除する

より詳しく知りたい方は<a href="https://learn.microsoft.com/ja-jp/azure/import-export/storage-import-export-data-from-blobs?tabs=azure-portal-preview">公式ドキュメント</a>をご参照ください。

# ポイント
:::note info
データの入ったディスクを送るのがImport、空のディスクを送るのがExportです
:::
:::note info
Blob StorageとAzure Filesにデータを読み込むのがImport、Blob Storageからデータを書き込むのがExportです
:::

# おわりに
今回の記事ではAzure Import/Exportの基本的な流れを記載いたしました。
学習が進みましたら、より細かい内容も追記していこうと思います。
最後までお読みいただきありがとうございました。
間違いなどがございましたら、ご指摘いただけますと幸いです。
生成AI とどう向き合うか

こんにちは、翡翠です。
前回、[生成 AI で僕らのプログラミング勉強はどうなるのか？](https://qiita.com/HIsui0921/items/3708fdb95e263d5fab98)というタイトルで記事を書きました。

前職で教育に関する業界でコンテンツ作成をしていたため、「勉強」について触れましたが、

今回は、ビジネスサイドの人間＆エンジニア目線で「これからの時代の生成AI との向き合い方」について、ポエムを書いていこうと思います。

個人の見解どころか、ポエムなので「翡翠はこんなこと、考えているんだなぁ」くらいに思っていただけると幸いです。
ちなみに生成AI について、肯定的・否定的でもありません。
お仕事で扱うので、勉強しています。

## 急速な進化を遂げた生成AI

2022年11月、ChatGPT が登場してから私たちの生活は劇的に変わりはじめました。当時はまだできなかった作業も、たった 2 年という月日で人類は多くのことを生成AI に任せることができるようになりました。

僕の感覚だと ChatGPT が出た頃は、「そんなの使わなくても Google 先生とプログラミングできるし...」と半年くらい使わなかった記憶があります。
頑なに生成AI を使おうとしない仲間は多くいたと思います。

そんな私たちもいつもまにか、生成AI に取り憑かれていきました（たぶん）。

### なお、インパクトを与える生成AI 技術
今朝、X（旧：Twitter）でも確認しましたが、Claude で DB の設計ができるようになったとか。
まだ情報収集が間に合っていないので、認識が間違っていたらすみません。

プログラミングやアプリケーションの動作の仕組みなどを知らなくても、自然言語だけでかなりイケているアプリケーションが簡単に作成できる時代となりましたね。
きっとエラーが出たり、予期せぬ障害が発生しても生成AI が解決してくれるくらいには高精度になっているのではないかと思います。

私たちエンジニアのみならず、プログラミング経験のない人でも PC 入力さえできればアプリケーションや仕事の効率化ができるようになった時代。

いまでは、エンジニア職でなくとも PC と向き合いながら試行錯誤していることでしょう。

絵がかけなくても画像や動画を生成できる、音楽の知識がなくても楽曲が作成できる、仕事以外の部分でも効果を発揮する生成AI は僕の私生活にも存在しないとやっていけない程度になりました。
相談にも乗ってもらうこともあります。あまりいい返信くれないところが、もどかしいですが。

### 私たちの勉強や仕事はどうなったか

勉強・仕事においては、プロンプトエンジニアリングが一時期必要とされていましたが、どちらかというとどのように会話をして壁打ちして、ものを作っていくのかという過程が重要になった気がします。
入力された文章から意図を汲み取る生成AI の能力が高まったと感じました。

そのため生成AI の誕生から今まで、生成AI とともに仕事や勉強してきた仲間たちは、昨年よりも、先月よりも効率よく開発ができたり勉強が進んだりしてるのではないでしょうか？
一方で技術の進化が速く、新しい機能や仕組みをインプットする量は莫大に増えていったのではないでしょうか？

仕事や作業をしつつ、生成AI の技術動向についていくのはなかなかハードで、全部を把握できている人はいないのでは？と感じます。
もちろん分野別に特化している方は多く拝見しているので、全くいないわけではないと思います。

私たちが生成AI を駆使する能力と、生成AI 自身の能力にこれ以上の差がでると、正直使いこなせる自信はないので、どこかで生成AI との向き合い方を変えなければならない気がします。

## IT や AI とちょっと遠い仲間たち

私たちはもしかしたら、すごく小さなコミュニティにしか目線を向けられていないかもしれません。
当たり前に PC やスマホを使う時代。
と思いきや、意外と PC を持っていない仲間やスマホも連絡手段でしか使用しない人もいます。
お仕事で PC 入力する人もいますが、その範囲で使用できれば問題ないので、それ以上の操作を勉強したり生成AI を使ってみたりする人が少ない事実もあります（僕の友人がソースですが、サンプル数は秘密）。

考えてみたら、幼稚園の先生が生成AI を使いこなせても、お仕事のほとんどが子どもたちと過ごすことが多いので使う場面が今のところ思いつきません。勤務のシフトを作成したり、保護者向けにお手紙を書いたりという場面では使用できそうですが「人と関わるお仕事」では、PC や生成AI を使う場面は少なそうです。

### 情報格差と倫理観

ここで問題となるのが「情報格差」ではないかと思います。
そもそも PC やスマホなどのデジタルデバイスが世の中に登場してから、その言葉が登場したと記憶していますが、さらにその格差は広がってしまったのではないでしょうか？
必死に勉強している人も見ますが、いまの生活に必要がないものを学ぶ意識が生まれるのは必ずしも全員ではないでしょう。

私たちは人間がより便利に、快適に生活できるよう、生成AI を社会実装していこうとしていますが、全員が同じレベルで使いこなすことは難しいと感じます。

このときに、誰がどのようにして彼らのサポートしていくのか、考えていかねばならない課題かもしれません。

また私たちも対象ですが、AI を使うに当たり、正しい倫理観を持って使用していく必要があると思います。当たり前のことのようで、それがすごく難しいわけで。
そもそも正しい倫理観がみな違うので、対立が起きてしまうわけで。
絵師さんや声優さんが、「自分たちのものを学習に使用しないでくれ...」という問題から、幅広く課題が残っているように思えます。

僕のお勤めしている会社では、ディープフェイクを悪用したケースを検出するサービスを提供していますが、このあたりのニュースを調べるだけでも、すでに大きな社会問題となっているケースが多いです。
楽しく使う分にはいいかもしれませんが、その行動が行き過ぎないように注意すべきと感じます。
このあたりの倫理問題は誰が教えてくれるのでしょうか。
きっと自分たちで考えて使い続ける必要があるのではないかと思います。
先人はいないので、私たちが構築していくべき課題かなと考えます。

## 最後に

結局どのように向き合うかのアンサーではありません。
ポエムなので、いまの心境を綴ったまでです。
この記事を書くために、なんと、生成AI は使用していません。
かなり読みづらい部分があると思いますが、ここまで読んでいただきありがとうございます。

僕のブログのモットーは「生成AI は使わず、自分で書ききる」なので、これからも手書きのように心をこめて書いていきたいと思います。

また半年後くらいに、この内容のアップデートができればいいなと思います。
シビックテック　はじめの一歩

この記事は[CivicTech ＆ GovTech Advent Calendar 2024](https://qiita.com/advent-calendar/2024/civictech)の1日目の投稿です。

# 4月に転勤になりました
早速、私事で恐縮ですが、2024年4月に転勤となり、いままで暮らしてきた岐阜を離れ、長崎にやってきました。
2013年頃から岐阜でシビックテックの活動をやってきて、岐阜を暮らしやすくしたいとの思いでいましたが、思わぬ転勤で岐阜の地を離れることになったのです。
長崎は仕事でちょくちょくは来ていましたが、知り合いは全くいない状態でした。そこで、改めて「長崎で暮らしやすく」するにはどうすればいいかと考えました。

# はじめの一歩
これからシビックテックを始めたい、新しい土地にきてどうやって過ごしていけばよいかわからない（→私自身ｗ）のためにこの記事を書いてみようと思いました。

最初に考えたのは、「はじめの一歩」って何だろう？ってことでした。

岐阜でシビックテックをはじめたキッカケは、オープンデータの取り組みに参加していて、そこで作成されたツール群のメンテナンスをしていく受け皿としてCODE for GIFUを作ろうとしたことでした。

そんなキッカケが長崎にも転がっているのだろうか？？？

## わからないことはChatGPTに聴いてみよう

ChatGPTに聴いてみる事にしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151569/a0be3071-353d-1f37-9ed5-9b3441c61d7e.png)


> シビックテックを始めるには、まず地域や社会課題に関心を持つことが大切です。
> 次に、自分のスキル（IT、デザイン、企画など）を確認し、活かせる分野を見つけます。
> 地元のシビックテックコミュニティやハッカソンに参加し、同じ志を持つ仲間とつながりましょう。
> アイデアを出し合い、小規模なプロジェクトから始めて実践を重ねることが重要です。
> また、オープンデータや無料ツールを活用して、社会貢献に役立つ解決策を提案・実現していきましょう。

思っていたより、いい回答がでてきましたwww

# 地域や社会課題に関心を持つことが大切

ChatGPT先生もいっているように、とにかく<b>関心を持つこと</b>がとても大切です。私は社会課題とかはピンとこないのですが、「地域」にはとても興味があります。

長崎の町を歩いていると市電がバンバン走っていたり、昭和のにおいのする喫茶店に行列ができていたり、アーケード商店街で若い方や家族連れの姿を多く見かけたり、普通の居酒屋で出してくれるお刺身がとても美味しかったり、と「何故」こんなに長崎は面白いのかな？と、いうことがあって、改めて長崎でもシビックテックでもっと面白く、暮らしやすくしてみたいと思い始めました。

「シビックテックをやろう」ではなく「地域を面白くしたい」が原動力になりますよね。

# 自分のスキルを確認し、活かせる分野を見つける

これも大事です。いま持っている自分のスキルを再確認しましょう。テクノロジーに関することだけでなく、自分のできる事を洗い出してみるのが肝心です。

私の場合は、以下のようになりました。
- 編み物
- プログラミング（アプリつくる）
- デザインを少し
- 人とのつながりがある
- プロジェクトマネージメント（仕事のスキル）

書き出してみるといろいろできそうでもありますが、できないことがあることも気づくことができます。活かしたい分野としては「編み物」なのですが、それと紐づく次の技術がないとかｗ そもそもシビックテックに関係ないとかｗ

自分がもっていない分野からはじめるのも、新しいスキルを身に着けるという意味ではよいですが、少し時間がかかってきます。まずは自分できる範囲から少しづつ広げていくのが良い方法です。

# 同じ志を持つ仲間とつながりましょう

ChatGPT先生はさらっといってくれていますが、実はこれが一番難しいです。自分が住んでいる地域もしくは周辺地域で活発に活動しているのであればよいのですが、そんな地域が身近にあるかどうかわかりません。

まずはインターネットで検索してみるのですが、[Code for Nagasaki](https://c4nagasaki.org/)のホームページはみつかるのですが、現時点では2020年以降に記事の更新がされてないようです。ただ、独自ドメインをとっているし、ホームページも見られる状態になっているので、誰かが維持しているのはわかります。

アンテナはって情報収集の時間になります。長崎でのイベントをつかむことができれば一番いいですが、もっと範囲を広げてみましょう。九州地区でやっているシビックテックイベント、全国規模でやっているシビックテックイベントに参加してみましょう。

そこで自分が住んでいるところ以外の活動で参考になることがあるかどうかを探します。
運よく参考になる地域の活動が見つかれば、まずはそちらに参加することをお勧めします。

# 小規模なプロジェクトから始めて実践を重ねる

自分の住んでいる地域で3名ぐらい一緒に活動してくれそうな仲間が見つかれば、いよいよプロジェクトの開始です。ここまでくれば、シビックテックの活動をしている実感は得られるでしょう。まずは仲間内の興味ある分野ではじめて、それを専門にやっている関係者、NPO団体、他の地域団体とつながっていきましょう。小さな範囲での成功を意識して取り組むことが大事です。

# 社会貢献に役立つ解決策を提案・実現（？）
CODE for GIFUで10年以上活動してきましたが、社会貢献に役立つ解決策を実現できたことは1,2回ぐらいしかありません。だからといって、活動が全くムダというわけでもありません。
どうしても周囲や社会からは「成果」を見られがちですが、シビックテックにとって<b>「成果」は重要でない</b>のです。
では、何が重要かというと活動に関わってくれる人を増やすことにあります。

# 関心のある人が増えることが重要

シビックテックのはじめの一歩で一番最初に書いた<b>関心を持つこと</b>が大事なのです。例えば、CODE for GIFUでもコロナ感染対策サイトの構築を岐阜県と一緒に連携して実施しました。これは「成果」です。ただ、現在はコロナ感染対策サイトの運用はとまっておりサービスとして継続していません。しかし、岐阜県の情報をオープンデータにしてもらって、アプリケーションを紐づけてサービスを展開できたこと。また、そういったサービスを民間と一緒になって展開できること。に、関心をもってくれる方が増えたことは事実です。

現時点でのメンバーの数を増やすのではなく、活動をつづけていくことで関わりのある人を増やしていくことが大事なのです。関心を持ってくれるだけで、それぞれの人が能動的に動いてくれることができていくからです。

そんな風に長崎でも、シビックテックの活動をつづけていけたらいいなあって考えています。
MASM x86サンプル

# はじめに
先ずCのアセンブリ出力を参考にしてx64版を作り、x86版を作る。

# 環境
- Windows 11 Pro (64bit)
- Visual Studio Community 2022

# VC++

```fig1.c
// cl /MD fig1.c
// cl /c /FAscu fig1.c
#include <windows.h>

const char msg[] = "hello, world\r\n";
#define len 14

static HANDLE hOut;

int main(void)
{
	hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	WriteConsoleA(hOut, msg, len, NULL, NULL);
	ExitProcess(0);
}
```

# MASM(x64)

```dev2.bat
@echo off
set vcdir=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.42.34433
path %path%;%vcdir%\bin\Hostx64\x64
set lib=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x64
prompt $e[33m$p$g$e[m
cmd
```

```fig2.asm
comment *
ml64 /c /Fl fig2.asm
link /subsystem:console /entry:_start fig2
*
includelib kernel32

extern ExitProcess :proc
extern GetStdHandle :proc
extern WriteConsoleA :proc

	.const
_msg	db	'hello, world',0dh,0ah
_len	equ	$ - _msg

	.data?
_hOut	dq	?

	.code
	public _start
_start:
	sub	rsp, 40

	mov	ecx, -11	; STD_OUTPUT_HANDLE
	call	GetStdHandle
	mov	_hOut, rax

	mov	qword ptr [rsp+32], 0
	xor	r9d, r9d
	mov	r8d, _len
	lea	rdx, offset _msg
	mov	rcx, _hOut
	call	WriteConsoleA

	xor	ecx, ecx
	call	ExitProcess

	end
```

# MASM(x86)

```dev3.bat
@echo off
set vcdir=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.42.34433
path %path%;%vcdir%\bin\Hostx64\x86
set lib=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\x86
prompt $e[33m$p$g$e[m
cmd
```

```fig3.asm
comment *
ml /c /Fl /Sa fig3.asm
link /subsystem:console fig3
*
includelib kernel32

	.model flat

ExitProcess proto stdcall, :dword
GetStdHandle proto stdcall, :dword
WriteConsoleA proto stdcall, :ptr, :ptr, :dword, :ptr, :ptr

	.const
_msg	db	'hello, world',0dh,0ah
_len	equ	$ - _msg

	.data?
_hOut	dd	?

	.code
	public _start
_start:
	invoke	GetStdHandle, -11	; STD_OUTPUT_HANDLE
	mov	_hOut, eax
	invoke	WriteConsoleA, _hOut, addr _msg, _len, 0, 0
	invoke	ExitProcess, 0

	end	_start
```

mlに/coffを付け、.386を指定すればMASM32でも作れる。
AI and the Future of Work: Why Human Talent Remains Irreplaceable

Explore the transformative landscape of AI in employment, revealing why human professionals are essential in the age of artificial intelligence.

AI is not a threat to human employment, but a powerful tool for augmentation and innovation. Key insights include:

1. Augmentation, Not Replacement
AI is fundamentally designed to enhance human capabilities, not eliminate workers. Most AI technologies serve as sophisticated assistants that amplify human productivity.

2. Emotional Intelligence and Creativity
Despite technological advances, AI struggles with nuanced emotional intelligence, complex problem-solving, and genuine creativity. Jobs requiring empathy and innovative thinking remain distinctly human domains.

3. Critical Thinking and Contextual Understanding
While AI can process vast amounts of data quickly, human professionals excel at interpreting complex scenarios, understanding subtle contexts, and making judgment calls that require deep emotional and cultural intelligence.

Conclusion
The AI revolution presents an opportunity for professionals to elevate their capabilities, create more meaningful work, and drive unprecedented innovation across industries.
改ページ対応レポートについて

# 最初に
 Power BI カレンダーの12月6日の記事になります。
 
 https://qiita.com/advent-calendar/2024/powerbi
 
# 自己紹介
　 佐賀県の小売業（和服業）で情シスをしています。
　 Power Platformを使って、データを利活用する取り組みを行っています。

https://kn.itmedia.co.jp/kn/articles/2409/27/news070.html


# 内容
 総務よりSNSの登録者数やPower Appsで登録した情報の集計を店舗毎にデータでほしいとの要望があり、
総務の場合、ビジネス分析より店舗評価や他のサービスとの連携多くデータのエクスポート依頼が増えると思い記事にしてみました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2277732/98c883a3-3037-beb6-5441-b3050d583beb.png)


## レポートからのエクスポート

最初に思いつくのはレポート内にテーブル・マトリックスビジュアルやを作成しエクスポートする方法だと思います。
ただエクスポートすることを前提にしていないので、テーブル・マトリックスビジュアルからのエクスポートはあまり望まれた方法ではありません。


## 改ページ対応レポート

### 改ページ対応レポートとは
改ページでのレポートを作成をし、豊富な形式でのデータエクスポート機能を持っているレポートになります。

また改ページ対応レポートは現在プレビュー段階の機能となっています。組織に展開する際はプレビュー段階であることを考慮してください。

https://learn.microsoft.com/ja-jp/power-bi/paginated-reports/web-authoring/paginated-formatted-table


### レポート設定
今回はPower BIサービス側に発行しているレポートのセマンティックモデルを使って、改ページ対応レポートを作成します。

セマンティックモデルの･･･ボタンをクリックし、改ページ対応レポートの作成をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2277732/94db4814-fd6d-e1ed-aa5a-76dad4799f61.png)


### Power BI Report Builderについて

改ページ対応レポートの編集ですが、Power BI Report Builderアプリを使って改ページ対応レポートを作成する方法とPower BIサービス画面から改ページ対応レポートを作成する方法があります。

Power BI Report Builderのアプリを使用する場合には、アプリをダウンロード後、インストールする必要があります。

https://learn.microsoft.com/ja-jp/power-bi/paginated-reports/report-builder-power-bi


今回はPower BIサービス画面からの説明を記載したいと思います。

### Power BIサービス画面からの作成

#### 表示する項目の指定
レポート作成と同様で、データから表示するカラム名とメジャーを選択します。

 
 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2277732/8a149a1a-609f-0944-c720-fdba85ef3ccb.png)



#### ヘッダ名の変更

またヘッダ名を変更する場合には、エディタ画面にて直接ヘッダ名を変更することが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2277732/134d4487-a758-b5f4-4f3b-553ae40bf591.png)

#### 集計行の表示有無

集計行が不要な場合には、表を選択すると、「票の書式」のタグが表示されるので、「集計行を含める」のチェックをはずすと、集計行を外すことができます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2277732/6da80b02-c336-300f-3ad5-19e509f4f055.png)



### 豊富なファイル形式によるエクスポートとレポート購読機能

#### レポートからのエクスポート
ホームタブのエクスポートより、豊富なフォーマット形式にてエクスポートをすることが可能となっています。 


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2277732/8801afd9-ca36-5cf0-b740-de1dfeea9783.png)

#### レポートを購読機能
手動によるエクスポートではなく、定期的にファイルを送ってくださいと言われた場合には「レポートを購読する」にて、スケジュールした日時に指定したをメールにて送ることが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2277732/e5671a59-3a2c-5816-3020-b2e3a6dfc0f9.png)



## まとめ
会社内でPower BIを運用していると、データのエクスポートや印刷の話が出てきます。

どうしてもエクスポート・印刷が必要だった場合には、改ページ対応レポートから出力してもらうようにしてもらうのも一つの方法だと思います。
M5NanoC6、フィボナッチ数列で遊ぶ(UNO R3より52倍速い)


参考

https://ichiken-engineering.com/arduino-uno-r4-minima_k


x 過去ログを見よ
x 引用しました。

いろいろ
    M5NanoC6は、RISC-V、クロック160MHzでほぼシングルCPUため、M5StamS3と比べると遅いと予想されます。


目的
整数のベンチマークする



結果

1回目　なぜかおかしい

![o_coq661.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/71275c18-60b5-a8b0-4ef2-de2666c36241.jpeg)


2回目　DEBUGを外してみる　正しい　(最適化が効いてドコモ値を使っていないからか)

![o_coq662.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/8fed07ff-e4ee-ee90-2738-475774cb42af.jpeg)

3回目　最後の値を出力してみる

```c++

    }
  }
  end_time = millis();
  time = end_time - start_time;
  Serial.print("END Value:");
  Serial.println(x); //最後の値の出力
  Serial.print("StartTime:");



```

たぶん、正しい

![o_coq663.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/b96a5d81-8141-b2a9-71f3-fd6dc63bd7a0.jpeg)


比較　約52倍速い
------------------------


M5NanoC6 約336ms(0.3秒)

Arduino UNO 3 約17542ms(1.8秒)


クロックで10倍、レジスター長で4倍だから、だいたいあっている!!


![o_coq667.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/a3deff43-6d6f-362a-7250-dde9265429f5.jpeg)



プログラム


```c++

//値が100,000を超えるまでのフィボナッチ数列を生成する作業を500,000回繰り返すのに要した時間を計測する。
#define DEBUG 0
void setup() {
  Serial.begin(9600);
  Serial.println();
  Serial.print("START");
  for(int i = 0;i < 9;i++){
    Serial.print('.');
    delay(500);
  }
  Serial.println();
}
void loop() {
  unsigned long x;
  unsigned long prevx;
  unsigned long temp;
  unsigned long start_time, end_time;
  unsigned long time;
  start_time = millis();
  for (unsigned long a = 0; a < 500000; a++) {
    x = 1;
    prevx = 0;
    while (x < 100000) {
      temp = x;
      x = prevx + x;
      prevx = temp;
#if DEBUG
      Serial.println(x);
#endif
    }
  }
  end_time = millis();
  time = end_time - start_time;
  Serial.print("END Value:");
  Serial.println(x); //最後の値の出力
  Serial.print("StartTime:");
  Serial.print(start_time);
  Serial.print(" EndTime:");
  Serial.print(end_time);
  Serial.print(" Time:");
  Serial.println(time);
  delay(1000);  //1秒待機
}


```
`.gitignore` を使ってデータベースの情報を保護する方法(gitHub)



# `.gitignore` を使ってデータベースの情報を保護する方法

### はじめに

GitHubなどのリポジトリにプロジェクトを公開する際、データベースの接続情報（ユーザー名、パスワードなど）が含まれるファイルを誤ってアップロードしてしまうと、大きなセキュリティリスクにつながります。

この記事では、Gitの `.gitignore` を使ってデータベース情報をリポジトリに含めない方法や、クローン時にそれらの情報を保護する方法を解説します。

---

### 1. `.gitignore` とは？

`.gitignore` は、Gitで追跡しないファイルやディレクトリを指定するための設定ファイルです。このファイルに記述された内容は、Gitが管理対象外とみなし、リポジトリにコミットされません。

例えば、以下のようなファイルを `.gitignore` に追加することで、誤って機密情報をアップロードするのを防げます。

---

### 2. `.gitignore` の設定例

#### 例：`.env` ファイルを無視する
データベース情報を環境変数として管理するため、`.env` ファイルを作成し、以下のように設定します。

```plaintext
DB_HOST=localhost
DB_USER=root
DB_PASS=super_secret_password
```

次に、`.gitignore` に以下を追加します。

```plaintext
.env
```

これにより、`.env` ファイルがリポジトリに含まれなくなります。

---

### 3. `.gitignore` を正しく運用するための注意点

#### 1. **すでにコミットされたファイルには効果がない**
`.gitignore` は、新たに追加されるファイルを無視します。すでにコミットされてしまったファイルは履歴から削除する必要があります。

以下のコマンドで履歴から削除できます：
```bash
git rm --cached .env
git commit -m "Remove .env from repository"
git push origin main
```

#### 2. **公開リポジトリでは特に注意**
公開リポジトリでは、間違って機密情報を含めると不特定多数の人に漏洩する可能性があります。リポジトリを公開する前に、`.gitignore` の設定とコミット履歴を必ず確認してください。

---

### 4. その他のセキュリティ対策

#### **環境変数を利用する**
アプリケーションで機密情報を利用する際、環境変数を読み込むようにします。Node.jsの場合、`dotenv` パッケージを使用すると便利です。

```bash
npm install dotenv
```

アプリケーションコード例：
```javascript
require('dotenv').config();

const dbHost = process.env.DB_HOST;
const dbUser = process.env.DB_USER;
const dbPass = process.env.DB_PASS;
```

#### **GitHub Secretsを活用する**
GitHub Actionsを利用する場合、Secrets機能を使って機密情報を管理するのが効果的です。

---

### 5. まとめ

`.gitignore` を正しく設定することで、データベースの情報やその他の機密データをリポジトリに含めずにプロジェクトを公開できます。公開リポジトリでは慎重に管理し、プロジェクトのセキュリティを確保しましょう。

#### **チェックリスト**
- `.gitignore` に機密情報を含むファイルを追加したか？
- すでにコミットされている機密ファイルを削除したか？
- 環境変数を利用しているか？

プロジェクトの安全性を保ちつつ、安心して公開してください！
今年やったことを思い出す- 2024 年のひとりアドベントカレンダー「なんかかく」

2024 年のひとりアドベントカレンダーです。5 年目になりました。ほんとかよ

https://qiita.com/advent-calendar/2020/mba

https://qiita.com/advent-calendar/2021/advent-calendar-delaxe

https://qiita.com/advent-calendar/2022/pineapple

https://qiita.com/advent-calendar/2023/pineapple

## 今年やったことを思い出す

色々やったはずなんですが、目まぐるしすぎて覚えていません。12 月の 25 日間を使って、2024 年を振り返り、まとめていこうと思います (つまりまだまとめています)。

## なんかかく

魔法の言葉、「なんかかく」。

なんかかく、と書いておくと、なんか書ける気になってきます。書ける気になった話をタイトルから書き始めました。

- 1 月の記憶がない
    - 記憶は無いのですが、[唐突に勤怠管理システムが作りたくなった休日 #ChatGPT - Qiita](https://qiita.com/e99h2121/items/ae2743613128bacf7909) を過ごしていたようです。
- 開発論 を真面目に解説した: [「パッケージ開発論」を題材に勉強会をした #設計 - Qiita](https://qiita.com/e99h2121/items/96617b041637e2bd7828)
- 技術書典 16 に出品した: [技術書典 16 に「開発論論」を出してみた #技術書典16 - Qiita](https://qiita.com/e99h2121/items/7b9b66382834c2ad2f14)
- MSMQ を真面目に解説した: [MSMQ のトランザクション メッセージ | Japan Azure Integration Support Blog](https://jpazinteg.github.io/blog/MSMQ/MsmqTransaction/)
- スタッフ エンジニアの道 査読した: [他者への貢献を自己成長につなげられるのが「スタッフエンジニア」なのかな、と思いながら読んだ #ポエム - Qiita](https://qiita.com/e99h2121/items/a26db449c47ab39d1692)
- AZ-204 合格した: [AZ-204 合格まで (2024.05) #AZ-204 - Qiita](https://qiita.com/e99h2121/items/efbc9164bf5276880d9d)
- Qiita 投稿マラソンした: [Qiita 投稿マラソン 2024 またの名を 人はいかにして学びの機会を捻出するか - DevOps 編 開会宣言 #AzureDevOps - Qiita](https://qiita.com/e99h2121/items/02fcccdc257a0c534fff)
- 夏の記憶がない
    - 記憶は無いのですが、[Standard Logic Apps で PowerShell コードの実行 を試す #Azure - Qiita](https://qiita.com/e99h2121/items/5543daf51cd19405b273) など真面目に仕事をしていたようです。
- AZ-400 合格した: [AZ-400 合格まで (2024.09) #AZ-400 - Qiita](https://qiita.com/e99h2121/items/00801184d7309b36b933)
- きのこカンファレンスに手を挙げてみた
    - 手を挙げてみたが採用にいたらなかったので、私も若輩者だなと感じています。笑
- 目標を立てた
- Logic Apps の料金体系を理解するポイントを真面目に解説したりした
    - [従量課金版 Azure Logic Apps の料金体系を理解するポイント | Japan Azure Integration Support Blog](https://jpazinteg.github.io/blog/LogicApps/LogicApps-ConsumptionPricing/)
    - [Logic Apps で日付や時刻を判定してワークフローを制御する (2) - 毎月第 1 月曜日に起動したい | Japan Azure Integration Support Blog](https://jpazinteg.github.io/blog/LogicApps/LogicApps-Functions2/)
- 技術書典 17 に出品した: https://techbookfest.org/product/3wDEC3wq9eN16qPx1jFxCB?productVariantID=jC20rxVN0REyq8MPbyiJty
- Duolingo はじめた。Duolingo はじめました。
- 私はまだまだ英語ができない。うん、できません。
- 走り始めて 1 年経った
- 転職して 2 年経った
- 育児と IT エンジニア業
- やっぱり記憶がない
- AZ-700 合格する
- なんだかんだ仕事した
- 未定、未定、
- 本を書きたい
- 今年やったことを総括する

... 結構色々やったよな。


## とりあえずなんか書きます

羅列してみたら、こんな感じで 25 日分くらい埋まる自信が出てきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93824/12c76874-3d47-d62a-2110-a9875e20005f.png)

今年を振り返る「なんかかく」アドベントカレンダー。

とりあえずなんか書きます！！！
SQLパズル 30 買い物の平均サイクル　解法２の学習メモ

# 概要
SQLパズル　p128 30 買い物の平均サイクル　解法２の学習メモです。
集約関数とグループ化が内容です。

# 要件
ユーザー毎の平均購買間隔(単位は日/件)を求める
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/e6bf2fd0-5d8a-ece0-3471-46d32c176d1c.png)


# SQL

## DDL
```sql
drop table if EXISTS Sales CASCADE;

create Table Sales(
    customer_name char(5) NOT NULL,
    sale_date Date NOT NULL,
    Primary KEY(customer_name, sale_date)
);

INSERT INTO Sales VALUES('Fred', '1994-06-01');
INSERT INTO Sales VALUES('Mary', '1994-06-01');
INSERT INTO Sales VALUES('Bill', '1994-06-01');
INSERT INTO Sales VALUES('Fred', '1994-06-02');
INSERT INTO Sales VALUES('Bill', '1994-06-02');
INSERT INTO Sales VALUES('Bill', '1994-06-03');
INSERT INTO Sales VALUES('Bill', '1994-06-04');
INSERT INTO Sales VALUES('Bill', '1994-06-05');
INSERT INTO Sales VALUES('Bill', '1994-06-06');
INSERT INTO Sales VALUES('Bill', '1994-06-07');
INSERT INTO Sales VALUES('Fred', '1994-06-07');
INSERT INTO Sales VALUES('Mary', '1994-06-08');

```

## 答えのSQL

```sql
-- 30 買い物の平均サイクル　解法２
SELECT customer_name,
		(MAX(sale_date) -  MIN(sale_date)) as dividend_sales,
		(COUNT(*)-1) as divisor_day,
		(MAX(sale_date) -  MIN(sale_date))/(COUNT(*)-1) as avg_sales_per_day
FROM Sales
GROUP BY customer_name
HAVING COUNT(*) > 1;

```

### 部分集合の図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/dd696239-c24d-60dc-04f9-c75044d34601.png)

### Fredの平均購買間隔の場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/bacd2088-4a02-5a24-adac-5f44a4c144d2.png)



# 参考

SQLパズル　p128 30 買い物の平均サイクル

SQLパズル　サポートページ
https://mickindex.sakura.ne.jp/database/db_support_sqlpuzzle.html#LocalLink-p30

達人に学ぶSQL徹底指南書第２版　

github差分
https://github.com/RYA234/SQL_Puzzle_Learning/commit/a6d105b4433fa95dd7c6a7f7c107d338a994503b
【メモ】fstabについて

最近なんかウィンドウズが使えなくなったからlinuxをいじってる
スワップファイルとバインドと設定反映

blkid でUUID確認
sudo systemctl daemon-reload でfstabの更新反映
ls /run/systemd/generator/ に-つなぎで設定ファイルができる
sudo mount -am でマウント


/dev/mmcblk0p  /            ext4    defaults,noatime         0  1
/swap  　　　　 swap         swap    defaults                  0 0
/mnt/kkkk      /home/kkkk   none    defaults,bind,noatime     0 0
PARTUUID=xxxxxxxxx /mnt/kkkk/bbbb/ vfat  nofail,x-systemd.device-timeout=5,defaults,noatime 0 1



参考：インターネット,man
ラベルを複数持つパケットを届ける

# ラベルごとの経路
>パケットの先頭に複数のラベルを追加することによって、`一度に複数のレベルで動作させることができる`。例えば、すでに異なるラベルが付与された大量のパケットが存在し、それらのパケットに、ある宛先へ向かう共通の経路を通過させる必要があるとする`異なるラベルごとに一つずつラベル・スイッチング経路を確立せずとも、単一の経路を確立するだけでこれを実現`できる。

# パケットにラベルのスタックがあり追加、削除される
>すでにラベルを貼られたパケットがこの`経路の始点に到達すると、前面に別のラベルが追加`される。これを`ラベルのスタック`と呼ぶ。最も外側にあるラベルによって、これらの`パケットは同一の経路`へと導かれる。この`ラベルは経路の終点で取り除かれ`、まだ他にもラベルが残されている場合には、そのラベルが現れる。以降のフォワーディングは、このラベルをもとに行われる。

# MPLSヘッダーのSフィールドでラベルがあるかどうか設定される
>Sビットを用いることで、`ラベルを取り除くルーターに、さらなるラベルが残されている`かを知らせることができる。最も下部にあるラベルには１、それ以外のラベルには０が設定される

https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/
【Model Context Protocol】Claude MCPの接続方法(mac)

## MCPとは
Model Context ProtocolはClaudeが開発したLLMアプリケーションと外部データソースおよびツールとのシームレスな統合を可能にするオープンプロトコルです。

実際に使ってみてその凄さに気づいたのですが、API経由とかでなく、直接DBにアクセスができ、自然言語である日本語で、データの中身を確認することができます。これがあるだけで、膨大なデータを簡単に分析することが可能になります。

![317e380d32aa316399029709192f8a32.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142616/d1409c33-bb06-1f58-0185-980cf0b7f0d8.gif)


## MCPの使い方

簡単といっても実際に使うまでにはいくつかステップが必要になるので、順を追って説明します(mac)。

### デスクトップアプリのダウンロード
MCPにはClaudeのデスクトップアプリが必要。以下からダウンロード。
https://claude.ai/download
![スクリーンショット 2024-11-30 4.44.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142616/d95aeec6-5045-7f32-25fa-ad9032f10192.png)



### MCPのチュートリアルへ
以下からMCPのQuickstartを行う
https://modelcontextprotocol.io/quickstart#installing-prerequisites-macos


まずはsqlite3のダウンロードをbrew経由で実施

```
brew install uv git sqlite3
```


完了したら、テーブルの作成を行います。
```
# Create a new SQLite database
sqlite3 ~/test.db <<EOF
CREATE TABLE products (
  id INTEGER PRIMARY KEY,
  name TEXT,
  price REAL
);

INSERT INTO products (name, price) VALUES
  ('ウィジェット', 3000),
  ('ガジェット', 4500),
  ('ギズモ', 6000),
  ('スマートウォッチ', 30000),
  ('ワイヤレスイヤホン', 13500),
  ('ポータブル充電器', 3800),
  ('Bluetoothスピーカー', 12000),
  ('スマホスタンド', 2400),
  ('ノートパソコンスリーブ', 5300),
  ('ミニドローン', 45000),
  ('LEDデスクランプ', 6900),
  ('キーボード', 19500),
  ('マウスパッド', 2000),
  ('USBハブ', 7500),
  ('ウェブカメラ', 10500),
  ('画面保護フィルム', 1500),
  ('旅行用アダプター', 4200),
  ('ゲーミングヘッドセット', 24000),
  ('フィットネストラッカー', 18000),
  ('ポータブルSSD', 27000);
EOF

```

以下のコマンドを叩いて商品データの確認ができればOKです。
```
sqlite3 ~/test.db "SELECT * FROM products;"
```


次にconfigファイルの設定を行います。vscodeやcursorを使っている方は以下のコマンドでファイルを開いてください。
```
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
```

ファイルの中身を以下に変更します。ただし、`YOUR_USERNAME` の部分には自分のmacのユーザー名をいれてください。
```
{
  "mcpServers": {
    "sqlite": {
      "command": "uvx",
      "args": ["mcp-server-sqlite", "--db-path", "/Users/YOUR_USERNAME/test.db"]
    }
  }
}

```

ファイルを保存したら、最初にダウンロードしたClaudeのデスクトップアプリを再起動します。
再起動後、Claudeのメニュー内の`Settings`を選択
![a5a0d49c79f7d3af6628349a3c134a05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142616/b7bd1cc6-2352-844b-5fa4-dbf6eeb0d21c.png)

そうすると、設定画面に入ります。この中のDeveloper項目で、先ほどconfigファイルに追加した`sqlite`の記載が入っていれば準備は完了です。
![スクリーンショット 2024-11-30 4.57.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142616/05e9cf6d-683b-bad2-1492-66851a6d1032.png)


### 確認

Claude側に以下の文言を打ってみてください。
`私のSQLite データベースに接続して、製品と価格を教えてください。`
そうするとポップアップが出てきます。DB操作を行うときは毎回同意のポップアップが表示されるので、許可する場合はAllow、許可しない場合はDenyを選択してください。
あとはMCPが動き、データの分析を行なってくれます。SQL自分で叩かずにやってくれるのは凄いです。
![317e380d32aa316399029709192f8a32.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142616/d1409c33-bb06-1f58-0185-980cf0b7f0d8.gif)


### エラーが発生した場合

うまく接続ができない場合は、以下のコマンドで原因を調査してください。
```
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
```
でてきたエラー文をClaudeやChatGPTに聞けば、大体解決すると思います。
私の場合は、pythonのバージョンが低かったので、バージョンを3.11にアップデートしたら上手く接続できました。本当便利な世の中になりましたね。
入院する時に快適に過ごせるために

# 何てことだ、入院になってしまった！
なんかここ最近身体がだるいなー、そうだ病院行こうみたいな京都に行く感じで2024/11/29にいつものかかりつけに行ったところ｢うちじゃ対処できないから熊本城に行って、入院になるかもねー｣とか言われて、救急外来の紹介所持たされて、｢救急外来の紹介状を持たさせた。たう申すにそれがしに肥後上田城の診療所まにて車を運転しめて行かしめるとは面妖（めんよう）な。｣とか心の中で突っ込んで、到着して紹介状を渡したものの大きい病院特有の事務処理の遅さで｢え？救急ってこんなにちんたらしとるんか、速攻で担架で持って担ぎ込まれるんとちゃうん(いや神輿やないんやからやめてくださいとか心で呟く準備してたのに)｣とか思いながらデレステしながら、昨日レベルアップしたせいでスタミナが貯まりまくっていたので８曲ぐらいMASTER+をスタミナプレイでクリアしてスタミナ消費、リハーサルでおねだりShall weあたりをやっていたら番号呼ばれて、救急につれていかれて、そっからはわりとすぐに事が運んで、なんかドラマでしかみたことの無いような手術室みたいなセクションがいくつもあるようなとこ通らされて、なんか救急車にあるような青い担架に寝ろとか言われて寝て、お医者さんみたいな人にライトみたいでチカチカさせられて、｢この指、目で追えるかな？(挑発)｣っていわれて、｢ポケモンはもう言えなくなったけどそれぐらいはできる(確信)｣という感じで、もうそこからは医療従事者さまのオモチャです。嫌いな採血やら点滴やら色々されました。
なんか専門医とか言う凄い綺麗な女医さんにあと数日遅かったらあの世で久川凪ちゃんに会えてましたねーとか言う結構きつめなこと言われましたので、｢いやアイマスP業の傍らにやってる副業的なものがあるんてすけど｣といったら｢ドクターストップです｣とか言われて、｢なにこの言葉初めていわれたわ｣とか思いながら、今日初対面のはずなのに何故かめちゃくちゃ不機嫌な感じの看護士に付き添われてCTやら色々やられて、で今度は普通の感じの看護士さんに病室に連行されたでござる。
てなところで無事に入院とあいなりました訳でございますが、そこでやっててよかったこと、こうしておけばという後悔も含めて後学のために残しておく
というのも夜中の三時間ごとの点滴交換やら別の病室のお爺さんの奇声やらでウサギさんのカフェイン錠剤飲んだのと同じくらい目がバキバキに冴えてしまったので

# ライフライン
* スマホの充電器、ケーブル
* イアホン
* TypeCイアホンコンバータ(音ゲー用)
こちら、必須です。少なくとも熊本城にはまともなものがない、いやそこそこのものなんだろうけど少なくとも100w急速充電に慣れた身体ではきつい
つか60wだよねせいぜい半分のスピードだよね、ケーブルのせいなのかななんかすげー遅く感じる
イアホンは片耳のやつしかない、DENON　AH-C820とか選べないので辛みが辛い
なんか色々足元みてる感じの値段設定でなんだかなー
価格が品質に伴っているのならともかく高物買いの銭失い感がぱない

# 余裕があるなら持っておいた方がいいもの
* ノートパソコン
* ポータブルWi-Fi
* マウス
* ペンタブ
これはマジで何で一度解放されたときに家に取りに帰らなかったのかを深く後悔しているレベルのもの
codeとネットワークさえあればコパイロットちゃんとお話しできる
ノパソさえあれば無限に遊べるのに😢

# 配信者として
やっぱり撮影機材は欲しかったGoProとかつけていれば点滴射たれながらデレステMASTER+物量系を青筋たてながら親指でやる男とか言う最高に馬鹿っぽくて面白いすごく俺得な絵がとれたのに
まあ配信者とかいっちょまえにいうがAmazon Photosのビデオストレージが…おっと誰かが来たようだ

# やっててよかったこと
自炊はいいぞ！
売店に行く途中で入院患者向けの図書館みたいなのがあって、そこに紫色と白のコントラストのある本っぽいのがあって、よっしゃ動物本があるとか最高かよと心の中でガッツポーズとって売店帰りによったらなんかもう全然関係の無い本でした。かすりもしてなかったです。ごめんなさい嘘つきました。多分そうあって欲しいと言う願望が産み出した幻想だったのです。病気に関する本が多かったです。病は気からとも言うし、専門家にかかっとんやからなんでいるんやと思いました◎ちょっと心がやみまみた。
結局動物本は自炊しかないわけですよ、それをきちんと外でも引っ張り出せる状態にしておくこと、NASなりOneDriveなり。なんかこの辺はめんどくさそうなのでよくわからん方法で自炊本を家から引っ張り出しました、これに関しては自宅の帯域とあとインターネットに感謝＼(^o^)／、やっぱりガーリッシュナンバーとピヨコ様と魔界町の姫様は面白いね。今はアニメスタイル014の26ページみてます。可愛くて癒されます。え？なに？動物本関係ないですって、ふふっお客様、踏んでますよ
![1000010668.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423236/b40990e3-daff-61f1-a83b-9789055b94bc.jpeg)


ニコチンガム的な物は喫煙者なら持っておいた方がいいです。なんか吸ったら強制退院とか言われました。いや、ぶっちゃけ今すぐ家に帰りたいからそれも悪くないけど、病院来るときに年貢の納め時かなとも思ったので模範囚でいたいと思います。そうすれば早期に保釈されるかもと思ってみたり。

# 心のよりどころ
![1000010574.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/423236/3744c443-c08a-03cf-31fb-e9dabc5434a4.jpeg)
アーニャとかすみんとサンタクロースちゃんの加護があらんことを
Function calling の延長線上で MCP を考察

MCP を見ていて、Function calling の延長線上で考えられそうだったので、その方向でまとめてみました。また、プッシュ型・プル型のコンテキストでも考えてみます。

# 比較

Function calling と MCP は、LLM が外部呼び出しを要求するという点では共通していますが、その後のフローに違いがあります。

Function calling では、LLM は関数呼び出しのパラメータを生成するだけで、実際の関数実行はアプリケーション側で行う必要があります。関数実行の結果を使って最終的な応答を生成するための処理フローは、開発者が独自に実装する必要があります。

:::note info
アプリケーションが主体となって LLM を制御して、回答を生成します。
:::

```mermaid
sequenceDiagram
    participant User as ユーザー
    participant Middleware as アプリケーション
    participant LLM
    participant External System as 外部システム
    
    rect rgb(240, 240, 255)
    note right of User: Function calling フロー
    User->>Middleware: ユーザーの質問
    Middleware->>LLM: 関数呼び出し確認
    LLM->>Middleware: 関数呼び出し要求
    Middleware->>External System: 関数実行
    External System->>Middleware: 実行結果
    Middleware->>LLM: 結果を添えて生成を指示
    LLM->>User: 最終応答
    end
```

一方、MCP ではプロトコルとして、LLM が MCP サーバーへデータを要求して、その結果を LLM が受け取り、それを情報源として LLM が最終的な応答を生成するまでの一連のフローが規定されています。これにより、開発者は個別にデータ取得後の処理フローを実装する必要がなく、MCP に準拠したシステムを構築するだけで、LLM が外部データを活用した応答生成まで一貫して行うことができます。

:::note info
LLM が主体となって回答を生成します。
:::

```mermaid
sequenceDiagram
    participant User as ユーザー
    participant LLM as LLM（アプリ）
    participant Middleware as MCP サーバー
    participant External System as 外部システム

    rect rgb(255, 240, 240)
    note right of User: MCP フロー
    User->>LLM: ユーザーの質問
    LLM->>Middleware: データ要求
    Middleware->>External System: データ要求
    External System->>Middleware: データ提供
    Middleware->>LLM: データ提供
    LLM->>User: データを用いた最終応答
    end
```

このように、MCP は Function calling よりも外部データの活用をより包括的に実現するプロトコルとなっています。

ユーザー視点では、Function calling はアプリケーションに隠蔽されるため意識する必要はありませんが、MCP はプラグインのようなものに見えます。

:::note info
細かく見れば、MCP でも LLM のクライアントアプリケーションが LLM と MCP サーバーの間に入っています。そのため Claude ではデスクトップアプリケーションが必要になります。上図では、LLM とそのクライアントアプリケーションを一体のものとして考えています。

以下の記事にはクライアントアプリケーションのフローが解説されています。実際には Function calling と同じようなフローとなっていることが分かります。
:::

https://laiso.hatenablog.com/entry/2025/01/11/200037

## 追記

クライアントアプリケーションの部分を作り込めば、Function calling から MCP サーバーが利用できるのでは？という発想ができます。それを実際に実装することで、GPT-4o で MCP サーバーを利用する記事があります。

https://qiita.com/sakasegawa/items/b091ad9931cea378099b

# プッシュ型・プル型

Function calling と MCP は、どちらも LLM が外部システムに対して何らかの要求を行うという点では同じですが、その要求の性質が異なります。

Function calling では、LLM が関数実行の要求を外部にプッシュします。「この関数をこのパラメータで実行してほしい」という具体的な実行要求を送り、その結果を受け取って処理するフローを開発者が作り込む必要があります。

一方、MCP では、LLM が外部システムから情報をプルする形になっています。必要な情報やコンテキストを「このような情報が欲しい」という形で要求し、その情報を直接取得して応答生成に活用します。このプル型のデータ取得は、プロトコルとして規定されているため、開発者は個別の処理フローを実装する必要がありません。

このように、LLM から見た操作の方向性という観点で、Function calling は「実行要求のプッシュ」、MCP は「情報のプル」という特徴の違いがあります。

# 関連記事

https://qiita.com/7shi/items/13d9c884a618feb89a94

https://qiita.com/7shi/items/0e31e10df92656aac207

https://qiita.com/7shi/items/3bf54f47a2d38c70d39b

# 参考

シーケンス図でフローが示されます。

https://modelcontextprotocol.io/quickstart

プッシュ型・プル型という分類は情報配信の形態としてよく使われますが、個人的には XML パーサーに馴染みがあります。

https://docs.microsoft.com/ja-jp/previous-versions/dotnet/netframework-1.1/sbw89de7(v=vs.71)

https://qiita.com/7shi/items/d8d3ab5371aa9dddcb3e

https://qiita.com/7shi/items/c7608db7a097ddd16be6
zenn-cliのリポジトリでqiitaも管理する


どうも初めまして、A-kunです。
A-kun Advent Calendar 2024の一日目です。

## はじめに
qiitaもzennもcliツールがある。

ならどちらも、同じgithubリポジトリの中で管理できたら嬉しいなーと思って、やってみた。

## zenn-cliをセットアップする。

githubでリポジトリを作成し、下記記事に従ってzennと連携させる。

https://zenn.dev/zenn/articles/connect-to-github

連携したらcloneし、下記記事を参考にzenn-cliのセットアップを終わらせる。

https://zenn.dev/zenn/articles/install-zenn-cli

## qiitaのCLIを導入してみる

公式リポジトリの中に、CLIツールのインストール方法があるのでこれに従ってみる。
zennの記事が入っているリポジトリにインストールしてみる。

https://github.com/increments/qiita-cli

インストールが完了すると、package.jsonにちゃんとzennとqiitaが両方入っていることがわかる。

```json
{
  "dependencies": {
    "zenn-cli": "^0.1.158"
  },
  "devDependencies": {
    "@qiita/qiita-cli": "^1.6.1"
  }
}
```

zenn-cliの場合は、articles・booksフォルダー内に記事を作成する。
一方、qiita-cliでは publicフォルダー内に記事を作成する。

両方同じリポジトリで管理することができることが確認できた。やったぜ。

zenn-cliの場合はGitHub Actionsを使って、自動デプロイされる。一方でqiitaの場合はコマンドでデプロイする必要がある。混同しないようにしたい。

## zenn-cliとqiita-cliのコマンド

混同しないように、いかにzenn-cliとqiita-cliの主要なコマンドを載せる。これさえ覚えておけば記事はかけるし投稿できる。とても簡単。

### zenn-cli

記事を作るときは下記。

```bash
npx zenn new:article --slug hogehoge
npx zenn new:book --slug hogehoge
```

小文字の半角英数字（a-z0-9）、ハイフン（-）、アンダースコア（_）の12〜50字の組み合わせでファイル名を指定。投稿時の名前とは関係ないので、適当でよい。

記事をプレビューするときは下記。

```bash
npx zenn preview
```

記事をデプロイするときは普通にgit pushすればよい。デプロイが成功したかどうかは、GitHub Actionsの画面もしくはZennの記事一覧から確認できる。

### qiita-cli

記事を作るときは下記。

```bash
npx qiita new hogehoge
```

記事を公開するときは下記。

```bash
npx qiita publish --all // 全ての記事を公開
npx qiita publish hogehoge // 特定の記事を公開
```

## わからなくなったときは

参考文献からリポジトリのREADMEを読むのが早いが、helpコマンドもあるので、それを使うとよい。

```bash
npx zenn help
npx qiita help
```

## おわりに
同じリポジトリで管理するの、そんなに難しくないかもしれない。

ついでに私はNotionから移行してきた記事のフォルダーと、記事内の画像を管理するフォルダーも同じリポジトリに入れている。ついでに登壇時のスライドもMarpで作成しているので、それも同じリポジトリに入れている。これで、一つのリポジトリで記事、画像、スライドを管理できるようになった。良き良き。

## 参考文献

https://github.com/increments/qiita-cli

https://zenn.dev/zenn/articles/zenn-cli-guide
Node.js と npm のバージョンを更新し、依存関係を再インストールする手順

# Node.js と npm のバージョンを更新し、依存関係を再インストールする手順

こんにちは！今回は、プロジェクトで指定された **Node.js (^20.0.0)** と **npm (10.8.1)** のバージョンにローカル環境を更新し、依存関係を再インストールしてPull Request（PR）を作成する手順について備忘録をまとめます。

---

## 背景

プロジェクトの `package.json` を確認したところ、以下のように開発環境が指定されていました：

```json
{
  "engines": {
    "node": "^20.0.0"
  },
  "scripts": {
    "dev": "next dev",
    // その他のスクリプト
  },
  "dependencies": {
    // 依存関係
  },
  "devDependencies": {
    // 開発依存関係
  }
}
```

しかし、ローカル環境では以下のバージョンが使用されていました：

```bash
node -v
v18.17.0

npm -v
9.6.7
```

この不一致を解消し、プロジェクトの開発環境を統一するための手順を以下に示します。

---

## 手順

### 1. Node.js バージョンマネージャーの確認・インストール

#### a. `nvm`（Node Version Manager）の確認

まず、`nvm` が既にインストールされているか確認しましょう。ターミナルで以下のコマンドを実行します：

```bash
nvm --version
```

- **インストール済みの場合**: バージョン番号が表示されます。
- **未インストールの場合**: 以下の手順で `nvm` をインストールします。

#### b. `nvm` のインストール

`nvm` をインストールするには、以下のコマンドをターミナルで実行します：

```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
```

インストール後、シェルを再起動するか、以下のコマンドで `nvm` を有効にします：

```bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
```

### 2. 指定された Node.js と npm のバージョンをインストール

#### a. Node.js v20.x.x のインストール

`nvm` を使用して Node.js のバージョンをインストールします：

```bash
nvm install 20
nvm use 20
```

これで Node.js のバージョンが v20.x.x に設定されます。

#### b. npm のバージョンを 10.8.1 に更新

`nvm` を使用すると、対応する npm も自動的にインストールされますが、指定されたバージョンと異なる場合は以下のコマンドで更新します：

```bash
npm install -g npm@10.8.1
```

#### c. バージョンの確認

以下のコマンドで正しいバージョンがインストールされたことを確認します：

```bash
node -v   # v20.x.x が表示されること
npm -v    # 10.8.1 が表示されること
```

### 3. プロジェクト依存関係の再インストール

#### a. 既存の `node_modules` と `package-lock.json` の削除

プロジェクトディレクトリに移動し、以下のコマンドで既存の依存関係を削除します：

```bash
rm -rf node_modules package-lock.json
```

#### b. 依存関係のインストール

再度依存関係をインストールします：

```bash
npm install
```

これにより、新しい `node_modules` フォルダと `package-lock.json` が生成されます。

### 4. プロジェクトの動作確認

依存関係が正しくインストールされたことを確認するために、以下のコマンドで開発サーバーを起動します：

```bash
npm run dev
```

ブラウザでプロジェクトが正常に動作することを確認してください。

### 5. Git リポジトリへのコミットとPRの作成

#### a. 新しいブランチの作成

```bash
git checkout -b update-node-and-npm
```

#### b. 変更内容のステージング

`package-lock.json` が更新されているはずです。必要なファイルをステージングします：

```bash
git add package-lock.json
```

**注意**: `node_modules` フォルダは通常 `.gitignore` に含まれているため、コミット対象外です。

#### c. コミットの作成

```bash
git commit -m "Update Node.js to v20.x.x and npm to v10.8.1"
```

#### d. ブランチのプッシュ

```bash
git push origin update-node-and-npm
```

#### e. Pull Request の作成

GitHub（または使用しているバージョン管理サービス）上で、`update-node-and-npm` ブランチからメインブランチへのPull Requestを作成します。PRのタイトルや説明に以下の点を含めると良いでしょう：

- Node.jsとnpmのバージョンを指定通りに更新した旨
- 依存関係の再インストールに伴う`package-lock.json`の更新

### 6. チームへの通知とレビュー依頼

PRを作成した後、チームメンバーにレビューを依頼し、必要に応じてフィードバックを反映させます。

---

## まとめ

- **nvm** を使用して Node.js と npm のバージョンを管理
- プロジェクトの依存関係を再インストールして環境を統一
- Git ブランチを作成し、変更をコミット＆PR

環境のバージョン管理はプロジェクトの安定性に直結します。ぜひこの手順を参考に、開発環境を整えてください！

---

# 参考リンク

- [nvm リポジトリ](https://github.com/nvm-sh/nvm)
- [Node.js 公式サイト](https://nodejs.org/)
- [npm 公式サイト](https://www.npmjs.com/)


この記事が役に立ったと思ったら、ぜひ「いいね」や「ストック」をお願いします！🙌
Happy Coding! 🎉
Microsoft Fabric導入にむけて（BI開発者の視点から）

[Microsoft Fabric Advent Calendar 2024](https://qiita.com/advent-calendar/2024/msfabric)の1日目の記事です。

https://qiita.com/advent-calendar/2024/msfabric


# はじめに
## 前提
この記事はPower BIのセマンティック モデル開発者の視点から書いたもの。Fabricはペルソナが多すぎるので念のため。

また、Power BI関連スキル（Power QueryやDAX等）はあるものの、Pythonや（Select以外の）SQLはあまり使えない前提で（私の会社にそんな人があまりいないから）。

## 目的
機能紹介というより、会社でFabricをどう活用できそうかに焦点を当てた記事。

また、現時点での理解を書き留めるもの。後で見返したときの自分の成長のためだったりするので、ほぼポエムなのは毎度のこと。


# Power BIだけではデータ分析基盤を整備できないよね
## データ分析基盤が欲しい
BIによるデータ活用は、 **①ETL（データの前処理）** 、 **②データ モデリング** （メジャーやリレーションシップの定義といったセマンティック モデルの作成）、 **③可視化** （レポート作成）の3ステップ。データ分析基盤は、①ETLをもっと拡張して、組織のデータ活用をさらに進めようというもの。（もちろん、どう使われるかは後回しにしてデータ分析基盤をとりあえず作るというアプローチもある）

ぶっちゃけ、みんなが便利に（＆セキュアに）使えるデータの置き場所ができれば目標達成とも言える。

## Power BIのデータの置き場所

Power BIのデータの置き場所としては、セマンティック モデルまたはデータフローがある。

**セマンティック モデル** の場合
1. ビジュアル化しなければデータを取り出せない。つまり、データそのものを取り出すのは無理。データは必ず集約されるため。
2. インデックス列を追加して無理やり生データを取り出すことも可能だが、モデルのサイズが肥大化する上、インタラクティブ処理なので高コスト（Capacity契約の場合）。
3. BI（とExcelのソース）以外にはちょっと使えないよねというのが結論

**データフロー** の場合
1. セマンティック モデルと異なり、データそのものを取り出すことは可能。
2. しかもバックグラウンド処理なので低コスト（Capacity契約の場合）
3. なんかちょっと良さげではある


**ページ分割されたレポート** の場合

まだ使ったことがないからわからない、以上。
（明細出力可能で、バックグラウンド処理らしい）


データフローが良さげだけど、以下が問題：
1. データの取り出しにはPower Queryが必要になるので、PythonやSQLでは使えない
2. 生データ（非構造化データ等）をそのまま保管できるわけではない
3. 必ずコピーしなければならない
4. データの置き場所以前にBI以外の機能がない。統計分析/AI分析とか。

当たり前だけど、Power BIはデータ可視化のためのツールなので、それだけではデータ分析基盤を構築することはできない。Power Queryによる強力なETLは、あくまで雑然データだらけの（＝データ分析基盤が無い）現実に対応するもの。

# それでもFabricなら… Fabricならきっと何とかしてくれる…‼

![それでもFabricなら… Fabricならきっと何とかしてくれる…‼](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/239172/6f907995-aa2a-89c6-a828-41ec0f93dcd8.png)

Fabricが何とかしてくれるのは：
1. Pythonなどからも利用可能な一般的なデータベースとして利用可能（LakehouseやData Warehouse）
2. 生データでも保存可能（Lakehouse）
3. ミラーリング、コピージョブ、ショートカットなど多彩なデータ連携。データフローもGen2となりパワーアップ！
4. BI以外のワークロード（ノートブックによる統計/AI分析、リアルタイム処理）
5. 他にもいろいろ（書き下してみると改めてすごいと思った）
   a. OSS活用
   b. DatabrickやSnowflakeなど他のサービスとの相互運用
   c. Apache Sparkによる高速な前処理
   d. Git統合
   e. Purview統合によるデータ管理（コンプライアンス、カタログ化）
   f. Copilotによる支援
   g. これらすべてを統合ソリューションとして提供

何かいろいろあるけど、やっぱりデータフロー Gen2があるので、Power BI勢が最小の追加学習コストで入れるのがうれしい。（もちろん、他の機能を使いこなすに越したことはないが）

# Fabric導入に向けて
とここまで書いたけれど、まだ会社にFabricを導入できていない。じゃあ、今後どうしていきたいかを書いて締める。

1. まずはBIを普及。Excel全盛（手作業 or VBA）の会社のデータ活用状況を改善。BIが活用されれば、データ利用側のニーズは大体満たせるし。
2. データ分析基盤はその後ろ側。いかにBIを効率よく作れるかの仕組み。
3. 前処理の効率化として、データフローによる共通化を進める。
4. さらに、データフローをドメイン間のデータ相互運用にも活用する。
5. データフローに慣れたところで、Fabricのデータフロー Gen2へ徐々に移行。

うーん、来年どこまで進められるものか。人材育成も気長に続けないといけないし、先は長いなぁ。。

まあ、いろいろ大変だけど、ジェバンニが一晩でやってくれると信じて、今日はもう寝よう。
【Android】Kotestをさくっと導入する

## はじめに
Kotestは、Kotlin用のテストフレームワークになります。
テストコードがKotlinの文法に近い形で書けるので、普段Kotlinを使っている方には使いやすい、テストの書き方が幅広く用意されている（Spec）等の特徴があります。
今回はそんなKotestを導入するところをまとめていきたいと思います。

## Kotestの導入
Kotestの公式ガイドがありますので、こちらもご参照ください！
https://kotest.io/docs/quickstart

今回はGradle + Kotlin環境で導入を進めます。
### gradleにコードを追加
Kotestを使いたモジュールのgradleにコードを追加します。
追加するコートは2つ。
①JUnit 5のテストランナーを使用するように設定
②Kotestの依存関係を追加
依存関係のバージョン類は以下を確認して記載してください。
[kotest-runner-junit5](https://central.sonatype.com/artifact/io.kotest/kotest-runner-junit5/versions)
[kotest-assertions-core](https://central.sonatype.com/artifact/io.kotest/kotest-assertions-core/versions)
``` gradle.kts
// ①JUnit 5のテストランナーを使用するように設定
tasks.withType<Test>().configureEach {
    useJUnitPlatform()
}

dependencies {
    // ②Kotestの依存関係を追加
    testImplementation(io.kotest:kotest-runner-junit5:$version)
    testImplementation(io.kotest:kotest-assertions-core:$version)
}
```

### Android Studioにプラグインを追加
Android Studio > Settingで設定画面を開き、プラグインタブでkotestのプラグインをインストールします。
![kotest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512668/7b5ce1db-cf48-4261-e399-2c2b92b7e7da.png)

以上で導入はOKです！

試しに公式ガイドにあるサンプルコードでテストコードを作成してみました。
▶️ボタンが出ており、問題なく実行できます。
![sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/512668/d674fc46-dc8d-2e54-5735-af383931327e.png)


## おわりに
Kotlinを採用しているAndroidアプリプロジェクトにおいても非常に導入しやすいんじゃないかと思います。
まだ慣れていませんが、慣れてきたらテストコードのところについてもまとめて行く予定です！
Happy Holidays 2024 from OpenChain

# ごあいさつ
**OpenChain Japan WGのアドベントカレンダー<font color="Red">2024</font>へようこそ！**
OpenChain Japan Planning SWGのリーダーを務めております渡邊です。
私たちOpenChain Japan WGは、OSS(Open Source Software)のコンプライアンスに関する活動をしている日本のコミュニティです。最近では、新しいトレンドであるSBOMやOSPOなどの新しいテーマにも、海外のチームと連携しながら積極的に取り組んでいます。
今年の我々のアドベントカレンダーは、OSSコミュニティで活躍している「**<font color="Red">人</font>**」にフォーカスしてお届けします。さまざまな分野で活躍する皆さんの投稿を通じて、日本のOSS界の発展に貢献できれば幸いです。また、このアドベントカレンダーを通して、私たちの活動やOSSコンプライアンスの重要性に興味を持っていただき、参加したいなと思っていただけるようになると嬉しいです。
最初に、OpenChainのゼネラルマネージャー Shane Coughlanからのメッセージをお届けします。

# A message from Shane
OpenChainのアドベントカレンダーは、知識、経験、そして私たちのコミュニティに焦点を当てる方法として、数年前に始まりました。その成功と毎年の継続は、素晴らしい貢献です。私は常にこの活動に特別な関心と感謝の念を抱いてきました。

アドベントカレンダーは知識を共有します。人々を動かし、新たな議論が生まれます。私たちのコミュニティのメンバーは、自分の興味や専門分野について語ります。ニュースを共有する人もいますし、ケーススタディを共有する人もいます。それは、私たちが業界として、またコミュニティとして、どれほど進歩してきたかを示すものです。

私がオープンソースの管理とガバナンスの仕事を始めた頃は、共有された知識はほとんどありませんでした。オープンソースのライセンスはほとんど理解されておらず、著作権法の大枠を除けば、法律や規制の枠組みは整っていませんでした。

我々には、プロセスも、経験を共有する人も非常に不足していました。要するに、オープンソースソフトウェアの管理に関するコラボレーションのためのコミュニティが不足していたのです。OpenChain Japan WGは、そのような状況を変えるために人々が協力し合ったときに起こったことの一例です。

私たちのグローバル・コミュニティの協力により、ISO標準や数多くの参考資料、そしてアドベントカレンダーが生まれました。また、ソーシャル・メディア上では、お互いの成果を称え、刺激を与え合い、最先端の情報が共有されています。

**Well done everyone！** そして、このアドベントカレンダーを始めるにあたって重要な役割を果たした渡邊さん、そして素晴らしい貢献者の皆さんに感謝します。

# OpenChain Japan Community Day
OpenChain Japanでは、技術トレンドやユースケースの共有などを目的とした会合をおこなっています。もともと「全体会合」として開催していたものですが、「より多くの人に気軽に参加してもらいたい」という思いを込めて、今年の後半から、会合の名称をCommunity Dayに変更しました。
今年開催した会合を振り返ってみましょう。
### 第30回全体会合 (2024年2月28日)　＠サイバートラスト株式会社
コントリビューション(貢献)をテーマに、「SPDX membershipについて」(ソニーグループ)、「OSSサプライチェーン上流企業でのオープンソース活動」(サイバートラスト)、「How We Navigate an Open Source Compliance and Contribution」(ソニーセミコンダクタソリューションズ)の講演と、Co-Located EventとしてOSPO SWGのミーティングを開催しました。
### 第31回全体会合 (2024年6月27日)　＠キオクシア株式会社
サイボウズ株式会社さんによる基調講演「OSS推進チームの活動紹介」、「キオクシアのOSPO立上げから現在の活動、課題について」(キオクシア)、「OSPOの活動紹介」(トヨタ自動車)などOSPOに関する事例紹介に加え、各社の実例を共有するライトニングトーク「OSS コンプライアンス～組織・体制面～ Revival」、Co-Located EventとしてOSPO SWGのミーティングを開催しました。
### OpenChain Japan Community Day vol.32 (2024年10月17日～18日)　＠ダイキン工業株式会社
Day1は「ダイキン工業におけるOSS活用の取組み」(ダイキン工業)、「本田技研工業株式会社におけるOpenChain認証取得」(本田技研)の講演と、業界最新動向の共有としてSBOMの最新動向および有識者によるパネルディスカッションをおこないました。Day2は、Japan OSPO Local Meetup(The Linux Foundation TODOグループのプログラムマネージャー Anaさんとのミートアップ)とFAQ SWG ワークdayをおこないました。
### Community Dayのアーカイブ
OpenChain Japan Community Dayの資料や録画は[こちら](https://openchain-project.github.io/OpenChain-JWG/meeting-minutes.html)に纏まっていますので、興味のある方はアクセスしてみてください。
2025年もさまざまな企画を用意してCommunity Dayを開催していきますので、興味のある方はお気軽にご参加ください。お待ちしております！
寿司打で1万円に到達する方法

# はじめに
突然ですが私は**寿司打が得意です**。

![寿司打_普通最高.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/3f072dd7-c90d-220c-7be8-4a9d4dfc8612.jpeg)

![寿司打_普通最高ランキング.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/b0b6f4b7-52b8-699f-8689-acc8fdbe6b34.jpeg)

10000人中の13位なので、**世界上位0.13%のトップランカー**と言っても過言ではないです。

ということで、**寿司打高得点のコツは何なのか**、そして**どう練習したらスコア1万円に到達できるか**をまとめていこうと思います。

# 寿司打とは

寿司打は大人気タイピングゲームです。10年くらい前からあるタイピングゲームの金字塔で、僕はもう6年くらい定期的にプレイしてます。

https://sushida.net/

# 寿司打（お手軽）の構造

寿司打には**お手軽、お勧め、高級**の3つのコースがあり、それぞれ**出てくる文章の長さが異なります**。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/354ff0d5-6901-3aa9-5af8-63f499ea6d11.png)

今回は**お手軽コースで1万円分食べる**ことを目指すので、**お手軽コースにはどのような文章が出てくるのかを探る**必要があります。

### 出てくる文章

お手軽コースではこのように、**2から7文字の文章が出題**されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/50958a6e-173a-d3e4-864e-c1eb8e747fef.png)

また、**文字数は周期的**で、各文字数を3回ずつ繰り返しながら増減を繰り返しています。

```mermaid
graph TB

direction LR
    subgraph 減る
        direction BT
        FF["7文字×3"] --> G["6文字×3"]
        G --> H["5文字×3"]
        H --> I["4文字×3"]
        I --> J["3文字×3"]
        J --> AA["2文字×3"]
    end
    
    subgraph 増える
        direction TB
        A["2文字×3"] --> B["3文字×3"]
        B --> C["4文字×3"]
        C --> D["5文字×3"]
        D --> E["6文字×3"]
        E --> F["7文字×3"]
    end
```

### 連打メーター

寿司打では、**ミスなく打ち続ける**と連打メーターが増えていき、**ラインを超えると残り時間が増えます。**

![Capture-2024-11-30-010241.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/12084b62-e45c-ac4a-12f3-cd1d371cc4fa.png)

この連打メーターは、

1. 28タイプ目で1秒追加ライン
1. 59タイプ目で1秒追加ライン（2つ目）
1. 93タイプ目で2秒追加ライン
1. 130タイプ目で3秒追加ライン

に到達します。（数えました）

先述の通り何皿目に何文字の単語が出てくるかは決まっているので、**最初の3秒追加は18か19皿目で訪れる**ことになります。

# 点を稼ぐコツ

### 絶対にミスらない

このゲームは**3秒追加が最強**です。3秒あればもう一皿食べられます。

また、3秒追加に至るまでに1×2＋2=4秒追加されているので、**130回タイプする間に計7秒が追加される**わけです。この7秒が本当にでかい。

**1万円分だと約70皿を食べることになり、経験則では連打メーターは4周します**。なので計21秒が追加されていることになります。デカすぎ。

普通モードでもミスらないことを意識しましょう。

### 低文字数で攻める

人には**タイプを始める前に文字を読む時間**があります。文字数が少ないほど1皿あたりの読む時間の割合は増えていくため、**少ない文字数をいかに一瞬で終わらせるかが一皿の差を生みます**。
2、3文字は全力で、4、5文字はほどほどに、6、7文字は正確性重視、というように使い分けると安定して早くなります。

### 表記に振り回されない

寿司打では親切にアルファベットが表示されていますが、**時にこれが混乱の原因になります**。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/50958a6e-173a-d3e4-864e-c1eb8e747fef.png)

設定から**アルファベットを非表示**にできるので、非表示にして自分の慣れた打ち方で進めるのも一つの戦略です。

# 1万円を超えるには

### 1万円のボーダー

先ほども言いましたが、1万円に乗るには**70皿以上を食べる必要**があります。2~7文字のループも数周するイメージです。

結果画面で出てくる**平均キータイプ数**に着目すれば、**6回/秒を超えることが必須**です。

![寿司打_普通最高.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2823873/3f072dd7-c90d-220c-7be8-4a9d4dfc8612.jpeg)

ミスが減っても、ある程度速くタイピングしないと辿り着けないのが1万円なので、**ここは練習あるのみ**です。がんばりましょう！

# まとめ
**まずはミスを減らす！そして低文字数で攻めて、平均キータイプ数を上げる！！**
ここに意識を向けることで、寿司打の点数はどんどん上がっていくでしょう。

楽しい寿司打ライフを！
自分のテストフレームワークを作ろう！

Last Update 2024.11.30

## テストフレームワークとは？


テスティングフレームワークには、VSTeP、HAYST法、ゆもつよメソッドなど、
いろいろ有名なものがあります。
これらの技法はとても汎用的にできていて便利なのですが、
スクラムの現場で適用しようと思うと期日に間に合わなくなったりするので
かなり工夫が必要でしょう。

テストにはいろんなテストの種類がありますね。
機能テスト、リグレッション、ストレステスト、シナリオテスト、などなど。

これを、プロセスや順番、内容などをまとめておくと、
説明がしやすくなります。また、これをもとにスキルテーブルを作って、
チームとの知識共有にも役に立ちます。
「次に何をやったらいいんだっけ？」みたいなこともなくなります。

普段、テストしていることを書き出して、一覧にしておくと、
備忘録にもなりますし、テストの全体が組みやすくなります。


## UTP2でテストフレームを書く
ちなみにこの画像は、UMLのテスト用拡言語、UTP2というモデリング言語で
記述されています。箱がつながっている線についてるコメントなど、
なんとなく、一目で内容がわかりませんか？
視覚的に理解できるのが、UMLの特徴の一つです。
ツールもいろいろでていて、慣れれば素早くとかけますので、
モデリングに興味のある方は、ぜひ調べてみてください。
（後日の投稿で、すこしずつURLにも触れていきます。）


## よくつかうUML

### ユースケース図
ユーザーがそのアプリを使う動機、体験を可視化します。
シンプルで何でもない図に見えますが、これがあると、その後の理解や
何をすべきかが明確になります。

### シーケンス図
処理の順番を時系列にしたがって記載します。
チーム内のプロセスフローを整理するときなどにも使います。
例外や異常系、コンディションのバリデーションを考えるのに便利です。

### ステートマシン図
いわゆる、状態遷移図です。状態遷移 × テストコンディションが整理できるかは
テスト技術としては一つの山ともいえるでしょう。

組み合わせテストでは、状態遷移も条件の一つともいえますが、
これに繰り返し、初期状態、全削除状態、時系列の処理、など、
考慮すべき点を発見するのにも有用です。

### アクティビティ図
フローチャートに近いですが、ステークホルダーの担当や、
分岐条件などを示せます。

それぞれ記事や本が多く出ていますので、
興味のある方は調べてみてください。

UTP2：　https://www.omg.org/spec/UTP2/About-UTP2/

![TestStrategy2023.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156898/894f96e0-25a7-aff6-a393-985e0e7476d5.png)